长短期记忆(LSTM)是一种循环神经网络,通过内部记忆状态和学习得到的门来处理序列数据。在机器学习中,它提供了一种跨多个处理步骤保留信息的方法,而不只是依赖最近的输入。其核心设计旨在解决梯度消失问题,这一问题使传统循环网络难以学习长程依赖关系。塞普·霍赫赖特(Sepp Hochreiter)和于尔根·施密德胡伯(Jürgen Schmidhuber)在1997年的论文《长短期记忆》中提出了这一架构。(doi.org)
起源与动机
循环网络在依次接收输入时,会反复更新自身状态。训练时,需要确定较早的计算对后续误差产生了怎样的影响。导数的反复相乘可能使所得的梯度极小或极大,从而产生梯度消失或梯度爆炸问题。因此,如果与预测相关的信息和该预测之间间隔了许多步骤,网络就可能难以学习这些信息。(arxiv.org)
最初的LSTM引入了记忆单元,其中包含特殊结构的循环连接,以及以乘法方式起作用的输入门和输出门。其“恒定误差环”(constant error carousel)为误差信号提供了一条能够跨时间持续传播的路径。实验表明,它能够在某些人工任务中学习间隔超过1,000个步骤的依赖关系;这是基准测试中的结果,并不意味着每种应用都能保证达到这样的记忆长度。(doi.org)
此后,费利克斯·格尔斯(Felix Gers)、施密德胡伯和弗雷德·康明斯(Fred Cummins)引入了自适应遗忘门,并在2000年的一篇期刊论文中加以描述。它使记忆单元在处理没有明确重置标记的连续数据流时,能够丢弃已存储的信息。因此,如今常见的三门LSTM与1997年最初提出的形式有所不同。(pubmed.ncbi.nlm.nih.gov)
单元结构与方程
标准LSTM维护两个向量:单元状态 ,用于承载存储的信息;以及隐藏状态 ,用于向后续计算提供经门控的表示。在第 步,两者均根据当前输入 和前一时刻的状态进行更新。各个门使用逻辑斯蒂函数作为激活函数,产生零到一之间的连续值,而不是二元开关。(docs.pytorch.org)
一种不含窥孔连接的常见形式如下:
其中, 和 是学习得到的权重矩阵, 表示偏置, 表示逐元素相乘。输入门 控制信息写入,遗忘门 控制信息保留,输出门 控制单元状态对外输出的程度。候选向量 提供新的内容。(docs.pytorch.org)
单元状态的加性更新至关重要。在状态之间直接传递的路径上,保留的信息只需与遗忘门相乘,而不必反复经过完整的非线性循环映射。当门值接近一时,这条路径可以在许多步骤中得以保留。这改善了梯度传播,但并不能保证信息无限期保留,也不能消除所有优化难题。(doi.org)
训练与序列处理
LSTM通常使用随时间反向传播进行训练,即对沿序列展开的网络应用反向传播。针对具体任务的损失函数用于衡量预测误差,而梯度下降则用于调整各时间步共享的参数。对于下一步预测,训练可以通过最小化观测序列的负对数似然,来最大化这些序列的似然。(arxiv.org)
尽管记忆路径有助于缓解梯度消失,导数仍然可能过大。梯度裁剪在优化过程中限制梯度的大小;一般循环网络研究和LSTM序列生成实验中都有使用这一方法的记录。裁剪针对的是数值不稳定问题,而不是扩大单元的表示能力。(arxiv.org)
每个步骤都复用相同的状态转移参数,因此LSTM能够处理长度不同的序列。其隐藏表示可以在每个位置传入输出层,也可以为另一个网络提供编码后的表示。多层结构将循环层堆叠起来,构成深度学习模型,其中较高层接收来自较低层的表示。(arxiv.org)
变体与应用
双向LSTM沿两个方向处理序列,并将两个方向的表示合并。因此,与纯前向循环模型不同,它能够同时利用前文和后文语境。投影LSTM对隐藏输出施加学习得到的投影,使其维度可以不同于单元状态的维度。带窥孔连接的变体还会将单元状态直接连接到各个门。(docs.pytorch.org)
LSTM已应用于语音识别和手写识别。在自然语言处理中,其用途包括语言模型和文本生成。亚历克斯·格雷夫斯(Alex Graves)展示了通过预测连续元素来生成文本和在线手写轨迹的方法,其中包括以给定文本为条件生成手写轨迹。(arxiv.org)
一种具有代表性的序列到序列方法使用一个多层LSTM对输入进行编码,再用另一个多层LSTM解码生成输出。伊利亚·苏茨克维(Ilya Sutskever)、奥里奥尔·维尼亚尔斯(Oriol Vinyals)和郭一(Quoc Le)于2014年展示了这一架构在英语到法语机器翻译中的应用,确立了一种在变长序列之间进行映射的通用方法。(arxiv.org)
相关架构与计算限制
门控循环单元(GRU)是一种相关的门控架构,它将记忆与隐藏状态的作用合并,而不像LSTM那样维护独立的单元状态。2014年的一项比较研究发现,在所评估的语音和音乐任务上,GRU与LSTM表现相当,但并未证明哪一种单元在所有情况下都更优。(arxiv.org)
LSTM的计算仍然是顺序进行的:每个循环状态都依赖于前一个状态。这限制了序列各位置之间的并行计算。2017年提出的Transformer架构则在其最初形式中使用注意力机制,而不采用循环结构,从而能够在训练时实现更高程度的并行化。因此,这些架构不仅在表示序列上下文的方式上不同,其计算依赖关系也有所不同。(arxiv.org)