LSTM 备忘

LSTM 备忘

本文地址:https://blog.lucien.ink/archives/504
摘自邱锡鹏老师《神经网络与深度学习》的 6.6.1 节。

长短期记忆网络(Long Short-Term Memory Network,LSTM)[Gers et al., 2000; Hochreiter et al., 1997] 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。

1. 新的内部状态

LSTM 网络引入一个新的内部状态(internal state) c t ∈ R D c_t \in \mathbb{ R } ^ D ctRD 专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态 h t ∈ R D h_t \in \mathbb{ R } ^ D htRD。内部状态 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=ftct1+itc~t(6.51) h t = o t ⊙ tanh ⁡ ( c t ) (6.52) h_t = o_t \odot \tanh(c_t) \tag{6.52} ht=ottanh(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 } ct1 为上一时刻的记忆单元; c ~ t ∈ R D \tilde { c }_t \in \mathbb { R } ^ D c~tRD 是通过非线性函数得到的候选状态

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+Ucht1+bc)(6.53)

在每个时刻 t t t,LSTM 网络的内部状态 c t c_t ct 记录了到当前时刻为止的历史信息。

2. 门控机制

在数字电路中,(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。这三个门的作用为:

  1. 遗忘门 f t f_t ft 控制上一时刻的内部状态 c t − 1 c_{ t - 1 } ct1 需要遗忘多少信息。
  2. 输入门 i t i_t it 控制当前时刻的候选状态 c ~ t \tilde{ c }_t c~t 有多少信息需要保存。
  3. 输出门 o t o_t ot 控制当前时刻的内部状态 c t c_t ct 有多少信息需要输出给外部状态 h t h_t ht

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+Uiht1+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+Ufht1+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+Uoht1+bo)(6.56)

其中 σ ( ⋅ ) \sigma(\cdot) σ() 为 Logistic 函数,其输出区间为 ( 0 , 1 ) (0, 1) (0,1) x t x_t xt 为当前时刻的输入, h t − 1 h_{ t - 1 } ht1 为上一时刻的外部状态。

3. 记忆

循环神经网络中的隐状态 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

你可能感兴趣的:(机器学习,RNN,LSTM)