https://www.toutiao.com/a6714260714988503564/

从这篇文章开始,有三AI-NLP专栏就要进入深度学习了。本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN)。首先,会介绍RNN提出的由来;然后,详细介绍RNN的模型结构,前向传播和反向传播的过程;最后,讨论RNN的特点及其优劣势。

作者 | 小Dream哥

编辑 | 言有三

完整的NLP深度学习介绍,应该从反向传播(BP)开始,进而介绍深度神经网络(DNN),卷积神经网络(CNN)也是必不可少的内容。鉴于有三AI已经发布了大量的CV相关的文章,其中必有相关的介绍。所以,在NLP专栏就暂不介绍相关的内容了。如果有需要的同学,可以留言提出来。

1 引言:RNN

对于一些序列输入的信息,例如语音、语言等,不同时刻之间的输入存在相互的影响,需要一种模型能够“记忆”历史输入的信息,进而对整个序列进行完整的特征提取和表征。

循环神经网络(RNN)就是面对这样的需求提出来的,它能够“记忆”序列输入的历史信息,从而能够较好的对整个序列进行语义建模。

目前,RNN及其变种在NLP领域有着广泛的应用。语音识别、对话系统、机器翻译、情感分析等等领域,在产业界,RNN及其变种都是最主要的特征提取工具。

关于RNN的特性,这里先不做太多理论上的说明,等介绍完其结构、前向传播和反向传播后我们再来讨论。

基于篇幅的限制,本文会先介绍最基本的RNN模型结构和原理,LSTM会在下一篇文章中做详细的介绍。

2 RNN的结构

如上图所示,是RNN的结构图。相较于CNN繁杂的卷积运算过程和复杂的网络层次,RNN的模型结构看上去相当的简洁。同样的,RNN模型的结构也分为输入层(Input Layer)、隐藏层(Hidden Layer)和输出层(Output Layer)。图中的箭头表示数据的流动,需要注意的是在隐藏层,有一个回流的箭头,这是这个箭头的作用,使得RNN具有了“记忆”的能力。

这样看,同学们可能还无法看清楚数据在RNN模型内到底是如何流动的。我们将RNN模型的单元按时间展开,如下图所示:

图片来自:https://www.nature.com/articles/nature14539

可以看到,不同时刻的数据x_t与上一时刻的状态s_(t-1),从输入层输入,经过一系列运算(激活函数)之后,得到该时刻的状态s_t,s_t再经过矩阵运算得到该时刻的输出o_t,同时t时刻的状态s_t会传给下一时刻的输入层。

通过这种方式,任意时刻的序列输入都会包含前面所有时刻的状态信息,就实现了“记忆”的目的,实际就是一种残差的结构。

需要注意的是,这里所有的RNN结构单元是权重共享的,用大白话说,就是只有一个RNN单元。

下面我们来详细看看数据的流动过程,也就是RNN的正向传播与反向传播过程。

3 RNN的正向传播

RNN的正向传播过程,就是通过输入数据x_t,求该时刻的RNN单元状态(Cell State)s_t以及输出o_t的过程。

我们先来看s_t

U和W是权重参数,f是激活函数,激活函数有sigmoid、relu以及tanh等。

o_t的计算过程为:

V是权重参数,g是输出函数,因为通常是预测类别,所以一般是softmax。

4 RNN的反向传播

下面我们基于RNN的正向传播过程来介绍下RNN的反向传播过程。RNN的反向传播与DNN的反向传播的基本理论是一致的。差别在于,因为RNN是序列的输入,因此其反向传播是基于时间的,叫BPTT(Back PropagationThrough Time)。

与DNN一致,反向传播的过程其实就是更新参数U,W,V的过程。知道反向传播的同学应该知道,更新,W,V其实就是求梯度。

用L_t表示t时刻的模型损失,则输入完一个序列后的总损失值为:

我们先来看参数V的更新,根据偏导公式,

损失函数通常为交叉熵,因此,

再来看看W和U的更新,像DNN的反向传播一样,我们引入一个中间变量,暂称之误差delta,t时刻的误差delta_t:

我们的目标是要得到一个递推公式,用delta_(t+1)来表示delta_t,注意这里激活函数用的是tanh函数。

最后时刻的误差可以表示为:

这样就可以通过delta_T一步一步得到所有时刻的误差。

那么,怎么通过误差得到W和U的梯度呢?

罗列了一大堆的公式,肯定有同学看花了眼。公式推导有不明白的地方,没有关系,我们暂且先放下,后面再慢慢的思考,最重要的是理解反向传播时,梯度更新的思想和技巧。下面我带着大家总结一下这个过程,相信你能获益匪浅。

1.正向传播,求得所有时刻的x_t,o_t,s_t

2. 根据梯度公式,求V的梯度

3. 求得T时刻的误差delta_T

4.根据误差的递推公式,求得所有时刻的误差delta_1,delta_2,...,delta_T

