一.递归神经网络RNN简介

BP神经网络和CNN的输入输出都是互相独立的;但是实际应用中有些场景输出内容和之前的内 容是有关联的。 RNN引入“记忆”的概念;递归指其每一个元素都执行相同的任务,但是输出依赖于输入和“记忆”
bp神经网络和卷积神经网络这两种结构有一个特点,就是假设输入是一个独立的没有上下文联系的单位。但是对于一些有明显的上下文特征的序列化输入,比如预测视频中下一帧的播放内容,那么很明显这样的输出必须依赖以前的输入, 也就是说网络必须拥有一定的”记忆能力”。为了赋予网络这样的记忆力,一种特殊结构的神经网络——递归神经网络(Recurrent Neural Network)便应运而生了
下图为RNN的工作状态图(下文会详细讲解RNN的工作原理):
同一个神经元在不同时刻的状态构成了RNN神经网络
将同一个神经元,展开为在t-1、t、t+1三个时刻的状态,这三个时刻状态构成了一个网络。RNN通过将前一时刻的数据加入运算,使神经网络具有了记忆功能

二.RNN递归神经网络工作原理

网络某一时刻的输入Xt,和之前介绍的bp神经网络的输入一样,xt是一个n维向量,不同的是递归网络的输入将是一整个序列,也就是X=[X1,…,Xt-1,Xt,Xt+1,…XT]。对于语言模型,每一个Xt代表一个词向量,一整个序列就代表一句话

RNN神经网络中的神经元进行的数学计算可由方程St=f(U×Xt+W×S(t-1))来表达,其中Xt是时间t处的输入,St是时间t处的“记忆”,f可以是非线性转换函数,比如tanh等,Ot是时间t处的输出,比如是预测下一个词的话,可能是sigmoid(softmax)输出的属于每个候选词的概率,Ot=softmax(V×St)。按照一定的时间序列规定好计算顺序,将这样带环的结构展开成一个序列网络,也就是下图一个神经元被展开(unfold)之后的结构,其中ht代表时刻t的隐藏状态,xt代表时刻t的输入。将一个神经元序列按时间展开就可以得到RNN的结构

在t=0的时刻,U,V,W都被随机初始化好,h0通常初始化为0,然后进行如下计算:
时间就向前推进,此时的状态h1作为时刻0的记忆状态将参与下一次的预测活动,也就是:

以此类推,可得任意时刻t,神经元的计算过程

上式中,f可以是tanh,relu,logistic等激活函数,g通常是softmax,也可以是其他。 值得注意的是,我们说递归神经网络拥有记忆能力,而这种能力就是通过W将以往的输入状态进行总结,而作为下次输入的辅助,可以这样理解隐藏状态:h=f(现有的输入+过去记忆总结)

RNN递归神经网络更新权重的方式

bp神经网络用到误差反向传播方法将输出层的误差总和,对各个权重的梯度∇U,∇V,∇W,求偏导数,然后利用梯度下降法更新各个权重
对于每一时刻t的RNN网络,网络的输出ot都会产生一定误差et,误差的损失函数,可以是交叉熵也可以是平方误差等等。那么总的误差为E=Σtet,我们的目标就是要求取各个权重(U、V、W)对总误差的偏导
对于输出ot=g(Vst),任意损失函数,求∇V是非常简单的,我们可以直接求取每个时刻的∂Et / ∂V,由于它不存在和之前的状态依赖,可以直接求导取得,然后简单地求和即可。对于∇W、∇U的计算不能直接求导,需要用链式求导法则。 为了使得误差E能够对U和W求偏导数,定义一个δ=∂E/∂S,首先计算出输出层的δL,再向后传播到各层δL-1,δL-1,…
某一个神经元在t时刻的δt的计算公式

只要计算出所有的δot,δht,就可以通过以下计算出∇W,∇U


下文举例说明W的梯度的计算方法:
对于时刻t+1产生的误差Et+1,计算它对于W1,W2,…,Wt,Wt+1的梯度:

反复运用链式法则,我们可以求出每一个∇W1,∇W2,…,∇Wt,∇Wt+1

在不同时刻共享同样的参数,可以大大减少训练参数,和CNN的共享权重类似。对于共享参数的RNN,我们只需将上述的一系列式子抹去标签并求和,就可以得到 :
其中 ∂+×hk/∂W 表示不利用链式法则直接求导,也就是假如对于函数f(h(x)),对其直接求导结果为:∂f(h(x))/∂x=f′(h(x)),也就是求导函数可以写成x的表达式,即将h(x)看成常数

RNN的缺陷

在上面得到的权值对总偏差的偏导的计算公式中,经过实验论证,发现该公式有一个规律:
这说明权值对总误差的偏导有一部分环节是指数模型,根据指数函数的性质,可以推测出,当η<1时,就会出现梯度消失,而当η>1时,会出现梯度爆炸

为了克服梯度消失的问题,LSTM和GRU模型便后续被推出了,LSTM和GRU都有特殊的方式存储”记忆”,以前梯度比较大的”记忆”不会像RNN一样马上被抹除,因此可以一定程度上克服梯度消失问题。

