循环神经网络

RNN是什么

循环神经网络即recurrent neural network,它的提出主要是为了处理序列数据,序列数据是什么?就是前面的输入和后面的输入是有关联的,比如一句话,前后的词都是有关系的,“我肚子饿了,准备去xx”,根据前面的输入判断“xx”很大可能就是“吃饭”。这个就是序列数据。

循环神经网络有很多变种,比如LSTM、GRU等,这里搞清楚基础的循环神经网络的思想,对于理解其他变种就比较容易了。

与传统神经网络区别

下图是我们经典的全连接网络,从输入层到两个隐含层再到输出层,四层之间都是全连接的,而且层内之间的节点不相连。这种网络模型对于序列数据的预测就基本无能为力,比如某句话的下一个单词是什么就很难处理。

循环神经网络则擅长处理序列数据,它会对前面的信息进行记忆并且参与当前输出的计算,理论上循环神经网络能处理任意长度的序列数据。

RNN模型

RNN模型最抽象的画法就是下面这种了,但它不太好理解,因为它将时间维度挤压了。其中x是输入,U是输出层到隐含层的权重,s是隐含层值,W则是上个时刻隐含层作为这个时刻输入的权重,V是隐含层到输出层的权重,o是输出。

为方便理解,将上图展开,现在可以清楚看到输入x、隐层值s和输出o都有了下标t,这个t表示时刻,t-1是上一时刻,t+1则是下一时刻。不同时刻输入对应不同的输出,而且上一时刻的隐含层会影响当前时刻的输出。

那么反应到神经元是怎样的呢?如下图,这下就更清晰了,输入的3个神经元连接4个隐含层神经元,然后保留隐含层状态用于下一刻参与计算。

RNN的正向传播

还是使用这张图进行说明,设输出层的输入为nett,则很容易可以得到输出,

nett=Vst

ot=σ(nett)

其中σ是激活函数,再设隐含层的输入为ht

ht=Uxt+Wst−1

st=σ(ht)

可以继续往前一个时刻推,有

st=σ(Uxt+Wσ(Uxt−1+Wst−2))

而t-2时刻又可以用t-3时刻来表示,从这就可以看出循环神经网络具有记忆,可以往前看任意个输入。

RNN的训练

假设损失函数为

E

在t时刻,根据误差逆传播,有

∂Et∂nett=∂Et∂ot∂ot∂nett=E′(ot)σ′(nett)

首先,我们来看看对V的求导,每个时刻t的误差至于当前时刻的误差相关,则

∂Et∂V=∂Et∂nett∂nett∂V=∂Et∂nettst

其次,对W求导,对于一个训练样本,所有时刻的误差加起来才是这个样本的误差,某时刻t对W求偏导为,

∂Et∂W=∂Et∂nett∂nett∂st∂st∂W

其中st=σ(Uxt+Wσ(Uxt−1+Wst−2))一直依赖上个时刻,某个样本的总误差是需要所有时刻加起来,不断对某个时刻进行求偏导,误差一直反向传播到t为0时刻,则

∂E∂W=∑t∂Et∂W=∑tk=0∂Et∂nett∂nett∂st(∏tj=k+1∂st∂sk)∂sk∂W

其中∂st∂sk根据链式法则是会一直乘到k
时刻,k可以是0、1、2…,那么上式可以表示成,

∂E∂W=∑tk=0∂Et∂nett∂nett∂st∂st∂sk∂sk∂W

最后,对U求导,

∂E∂U=∂E∂ht∂ht∂U=∂E∂htxt

通过上面实现梯度下降训练。

梯度消失或梯度爆炸

对于tanh和sigmoid激活函数的RNN,我们说它不能很好的处理较长的序列,这个是为什么呢?简单说就是因为RNN很容易会存在梯度消失或梯度爆炸问题,发生这种情况时RNN就捕捉不了很早之前的序列的影响。

为什么会这样?接着往下看,tanh和sigmoid的梯度大致如下图所示,两端的梯度值都基本接近0了,而从上面的求导公式可以看到

∂E∂W=∑t∂Et∂W=∑tk=0∂Et∂nett∂nett∂st(∏tj=k+1∂st∂sk)∂sk∂W

其中有个连乘操作,而向量函数对向量求导结果为一个Jacobian矩阵,元素为每个点的导数,离当前时刻越远则会乘越多激活函数的导数,指数型,本来就接近0的梯度再经过指数就更加小,基本忽略不计了,于是便接收不到远距离的影响,这就是RNN处理不了较长序列的原因。

而当矩阵中的值太大时,经过指数放大,则会产生梯度爆炸。

梯度爆炸会导致程序NaN,可以设置一个梯度阈值来处理。