5. 根据梯度公式,和上述误差值求得W的梯度

6. 根据梯度公式,和上述误差值求得U的梯度

7. 更新权重参数

总结

上文详细讲述了RNN的模型结构及其正向和反向传播过程。

RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失的问题,当序列很长的时候问题尤其严重。虽然同选择合适的激活函数等方法能够一定程度的减轻该问题。但人们往往更青睐于使用RNN的变种。

因此,上面的RNN模型一般都没有直接应用的领域。在语音识别,对话系统以及机器翻译等NLP领域实际应用比较广泛的是基于RNN模型的变种。

「NLP」 深度学习NLP开篇-循环神经网络(RNN)相关推荐

  1. [人工智能-深度学习-48]:循环神经网络 - RNN是循环神经网络还是递归神经网络?

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. [人工智能-深度学习-52]:循环神经网络 - RNN的缺陷与LSTM的解决之道

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  3. 深度学习 实验七 循环神经网络

    文章目录 深度学习 实验七 循环神经网络 一.问题描述 二.设计简要描述 三.程序清单 深度学习 实验七 循环神经网络 一.问题描述 之前见过的所以神经网络(比如全连接网络和卷积神经网络)都有一个主要 ...

  4. 【NLP】 深度学习NLP开篇-循环神经网络(RNN)

    从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN).首先,会介绍RNN提出的由来:然后,详细介绍RNN的模型结构,前向传播和 ...

  5. 《深度学习》之 循环神经网络 原理 超详解

    循环神经网络 一.研究背景 1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回 ...

  6. 「数据集」深度学习从“数据集”开始

    https://www.toutiao.com/i6695876104390967820/ 数据是深度学习的输入,很重要而又容易被人忽视,而且缺乏系统性的介绍资料,从这个板块开始,我们来给大家系统性的 ...

  7. 《动手学深度学习》task3_3 循环神经网络进阶

    目录 GRU GRU 重置门和更新门 候选隐藏状态 隐藏状态 GRU的实现 载入数据集 初始化参数 GRU模型 训练模型 简洁实现 LSTM 长短期记忆 输入门.遗忘门和输出门 候选记忆细胞 记忆细胞 ...

  8. 深度学习TensorFlow2,循环神经网络(RNN,LSTM)系列知识

    一:概述 二:时间序列 三:RNN 四:LSTM 一:概述 1.什么叫循环? 循环神经网络是一种不同于ResNet,VGG的网络结构,个人理解最大的特点就是:它通过权值共享,极大的减少了权值的参数量. ...

  9. [人工智能-深度学习-55]:循环神经网络 - 样本数据的几种编码方式:OneHot、ASCII、词向量word2vec

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

最新文章

  1. 实现计时、时钟,实时获取当前年月日时分秒,记录时间(获取当前的时间,开始计时,计时过程相当于你的电脑时钟)0000年00月00日 00:00:00
  2. MongoDB【快速入门】
  3. 所罗门王之梦(程序员羊皮卷读书笔记)
  4. JDK源码学习笔记——TreeMap及红黑树
  5. mysql索引抽密度_使用python脚本从abaqus输出数据库获取元素密度
  6. vue.js tutorial for beginner [Is it possible for us to learn vue.js in a minute?]
  7. 《知识图谱》2020综述论文,18位作者, 130页pdf,547篇参考文献
  8. php魔术方法__call
  9. 如何成为信息安全专家
  10. latex参考文献,首字母大写
  11. SQL语句 获取系统日期
  12. 智能雷达感应人体存在,照明雷达技术应用,雷达模块技术方案
  13. AH8691_POE交换机/分离器IC_30V-65V1A-3A_大电流POE管理芯片
  14. win7抓取计算机窗口存于位图文件,电脑按printscreen截屏后 图片会保存在哪里?-win7截图,win7电脑自带的截图快捷键...
  15. 初一计算机知识点都教啥,10分钟试讲几个知识点?初中信息技术教师招聘面试试讲教案真题:补间动画...
  16. codeforces-1734C - Removing Smallest Multiples
  17. 117道Java面试题及答案(大多都是项目里面所用到的技术点)
  18. 简单的android小程序计算机,Android实现简易计算器小程序
  19. getopt()函数简介
  20. appearance

热门文章

  1. pandas loc iloc(self index location 即按照行索引来获取数据)
  2. tensorflow2.0 RNN文本预测
  3. tensorflow实战google深度学习框架在线阅读
  4. 社会工程学到底有多可怕
  5. 总也学不会Linux命令行?这本新书大概率能拯救你!
  6. 带您走进松本行弘的程序世界
  7. 基于Pytorch的动态卷积复现
  8. ubuntu 16.04 多个python版本切换
  9. 比CycleGAN更强的非监督GAN----DistanceGAN
  10. 樱木花道为原型,丰田做了个投篮机器人!完虐人类选手,还创下了吉尼斯世界纪录...