原文链接:http://blog.csdn.net/heyongluoyao8/article/details/48636251
1.简介
循环神经网络(Recurrent Neural Networks, RNNs)已经广泛应用在了自然语言处理领域(NLP)。
2.RNNs基本介绍
RNNs的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的RNNs:
RNNs的输入标记为
{x0,x1,x2,...,xt,xt+1,...}
{
x
0
,
x
1
,
x
2
,
.
.
.
,
x
t
,
x
t
+
1
,
.
.
.
}
,输出标记为
{y0,y1,y2,...,yt,yt+1,...}
{
y
0
,
y
1
,
y
2
,
.
.
.
,
y
t
,
y
t
+
1
,
.
.
.
}
,隐藏单元之间的数据流标记为
{s0,s1,s2,...,st,st+1,...}
{
s
0
,
s
1
,
s
2
,
.
.
.
,
s
t
,
s
t
+
1
,
.
.
.
}
。在图中:有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。
上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含5个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:
- xt x t 表示第 t,t=1,2,3... t , t = 1 , 2 , 3... 步的输入。 x0 x 0 为第一个词的词向量。
- st s t 表示隐藏层的第 t t 步的状态,它是网络的记忆单元。,其中 f f 是非线性激活函数。在计算的时候,即第一个单词的隐藏层状态,需要使用 s−1 s − 1 ,但是并不存在,所以一般使用0向量。
- ot o t 表示第 t t 步的状态,
- 在传统神经网络中,每一个网络层的参数是不共享的。而在RNNs中,每输入一步,每一层各自都共享参数 U U ,, W W 。RNNs中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数;传统神经网络的参数是不共享的,并不是表示对于每个输入有不同的参数,而是将RNN是进行展开,这样变成了多层的网络,如果这是一个多层的传统神经网络,那么到 st s t 之间的 U U 矩阵与到 st+1 s t + 1 之间的 U U 是不同的,而RNNs中的却是一样的,同理对于与 s s 层之间的、 s s 层与层之间的 V V 也是一样的。
3.RNNs的用途
RNNs目前在NLP领域的实践是非常成功的,如词向量表达、语句合法性检查、词性标注等。其中最广泛使用的结构是LSTMs
。
语言模型和文本生成(Language Modeling and Generating Text)
给你一个单词序列,我们需要根据前面的单词预测每一个单词的可能性。语言模型能够一个语句正确的可能性,这是机器翻译的一部分,往往可能性越大,语句越正确。另一种应用便是使用生成模型预测下一个单词的概率,从而生成新的文本根据输出概率的采样。语言模型中,典型的输入是单词序列中每个单词的词向量(如 One-hot vector),输出时预测的单词序列。当在对网络进行训练时,如果
ot=xt+1
o
t
=
x
t
+
1
,那么第t步的输出便是下一步的输入。
下面是RNNs中的语言模型和文本生成研究的三篇文章:
- Recurrent neural network based language model
- Extensions of Recurrent neural network based language model
- Generating Text with Recurrent Neural Networks
机器翻译(Machine Translation)
机器翻译是将一种源语言语句变成意思相同的另一种源语言语句,如将英语语句变成同样意思的中文语句。与语言模型关键的区别在于,需要将源语言语句序列输入后,才进行输出,即输出第一个单词时,便需要从完整的输入序列中进行获取。机器翻译如下图所示:
下面是关于RNNs中机器翻译研究的三篇文章:
- A Recursive Recurrent Neural Network for Statistical Machine Translation
- Sequence to Sequence Learning with Neural Networks
- Joint Language and Translation Modeling with Recurrent Neural Networks
语音识别(Speech Recognition)
语音识别是指给一段声波的声音信号,预测该声波对应的某种指定源语言的语句以及该语句的概率值。
- Towards End-to-End Speech Recognition with Recurrent Neural Networks
图像描述生成(Generating Image Descriptions)
和卷积神经网络(convolutional Neural Networks, CNNs)一样,RNNs已经在对无标图像描述自动生成中得到应用。将CNNs与RNNs结合进行图像描述自动生成。这是一个非常神奇的研究与应用。该组合模型能够根据图像的特征生成描述。如下图所示:
4.改进RNNs模型
Simple RNNs(SRNs)
SRNs是RNNs的一种特例,它是一个三层网络,并且在隐藏层增加了上下文单元,下图中的
y
y
便是隐藏层,便是上下文单元。上下文单元节点与隐藏层中的节点的连接是固定(谁与谁连接)的,并且权值也是固定的(值是多少),其实是一个上下文节点与隐藏层节点一一对应,并且值是确定的。在每一步中,使用标准的前向反馈进行传播,然后使用学习算法进行学习。上下文每一个节点保存其连接的隐藏层节点的上一步的输出,即保存上文,并作用于当前步对应的隐藏层节点的状态,即隐藏层的输入由输入层的输出与上一步的自己的状态所决定的。因此SRNs能够解决标准的多层感知机(MLP)无法解决的对序列数据进行预测的任务。
SRNs网络结构如下:
Bidirectional RNNs
Deep Bidirectional RNNs
Echo State Networks
Gated Recurrent Unit Recurrent Neural Networks
LSTM
ClockWork RNNs(CW-RNNs)