RNN,当前的输出
o
t
o_t
ot取决于上一个的输出
o
t
−
1
o_{t-1}
ot−1(作为当前的输入
x
t
−
1
x_{t-1}
xt−1)和当前状态下前一时间的隐变量
h
t
h_t
ht,隐变量和隐变量的权重
W
h
h
W_hh
Whh存储当前状态下前一段时间的历史信息,如果我们去掉
W
h
h
∗
h
t
−
1
W_{hh} * h_{t-1}
Whh∗ht−1,RNN就退化为MLP
注意:LSTM额外引入的
C
t
C_t
Ct记忆单元,
C
t
C_t
Ct的范围无法保证,可以用来增加模型复杂度,多存储信息。但是最终仍然需要让
H
t
H_t
Ht的范围仍在(-1,1)之间,防止梯度爆炸。
注意:LSTM中的忘记门、输入门、输出门的具体公式和GRU的更新门、重置门一样
C
~
t
\widetilde{C}_t
Ct候选记忆单元:LSTM中的候选记忆单元和RNN中的
H
t
H_t
Ht的计算公式一样,没有用到任何门,但是由于最后用了tanh(),所以范围在(-1,1)之间
C
t
C_t
Ct记忆单元:LSTM中的记忆单元和GRU中的
H
t
H_t
Ht不一样,记忆单元可以既多看上一个的记忆单元,又多看当前的候选记忆单元(当前的输入信息
X
t
X_t
Xt)。记忆单元也可以即不要上一个的记忆单元,又不要当前的候选记忆单元。但是GRU中的
H
t
H_t
Ht为
Z
T
Z_T
ZT和
1
−
Z
t
1-Z_t
1−Zt,所以要么多看上一个的隐变量,要么多看当前的候选隐变量
H
t
H_t
Ht隐变量:由于
F
t
F_t
Ft和
I
t
I_t
It都是(0,1),而
C
~
t
\widetilde{C}_t
Ct在(-1,1),但是
C
t
−
1
C_{t-1}
Ct−1可以特别大(跟
C
C
C的初始值有关),所以上一步的
C
t
C_t
Ct的范围无法保证,那么为了防止梯度爆炸,我们需要再做一次tanh()变换。
注意:此时的
O
t
O_t
Ot来控制要不要输出当前的输入信息和前一次的隐变量,当
O
t
O_t
Ot为0时,表示重置清零
总结:通过引入记忆单元,LSTM比GRU更灵活,即可以既多看当前的候补记忆单元(当前的输入信息
X
t
X_t
Xt),又可以多看前一个的记忆单元,也可以两者都不看都忘掉。通过引入记忆单元还可以多存储信息。同时保留
H
t
H_t
Ht,防止梯度爆炸,还能重置清零隐变量