深度学习研究系列——漫谈RNN之长短期记忆模型LSTM

长短期记忆模型LSTM

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

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

  • 隐含状态应该存储什么

  • 从隐含状态应该输出什么

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

输入门函数:

输出门函数:

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

 

 

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

 

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

 

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

 

从上图看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的作用是提供给外界的输出以及影响下一时刻提供新的记忆信息。

 

 

  • 随着时间长度逐渐增大,矩阵W的特征值如果小于1,那么就会导致梯度接近于0;另一方面,如果特征值大于1,在后向传播过程中就会导致梯度爆炸;

  • sigmoid激活函数的导数范围是[0,0.25],这加剧了梯度消失问题的发生;

LSTM通过引入常数偏导来解决了这个问题,即Constant Error Carousels(CEC),CEC的具体意思是令求导偏导为单位矩阵,即:

 

 

这个时候,只要σ函数为线性函数即可,W_h固定即可使得偏导固定为一个常数单位矩阵;甚至,可以直接令W为单位矩阵,σ为恒等变换线性函数:

 

简单来说,CEC的做法就是对于细胞单元永远传递偏导为1的信号,而让其他各个门函数的权重去自我学习,如下图所示,这样就使得了LSTM的记忆细胞可以学得更长的历史记忆信息,从而解决了导致梯度消失的问题。

 

 

中间细胞单元的权重一直保持为单位矩阵,其他三个非线性单元是用来控制误差流进入细胞单元的大小。如果没有添加遗忘门的话,其结构图如下:

 

 

输入门和输出门分别负责允许多少输入流入以及允许多少信息流到下一时刻,而中间的记忆细胞是一个CEC结构。当我们求导的时候,偏导中始终会有一个单位矩阵I存在,这就保证了梯度不会消失为0:

 

 

当加入了遗忘门以后,遗忘门就可以对历史记忆进行进一步取舍,换句话说,遗忘门可以决定哪些记忆没有必要记住:

 

总结一下,LSTM不同于RNN的地方有以下几点:

  • 它通过输入门来决定何时让输入进入细胞单元;

  • 它通过遗忘门来决定何时应该记住前一时刻的记忆;

  • 它通过输出门来决定何时让记忆流入到下一时刻;

无论是输入门、遗忘门还是输出门,都是通过此刻的输入以及前一时刻的输出来决定的,这一点本质上和原始的RNN是一样的,RNN的隐含层状态是通过此刻的输入以及前一时刻的输出来决定的,只不过LSTM在RNN基础上添加了一个细胞层,而这个细胞层使得了相邻时刻的信息传递程度比RNN要高,因此具备了长时间记忆功能。

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线