LSTM的原理详解及实战(一)

举报
tengyun 发表于 2019/09/26 08:12:49 2019/09/26
【摘要】 LSTM 由 Hochreiter & Schmidhuber (1997) 提出,并在近期被 Alex Graves 进行了改良和推广,LSTM是一个可以处理长记忆问题的特殊RNN,它与传统RNN相比,长时间的信息记忆能力相对RNN要更好一些。

长短时记忆网络Long Short Term(LSTM是属于RNN中的一种特殊的类型,可以学习长期依赖信息,避免常规RNN的梯度消失,因此在业界得到了广泛的应用。

一、LSTM的简介

LSTM 由 Hochreiter & Schmidhuber (1997) 提出,并在近期被 Alex Graves 进行了改良和推广,LSTM是一个可以处理长记忆问题的特殊RNN,它与传统RNN相比,长时间的信息记忆能力相对RNN要更好一些。

传统RNN的链式结构,都有不断重复的模块,用来随时间传递信息,

在RNN模型里,每个序列索引位置t都有一个隐藏状态h(t)。

11.png

我们可以略去每层都有的o(t),L(t),y(t),将RNN的模型简化成如下图的形式:

22.png

        

由于RNN梯度消失的问题,大牛们对于序列索引位置t的隐藏结构做了改进,可以说通过一些技巧让隐藏结构复杂了起来,来避免梯度消失的问题,这样的特殊RNN就是我们的LSTM,结构如下图:

33.png

可以看到LSTM的结构要比RNN的复杂的多,下面我们来详细讲解一下LSTM的模型在每个序列索引位置t时刻的内部结构。

二、LSTM的原理详解

从上图可以看到,在每个序列索引位置t时刻向前传播的除了和RNN一样的隐藏状态h(t),还多了另一个隐藏状态,就是图中上部的水平线。这个隐藏状态我们一般称为细胞状态(Cell State),记为C(t)。如下图所示:

44.png

除了细胞状态,LSTM图中还有了一些奇怪的结构,称之为门控结构(Gate)。LSTM在每个序列索引位置t的门包括遗忘门,输入门和输出门三种。下面我们就来研究这几种门以及细胞状态。

2.1 LSTM之遗忘门

  遗忘门(forget gate)顾名思义,是控制是否遗忘的,在LSTM中即以一定的概率控制是否遗忘上一层的隐藏细胞状态。遗忘门子结构如下图所示:

55.png

输入的有上一序列的隐藏状态h(t−1)和本序列输入数据x(t),通过一个激活函数,一般是sigmoid,得到遗忘门的输出f(t)。由于sigmoid的输出f(t)在[0,1]之间,因此这里的输出f(t)代表了遗忘上一层隐藏细胞状态的概率。用数学表达式即为:

f(t)=σ(Wf [h(t−1),x(t)] + bf)

其中Wf,bf为线性关系的权重系数和偏移,和RNN中的类似。σ为sigmoid激活函数。

2.2 LSTM之输入门

 输入门(input gate)负责处理当前序列位置的输入,它的子结构如下图:


66.png


从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为i(t),第二部分使用了tanh激活函数,输出为a(t), 两者的结果后面会相乘再去更新细胞状态。用数学表达式如右图所示:

其中Wi,bi,Wc,bc,为线性关系的系数和偏移,和RNN中的类似。σ为sigmoid激活函数。

2.3 LSTM之细胞状态更新

  在研究LSTM输出门之前,我们要先看看LSTM的细胞状态。遗忘门和输入门的结果都会作用于细胞状态C(t)。我们来看看从细胞状态C(t−1)如何得到C(t)。如下图所示:

77.png


细胞状态C(t)由两部分组成,第一部分是C(t−1)和遗忘门输出f(t)的乘积,第二部分是输入门的i(t)和 的乘积,即上图右部所示:

其中,*为 Hadamard积。即新矩阵元素定义为矩阵A、B对应元素的乘积

2.4 LSTM之输出门

 有了新的隐藏细胞状态C(t),我们就可以来看输出门了,输出隐藏的状态h(t),子结构如下:

88.png

在这里我们依然可以使用sigmoid层来控制有多少细胞状态信息可以作为隐藏的状态输出h(t).

从图中可以看出,o(t)是等于上一层隐藏层的状态h(t-1)和本层的输入x(t)通过sigmodi函数计算而来的。

h(t)=o(t)*tanh(C(t))

C(t),我们在上一步求了,是当前细胞的状态。将它通过tanh()函数缩放到[-1,+1]之间的值,在跟o(t)相乘,就可以得到当前隐藏的状态h(t).

LSTM相对于RNN,就是在总的神经元里,计算相对复杂,有三个门的更新,分别是遗忘门、输入门、输出门。遗忘门和输入门用来更新细胞状态,之后可以到达输出门来计算当前隐藏层状态h(t)。每一个小的细胞里都是这样计算,所以这是LSTM链式结构当中重复模块结构,它相对

RNN的链式结构当中,每个细胞元只使用tanh函数来更新,要复杂一些。而且由于门的控制,细胞可以在工作的时间可以保持一段时间的信息

并且在训练时保持内部的梯度不受不利变化的干扰。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。