LSTM公式详解&推导

书籍简介

《Surpervised Sequence Labelling with Recurrent Neural Network》(《用循环神经网络进行序列标记》),RNN(Recurrent Neural Network,循环神经网络)经典教材,由多伦多大学Alexander Graves所著,详细叙述了各种RNN模型及其推导。本文介绍该书的LSTM部分。对于该书,想深入了解的朋友点这里获取资源。
1

LSTM理解

  LSTM(Long Short-Term Memory Networks,长短时记忆网络),由Hochreiter和Schmidhuber于1997年提出,目的是解决一般循环神经网络中存在的梯度爆炸(输入信息激活后权重过小)及梯度消失(例如sigmoid、tanh的激活值在输入很大时其梯度趋于零)问题,主要通过引入门和Cell状态的概念来实现梯度的调整,已被大量应用于时间序列预测等深度学习领域。
  下面的描述主要侧重公式推导,对LSTM来由更详细的讨论请见《Step-by-step to LSTM: 解析LSTM神经网络设计原理》。

LSTM流程简介

  LSTM采用了门控输出的方式,即三门(输入门、遗忘门、输出门)两态(Cell State长时、Hidden State短时)。其核心即Cell State,指用于信息传播的Cell的状态,在结构示意图(图1,图源Understanding LSTMs,略改动)中是最上面的直链(从 C t − 1 C_{t-1} Ct1 C t C_t Ct)。


1

图1

  Memory Cell 接受两个输入,即上一时刻的输出值 h t − 1 h_{t-1} ht1和本时刻的输入值 x t x_t xt,由这两个参数 先进入遗忘门,得到决定要舍弃的信息 f t f_t ft(即权重较小的信息)后,再进入输入门,得到决定要更新的信息 i t i_t it(即与上一Cell相比权重较大的信息)以及当前时刻的Cell状态 C ~ t \tilde{C}_t C~t(候选向量,可理解为中间变量,存储当前 Cell State 信息),最后由这两个门(遗忘门,输入门)的输出值(即 f t , i t , C t ~ f_t,i_t,\tilde{C_t} ft,it,Ct~)进行组合(上一Cell状态 C t − 1 × C^{t-1}\times Ct1×要遗忘信息的激活值 f t f_t ft 与 当前时刻Cell状态 C t ~ × \tilde{C_t}\times Ct~×需要记忆信息的激活值 i t i_t it进行叠加,从图中可以更直观得到),得到分别的长时( C t C_t Ct)和短时( h t h_t ht)信息,最后进行存储操作及对下一个神经元的输入。下图2介绍了LSTM在网络中是如何工作的。


2

图2


根据图1,可依次得到三个门的形式方程如下(符号与图中保持一致):

  1. 遗忘门:

f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t=\sigma\left(W_f\cdot[h_{t-1}, x_t]+b_f\right) ft=σ(Wf[ht1,xt]+bf)

  1. 输入门:

i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t=\sigma\left(W_i\cdot[h_{t-1}, x_t]+b_i\right) it=σ(Wi[ht1,xt]+bi)

C t ~ = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C_t}=\tanh\left(W_C\cdot[h_{t-1}, x_t]+b_C\right) Ct~=tanh(WC[ht1,xt]+bC)

以及 t t t时刻的Cell 状态(长时)方程:

C t = f t ⋅ C t − 1 + i t ⋅ C t ~ C_t=f_t\cdot C_{t-1}+i_t\cdot \tilde{C_t} Ct=ftCt1+itCt~

  1. 输出门:

o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t=\sigma\left(W_o\cdot[h_{t-1}, x_t]+b_o\right) ot=σ(Wo[ht1,xt]+bo)

h t = o t ⋅ tanh ⁡ ( C t ) h_t=o_t\cdot\tanh{(C_t)} ht=ottanh(Ct)

算法及公式

  根据上面的描述及图1,首先定义如下符号(符号为方便理解,与书中保持一致):

