正因为RNN的梯度消失问题导致RNN的时间记忆性不够长,因此Hochreiter Sepp, Jürgen Schmidhuber等人于1995年发明了长短期记忆网络(Long Short-term Memory,LSTM)来克服RNN的记忆缺陷,本期将介绍什么是LSTM模型,下期将介绍LSTM为什么可以解决RNN的记忆缺陷问题。阅读本文可以参考以下文章:


《漫谈RNN之基本概念》

《漫谈RNN之训练方法》

《漫谈RNN之梯度消失及梯度爆炸》




《漫谈RNN之梯度消失及梯度爆炸》中,我介绍了为什么训练RNN会出现梯度消失的问题,那么如何克服这个原始RNN模型的短记忆性呢?LSTM的提出就解决了这个问题。下面将介绍LSTM的内部结构。


首先想,为什么RNN的记忆性不够?我们可以把梯度消失问题转换成比较形象的解释,例如可能是输入权重Win没有很好地过滤掉输入噪音,还有可能是输出权重W_out没有很好地输出有用的记忆信息。一方面W_in既要吸收有用的输入信号,另一方面W_in又要过滤掉输入噪音,对于W_in而言,其承担的功能太多;同样,对于W_out而言也是,既要提取有用的记忆信息,又要去除没用的记忆信息。所以,提出LSTM的思路就是要解决输入噪音问题以及如何输出有用的信息,换句话说,就是要优化W_in和W_out的角色。


因此,LSTM要解决的核心问题主要有两点:

隐含状态应该存储什么

从隐含状态应该输出什么



这个时候,我们可以添加两个门,分别是输入门以及输出门,这两个门的作用分别是过滤输入信息的噪音、控制输出有用的信息。

8.1_.JPG


其中f_in和f_out分别是输入门和输出门,它们元素的值都在0~1之间。中间符号是矩阵相乘。

8.2_.jpg


我们可以从上面这幅图去理解LSTM的结构。左边是原始RNN的结构,原始的RNN单元含有一个记忆模块,而这个记忆模块与其输入、输出神经元直接相连。



上图中间是LSTM结构,其核心是一个memory cell,LSTM的输入共有三个,分别是:当前时刻的输入x,上一时刻的输出h,以及上一时刻的memory cell。而LSTM的输出则有两个,分别是:当前时刻的memory cell,以及当前时刻的输出h。总结成一句话就是:LSTM的核心是由当前时刻的输入、上一时刻的输出、上一时刻的记忆共同决策的,并且产生一个新的输出,同时又更新了内部的记忆。


上图右边是LSTM的计算公式,i是输入门,o是输出门,a是遗忘门,c是记忆细胞,h是最终的输出。如果上图不容易理解的话,可以参照下图LSTM的结构。

8.3_.jpg

从上图看LSTM更加直观。下面分别讲解LSTM的具体不同模块的作用。



遗忘门。遗忘门的作用就是对历史信息的取舍,如果遗忘门关闭,那么不会有任何历史记忆进来;反之,如果遗忘门完全打开,那么所有的历史记忆都将通过。如上图的左边第一个'+'模块,遗忘门是由当前时刻输入x、前一时刻输出h、前一时刻记忆c共同决定的。


记忆模块。可以看到最上面一条线,LSTM的记忆模块就是一个流动的信息,它会从t=0一直更新到t=T时刻,它就像一种流一样,在前进的过程中不断更新,并且受当前输入x以及前一时刻输出h的共同作用。具体说,首先上一时刻的记忆信息会与遗忘门进行相乘,然后它与通过tanh激活的新的记忆进行相加合并,并且新的记忆也是通过与输入门进行相乘得到的。这样就完成了从C_t-1到C-t的过渡。


输入门。输入门的作用就是决定有多少新记忆将和老记忆进行合并,输入门和遗忘门的决定因素一样,即由当前时刻输入x、前一时刻输出h、前一时刻记忆c共同决定的。


输出门。输出门即决定着LSTM单元对外界的响应h。输出门的决定因素和输入门、遗忘门的决定因素相同。


LSTM的输出。LSTM的输出主要受输出门控制,具体来说,LSTM的输出h是由当前时刻合并后的新记忆通过tanh再激活之后与输出门进行相乘而得到的。h的作用是提供给外界的输出以及影响下一时刻提供新的记忆信息。



以上就是一个LSTM的内部结构,那么为什么说LSTM可以解决RNN的梯度消失问题呢?下期将阐述这个问题。


近期文章预告:

《漫谈RNN之简化版长短期记忆模型GRU》

《漫谈RNN之序列建模》

《漫谈RNN之注意力机制》

《漫谈RNN之记忆网络》

《漫谈RNN之神经图灵机模型》

《漫谈RNN之无监督学习》

 
 
 
 
 
来源:张泽旺 深度学习每日摘要
智造家