LSTM的原理详解及实战(一)
长短时记忆网络Long Short Term(LSTM)是属于RNN中的一种特殊的类型,可以学习长期依赖信息,避免常规RNN的梯度消失,因此在业界得到了广泛的应用。
一、LSTM的简介
LSTM 由 Hochreiter & Schmidhuber (1997) 提出,并在近期被 Alex Graves 进行了改良和推广,LSTM是一个可以处理长记忆问题的特殊RNN,它与传统RNN相比,长时间的信息记忆能力相对RNN要更好一些。
传统RNN的链式结构,都有不断重复的模块,用来随时间传递信息,
在RNN模型里,每个序列索引位置t都有一个隐藏状态h(t)。
我们可以略去每层都有的o(t),L(t),y(t),将RNN的模型简化成如下图的形式:
由于RNN梯度消失的问题,大牛们对于序列索引位置t的隐藏结构做了改进,可以说通过一些技巧让隐藏结构复杂了起来,来避免梯度消失的问题,这样的特殊RNN就是我们的LSTM,结构如下图:
可以看到LSTM的结构要比RNN的复杂的多,下面我们来详细讲解一下LSTM的模型在每个序列索引位置t时刻的内部结构。
二、LSTM的原理详解
从上图可以看到,在每个序列索引位置t时刻向前传播的除了和RNN一样的隐藏状态h(t),还多了另一个隐藏状态,就是图中上部的水平线。这个隐藏状态我们一般称为细胞状态(Cell State),记为C(t)。如下图所示:
除了细胞状态,LSTM图中还有了一些奇怪的结构,称之为门控结构(Gate)。LSTM在每个序列索引位置t的门包括遗忘门,输入门和输出门三种。下面我们就来研究这几种门以及细胞状态。
2.1 LSTM之遗忘门
遗忘门(forget gate)顾名思义,是控制是否遗忘的,在LSTM中即以一定的概率控制是否遗忘上一层的隐藏细胞状态。遗忘门子结构如下图所示:
输入的有上一序列的隐藏状态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)负责处理当前序列位置的输入,它的子结构如下图:
从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为i(t),第二部分使用了tanh激活函数,输出为a(t), 两者的结果后面会相乘再去更新细胞状态。用数学表达式如右图所示:
其中Wi,bi,Wc,bc,为线性关系的系数和偏移,和RNN中的类似。σ为sigmoid激活函数。
2.3 LSTM之细胞状态更新
在研究LSTM输出门之前,我们要先看看LSTM的细胞状态。遗忘门和输入门的结果都会作用于细胞状态C(t)。我们来看看从细胞状态C(t−1)如何得到C(t)。如下图所示:
细胞状态C(t)由两部分组成,第一部分是C(t−1)和遗忘门输出f(t)的乘积,第二部分是输入门的i(t)和 的乘积,即上图右部所示:
其中,*为 Hadamard积。即新矩阵元素定义为矩阵A、B对应元素的乘积
2.4 LSTM之输出门
有了新的隐藏细胞状态C(t),我们就可以来看输出门了,输出隐藏的状态h(t),子结构如下:
在这里我们依然可以使用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函数来更新,要复杂一些。而且由于门的控制,细胞可以在工作的时间可以保持一段时间的信息
并且在训练时保持内部的梯度不受不利变化的干扰。
- 点赞
- 收藏
- 关注作者
评论(0)