一些函数

  • f f f的激活函数
  • g g gCell输入的激活函数
  • h h hCell输出的激活函数

  • L \mathcal{L} L : 训练模型时的损失函数
  • σ ( z ) \sigma(z) σ(z):Sigmoid激活函数
    σ ( z ) = 1 1 + e − z = 1 + tanh ⁡ ( z / 2 ) 2 , \sigma(z)=\frac{1}{1+\mathrm{e}^{-z}}=\frac{1+\tanh(z/2)}{2}, σ(z)=1+ez1=21+tanh(z/2),

σ ′ ( z ) = σ ( z ) [ 1 − σ ( z ) ] . \sigma'(z)=\sigma(z)[1-\sigma(z)]. σ(z)=σ(z)[1σ(z)].

  • tanh ⁡ ( z ) \tanh(z) tanh(z):tanh激活函数
    tanh ⁡ ( z ) = e z − e − z e z + e − z , \tanh(z)=\frac{\mathrm{e}^z-\mathrm{e}^{-z}}{\mathrm{e}^z+\mathrm{e}^{-z}}, tanh(z)=ez+ezezez,

tanh ⁡ ′ ( z ) = 1 − tanh ⁡ 2 ( z ) . \tanh'(z)=1-\tanh^2(z). tanh(z)=1tanh2(z).

一些符号

  • I I I输入层 信息的数量
  • K K K输出层 信息的数量
  • H H H隐层 Cell状态的数量(注意这里的Cell与下面的Cell不同,代表短时记忆Cell),指图1中最下面的一条直链,即从 h t − 1 h_{t-1} ht1 h t h_t ht,处理短时记忆
  • C C CCell状态信息(长时记忆状态)的数量
  • T T T :总时间数(网络层总数),即 t = 0 , 1 , 2 , ⋯   , T t=0,1,2,\cdots,T t=0,1,2,,T

  • ϕ \phi ϕ :下标,指一个LSTM单元的遗忘门
  • ι \iota ι :下标,指一个LSTM单元的输入门
  • ω \omega ω :下标,指一个LSTM单元的输出门
  • c c c :下标,指神经元中某一个 C C C 记忆元胞(Cell)

  • w i j w_{ij} wij :从单元 i i i到单元 j j j权重
  • b j t b_j^t bjt t t t时刻第 j j j个单元的激活值,在 t = 0 t=0 t=0时初始化为 0 0 0
  • a j t a_j^t ajt t t t时刻第 j j j个单元的带权输入,可作抽象定义如下

a j t = ∑ i w i j b i t − 1 . a_j^t=\sum_{i}{w_{ij}b_{i}^{t-1}}. ajt=iwijbit1.

  • s c t s_c^t sct t t t时刻记忆元胞 c c c状态(State),在 t = 0 t=0 t=0时初始化为 0 0 0

  • δ j t \delta_j^t δjt t t t时刻第 j j j个单元的误差,在 t = T + 1 t=T+1 t=T+1时初始化为 0 0 0。一般化的定义为

δ j t = ∂ L ∂ a j t . \delta_j^t=\frac{\partial \mathcal{L}}{\partial a_j^t}. δjt=ajtL.

前向传播

由上述的形式方程,很容易得到下面的前向传播公式:

  1. 遗忘门。由图1可知,遗忘门的输出依赖三个变量(图1中表示为左下角的两个输入和左上角的一个输入),分别是:上一时刻 ( t − 1 ) (t-1) (t1)神经元的短时记忆输出 h t − 1 h_{t-1} ht1,本时刻 ( t ) (t) (t)神经元的输入 x t x_t xt以及上一时刻 ( t − 1 ) (t-1) (t1)神经元的长时记忆输出Cell状态 s c t − 1 s_c^{t-1} sct1,乘以权重因子后对层数求和即可得到遗忘门的输入值及激活值如下:

a ϕ t = ∑ i = 1 I w i ϕ x i t + ∑ h = 1 H w h ϕ b h t − 1 + ∑ c = 1 C w c ϕ s c t − 1 (1.1) a_\phi^t=\sum_{i=1}^Iw_{i\phi}x_i^t+\sum_{h=1}^{H}w_{h\phi}b_h^{t-1}+\sum_{c=1}^Cw_{c\phi}s_c^{t-1}\tag{1.1} aϕt=i=1Iwiϕxit+h=1Hwhϕbht1+c=1Cwcϕsct1(1.1)

b ϕ t = f (

  • 46
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zorchp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值