循环神经网络LSTM
LSTM
模型单元
LSTM
与RNN
两个神经网络运行方式相同,但单元结构不同
LSTM
的单元结构较RNN
复杂一些,因此运行时间较长,但性能比较好
如下,就是LSTM
神经网络的一个单元
LSTM
单元中包含四个交互的层,即三个 S i g m i o d Sigmiod Sigmiod层和一个 t a n h tanh tanh层,并以一种非常特殊的方式进行交互
如上图中,每一条黑线传输着一个向量,粉色的圈代表某种操作(加、乘),黄色的矩阵代表学习到的神经网络层,合在一起的线表示向量的连接,即Cancatenate
,分开的线代表内容的复制,分发到不同的位置
LSTM
遗忘门
遗忘门的作用是信息的筛选,告诉我们:
- 什么样的东西应该保存下来,即乘1,相当于信息的复制
- 什么样的东西应该被以往,即乘0,相当于信息的剔除
遗忘门是通过 S i g m i o d Sigmiod Sigmiod函数实现的,将输入映射到 [ 0 , 1 ] [0, 1] [0,1]区间内,越重要的信息映射的值越接近于1,越不重要的信息映射的值越接近于0,从而确保了保存重要的信息,丢弃不重要的信息
最终得到向量 f t f_t ft,能够帮助我们的网络进行筛选信息,本文在这称为筛子
LSTM
输入门
输入门,顾名思义就是告诉我们需要输入哪些信息,即 h t − 1 h_{t-1} ht−1和 x t x_t xt
将 h t − 1 h_{t-1} ht−1 和 x t x_t xt 融合之后得到 [ h t − 1 , x t ] [h_{t-1}, x_t] [ht−1,xt],然后分两次通过一层 S i g m o i d Sigmoid Sigmoid和 t a n h tanh tanh,分别得到 i t i_t it 和 C t ~ \tilde{C_t} Ct~
其中, i t i_t it的功能与 f t f_t ft 一样,起到筛子的作用
细胞状态更新
细胞状态更新包括两个部分:
- 前一时刻的信息
- 现有时刻的信息
通过遗忘门,可以得到 f t f_t ft,位于 [ 0 , 1 ] [0, 1] [0,1]区间,其数值大小代表信息重要程度,将 f t f_t ft 与 C t − 1 C_{t-1} Ct−1 (前一时刻信息)对应元素相乘,进行了对前一时刻信息的筛选
通过输出门,得到 i t i_t it,其功能与 f t f_t ft 一样,生成的是信息重要程度向量,将 i t i_t it 与 C t ~ \tilde{C_t} Ct~ (当前时刻信息)对应元素相乘,进行了对现有时刻信息的筛选
最后在将二者融合,即相加,更新细胞状态,得到 C t C_t Ct
即 C t C_t Ct 里保留了了 0 − t 0 - t 0−t 中的所有较为重要的信息,不存在或者较少的存在那些不重要的信息
通过网络的不断训练,不断更新输入们与遗忘门中的权重参数( W 、 b W、b W、b),模型会更好的知道哪些信息是重要的,哪些信息是不重要的,最终完成我们的任务
LSTM
输出门
输出门主要用来输出 h t h_t ht,即确定我们要输出什么样的值
首先将 [ h t − 1 , x t ] [h_{t-1}, x_t] [ht−1,xt]融合,经过 S i g m o i d Sigmoid Sigmoid函数再形成一个筛子,然后再与当前的细胞状态 C t C_t Ct 进行对应元素相乘,对信息进行再筛选,然后一路通往下一层最为当前层的输出,一路通往下一时刻,作为下一时刻的输入
LSTM
最终的输出需要进行三次筛选(状态更新两次,输出门一次),因此能够较好地保留有用的信息,剔除没用的信息,相较于RNN
的效果较好,但由于需要训练的参数较多,因此速度较慢
LSTM
缓解梯度消失问题
在RNN
中,导致梯度消失的原因是 ∏ k = i k = t − 1 ∂ h k + 1 ∂ h k \prod_{k=i}^{k=t-1} \frac{\partial h_{k+1}}{\partial h_k} ∏k=ik=t−1∂hk∂hk+1中每个小项都是小于0的情况下导致梯度连乘最后接近于0,从而出现梯度消失的情况
而在LSTM
细胞状态更新中,即公式 C t = f t ∗ C t − 1 + i t ∗ C t ~ C_t = f_t * C_{t-1} + i_t * \tilde{C_t} Ct=ft∗Ct−1+it∗Ct~,也存在 C t − 1 C_{t-1} Ct−1 项,即也存在递归现象
但是,对 ∂ C t ∂ C t − 1 \frac{\partial C_t}{\partial C_{t-1}} ∂Ct−1∂Ct 求偏导后,可以发现存在一项 f t f_t ft ,遗忘门的输出,可以控制 ∂ C t ∂ C t − 1 \frac{\partial C_t}{\partial C_{t-1}} ∂Ct−1∂Ct 的数值大小,即可以缓解梯度消失的问题
求导过程