理解 LSTM 网络

1. 循环神经网络 (Recurrent Neural Networks)

人类不会每秒都从头思考,当你读到这篇文章时,你会基于你对以前见过的词语的理解来理解这篇文章,而不是丢掉以前的认知来从头思考。这说明你的思想已经持久化了。

传统的神经网络不能实现这个目标,这似乎是它的主要缺点。例如,您想对电影中每个时间点发生的事件进行分类,此时如果利用传统的神经网络对电影中先前发生事件的推理来对后期事件产生影响,这在直觉上似乎是不合理的,并且也没有严格的证明表明传统神经网络可以做到。

循环神经网络(Recurrent neural networks,RNN)解决了这个问题,它们的网络结构中存在循环机制,可以使信息持久存在。

image-20210108154937138

上图中是一个循环神经网络简略图,图中给模型一个输入 (x_t),输出一个 (h_t)。循环机制允许信息从上一步流向下一步。

循环机制使得 RNN 似乎有些神秘,但是,如果你再想一想,其实它们与普通的神经网络并没有什么不同。一个 RNN 可以看作将同一个网络复制多次,每一个副本将信息传入它的后继者,我们展开这个循环,如下图所示:

image-20210108155854683

这种类似链的性质表明,RNN 与序列和列表密切相关,其结构是天然支持序列数据的

所以 RNN 被理所当然的使用了!在过去的几年中,将 RNN 应用到各种问题上已经取得了令人难以置信的成功,比如:语音识别,语言模型,翻译,图像字幕……

这些成功的关键是使用“ LSTM”,这是一种非常特殊的 RNN,在很多任务上都能比标准版本表现得更好。 利用 LSTM 几乎可以实现所有令令人满意的结果。 本文将探讨的正是 LSTM

2. 长期依赖问题 (The Problem of Long-Term Dependencies)

RNN 比较有吸引力的地方在于它们可以将先前的信息传递到当前任务,例如使用先前的视频帧可能会有助于对当前帧的理解。如果 RNN可以做到这一点,它们将非常有用。 但是它一定可以吗?要视具体情况来定

有时,我们只需要利用最近的信息即可执行当前任务。 例如,考虑一个语言模型,该模型试图根据前一个单词预测下一个单词。 如果我们试图预测 “云在天空中” 的最后一个词,则我们不需要更长的上下文,很明显,下一个词将是 “天空” 。 在这种情况下,相关信息距离当前任务很近,RNN 完全可以学习使用过去的信息。

image-20210108163505606

但是在某些情况下,我们需要更多的上下文。 假设现在我们的语言模型需要预测文本 “我在法国长大……我会说流利的法语” 中的最后一个词。距离最近的信息表明,下一个词可能是一种语言的名称,但是如果我们想缩小候选语言的范围,则需要从更远的地方来追溯到 “法国” 的上下文。 相关信息可能会隔得特别远,不幸的是,随着相关信息距离的扩大,RNN 变得无法学习连接远程信息。

image-20210108164506795

从理论上讲,RNN绝对有能力处理这种 “长期依赖关系”。 工程师们可以为 RNN 仔细选择参数以解决这种形式的简化问题。 但在面对真实问题的时候,RNN 似乎无法学习到长期依赖关系。 Hochreiter (1991)Bengio 等人对此问题进行了深入探讨。 他们发现了一些 RNN 无法学习长期依赖的根本原因。

幸运的是, LSTM 没有这方面的问题。

3. LSTM 网络 (LSTM Networks)

长短期记忆网络(通常称为 “ LSTM”)是一种特殊的 RNN,能够学习长期依赖关系。它们由 Hochreiter&Schmidhuber (1997) 提出,并在随后的许多工作中被优化和推广。它们在各种各样的问题上都表现出色,现已被广泛使用。

LSTM 被明确设计为避免长期依赖问题。记住长期信息是他们的默认行为,而不是由他们努力学习而来

所有的 RNN 都是一个神经网络模块以链式结构重复的形式。 在标准 RNN 中,此重复模块具有非常简单的结构,例如单个 tanh 层。

image-20210113114133886

LSTM 也具有这种链状结构,但是重复模块具有不同的结构。不是只有一个神经网络层,而是有四个以非常特殊的方式进行交互的层。

image-20210113114501374

首先解释一下将要使用的符号:

image-20210113114820748

在上图中,每条线都代表一个向量,从一个节点的输出到另一个节点的输入。粉色圆圈表示逐元素操作,如向量加法,而黄色框表示参数可学习的神经网络层。合并的两个箭头表示拼接,而分叉的箭头表示同样的内容进入不同的位置。

4. LSTM 的核心思想 (The Core Idea Behind LSTMs)

LSTM 的关键部分是 cell state,如下图中顶部的那条直线。

cell state 是一种类似于传递纽带的组件。它贯穿于整个 RNN 的时间步中,只和当前步的内部向量存在少量的交互运算,可以非常容易地保证信息在流动的过程中不发生改变

image-20210113135442795

