LSTM(长短时记忆网络)
2018-11-25 本文已影响49人
Thinkando
1. 为什么引入
- 循环神经网络,很难处理长距离的依赖。
2. 长短时记忆网络

-
假设某轮训练中,各时刻的梯度以及最终的梯度之和如下图:
image.png
- 我们就可以看到,从上图的t-3时刻开始,梯度已经几乎减少到0了。那么,从这个时刻开始再往之前走,得到的梯度(几乎为零)就不会对最终的梯度值有任何贡献,这就相当于无论t-3时刻之前的网络状态h是什么,在训练中都不会对权重数组W的更新产生影响,也就是网络事实上已经忽略了t-3时刻之前的状态。这就是原始RNN无法处理长距离依赖的原因。
- 既然找到了问题的原因,那么我们就能解决它。从问题的定位到解决,科学家们大概花了7、8年时间。终于有一天,Hochreiter和Schmidhuber两位科学家发明出长短时记忆网络,一举解决这个问题。
-
其实,长短时记忆网络的思路比较简单。原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:
image.png
-
新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:
image.png
image.png
3. 长短时记忆网络的前向计算





4. 长短时记忆网络的训练
4.1 LSTM训练算法框架

4.2 关于公式和符号的说明



4.3 误差项沿时间的反向传递



4.4 将误差项传递到上一层

4.5 权重梯度的计算



- 以上就是LSTM的训练算法的全部公式。因为这里面存在很多重复的模式,仔细看看,会发觉并不是太复杂。
- 当然,LSTM存在着相当多的变体,读者可以在互联网上找到很多资料。因为大家已经熟悉了基本LSTM的算法,因此理解这些变体比较容易,因此本文就不再赘述了。
5. GRU
