上篇文章介绍了GRU,建议不太了解RNN和GRU的同学看看我上一篇文章:
https://blog.csdn.net/wenqiwenqi123/article/details/80707810
这篇来说一说LSTM,这两个最大的不同之处在于LSTM多了一个门。
GRU有update gate(更新门)、reset gate(重置门)。
而LSTM有三个门,update gate(更新门),forget gate(遗忘门)、output gate(输出门)。
一般说的lstm的h,c指的是:
- h:最后一个时间步的输出,即 h = output[:, -1, :](一般可以直接输入到后续的全连接层,在 Keras 中通过设置参数 return_sequences=False 获得)
- c:最后一个时间步 LSTM cell 的状态(一般用不到)
见下图:
可以看到右边公式与左边的对比,个人认为要理解LSTM看公式比看图好使。
c<t>~为本细胞待更新的值。Γu、Γf、Γo分别为更新门、遗忘门、输出门,式中的δ为sigmoid函数,这让Γ趋向于0或者1。
与GRU不同的地方在于c<t>在更新时,(1-Γu)变为了Γf,直接用遗忘门来取值。
以及LSTM对下一细胞的输出a<t>不再等于c<t>,而是通过输出门*c<t>。
在每个结点可以有多个记忆细胞。
图一并给上: