搞懂RNN

文章目录

    • 1 什么是RNN
    • 2 LSTM
    • 3 Training
      • 3.1 Learning Target
      • 3.2 为什么难train
    • 4 应用举例
      • 4.1 Many To One
      • 4.2 Many To Many
      • 4.3 其他

本文为李弘毅老师【Recurrent Neural Network(Part I)】和【Recurrent Neural Network(Part II)】的课程笔记,课程视频来源于youtube(需翻墙)。
下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

1 什么是RNN

顾名思义,RNN就是一个不断循环的神经网络,只不过它在循环的过程当中是有记忆的,这也是发明RNN的初衷,就是希望神经网络在看一个序列的输入的时候可以考虑一下前面看过的内容。

我们以Slot Filling来举例。Slot Filiing就是填空的意思,比如今天有一个旅客说了一句"I would like to arrive Taipei on November 2nd",我们的订票系统就需要从这句话中找到"目的地"和"期望的到达时间"这两个slot。而帮助订票系统来解析这个句子的,也就是我们的RNN模型。
1
RNN是怎么运作的呢?简单粗暴地来说,就比如我们先往RNN里塞进一个"arrive"和一个随机初始化的状态向量a0a^0a0,然后RNN会输出一个output(yiy^iyi)和一个hidden state(aia^iai)。output用来表示"arrive"这个词在每个slot中的概率,hidden state是一个向量,包含着看过"arrive"之后,模型自己记下来的信息,然后再把这个hidden state和下一个输入"Taipei"塞进RNN里,如此反复,直到把整个句子看完。这就是一个最最最简单的RNN的运作流程,aia^iai就表示着RNN的记忆。不过也正是因为RNN需要记忆,所以RNN没法并行计算。
2
市面上两种RNN的记忆方法,一种是利用hidden state来当作记忆,叫做"Elman Network",另一种是利用"output"当作记忆,叫做"Jordan Network"。据说,output是有label在监督的,不像hidden state那么自由,所以"Jordan Network"的效果会好一些。不过,市面上也是有把两者结合起来的记忆方法的,名字就不知道了。
3
当然,这样的记忆只是单向的,有些时候句子的理解是需要句子后面的一些词汇的辅助的。为了解决这个问题,也就有了双向的RNN。双向的RNN的两个方向是可以并行计算的。下面这幅图应该是比较清楚的了,每个output是结合了从头到尾和从尾到头两个方向的output。
4

2 LSTM

市面上在使用的RNN并不是上述那么简单的,其中LSTM是比较常用的一种方法。LSTM的每一个cell的结构如下图所示,它吃四个input,吐出一个output。四个input分别是该time step的输入、控制input gate的信号、控制forget gate的信号以及控制output gate的信号。最中间的那个memory cell是用来存储之前序列留下的记忆信息的。input gate用来决定要不要接收这个输入,forget gate用来决定要不要使用之前的记忆,output gate用来决定要不要输出这个输出。
5
这么说可能还是有点糊涂,看下面这张图吧。比如我们某个time step的输入为xtx^txt,首先这个xtx^txt会分别乘以一个矩阵得到LSTM需要的四个输入。
z=Wxt+bzf=Wfxt+bfzi=Wixt+bizo=Woxt+boz = Wx^t+b\\ z^f = W^fx^t+b^f\\ z^i = W^ix^t+b^i\\ z^o = W^ox^t+b^o z=Wxt+bzf=Wfxt+bfzi=Wixt+bizo=Woxt+bo

然后,ziz^izi会经过一个激活层,来控制输入zzz,我们把这个中间量记作inputinputinput吧。
input=σ(zi)∗zinput = \sigma(z^i)*z input=σ(zi)z

同时,zfz^fzf也会经过一个激活层,来决定是否要使用之前的记忆ct−1c^{t-1}ct1,我们记这个中间变量叫做memorymemorymemory吧。
memory=σ(zf)∗ct−1memory = \sigma(z^f)*c^{t-1} memory=σ(zf)ct1

这个inputinputinputmemorymemorymemory会相加在一起,作为输出的结果,这个结果由经过一层激活层的zoz^ozo来控制。这个输出我们叫做hidden state(hhh)。
h=σ(zo)∗σ(input+memory)h = \sigma(z^o)*\sigma(input+memory) h=σ(zo)σ(input+memory)
最后的结果yty^tyt一般还要来一层全连接。
yt=Wyhy^t = W^yh yt=Wyh
6
不过这只是一个time step,LSTM在多个循环的时候,长下面这样。
7
可见,实际情况下,我们的输入并不是xtx^txt,而是xtx^txthth^thtct−1c^{t-1}ct1的结合。其中,利用ct−1c^{t-1}ct1的这个操作被称为peehole。

而现在主流的框架之间的实现,也略有差别,比如pytorch的实现就没有利用peehole,激活层也有一些区别,不过整体的思路是完全一致的。

3 Training

3.1 Learning Target

在进行训练的时候,我们需要一个目标。这个目标其实是需要根据实际的应用场景来定的。比如,我们还是用上面订票系统的例子,我们的每一个time step的输出是一个概率向量,分别表示着[“other”, “dest”, “time”]的概率大小。我们的label就是一个one-hot encoding的向量,比如"arrive"的label中"other"的标签为1,其他为0;"Taipei"的label中"dest"的标签为1,其他为0;"on"的label中"other"的标签为1,其他为0;以此类推。然后用prediction算下cross entrophy loss就行了。

而RNN的反向传播也是和其他的神经网络一样,是可以用梯度下降来做的。不过,因为它是有时间顺序的,所以计算时略有不同,得要用一个叫做BPTT(Backpropagation through time)的方法来做,这里不详述了。总之就是可以和其他网络一样train下去。想了解的可以看下吴恩达的RNN W1L04 : Backpropagation through time。
8

3.2 为什么难train

虽然RNN也是和正常的神经网络那样可以用gradient descent不断地更新参数来train下去,但在RNN刚出来的时候,几乎没有人可以把它train出来,往往会得到一条如下图绿色曲线这样的结果。只有一个叫做Razvan Pascanu的人,可以train出那条蓝色的曲线。其实原因时因为RNN的loss space非常陡峭,参数微小的变动,可能引起loss极大的改变。Razvan Pascanu在他写博士论文的时候,把他一直可以train出好结果的秘诀公布了出来,那就是gradient clipping,即人为地把gradient的大小限制住了。没错就是这么简单的一个技巧。
9
但究竟为什么RNN的梯度会发生这么大的变化呢?我们来举个例子说明一下。假如我们有一个全世界最简单的RNN,它输入的weight是1,输出的weight也是1,用来memory的weight为www,那么当我们输入一个长度为1000,且只有第一个元素为1,其余都为0的序列时,最后一个time step的输出就为y1000=w999y^{1000}=w^{999}y1000=w999

这是一个什么概念呢?比如我们的w=1w=1w=1,那么y1000=1y^{1000}=1y1000=1。而此时,www只要稍稍变大一点,那么y1000y^{1000}y1000就会产生很大的变化,比如w=1.01w=1.01w=1.01时,y1000=20000y^{1000}=20000y1000=20000。这时候也就会发生所谓的梯度爆炸。而当www降到1一下时,y1000y^{1000}y1000又一直变为0了,这也就是所谓的梯度消失。

而这一切的一切都是因为RNN的参数在循环的过程中被不断的重复使用。
10
LSTM在一定程度上是可以解决梯度消失的问题的。为什么LSTM可以解决梯度消失?我感觉李老师这里还是有点没讲清楚,推荐看下这篇blog(需翻墙)。一句话就是,传统的RNN的反向传播操作(BPTT)有个连乘的东西在,在LSTM的BPTT里是连加的,然后LSTM又有forget gate这个门在,可以使得相隔较远的序列不相互影响。

简单来说就是用clip可以缓解梯度爆炸,用LSTM可以缓解梯度消失。

我有一点很想知道的是,发明LSTM的大佬,是为了解决梯度消失的问题而发明了LSTM呢?还是发明了LSTM之后,发现可以缓解梯度消失?这个也真是太6了~

4 应用举例

RNN的应用范围非常广泛,这里简单列举一下李老师视频中提到的一些例子。

4.1 Many To One

  • 情感分析。输入一段评论,输出该段评论是好评还是差评。
  • 关键信息提取。输入一篇文章,输出该文章中的关键信息。

4.2 Many To Many

  • 语音识别。输入一段语音,输出对应的文字。
  • 语言翻译。输入一段某国的文字或语音,输出一段另一个国家的对应意思的文字或语音。
  • 聊天机器人。输入一句话,输出回答。

4.3 其他

  • 句子文法结果分析。输入一个句子,输出该句子的文法结构。
  • 句子自编码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bp神经网络预测_股指期货价格变动趋势往往反映的是股票价格的走势,因此BP神经网络对股指期货价格的准确预测就是对股票价格的准确预测。...

一只猫の生活态度对于投资者而言,利用BP神经网络模型对股指期货价格进行准确预测,可以帮助投资者构建较佳的投资组合,从而获取较好的投资收益,规避系统风险;对于国家而言,准确预测股指期货价格走势&#xf…

Mongoose aggregate 多表关联查询

1. 查询每个order订单中的所有orderItem(多表关联查询) order.js: var mongoose require(./db.js)var OrderSchema mongoose.Schema({order_id: String,uid: Number,trade_no: String,all_price: Number,all_num: Number })var OrderModel mongoose…

搞懂Transformer

文章目录1 内容简述2 seq2seq的常用模块3 Self-attention4 Multi-head Self-attention5 Positional Encoding6 Transformer参考资料文为李弘毅老师【Transformer】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自…

excel计算二元线性回归_怎么看懂Excel线性回归参数

虽然之前用python做线性回归的时候看上去好像很简单,但是直到我在excel上实践了线性回归,发现有很多指标值得去参考,对于在python上实现有指导作用。打开excel2016,先找个数据我们这里直接选择做线性回归,在菜单栏选择…

冲刺阶段 day 6

项目进展:学生管理这部分已经进展的差不多了,调试了几遍,改了几个小Bug之后就没有什么问题了,基本完成,如若后续还有一些新的功能到时候再自行加入。明天开始教师部分。 存在问题:我觉得我们的项目还是比较课堂,比较中…

Chapter2-1_Voice Conversion(Feature Disentangle)

文章目录1 什么是Voice Conversion2 实际实现中的细节3 根据数据集分类4 Feature disentangle5 训练技巧本文为李弘毅老师【Voice Conversion - Feature Disentangle】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均…

1 0.99999的悖论_无限小数与芝诺悖论

问题昨天晚上,小学6年级的外甥女从数学课外辅导班补习回来,兴冲冲的对家里人说,哎,我发现了一个数学的大bug啊。你说1/3不是一个无限循环小数0.33333...,那么三个1/3加起来,不就是0.99999...吗?…

Mongoose 中使用 populate 实现关联查询

一、Mongoose populate 官方文档 https://mongoosejs.com/docs/populate.html 二、Mongoose populate 关联查询 1、定义 ref var ArticleSchema new Schema({ title:{type: String, unique: true},cid : {type: Schema.Types.ObjectId, ref:ArticleCate //model 的名称 }, …

FPGA开发全攻略——概念篇

原文链接: FPGA开发全攻略连载之一:FPGA为什么这么热? FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识? FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1) FPGA开发全…

vue @input带参数_Vue 全家桶开发的一些小技巧和注意事项

前言用 vue 全家桶开发一年多了,踩过不少坑,也解决了很多的问题,把其中的一些点记录下来,希望能帮到大家。以下内容基于最新版的 vue vuex vue-router axios less elementUI,vue 脚手架是 vue-cli3。css 的 scope…

Chapter2-2_Voice Conversion(CycleGAN and StarGAN)

文章目录1 内容简述2 CycleGAN3 StarGAN本文为李弘毅老师【Voice Conversion - CycleGAN and StarGAN】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删…

cookie与session原理详解

一、 Cookie cookie:浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据。 cookie中的数据是以域名的形式进行区分的。cookie中的数据是有过期时间的,超过时间数据会被浏览器自动删除。cookie中的数据会随着请求被自动发送到服务器端。…

eclipse的servlet默认不执行index_MySQL之索引及执行计划分析

mysql官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。索引就是排好序的快速查找数据结构一般来说索引本身也很大不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上平时所说的…

Chapter3-1_Speech Separation(Deep Clustering, PIT)

文章目录1 内容简述2 评价指标2.1 Signal-to-noise ratio (SNR)2.2 Scale invariant signal-to-distortion ratio (SI-SDR)2.3 其他的评价指标3 Permutation Issue4 Deep Clustering5 PIT本文为李弘毅老师【Speech Separation - Deep Clustering, PIT】的课程笔记,课…

Joi验证模块的使用

1. 安装 官网中文文档:https://joi.dev/api/?v12.1.0#validatevalue-schema-options-callback //下载14.3.1 npm install 14.3.1注意:下载14.3.1,在npm install joi的时候默认下载的是最新版本 joi17.1.1,对于一些API高版本会舍弃从而出现…

Chapter3-2_Speech Separation(TasNet)

文章目录1 TasNet总体架构2 Encoder和Decoder3 Separator4 TasNet回顾5 More5.1 Unknown number of speakers5.2 Multiple microphones5.3 Visual information本文为李弘毅老师【Speech Separation - TasNet】的课程笔记,课程视频youtube地址,点这里&…

Node 中的开发环境与生产环境 和 使用Morgan打印请求信息

一、什么是开发环境与生产环境 环境,就是指项目运行的地方,当项目处于开发阶段,项目运行在开发人员的电脑上,项目所处的环境就是开发环境。当项目开发完成以后,要将项目放到真实的网站服务器电脑中运行,项…

Chapter4-1_Speech_Synthesis(Tacotron)

文章目录1 TTS before End-to-end2 Tacotron2.1 Encoder2.2 Attention2.3 Decoder2.4 Post processing3 How good is Tacotron?本文为李弘毅老师【Speech Synthesis - Tacotron】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中…

第三方模块config的使用

作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境, 并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动…

Chapter4-2_Speech_Synthesis(More than Tacotron)

文章目录1 Mispronunciation2 More information for Encoder3 Attention4 Fast Speech and DurIAN5 Dual Learning5 Controllable TTSSpeaker EmbeddingGST-TacotronTwo-stage Training本文为李弘毅老师【Speech Synthesis - More than Tacotron】的课程笔记,课程视…