深度学习之循环神经网络RNN(基础篇)

1,275 阅读6分钟

循环神经网络(Recurrent Neural Network, RNN)是一种处理序列数据的递归神经网络,序列数据既可以是时间数据,也可以是文本数据,这类序列数据有一个共同特点——后面的数据跟前面的数据有依赖关系。RNN 的每一个神经元接收当前信息的输入和之前产生的记忆信息,因而能够保留序列依赖关系

对 RNN 的研究始于 20 世纪 80-90 年代,并在 21 世纪初发展为深度学习的重要算法之一。RNN 在语音识别、语言建模、机器翻译等领域都有重要应用,比如 Alex Graves 的手写文字生成、名声大振的『根据图片生成描述文字』、输出类似训练语料的文字等应用,都让人感到非常神奇。

为什么需要 RNN

我们人类在做思考的时候,并不是每次都从一片空白的大脑开始的。比如,当你在阅读这篇文章的时候,你对文章的理解程度都会依赖于你自己之前已经积累的相关知识。人类之所以能够不断进步,一个重要的原因就是我们不会丢掉之前学到的全部知识而每次重新从空白的大脑开始思考我们的大脑对知识具有持久性

然而,传统的神经网络 NN(Neural Network)并不能借助之前学到的信息去推断新知识。

比如,要完成如下句子的填空:

今天天气特别好,我想去___。

NN 结构由于只能单独的去处理一个个的输入,前一个输入和后一个输入是完全没有关系的,也就是说当 NN 看到”特别好“这个词语时,并不会与前面的”天气“进行关联,因而也无法正确理解语义,结果针对这个句子是会生成与上文无关的答案,诸如"书本",”马路“等。

很明显,这个句子中,前面的信息”天气”“特别好“都会对后面的”我想去“有很大的影响。而 RNN 就能够很好的捕获”天气”“特别好“这种关键信息,当处理到”我想去“时,会结合上文信息生成符合语境的答案,如”玩“,”游玩“等。

所以,传统神经网络 NN 在处理时序数据时具有巨大的弊端,即无法利用先前的信息来推断后续的行为。RNN 的提出正是借鉴了人类大脑学习的重要环节,从而来解决了传统神经网络的弊端。RNN 允许神经单元包含循环,这样信息可以在不同时刻传输,达到信息持久化的目的。

基本结构

我们先来看下传统神经网络 NN 与循环神经网络 RNN 的基本结构。

图中左侧为 NN,右侧为 RNN。可以看出两者的区别有:

  • 神经单元 A 在 RNN 是自循环的,通过这个结构可以将信息进行传递,而 NN 中没有这样的结构。
  • 由于自循环的存在,RNN 的输入 与输出 是时刻关联的,这里 t 表示时刻,这样就可以处理时序数据。而 NN 的输入输出与时刻无关。

有了上面的理解,我们容易得到 RNN 在 t 时刻的隐藏层状态输出:

这里,

  • U,W 是网络参数,b 是偏置参数,这些参数通过后向传播训练网络学习得到。
  • 是激活函数,通常选择 sigmoid 或 tanh 函数。

这里,隐藏层状态 就代表该神经元的输出。通常情况下,隐藏层之后会连接输出层。这里为方便说明,省去了输出层。

那么,RNN 是怎么对历史信息进行记忆的呢?

从上面的公式可以看出,神经元在时刻 t 的状态 取决于两个变量:前一时刻神经元的状态 和当前时刻 t 神经元的输入

由于 t 时刻状态 受到 t-1 时刻状态 的影响,因而使得神经元具有了记忆功能。可以理解为,当前状态会结合当前输入,从上一时刻的状态中保留并学习得到有用的信息。

我们将 RNN 的自循环展开,可以很清晰地看到信息是如何在隐藏层之间传递的:

将 RNN 展开后,似乎一切都明了了。与传统的 NN 传统神经网络相比,RNN 也在层之间的神经元之间建立权连接 W。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。

图中链式的特征揭示了 RNN 本质上是与序列数据相关的,它们对于处理序列数据的最自然的神经网络架构。

深入了解

初识神经网络的同学看到上面的结构图,可能会有疑惑:每个输入结点 到底是代表一个值,还是向量,隐藏层又是如何连接到自己的等等。

首先,上面的结构图是一个抽象图,是为了方便大家理解其基本结构。 而实际运用中, 其实都是向量,向量的维度由用户指定。W 和 U 都是权重矩阵。

我们通过这个抽象图对应的具体图来更具体了解细节:

我们从上图就能够很清楚的看到:

  • 输入层 是一个向量,在自然语言处理领域,这里通常就是我们所熟知的词向量的表示。这里 t 代表时刻,n 表示向量的维度。
  • 输入层与隐藏层之间的权连接是权重矩阵 U,这里维度为 nm。
  • 隐藏层包含 m 个结点。前 t-1 时刻的隐藏层结点通过权重矩阵 W与 t 时刻的隐藏层连接。这里维度为 mm。可以清楚看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。
  • t 时刻的隐藏层通过权重矩阵 V与输出层连接。这一部分跟 NN 网络的连接是一样的。

上面的 RNN 还有以下特点:权值在不同时刻是共享的,图中的 W、U 和 V 在不同时刻全是共享的。

这样看上去是不是对 RNN 的结构就比较清楚了?

总结

到这里 RNN 最基本的几个知识点就讲解完了,这些内容希望能够帮助大家更直观的了解为什么需要 RNN 及 RNN 的原理结构。

关于 RNN 你可能有两个疑问:

  1. RNN 的参数矩阵 U、W 及 V 是如何通过后向传播学习到的?
  2. 文中提到 RNN 具有记忆功能,这种记忆是否是无损的?就像人类大脑对于时间越久远的信息记忆会越模糊。

后续会继续更新关于 RNN 的反向求导知识及 RNN 的两个重要变体回答上述问题。