梯度消失则可以用ReLU来替代tanh和sigmoid激活函数,或者用LSTM或GRU结构。

RNN简单应用例子

比如可以做字符级别的预测,如下图,假如这里只有四种字符,样本为”hello”单词,则输入h预测下个字符为e,e接着则输出l,l则输出l,最后输入l则输出o。

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

时间: 2024-08-02 12:26:41

循环神经网络的相关文章

[译] RNN 循环神经网络系列 2:文本分类

本文讲的是[译] RNN 循环神经网络系列 2:文本分类, 原文地址:RECURRENT NEURAL NETWORKS (RNN) – PART 2: TEXT CLASSIFICATION 原文作者:GokuMohandas 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Changkun Ou 校对者:yanqiangmiffy, TobiasLee 本系列文章汇总 RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN RNN 循环神

[译] RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN

本文讲的是[译] RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN, 原文地址:RECURRENT NEURAL NETWORKS (RNN) – PART 1: BASIC RNN / CHAR-RNN 原文作者:GokuMohandas 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Changkun Ou 校对者:CACppuccino, TobiasLee 本系列文章汇总 RNN 循环神经网络系列 1:基本 RNN 与 CHAR

Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍

今年5月,Facebook AI研究院(FAIR)发表了他们的研究成果fairseq,在fairseq中,他们使用了一种新型的卷积神经网络来做语言翻译,比循环神经网络的速度快了9倍,而且准确性也是现有模型中最高的.此外,他们在GitHub公布了fair序列建模工具包的源代码和训练好的系统,其他的研究者可以在此基础上建立自己的关于翻译.文本总结和其他任务的模型. 详情可参见快9倍!Facebook开源机器学习翻译项目fairseq一文. 日前,Facebook AI研究团队又在GitHub上开源了

零基础入门深度学习(5) - 循环神经网络

  在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用.他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的.但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的.   比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列:当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列.这时,就需要用到深度学习领域中另一类非常重要神经网络:循

简单入门循环神经网络RNN:时间序列数据的首选神经网络

更多深度文章,请关注:https://yq.aliyun.com/cloud 随着科学技术的发展以及硬件计算能力的大幅提升,人工智能已经从几十年的幕后工作一下子跃入人们眼帘.人工智能的背后源自于大数据.高性能的硬件与优秀的算法的支持.2016年,深度学习已成为Google搜索的热词,随着最近一两年的围棋人机大战中,阿法狗完胜世界冠军后,人们感觉到再也无法抵挡住AI的车轮的快速驶来.在2017年这一年中,AI已经突破天际,相关产品也出现在人们的生活中,比如智能机器人.无人驾驶以及语音搜索等.最近,

TensorFlow构建循环神经网络

前言 前面在<循环神经网络>文章中已经介绍了深度学习的循环神经网络模型及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个循环神经网络,该例子能通过训练给定的语料生成模型并实现对字符的预测.这里选择使用最原始的循环神经网络RNN模型. 语料库的准备 这里就简单用纪伯伦的<On Friendship>作为语料吧. RNN简要说明 用下面两张图简要说明下,RNN模型有多个时刻的输入,从第一个图中看到输入x.隐层s和输出o都与时刻t有关,可以看到上一时刻的隐含层会影响到当前时

深度学习界冉冉升起的新星——循环神经网络(part1)

作者介绍:Hazem,机器学习以及深度学习爱好者 Blog:https://thebeautyofml.wordpress.com/ 当你实践机器学习方法的时候,我确信没有什么是比循环神经网络更让你激动的了.循环神经网络不仅是最强大,最成功的技术,它还是众多神经网络技术中最幸运的.尽管在大多数情况下,人们并不将之视为深度学习技术,今天我们介绍的研究仍然大量采用循环神经网络.循环神经网络的诞生要追溯到20世纪80年代,但是也就是随着深度学习技术的火爆,该技术才真正的蓬勃发展. 引言 在介绍循环神经

如何实现模拟人类视觉注意力的循环神经网络?

我们观察PPT的时候,面对整个场景,不会一下子处理全部场景信息,而会有选择地分配注意力,每次关注不同的区域,然后将信息整合来得到整个的视觉印象,进而指导后面的眼球运动.将感兴趣的东西放在视野中心,每次只处理视野中的部分,忽略视野外区域,这样做最大的好处是降低了任务的复杂度. 深度学习领域中,处理一张大图的时候,使用卷积神经网络的计算量随着图片像素的增加而线性增加.如果参考人的视觉,有选择地分配注意力,就能选择性地从图片或视频中提取一系列的区域,每次只对提取的区域进行处理,再逐渐地把这些信息结合起

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

循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/,在这篇文章中,加入了一些新的内容与一些自己的理解.   循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Proce