「NLP」 深度学习NLP开篇-循环神经网络(RNN)
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)相关推荐
- [人工智能-深度学习-48]:循环神经网络 - RNN是循环神经网络还是递归神经网络?
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- [人工智能-深度学习-52]:循环神经网络 - RNN的缺陷与LSTM的解决之道
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- 深度学习 实验七 循环神经网络
文章目录 深度学习 实验七 循环神经网络 一.问题描述 二.设计简要描述 三.程序清单 深度学习 实验七 循环神经网络 一.问题描述 之前见过的所以神经网络(比如全连接网络和卷积神经网络)都有一个主要 ...
- 【NLP】 深度学习NLP开篇-循环神经网络(RNN)
从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN).首先,会介绍RNN提出的由来:然后,详细介绍RNN的模型结构,前向传播和 ...
- 《深度学习》之 循环神经网络 原理 超详解
循环神经网络 一.研究背景 1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回 ...
- 「数据集」深度学习从“数据集”开始
https://www.toutiao.com/i6695876104390967820/ 数据是深度学习的输入,很重要而又容易被人忽视,而且缺乏系统性的介绍资料,从这个板块开始,我们来给大家系统性的 ...
- 《动手学深度学习》task3_3 循环神经网络进阶
目录 GRU GRU 重置门和更新门 候选隐藏状态 隐藏状态 GRU的实现 载入数据集 初始化参数 GRU模型 训练模型 简洁实现 LSTM 长短期记忆 输入门.遗忘门和输出门 候选记忆细胞 记忆细胞 ...
- 深度学习TensorFlow2,循环神经网络(RNN,LSTM)系列知识
一:概述 二:时间序列 三:RNN 四:LSTM 一:概述 1.什么叫循环? 循环神经网络是一种不同于ResNet,VGG的网络结构,个人理解最大的特点就是:它通过权值共享,极大的减少了权值的参数量. ...
- [人工智能-深度学习-55]:循环神经网络 - 样本数据的几种编码方式:OneHot、ASCII、词向量word2vec
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
最新文章
- 实现计时、时钟,实时获取当前年月日时分秒,记录时间(获取当前的时间,开始计时,计时过程相当于你的电脑时钟)0000年00月00日 00:00:00
- MongoDB【快速入门】
- 所罗门王之梦(程序员羊皮卷读书笔记)
- JDK源码学习笔记——TreeMap及红黑树
- mysql索引抽密度_使用python脚本从abaqus输出数据库获取元素密度
- vue.js tutorial for beginner [Is it possible for us to learn vue.js in a minute?]
- 《知识图谱》2020综述论文,18位作者, 130页pdf,547篇参考文献
- php魔术方法__call
- 如何成为信息安全专家
- latex参考文献,首字母大写
- SQL语句 获取系统日期
- 智能雷达感应人体存在,照明雷达技术应用,雷达模块技术方案
- AH8691_POE交换机/分离器IC_30V-65V1A-3A_大电流POE管理芯片
- win7抓取计算机窗口存于位图文件,电脑按printscreen截屏后 图片会保存在哪里?-win7截图,win7电脑自带的截图快捷键...
- 初一计算机知识点都教啥,10分钟试讲几个知识点?初中信息技术教师招聘面试试讲教案真题:补间动画...
- codeforces-1734C - Removing Smallest Multiples
- 117道Java面试题及答案(大多都是项目里面所用到的技术点)
- 简单的android小程序计算机,Android实现简易计算器小程序
- getopt()函数简介
- appearance
热门文章
- pandas loc iloc(self index location 即按照行索引来获取数据)
- tensorflow2.0 RNN文本预测
- tensorflow实战google深度学习框架在线阅读
- 社会工程学到底有多可怕
- 总也学不会Linux命令行?这本新书大概率能拯救你!
- 带您走进松本行弘的程序世界
- 基于Pytorch的动态卷积复现
- ubuntu 16.04 多个python版本切换
- 比CycleGAN更强的非监督GAN----DistanceGAN
- 樱木花道为原型,丰田做了个投篮机器人!完虐人类选手,还创下了吉尼斯世界纪录...