小袁讲长短期记忆网络(LSTM)

一, 什么是长短期

LSTM全名“ Long Short-term Memory”,中文名翻译为长短期记忆网络。小袁我刚接触这个网络的时候,一度以为长短期记忆网络既可以建模序列问题中的长期时间依赖,又可以有效地捕捉到序列数据的短期时间依赖,因而被命名为长短期记忆网络。事实上这样理解对也不对,对在LSTM确实既有捕捉序列数据的长的时间依赖,又有捕捉短的时间依赖的特性上。不对在LSTM的特性并不像我们通俗理解的长短期。英文表达而言就是“Long Short-term Memory” 和 “Long Short term Memory”的差别吧。这篇博客我会重点讲下我对“长短期”的理解,如有不正确的地方还望各位不吝指教!

注:本博客部分图片公式来源于网络,侵删。转载请注明出处!

1.1 为何会有LSTM

据各路文献博客所言,LSTM的提出是为了解决循环神经网络(RNN)无法捕捉序列的长期时间依赖的不足,RNN的核心状态更新公式为
h t = f ( W i x t + W h h t − 1 ) h_t=f(W^ix_t + W^hh_{t-1}) ht=f(Wixt+Whht1)
其中, h t h_t ht 为RNN网络的隐藏层在时刻 t t t 的状态值, f ( ) f() f() 为RNN网络的激活函数,通常为 t a n h tanh tanh函数。

RNN的一种网络拓扑结构如下图所示:
在这里插入图片描述
由于第 t t t 时刻block内(上图中的绿框)的输入仅为上一时刻 t − 1 t-1 t1 的状态值 h t − 1 h_{t-1} ht1 和当前时刻的输入 x t x_t xt ,因而RNN无法捕捉到序列数据的长期依赖,仅能捕捉到序列数据的短期依赖,这导致了RNN网络在建模上的天然不足。

事实上,对RNN的这种理解是不对的。 这种有失偏颇的理解会进一步给自己理解LSTM带来困难。上述理解主要问题在于第 t t t 时刻block内(上图中的绿框)的输入之一 h t − 1 h_{t-1} ht1不是一个独立的变量,它的值通过 h t − 2 h_{t-2} ht2 x t − 1 x_{t-1} xt1 计算得到(即 h t − 1 h_{t-1} ht1 包含 h t − 2 h_{t-2} ht2 的特征信息 )。递归地, h t h_t ht 包含 t = 1 , 2 , . . . , t − 1 t=1,2,...,t-1 t=1,2,...,t1 的所有隐藏层的状态特征,因而RNN事实上是有建模长期时间依赖的能力的。既然如此,那为何会有RNN无法捕捉长期的序列时间依赖关系的说法呢?所谓无风不起浪啊。事实上,这个可以用“理想很丰满,现实很骨干”来比喻。尽管RNN能够完美的建模序列数据的长期依赖关系,但是它没法用啊,因为传统的RNN非常容易陷入梯度消失或梯度爆炸问题,这导致了RNN网络在实际使用中,无法捕捉到序列的长期依赖关系。事实上相应的长短期记忆网络LSTM也是因为它在实际应用中能够巧妙地避免梯度消失或梯度爆炸问题,使得它能够捕捉到长期的序列时间依赖关系。简言之,LSTM的提出是为了克服在实际应用中 ,RNN建模的长期时间依赖关系无法通过梯度优化的不足。

1.2 谈谈RNN的梯度消失和梯度爆炸

关于RNN的梯度消失和梯度爆炸问题,参考了知乎文章 ,并结合评论和我的理解做了部分修正。具体细节如下所示:

定义参数优化的损失函数
L = ∑ t = 0 T L t L=\sum_{t=0}^{T}L_{t} L=t=0TLt
则损失函数 L L L 对参数矩阵 W W W 的偏导数为
∂ L ∂ W = ∑ t = 0 T ∂ L t ∂ W \frac{\partial L}{\partial W} =\sum_{t=0}^{T}\frac{\partial L_t}{\partial W} WL=t=0TWLt
现考虑 t t t 时刻的损失函数误差对输出矩阵 W o W^o Wo ,隐藏层矩阵 W h W^h Wh,输入矩阵 W i W^i Wi 的偏导数,它们依次为
∂ L t ∂ W o = ∂ L t ∂ y t ∂ y t ∂ W o \frac{\partial L_t}{\partial W^o} =\frac{\partial L_t}{\partial y_t}\frac{\partial y_t}{\partial W^o} WoLt=ytLtWoyt

∂ L t ∂ W h = ∑ k = 0 t ∂ L t ∂ y t ∂ y t ∂ h t ( ∏ i = k + 1 t ∂ h i ∂ h i − 1 ) ∂ h k ∂ W h \frac{\partial L_t}{\partial W^h} =\sum_{k=0}^{t}\frac{\partial L_t}{\partial y_t}\frac{\partial y_t}{\partial h_t}(\prod_{i=k+1}^{t}\frac{\partial h_i}{\partial h_{i-1}})\frac{\partial h_{k}}{\partial W^h} WhLt=k=0tytLthtyt(i=k+1thi1hi)Whhk

∂ L t ∂ W i = ∑ k = 0 t ∂ L t ∂ y t ∂ y t ∂ h t ( ∏ i = k + 1 t ∂ h i ∂ h i − 1 ) ∂ h k ∂ W i \frac{\partial L_t}{\partial W^i} =\sum_{k=0}^{t}\frac{\partial L_t}{\partial y_t}\frac{\partial y_t}{\partial h_t}(\prod_{i=k+1}^{t}\frac{\partial h_i}{\partial h_{i-1}})\frac{\partial h_{k}}{\partial W^i} WiLt=k=<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值