【深度学习】包教包会LSTM

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shenxiaolu1984/article/details/53169118

本文本着由浅入深原则介绍LSTM模块结构,使用流程图 梳理公式,保证看完过目不忘,神清气爽。

模块结构

核心变量

从宏观上来看,LSTM模块有输入 xt ,输出 yt ,内部维护一个记忆变量 ct
这里写图片描述
一般用这三个核心变量来描述一个LSTM,记为 LSTM(x,y,c) 。有时,输出 y 也被称为隐状态 h

入口与门

除了主入口之外,输入 xt (红色)还从另外三个“门”进入LSTM模块:input,forget,output。
一起进入模块的,还有输出 y (蓝色)和记忆 c (绿色)。
前一时刻变量用虚线表示。
这里写图片描述

输入端口和门的结果记为 z,i,f,o
这里写图片描述

具体表达式如下

意义 表达式
数据输入 z=g([xt,yt1])
输入门 i=σ([xt,yt1,ct1])
遗忘门 g=σ([xt,yt1,ct1])
输出门 o=σ([xt,yt1,ct])

注意,在需要计算遗忘门时,当前时刻记忆 ct 已经计算完成,所以可以使用最新结果。

记忆与输出

接下来,可以更新当前记忆:输入门 i 越强,越偏向于当前输入 z ;遗忘 f 越强,越偏向于前一时刻记忆 ct1

ct=iz+fct1

其中 表示向量对位相乘。

最后,计算当前输出:当前记忆经过非线性变换 h ,用输出门调控。

yt=oh(ct)

这两步如下图所示,其他部分虚化。

这里写图片描述

具体实现

完整的LSTM如下图1
这里写图片描述

上面提到的非线性激活函数包含如下两种:

σ(u)=11+eu

g(u)=h(u)=tanh(u)=ezezez+ez

方括号 [] 表示线性变换,具有统一形式:

[x,y,c]=Wm×nxn×1+Rm×mym×1+pm×1cm×1+bm×1

除了输入尺寸为 n ,输出与其他变量尺寸均为 m
每个函数具有不同参数 W,R,p,b ,通过训练获得。其中 p 也称作peephole参数,用于控制记忆 c

常见变体

无输入LSTM

可以记做 LSTM(y,c) 或者 LSTM(y) 。用例参看这篇论文2公式(3)。
这里写图片描述

fast LSTM

记忆 c 只作用于自身,不再连接到门上。在Torch的rnn库中给出了实现
这里写图片描述

bidirectional LSTM

包含两个输出/隐变量: yt,yt
其中,前向变量 yt 由前一时刻 t1 状态计算得到;后向变量 yt 由后一时刻 t+1 状态计算得到。
最终输出往往需要综合两个变量: rt=yt+yt

attention LSTM

常简写成 attLSTM

注意力LSTM新增了一个和输入同尺度的注意力权重 αt ,由输入和输出/隐状态计算得到:

αt=softmax(k(xt,yt1))

其中 k 是计算相关性的网络。

用这个权重给原始输入加权:

x^t=ϕ(αt,xt)

使用加权的输入替代原来的 xt 。用例参见 3
这里写图片描述


  1. 此图参考了Greff, Klaus, et al. “LSTM: A search space odyssey.” arXiv preprint arXiv:1503.04069 (2015).
  2. Vinyals, Oriol, Samy Bengio, and Manjunath Kudlur. “Order matters: Sequence to sequence for sets.” arXiv preprint arXiv:1511.06391 (2015).
  3. Xu, Kelvin, et al. “Show, attend and tell: Neural image caption generation with visual attention.” arXiv preprint arXiv:1502.03044 2.3 (2015): 5.

猜你喜欢

转载自blog.csdn.net/shenxiaolu1984/article/details/53169118