LSTM最主要的就是对cell的理解,最初看的是这篇经典博客,看完感觉自己每个分部都看懂了,但是整体整合不起来,然后看到了这位大神写的总结博客,把整个lstm的结构整合起来了。
1,LSTM cell最常见的结构图:
注:LSTM中可以理解为有三个门、一个cell。其中输入门控制输入(新记忆)的输入幅度;遗忘门控制之前记忆状态的输入幅度;输出门控制最终记忆的输出幅度。
2,我觉得最帮助我理解整个流程的是下面这张图:
t时刻cell的input:
1、有当前输入Xt
2、前一时刻cell的输出ht-1
3、前一时刻cell的状态ct-1(可以理解为计算ht-1过程中的中间值)
t时刻cell的3个控制门Gate,值域[0,1](改进的GRU的cell将输入门和遗忘门合并为Update门):
1、输入门it
2、遗忘门ft
3、输出门ot
cell中的计算过程如下(具体对照上面的第二个结构图):
step 1.1 输入门it【对应第一个公式】
step 1.2 及其控制的新记忆Ct波浪线:
W是其对应的权重矩阵,b为偏置。黄色的框内是不同的激活函数。其实这两个运算可以等效为两层并行的神经网络。【注意这里面这里是有一个激活函数为tanh,然后再由cell和输出门得到隐层输出时也用到了tanh,其他的输入、遗忘、输出门都是sigmoid。】
遗忘门具体计算过程:
step 1.3,遗忘门ft(控制对于之前输入记忆ct-1的遗忘程度)(如下图)
其中,step1.1、1.2、1.3是可以并行计算的,输入是当前输入Xt 和 前一时刻cell的输出ht-1
经过了step的1.1、1.2、1.3得到了当前的cell状态Ct,接下来进行step2。
更新门(update)的计算过程:
![]()
更新门由两部分相加得到,前一部分是通过遗忘门ft和前一个时刻的cell状态ct-1相乘得到【forget old thing】;后一部分是由输入门得到的it,及其控制的新记忆波浪线Ct,把他们两个相乘得到【add new thing】。
step3:输出门Ot及其控制的t时刻cell的隐层输出ht。
step4 信号xt通过ht的最终输出:
由这里我推断出输出门输出的并不是最终的lstm层输出的结果,lstm层输出的结果是由ht(隐层输出)和输出门的权值矩阵相乘得到的结果,在经过sigmoid层得到的。
参考地址:https://blog.csdn.net/songhk0209/article/details/71134698