RNN
Last updated
Last updated
或
$[x1,x2]$ 表示向量拼接;RNN 为递推结构,其中 $h_0$ 一般初始化为 0;
前者来自 Elman,后者来自 Jordan;两个过程的区别仅在于当前步的输入不同,一般所说的 RNN 指的是前者;
$[x1,x2]$ 表示向量拼接;$*$ 表示按位相乘; $f_i$:长期记忆的遗忘比重; $i_i$:短期记忆的保留比重; $\tilde{C}t$:当前时间步的 Cell 隐状态,即短期记忆;也就是普通 RNN 中的 $h_t$ $C{t-1}$:历史时间步的 Cell 隐状态,即长期记忆; $C_t$:当前时间步的 Cell 隐状态; $o_t$:当前 Cell 隐状态的输出比重; $h_t$:当前时间步的隐状态(输出);
相关问题:Cell 状态的作用、LSTM 是如何实现长短期记忆的?
LSTM 相比 RNN 多了一组 Cell 隐状态,记 $C$(Hidden 隐状态两者都有);
$C$ 保存的是当前时间步的隐状态,具体包括来自之前(所有)时间步的隐状态 $C_{t-1}$ 和当前时间步的临时隐状态 $\tilde{C}_t$。
由于 Cell 的加入,使 LSTM 具备了控制长期/短期记忆比重的能力,具体来说:
如果长期记忆(之前时间步)的信息不太重要,就减小 $C_{t-1}$ 的比重,反映在遗忘门的输出 $f_t$ 较小;
如果短期记忆(当前时间步)的信息比较重要,就增大 $\tilde{C}_t$ 的比重,反映在记忆门的输出 $i_t$ 较大;
从前向过程可以看到 Cell 存储了全部时间步的信息,而 Hidden 由 Cell 经过输出门后得到,可以把 Hidden 看做是网络在 Cell 基础上进行特征选择的结果;
一种说法是 Cell 偏向长期记忆,Hidden 偏向短期记忆;
“遗忘门”控制前一步记忆状态($C_{t-1}$)中的信息有多大程度被遗忘;
“输入门(记忆门)”控制当前的新状态($\tilde{C}_t$)以多大的程度更新到记忆状态中;
“输出门”控制当前输出($h_t$)多大程度取决于当前的记忆状态($C_t$);
遗忘门 -> 输入门 -> 输出门
$[x1,x2]$ 表示向量拼接;$*$ 表示按位相乘;
“更新门”用于控制前一时刻的状态信息被融合到当前状态中的程度;
“重置门”用于控制忽略前一时刻的状态信息的程度
合并 “遗忘门” 和 “记忆门” 为 “更新门”;
其实更像是移除了 “输出门”;
移除 Cell 隐状态,直接使用 Hidden 代替;