LSTM(Long Short-term Memory,长短期记忆网络)是一种用于处理序列数据的神经网络模型。它可以被应用于语言模型、机器翻译、图片标注、音乐自动化生成等等,在深度学习与大数据中有着不可或缺的地位。
深度学习(Deep Learning)
为什么我们需要深度学习
- 随着数据量的爆炸式增长以及计算机性能的提升,传统的神经网络因为其自身的局限性限制了它们进一步提升效率与性能从而处理大数据问题的可能;
- 传统的机器学习往往无法处理原始格式的数据。比如,当要进行图片分类时,我们并不会将整张图片的所有像素值作为输入,而是先人为地提取出图片的特征,再转化为数字形式,然后用来训练网络。
什么是深度学习
- 让我们首先了解表示学习(Representation learning):表示学习是一种使机器能自动检测出原始数据特征的学习方法;
- 深度学习是一种表示学习,它用于许多表示层,这些层以简单但是非线性的模块的形式组合在一起,每一层都会讲表示转化为更高层的抽象传递给下一层。
如何构造深度学习模型
在深度学习中有2种模型最为常见:
- CNN(Convolutional Neural Network,卷积神经网络):它可以被看做是标准神经网络的进阶版。它包含了卷积层(convolutional layer)、池化层(pooling layer)、全连接成(full-connected layer)。这些结果使得它能够接收图片的完整像素值,而不再需要人工特征提取;
- RNN(Recurrent Neural Network,循环神经网络):它是与CNN完全不同的模型,专用于展示序列数据的动态行为。
循环神经网络(RNN)
RNN是一种人工神经网络,它通过节点之间的连接构成了一个有向图。
它主要拥有3个特征:
- 结合内部状态(internal state)来处理输入序列;
- 展示一个时间序列的时间动态行为;
- 处理连续性的、相关联的任务。
算法
前向传播算法(Forward propagation)
相比于传统神经网络,RNN首要的区别在于它维护了一个内部状态,也就是说当数据序列中一个新的数据输入时,输出并不仅仅通过输入,还通过前一时刻的内部状态进行计算,并且在计算过程中,这个内部状态会相应地更新。
假设时间序列x由x1, x2, x3...构成,当x1输入时,a0将被更新至a1,同时y_hat1将计算出来,然后在x2输入时,a1将被更新至a2,同时y_hat2将计算出来...一次类推。
反向传播法(Backpropagation)
与神经网络类似,RNN也用Backpropagation进行训练更新其权重与偏差,最小化损失函数(loss function),从而让网络输出尽可能拟合真实数据。
通常情况下,RNN框架会实现这一算法,因此作为使用者不需要了解其内部的数学逻辑,只需要对一些关键参数进行设置即可。
类型
RNN可以分为4中类型。
一对一(one-to-one)
这种RNN等价于传统神经网络,无论是输入还是输出都只有一个数据。
多对一(many-to-one)
这种RNN会接收一段数据序列,而仅仅产生最后一个结果。例如,我们想要判断一句话的情感,那么网络会将这句话的词作为序列依次输入,最终产生一个数值对应相应的情感。
一对多(one-to-many)
与多对一相反,这种RNN只接受一个输入,但会产生一系列连续输出。例如,在自动化生成音乐中,我们输入一个体裁所对应的数值,那么RNN会输入这个体裁的整首歌的音符。
多对多(many-to-many)
这是最为常见的类型,它们会接收一段数据序列,同时也会输出一段数据序列。此外,输入数据序列的数据个数与输出数据序列的数据个数可以相等,也可以不相等。
梯度消失
与其它使用Backpropagation算法的神经网络一样,RNN也拥有着梯度消失的问题,也就是说,当数据序列足够长时,靠后的时间步长的错误会很难影响到先前时间步长的计算。这也意味着RNN很难将距离较远的上下文信息关联起来,这个问题也被称为长期依赖问题(Long-time dependencies/Long-term dependencies)。
例如,我们有两句话
The cat, which already had fish and milk, is full.
The cats, which already had fish and mile, are full.
在这种情况下,RNN可能无法判断其系动词应该是单数还是负数,因为系动词的位置距离主语相对较远。
因此,LSTM(Long Short-term Memory,长短期记忆网络)被设计出来解决这一问题。
长短期记忆网络(LSTM)
LSTM是RNN的一种变体,它拥有着解决长期依赖问题的能力。
与RNN相比,LSTM用cell取代了内部存储,它将数据维护在这个cell中,被称为cell state。这个cell state贯穿整个LSTM架构,仅仅只有少量的线性交互,这就使得信息可以在传递的过程中保持不变。
此外,相比于RNN仅有1个网络层,LSTM拥有着4个,它们以特别的方式进行交互。一个标准的LSTM单元由以下4个部分构成。
架构
Forget Gate
首先,在新数据传入LSTM时,我们要决定哪些旧数据需要从cell state中扔掉。这个就是由forget gate决定的,它是一个sigmoid函数层。
Input Gate
第二步是决定哪些新的信息需要被存储进cell state,分为两个步骤。首先,一个sigmoid函数层,即inpu gate会决定哪些值需要被更新;然后,一个tanh函数层会创建一个向量,作为加入到cell state的候选值。
Cell
现在我们可以更新cell state了,这同样分为两步。首先,我们从cell state移除掉我们在forget gate决定的信息;然后,我们以决定对每一个状态值更新的比例来加入input gate计算出的候选值。
Output Gate
最后,我们决定将要输出的部分。输出是基于新的cell state,同时进行适当的处理。首先,我们通过一个sigmoid函数层来决定cell state中有哪些部分需要被更新,然后,我们将cell state经过一个tanh函数处理(其目的是使得数值落在(-1,1)区间内),并将其余sigmoid层的输出相乘,从而决定输出的部分。
LSTM的变体
在实际使用在,几乎每一篇涉及到LSTM的paper都会对LSTM进行适当的改进,这里我们简要介绍3种最常见的LSTM变体。
加入“peephole connections”
将forget gate与input gate进行耦合
GRU(Gated Recurrent Unit)
LSTM的应用
现在LSTM已经成为处理拥有长期依赖问题的序列数据问题的首要方法之一:
- 语言模型(以字母/单词为单位);
- 机器翻译;
- 图片标注;
- 图片自动化生成;
- 音乐自动化生成;
- ............
参考文献
- LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. “Deep learning.” nature 521.7553 (2015): 436.
- Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.
- Understanding LSTM Networks
- The Unreasonable Effectiveness of Recurrent Neural Networks
英文版博文地址:https://ertong.blog/2018/09/07/deep-into-lstm-from-deep-learning