由来
Vanilla RNN无法记忆之前的信息,比如:“我来自中国……我能流利地说中文 ”,“中文”二字来自很长的语句之前,所以这个填空就很不好填。LSTM可以较好的解决这个问题。
结构
σ
\sigma
σ代表sigmoid函数,黄色的框框代表可被训练的layer,红色的圈圈代表直接的运算
核心
门的理念:让被允许通过的信息通过,阻止不被允许通过的信息通过。sigmoid的值域为[0,1],再加上乘法,就可以决定让百分之多少的信息通过。从极值来看,sigmoid的output为0代表所有信息都无法通过,1代表所有信息都可以通过
forget gate layer
收集从
h
t
−
1
h_{t-1}
ht−1和
x
t
x_t
xt来的信息,然后决定要完全保留之前获取的信息
C
t
−
1
C_{t-1}
Ct−1的内容(sigmoid输出为1)还是完全去除(sigmoid输出为0)
Input gate layer
sigmoid作用同上,tanh的范围是[-1,1]正好可以用来确定是[negative, positive],也就是从完全的负相关(-1)到无关(0),再到完全正相关(1)
更新 C t C_t Ct
×
\times
×代表保留来路方向百分之几的信息,从左往右的第一个
×
\times
×表示保留多少之前所有状态总和
C
t
−
1
C_{t-1}
Ct−1的信息,第二个
×
\times
×表示保留多少从
h
t
−
1
h_{t-1}
ht−1和
x
t
x_t
xt来的经过tanh处理后得到的
C
t
~
\widetilde{C_t}
Ct
信息,加号(
+
+
+)表示将之前所有状态来的信息和当前信息两者结合得到最终的输出
C
t
C_t
Ct
决定当前输出 h t h_t ht
tanh作用同上,这边就是决定
C
t
C_t
Ct的百分之多少的信息应该在当前单元输出
参考:
https://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://www.jianshu.com/p/9dc9f41f0b29