最近被导师安排的研究内容正好可以用到LSTM,自己学习的过程顺便做一下总结。
(很多示意图和公式就不画了,侵删)
LSTM简介
LSTM是在RNN基础上改进的一种神经网络。主要是对隐含层的一种改进。
- 需要改进的原因:RNN存在梯度爆炸或者梯度消失的问题。
LSTM的隐含层添加了一个cell。这个cell保存着网络中的长期状态。
所以LSTM的关键是:如何控制这个长期状态c
思路是:使用三个控制开关
- 第一个:控制保存长期状态c
- 第二个:负责把即时状态输入到长期状态
- 第三个:负责是否把长期状态作为输出
那么如何实现控制开关?
利用门的概念:用门的输出向量按元素乘以我们需要控制的向量
这里的σ为常用的sigmoid函数
门分为三个:
- 遗忘门(forget gate),貌似也有文献提到叫 keep gate。
- 输入门
- 输出门
LSTM前向传播
长期状态c的更新依靠遗忘门和输入门;状态c有多少作为LSTM的输出依赖于输入门。
从LSTM的结构图可以很明显的看到这一点:
上述公式也可以在其中得到体现。
LSTM反向传播算法
反向传播的基本步骤:
- 反向计算每个神经元的误差值
- 根据相应的误差值,计算每个权重的梯度
反向传播包括两个方向:
- 沿时间的反向传播
- 沿层的反向传播,将误差项向上一层传播
权重矩阵对应h和x两项,是由两个矩阵拼接而成,在反向传播中采用不同公式。
这里给出一些推倒,主要就是求偏微分。
1.假设
已知
可得
2.已知
可得
3.已知
可得
4.已知
可得
总梯度:
LSTM的前向和后向传递的推倒大概就这些。
比较浅薄,继续学习。