另一个简单的技巧gradient clipping可以用来克服梯度爆炸的问题,也就是当你计算的梯度超过阈值c的或者小于阈值−c时候,便把此时的梯度设置成c或−c。下图所示是RNN的误差平面,可以看到RNN的误差平面要么非常陡峭,要么非常平坦,如果不采取任何措施,当你的参数在某一次更新之后,刚好碰到陡峭的地方,此时梯度变得非常大,那么你的参数更新也会非常大,很容易导致震荡问题。而如果你采取了gradient clipping,那么即使你不幸碰到陡峭的地方,梯度也不会爆炸,因为梯度被限制在某个阈值c

NLP学习03--递归神经网络RNN相关推荐

  1. NLP学习笔记-循环神经网络RNN、情感分类、LSTM(二)

    循环神经网络和自然语言处理介绍 1. 文本的tokenization 1.1 概念和工具的介绍 tokenization就是通常所说的分词,分出的每一个词语我们把它称为token. 常见的分词工具很多 ...

  2. 深度学习之递归神经网络(Recurrent Neural Network,RNN)

    为什么有bp神经网络.CNN.还需要RNN? BP神经网络和CNN的输入输出都是互相独立的:但是实际应用中有些场景输出内容和之前的内 容是有关联的. RNN引入"记忆"的概念:递归 ...

  3. rnn 递归神经网络_递归神经网络rnn的简单解释

    rnn 递归神经网络 Recurrent neural network is a type of neural network used to deal specifically with seque ...

  4. 深度学习——结构递归神经网络(Recursive NN)

    深度学习--结构递归神经网络(Recursive NN) 1.递归神经网络介绍 目前,递归神经网络一共包含两种,一种是时间递归神经网络(Recurrent NN),另外一种是结构性递归神经网络(Rec ...

  5. 递归神经网络RNN——LSTM

    递归神经网络RNN--LSTM 1.LSTM的产生原因及优点 2.LSTM网络结构 3.LSTM工作机制 4.LSTM Attention 机制 关于LSTM模型,看懂这篇文章就OK了,不用再看别的了 ...

  6. 卷积神经网络基础:(8)递归神经网络RNN

    1.RNN网络由来 RNN:Recurrent Neural Network.递归神经网络只是在传统神经网络上进行一个改进而已. 正常流程是:输入---->隐层---->输出 (数据来了经 ...

  7. 人工智障学习笔记——深度学习(3)递归神经网络

    传统的神经网络模型中,输入层到隐含层再到输出层他们的层与层之间是全连接的,但是每层之间的节点是无连接的.这样就会造成一个问题,有些情况,每层之间的节点可能是存在某些影响因素的.例如,你要预测句子的下一 ...

  8. 零基础入门深度学习(7) - 递归神经网络

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  9. 水很深的深度学习-Task05循环神经网络RNN

    循环神经网络 Recurrent Neural Network 参考资料: Unusual-Deep-Learning 零基础入门深度学习(5) - 循环神经网络 史上最小白之RNN详解_Tink19 ...

  10. lecture7-序列模型及递归神经网络RNN

    Hinton 第七课 .这里先说下RNN有recurrent neural network 和 recursive neural network两种,是不一样的,前者指的是一种人工神经网络,后者指的是 ...

最新文章

  1. 实验四:汇编代码调用系统调用的工作过程
  2. Introduction to 3D Game Programming with DirectX 12一书学习记录(第一个例子编译错误)
  3. SpringBoot拦截器不生效
  4. 使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
  5. 2020年搜索推荐系统论文干货集锦
  6. 软件开发的微信公众号分享
  7. myftpadmin+proftpd+mysql架设ftp服务器_linux下用Proftpd搭建ftp服务器及配置方法
  8. mysql增备脚本--xtrabackup实现
  9. 系统分析员、系统架构师、项目经理的区别(转载)
  10. 上科大、腾讯提出Liquid Warping GAN,实现人体动作迁移的新高度!
  11. [Network Architecture]ResNext论文笔记(转)
  12. Win10离线 安装.net frame3.5
  13. fckeditor 2.6 php,php下 FCKeditor 2.6.6的使用和配置
  14. 无损音乐下载网站推荐
  15. xxl-job的学习使用
  16. 中国书信礼仪 (三)
  17. 如何正确安装朗文英文当代大词典(2CD版)
  18. 禅道项目改掉头部公司名
  19. 快速把照片做成MV,用什么软件好?抖音火爆效果制作
  20. 数据结构(严蔚敏)【一元多项式的运算】【C语言】

热门文章

  1. arm 基于qcamera实现_基于Arm平台的研华EPC—R4680工控机实现快速储物柜智能解决方案...
  2. android连接airprint打印机,AirPrint:iOS的打印机
  3. python3.8的用法_Python3.8对可迭代解包的改进及用法详解
  4. Vue:解决实现留言回复功能时,点击回复某一条所有回复面板都弹出
  5. ElementUI:navmenu导航中,开启vue-router 的模式后,点击触发事件而不进行路由跳转
  6. Java:面向对象编程
  7. 图形大小_光伏电池正面图形设计优化
  8. 设计模式(5)——单例模式
  9. 自动驾驶_感知_分割_车道线检测
  10. opencv数字图像处理(1) - 灰度变换函数