LSTM 具有删除或向 cell state 添加信息的能力,这些功能主要由其中称为门的结构实现。

门结构是一种选择性地让信息通过的方式。 它们主要由 sigmoid 函数和向量逐元素乘法构成。

image-20210113142833439

sigmoid 函数层输出一个 0-1 的值,意义是让多少比例的信息流通过去。0 代表没有信息流通,1 代表全部信息流通过去。

LSTM 中包含三个门结构,用以精细地保护和控制 cell state。

5. LSTM 的详细解释 (Step-by-Step LSTM Walk Through)

LSTM 中的第一步是决定丢弃 cell state 中哪些信息,主要由 “遗忘门” (forget gate) 控制,它的输入包括前一步的隐藏状态 (h_{t-1}) 和 当前步的输入 (x_t),为前一步的 cell state ((C_{t-1})) 输出一个 0-1 之间的数,1 代表完全保留所有信息,0 代表丢弃所有信息

以语言模型,该模型试图根据所有先前的单词来预测下一个单词。在这样的问题中,cell state 中可能包含了当前主语的性别,从而可以使用正确的代词。 但是看到新的主语时,模型应该忘记旧主语的性别。

image-20210113145620407

第二步决定哪些新信息需要被存储到 cell state 中,包含两步。首先,使用一个称为 “输入门” 的 sigmoid 函数层决定更新哪些值。然后一个 tanh 层生成一个新的候选 cell state (( ilde{C}_t)),其中一部分信息可能被加入到新的 state 中。下一步将结合这两个值生成一个 state 的更新。

仍以语言模型为例,对于新主语的性别,模型应该将其加入到 cell state 中,代替应该被遗忘的旧主语的性别

image-20210113151346822

第三步,更新 cell state。使用遗忘门 (f_t) 乘以前一步的 cell state ((C_{t-1})),丢弃应该被遗忘的信息。使用 (i_t) 乘以候选 cell state (( ilde{C}_t)),保留新输入信息中应该被存储到 (C_t) 中的部分。最后得到当前时间步的 (C_t)

image-20210113152212702

最后一步,决定最终的输出。最后的输出基于当前步的 cell state,但也应该对信息有所筛选。所以首先得使用一个 sigmoid 函数决定 cell state 中哪些信息应该被用于生成输出。然后,将 cell state 输入到 tanh,输出再和前面的 sigmoid 输出相乘,这样就得到了我们希望用于输出的部分信息。

image-20210113154132314

6. LSTM 的变体 (Variants on Long Short Term Memory )

到目前为止所描述的是一个非常普通的 LSTM。 但是,并非所有的 LSTM 都与上述相同。实际上,几乎所有涉及 LSTM 的论文都使用略有不同的版本。 差异不大,但其中一些值得一提。

Gers & Schmidhuber (2000) 提出了一个流行的 LSTM 变体,引入了 “peephole connections”,这意味着允许各门控结构可以根据上一步的 cell state ((C_{t-1})) 作出控制信息流动的决策。

image-20210113164848196

上图中,所有的门都被输入了 cell state,也有一些变体只选取其中一些门输入 cell state。

另外一个变体是使用耦合的 “遗忘门” 和 “输入门”,换句话说就是不分别产生 (f_t)(i_t),模型仅在需要在其中存储新的信息时产生遗忘,仅在忘记旧内容时才向 state 输入新信息。

image-20210113170544531

Cho等人提出的门控循环单元 (Gated Recurrent Unit,GRU) 变化稍微更大一些,它将 “遗忘门” 和 “输入门” 结合成一个 “更新门”,同时将 cell state 和 hidden state 合并。最终的模型要比 LSTM 更简单一些,后来也逐渐变得流行起来。

image-20210113171111434

以上只是比较出名的 LSTM 变体中的少数。还有很多其他方法,例如 Yao等人提出的 Depth Gated RNNs。 还有一些完全不同的用来解决长期依赖问题的方法,例如 Koutnik 等人提出的 Clockwork RNNs

以上这些变体哪个最好,它们之间的差异是否重要。Greff 等人 对流行的变体进行了详细的比较,结果发现它们几乎相同。 Jozefowicz等。 (2015年)测试了超过一万种RNN架构,发现其中某些在某些任务上比LSTM更好。Jozefowicz 测试了一万多种 RNN 结构,发现其中一些在特定的任务上比 LSTM 表现更好

7. 结论 (Conclusion)

LSTM 是我们可以使用 RNN 完成大部分任务的重大进步。 很自然地联想到:是否还有另外一个关键技术? 研究人员普遍认为:“是的! 有,那就是 attention 机制!” 这个想法是让 RNN 的每一步都从更大的信息集合中挑选信息。 例如,如果使用 RNN 生成描述图像的文字,则它可能会只关注图像的一部分以生成每个单词。徐等人 2015 年做过这方面的探索,如果你想探索 attention 机制,这可能是一个不错的起点! attention 机制已经产生了许多令人振奋的结果。

参考

  1. Understanding LSTM Networks
原文地址:https://www.cnblogs.com/xxBryce/p/14281053.html