LSTM(一)之深入理解

一、前言

最近三个月一直在跟lstm死磕,在此做LSTM专题,以记录和加深这段时间的理解和感受。
这个专题分成三个部分:1、lstm的深入理解 2、lstm在caffe中的实现细节 3、lstm在实际中的应用,第三部分包括了我对经典论文lrcn中activity recognition的复现以及在大数据比赛中别出心裁地使用lstm取得的令人满意的实验结果。
这篇文章是专题的第一部分。
在阅读中如有任何问题,欢迎邮件方式与我沟通。[email protected]

二、RNN(recurrent neural network)

1、rnn和lstm的关系

rnn可以说是lstm的前身,它提供了序列深度建模的思想,而lstm只是针对rnn在训练过程中容易梯度消散的缺点进行了改进。lstm更容易训练。

rnn提供了序列的深度学习,这个“序列“就可以得到进一步的理解,序列可以指单词的前后顺序的序列,也可以指视频帧帧之前的时间序列,这就为许多课题打开了新世界。

2、rnn的输入和输出

rnn的输入为序列,输出为序列,可以和自己的task进行结合,比方说image caption的task,输入就为一张图片重复n次构成的序列,而输出序列即为希望得到的caption。比如视频分类的task,输入为一个个连续单帧构成的序列,当然也可以是一个个光流图片构成的序列,输出则为一个分类结果。根据task的不同,只需要调整label和data,就可以获得很好的结果,这大概就是深度学习的迷人之处吧。

3、rnn的实现原理

说了这么多,为什么rnn可以对序列深度进行建模呢,其本质为rnn训练时不仅仅和cnn一样只接受data输入,rnn在序列的每一节点既接受输入的data,也接受上一节点训练得到的状态量。
LSTM(一)之深入理解
每一个圆点代表序列每个节点的训练单元,注意每个圆点都有相同的权值w和u,即每个序列节点训练更新相同的w和u,权值是共享的状态。每一个序列节点都lstm单元都接受这个序列节点的data和之前得到的状态值。
具体数学公式为:
LSTM(一)之深入理解
这就是rnn可以对序列进行深度建模的原因。

三、LSTM

1、lstm基本原理
lstm增加了rnn单元的复杂度,更仔细地建模,有了更多限制条件,使得训练变得更加轻松,解决了rnn容易出现的梯度消散的问题。

在这里仔细讲解lstm的单元lstm_unit,使得对lstm进行更加深入地了解。

值得说明的一点是lstm与rnn的本质相同,不同的只是lstm单元更加优化和复杂。

LSTM(一)之深入理解

首先观察每个单元,接受的输入变成了x_t(此点的输入)h_(t-1) (上一阶段的状态)c_(t-1)(一个成为memory cell的东西,它是h的变形,即给h加了一个“忘记门“,即lstm中规定每个单元不需要接受全部之前的状状态知识,而只需要选择性地“记住“一部分状态即可

下面具体分析每一步的具体公式,个人认为对于大部分工程实践的人来说,理解了本文除此节之外的其他内容就可以很好地指导你使用lstm做一些基础的东西了。

正式开始分析步骤:
首先,上文提到的“忘记门“这样的门限,在lstm单元中类似的“门限“有三个,门限起到的作用都是过滤一部分信息,它们都会经过tanh或者sigmoid计算,将其数值压缩在0到1之间,表示它们的过滤强度。当然如何过滤,过滤什么,这些都是网络更新自动学到的。

LSTM(一)之深入理解

上图是第一个门,俗称忘记门,其实叫啥都不重要,这里看到它有一个权值和偏置(对h_t-1, x_t计算),再经过一个sigmoid函数,数值在0-1之间

LSTM(一)之深入理解

上图是其他两个门,别管它叫啥了,反正是个门,它们也分别用自己的权值和偏置对h_t-1, x_t计算,只是一个用tanh,一个用sigmoid进行压缩。

LSTM(一)之深入理解

介绍完三个门之后,开始看单元之间的输入输出的传输量,上图是c_t的计算方式,可以看出它用更多参数,可以对x_t和h_t-1拟合出更好的函数。

LSTM(一)之深入理解

上图为输出的计算,即为rnn的输出乘上了tanh(c_t)(c_t中用到了三个门)。
其本质是利用门限进行了更复杂的建模,理论上可以对模型有更好的拟合。

2、lstm可以解决梯度消散的原因
LSTM(一)之深入理解
由上图可以看出,lstm单元有一条“高速公路“,即上图所示的实线部分,单元状态有点像是个传送带。它贯穿整个链条,只有一些小的线性相互作用。这很容易让信息以不变的方式向下流动。
在这条高速公路上进行梯度下降运算更新时,加法运算使得链式法则快速进行,而且绝对不会剧烈衰减(由于加法的梯度在链式法则中是直接进行,不需运算),这就是lstm不会梯度消散的原因,有意思的是,resnet这个超级深的网络也使用了类似的“加法高速公路“,至于resnet和lstm之间具体有什么相关和联系,目前还不知道。