循环神经网络(RNN,Recurrent Neural Networks)介绍

循环神经网络(RNN,Recurrent Neural Networks)介绍

循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing,NLP)中取得了巨大成功以及广泛应用。


不同于传统的FNNs(Feed-forward Neural Networks,前向反馈神经网络),RNNs引入了定向循环,能够处理那些输入之间前后关联的问题。定向循环结构如下图所示:

该tutorial默认读者已经熟悉了基本的神经网络模型。

什么是RNNs?

RNNs的目的是用来处理序列数据。在传统的神经网络模型中,,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能为力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以成为循环神经网络,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的RNNs:

RNNs包含输入单元(Input units),输入集标记为 {x0,x1,...,xt,xt+1,...} ,而输出集单元(Output units)的输出集则被标记为 {y0,y1,...,yt,yt+1.,..} 。RNNs还包含隐藏单元(Hidden units),我们将其输出集标记为 {s0,s1,...,st,st+1,...} ,这些隐藏单元完成了最为主要的任务。你会发现,在图中,有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。

上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含5个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:

  • xt 表示第t(t = 1, 2, 3, ...)步的输入。
  • st 为隐藏层的第t步的状态,它是网络的记忆单元。 st 根据当前输入层的输出与上一步隐藏层的状态进行计算。 st=f(Uxt+Wst1) ,其中f一般是非线性的激活函数,如tanh或ReLU,在计算第一个 st 时,其前一个隐藏层状态并不存在,在实现中一般置为0向量。
  • ot 是第t步的输出。如下个单词的向量表示, ot=softmax(Vst)
需要注意的是:
  • 你可以认为隐藏层状态 st 是网络的记忆单元. st 包含了前面所有步的隐藏层状态。而输出层的输出 ot 只与当前步的 st 有关,在实践中,为了降低网络的复杂度,往往 st 只包含前面若干步而不是所有步的隐藏层状态;
  • 在传统神经网络中,每一个网络层的参数是不共享的。而在RNNs中,每输入一步,每一层各自都共享参数 U,V,W 。其反应RNNs中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数。再解释一下,传统神经网络的参数是不共享的,并不是表示对于每个输入有不同的参数,如果这是一个多层的传统神经网络,那么 xt st 之间的U矩阵与 xt+1 st+1 之间的 U 是不同的,而RNNs中的却是一样的,同理对于 s s 层之间的 W s 层与 o 层之间的 V 也是一样的。
  • 上图中每一步都会有输出,但是每一步都要有输出并不是必须的。比如,我们需要预测一条语句所表达的情绪,我们仅仅需要关系最后一个单词输入后的输出,而不需要知道每个单词输入后的输出。同理,每步都需要输入也不是必须的。RNNs的关键之处在于隐藏层,隐藏层能够捕捉序列的信息。

RNNs能干什么?

RNNs已经被在实践中证明对NLP是非常成功的。如词向量表达、语句合法性检查、词性标注等。在RNNs中,目前使用最广泛最成功的模型便是LSTM(Long Short-Term Memory,长短时记忆模型),该模型通常比普通RNNs能够更好地对长短时依赖进行表达,该模型相对于一般的RNNs,只是隐藏层做了手脚。对于LSTM,后面会进行详细介绍。下面对RNNs在NLP中的应用进行简单的介绍。

语言模型与文本生成(Language Modeling and Generating Text)

给定一个单词序列,我们需要根据前面的单词预测每一个单词的可能性。语言模型能够表达一个语句正确的可能性,这是机器翻译的一部分,往往可能性越大,语句越正确。另一个应用便是使用生成模型预测下一个单词的概率,从而生成新的文本。语言模型中,典型的输入是单词序列中每个单词的词向量(如One-Hot Vector),输出是预测的单词序列。

机器翻译(Machine Translation)

机器翻译是将一种源语言语句变成意思相同的另一种源语言语句,如将英语语句变成同样意思的中文语句。与语言模型关键的区别在于,需要将源语言语句序列输入后,才进行输出,即输出第一个单词时,便需要从完整的输入序列中进行获取。机器翻译如下图所示:

语音识别(Speech Recognition)

语音识别是指给一段声波的声音信号,预测该声波对应的某种指定源语言的语句以及该语句的概率值。

图像描述生成(Generating Image Descriptions)

和卷积神经网络(convolutional Neural Networks, CNNs)一样,RNNs已经在对无标图像描述自动生成中得到应用。将CNNs与RNNs结合进行图像描述自动生成。这是一个非常神奇的研究与应用。该组合模型能够根据图像的特征生成描述。如下图所示:

如何训练RNNs

对于RNNs的训练和对传统的ANN训练一样。同样使用BP误差反向传播算法,不过有一点区别。如果将RNNs进行网络展开,那么参数 W,U,V 是共享的,而传统神经网络却不是的。并且在使用梯度下降算法中,每一步的输出不仅依赖当前步的网络,并且还依赖前面若干步网络的状态。比如,在 t=4 时,我们还需要向后传递三步,后面的三步都需要加上各种的梯度。该学习算法称为Backpropagation Through Time (BPTT)。需要意识到的是,在vanilla RNNs训练中,BPTT无法解决长时依赖问题(即当前的输出与前面很长的一段序列有关,一般超过十步就无能为力了),因为BPTT会带来所谓的梯度消失或梯度爆炸问题(the vanishing/exploding gradient problem)。当然,有很多方法去解决这个问题,如LSTMs便是专门应对这种问题的。



转载文章地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值