两学一做电脑答题网站,wordpress 评论按钮,网页游戏制作难吗,网站建设移交手续本文通过整理李宏毅老师的机器学习教程的内容#xff0c;介绍 RNN#xff08;recurrent neural network#xff09;的网络结构。
RNN 网络结构, 李宏毅
RNN RNN 的特点在于存储功能#xff0c;即可以记忆前面时刻的信息。
最简单的 RNN 结构如下#xff1a;
当然介绍 RNNrecurrent neural network的网络结构。
RNN 网络结构, 李宏毅
RNN RNN 的特点在于存储功能即可以记忆前面时刻的信息。
最简单的 RNN 结构如下
当然网络结构可以很深多少层都可以
如果存储的是隐藏层hidden layer的值则称为 Elman Network 如果存储的是输出值则称为 Jordan Network
据说 Jordan Network 的表现更好因为所存储的是输出值其中包含了优化目标的信息。
RNN 可以是双向的
LSTMLong Short-Term Memory LSTM 单元的结构简图如下
其内部的具体结构如下
需要注意的是遗忘门forget gate这个称呼与我们的直觉相反即打开时数据保留关闭时数据清除。
将上述 LSTM 单元视为神经网络中的神经元即可构成网络结构其输入数量是普通神经元的 4 倍
在实际计算过程中输入数据在进入三个门之前会分别乘三个矩阵
下图为前后两个时刻的输入数据之间的关系可以看出实际的 LSTM 输入数据还要加上前一时刻的隐藏层hidden layer的输出 h t h^t ht以及前一时刻的存储数据 c t c^t ct该操作称为 peephole
LSTM 不会只有一层现在通常都会有至少五六层其层级之间的连接结构如下 现在通常讲的 RNN 都是 LSTM。
Keras 框架支持三种 RNN
LSTMGRU少了一个门的 LSTM会把输入门input gate和遗忘门forget gate联动起来其中一个打开则另一个关闭这样相当于减少了三分之一的参数但据说表现跟 LSTM 差不多SimpleRNN前一节介绍的最基本的 RNN
训练过程 以句法分析为例优化目标为最小化交叉熵cross entropy 训练过程中更新参数的方法叫 BPTTbackpropagation through time即考虑时间信息的反向传播法。
此外在训练过程中RNN 的 total loss 容易出现很大的波动
这是因为RNN 的 error surface 会有比较陡峭的地方解决该问题的技巧是对梯度gradient做裁剪clipping
前述波动的来源并不是 sigmoid 函数因为如果换成 ReLU 函数也会很差所以激活函数并不是这里的关键点。
从一个最简单的例子可以看出问题出在权重参数的变化会在后续时刻被不断放大即便在学习率learning rate很小时也是一样
然而LSTM 可以解决梯度消失gradient vanishing的问题也就是 error surface 很平坦的问题因此可以把学习率设置得比较小但是并不能解决 error surface 很崎岖的问题gradient explode
LSTM 能够解决梯度消失问题的原因是存储数据不会被随时清除因此也需要保证遗忘门在多数时间是开启的。
另外两种解决梯度消失问题的方法是 Clockwise RNN 和 SCRN
值得一提的是一篇 Hinton 推荐的论文提到当使用单位矩阵identity matrix初始化参数、并使用 ReLU 函数作为激活函数时普通 RNN 的表现效果会很好甚至超过 LSTM。但是如果是通常的训练方式即使用随机矩阵初始化参数ReLU 函数的表现效果就不如 sigmoid 函数。