介绍

循环神经网络(recurrent neural network)或 RNN (Rumelhart et al., 1986c)
是一类用于处理序列数据的神经网络。就像卷积网络是专门用于处理网格化数据 X(如一个图像)的神经网络, 循环神经网络是专门用于处理序列 x(1), …. x(T) 的神经网络。正如卷积网络可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像, 循环网络可以扩展到更长的序列(比不基于序列的特化网络长得多),大多数循环网络也能处理可变长度的序列。

从多层网络出发到循环网络,我们需要利用上世纪 80 年代机器学习和统计模
型早期思想的优点:在模型的不同部分共享参数。 参数共享使得模型能够扩展到不同形式的样本(这里指不同长度的样本)并进行泛化。如果我们在每个时间点都有一个单独的参数,我们不但不能泛化到训练时没有见过序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。当信息的特定部分会在序列内多个位置出现时,这样的共享尤为重要。例如,考虑这两句话: “I went to Nepal in 2009’’ 和“In 2009, I went to Nepal.” 如果我们让一个机器学习模型读取这两个句子,并提取叙述者去Nepal的年份,无论 “2009 年’’ 是作为句子的第六个单词还是第二个单词出现,我们都希望模型能认出 “2009 年’’ 作为相关资料片段。假设我们要训练一个处理固定长度句子的前馈网络。传统的全连接前馈网络会给每个输入特征分配一个单独的参数,所以需要分别学习句子每个位置的所有语言规则。相比之下, 循环神经网络在几个时间步内共享相同的权重,不需要分别学习句子每个位置的所有语言规则。

RNN模型

话不多说了,直接上图吧!清晰明了~~~


循环神经网络RNN(很简洁的讲解)
循环神经网络RNN(很简洁的讲解)

RNN模型计算公式:

循环神经网络RNN(很简洁的讲解)

其中:

  • a(t)为中间结果
  • h(t)为隐藏层
  • o(t)为未归一化的输出层
  • y^(t)为归一化的输出层

注意:其中的参数的偏置向量 b 和 c 连同权重矩阵 U、 V 和 W,分别对应于输入到隐藏、隐藏到输出和隐藏到隐藏的连接,上述公式种的W、U、V在所有序列数据上共享。

梯度更新

循环神经网络RNN(很简洁的讲解)

注意:对于U、W、V来说,它们每次的总更新是所有序列上数据对U、W、V更新的叠加。

RNN不同的内部结构

RNN内部分为几种连接方式,一对一、一对多、多对一、多对多,具体结构如下图所示:

循环神经网络RNN(很简洁的讲解)

一对多方式:可用于图片字幕的生成,即输入为图片,输出为一段文本或文字序列。
多对一的方式:常用于文本生成图片或情感分析。
左边的多对多的方式:常用于机器翻译(即将中文语句翻译为英文)。
右边的多对多方式:常用于视频分类,即为每一帧打上标签或标注。