本文地址:https://blog.lucien.ink/archives/504
摘自邱锡鹏老师《神经网络与深度学习》的 6.6.1 节。
长短期记忆网络(Long Short-Term Memory Network,LSTM)[Gers et al., 2000; Hochreiter et al., 1997] 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。
LSTM 网络引入一个新的内部状态(internal state) c t ∈ R D c_t \in \mathbb{ R } ^ D ct∈RD 专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态 h t ∈ R D h_t \in \mathbb{ R } ^ D ht∈RD。内部状态 c t c_t ct 通过下面公式计算:
c t = f t ⊙ c t − 1 + i t ⊙ c ~ t (6.51) c_t = f_t \odot c_{ t - 1 } + i_t \odot \tilde{ c }_t \tag{6.51} ct=ft⊙ct−1+it⊙c~t(6.51) h t = o t ⊙ tanh ( c t ) (6.52) h_t = o_t \odot \tanh(c_t) \tag{6.52} ht=ot⊙tanh(ct)(6.52)
其中 f t ∈ [ 0 , 1 ] D f_t \in [0,1] ^ D ft∈[0,1]D、 i t ∈ [ 0 , 1 ] D i_t \in [0, 1] ^ D it∈[0,1]D 和 o t ∈ [ 0 , 1 ] D o_t \in [0, 1] ^ D ot∈[0,1]D 为三个门(gate)来控制信息传递的路径; ⊙ \odot ⊙ 为向量元素乘积; c t − 1 c_{ t - 1 } ct−1 为上一时刻的记忆单元; c ~ t ∈ R D \tilde { c }_t \in \mathbb { R } ^ D c~t∈RD 是通过非线性函数得到的候选状态:
c ~ t = tanh ( W c x t + U c h t − 1 + b c ) (6.53) \tilde { c }_t = \tanh(W_c x_t + U_c h_{ t - 1 } + b_c) \tag{6.53} c~t=tanh(Wcxt+Ucht−1+bc)(6.53)
在每个时刻 t t t,LSTM 网络的内部状态 c t c_t ct 记录了到当前时刻为止的历史信息。
在数字电路中,门(gate)为一个二值变量 0 , 1 {0, 1} 0,1, 0 0 0 代表关闭状态,不许任何信息通过; 1 1 1 代表开放状态,允许所有信息通过。
LSTM 网络引入门控机制(Gating Mechanism)来控制信息传递的路径。公式(6.51)和公式(6.52)中三个“门”分别为输入门 i t i_t it、遗忘门 f t f_t ft 和输出门 o t o_t ot。这三个门的作用为:
当 f = 0 , i = 1 f = 0,i = 1 f=0,i=1 时,记忆单元将历史信息清空,并将候选状态向量 c ~ t \tilde{ c }_t c~t 写入。但此时记忆单元 c t c_t ct 依然和上一时刻的历史信息相关。当 f t = 1 , i t = 0 f_t = 1, i_t = 0 ft=1,it=0 时,记忆单元将复制上一时刻的内容,不写入新的信息。
LSTM 网络中的“门”是一种“软”门,取值在 ( 0 , 1 ) (0, 1) (0,1) 之间,表示以一定的比例允许信息通过。三个门的计算方式为:
i t = σ ( W i x t + U i h t − 1 + b i ) (6.54) i_t = \sigma(W_i x_t + U_i h_{ t - 1 } + b_i) \tag{6.54} it=σ(Wixt+Uiht−1+bi)(6.54) f t = σ ( W f x t + U f h t − 1 + b f ) (6.55) f_t = \sigma(W_f x_t + U_f h_{ t - 1 } + b_f) \tag{6.55} ft=σ(Wfxt+Ufht−1+bf)(6.55) o t = σ ( W o x t + U o h t − 1 + b o ) (6.56) o_t = \sigma(W_o x_t + U_o h_{ t - 1 } + b_o) \tag{6.56} ot=σ(Woxt+Uoht−1+bo)(6.56)
其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 为 Logistic 函数,其输出区间为 ( 0 , 1 ) (0, 1) (0,1), x t x_t xt 为当前时刻的输入, h t − 1 h_{ t - 1 } ht−1 为上一时刻的外部状态。
循环神经网络中的隐状态 h h h 存储了历史信息,可以看作一种记忆(Memory)。在简单循环网络中,隐状态每个时刻都会被重写,因此可以看作一种短期记忆(Short-Term Memory)。在神经网络中,长期记忆(Long-Term Memory)可以看作网络参数,隐含了从训练数据中学到的经验,其更新周期要远远慢于短期记忆。而在 LSTM 网络中,记忆单元 c c c 可以在某个时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔。记忆单元 c c c 中保存信息的生命周期要长于短期记忆 h h h,但又远远短于长期记忆,因此称为长短期记忆(Long Short-Term Memory)。
一般在深度网络参数学习时,参数初始化的值一般都比较小。但是在训 练 LSTM 网络时,过小的值会使得遗忘门的值比较小。这意味着前一时刻的信息大部分都丢失了,这样网络很难捕捉到长距离的依赖信息。并且相邻时间间隔的梯度会非常小,这会导致梯度弥散问题。因此遗忘的参数初始值一般都设得比较大,其偏置向量 b f b_f bf 设为 1 1 1 或 2 2 2。