【深度学习】李宏毅2021/2022春深度学习课程笔记 - Recurrent Neural NetWork(RNN)

news2024/11/25 22:38:20

文章目录

  • 一、Slot Filling
  • 二、Recurrent Neural NetWork(RNN)
  • 三、Bidirectional RNN(双向RNN)
  • 四、Long Short Term Memory(LSTM)
  • 五、Learning Target
  • 六、RNN 很难 Train
  • 七、Helpful Techniques
    • 7.1 LSTM
    • 7.2 GRU
    • 7.3 Others
  • 八、Many To One
    • 8.1 Sentiment Analysis 情绪分析
    • 8.2 Key Term Extraction 关键词提取
  • 九、Many To Many(Output is shorter)
    • 9.1 Speech Recognition 语音辨识
  • 十、Many To Many(No Limitation)
  • 十一、Beyond Sequence
  • 十二、Sequence To Sequence Auto Encoder
    • 12.1 Text
    • 12.2 Speech
  • 十三、Demo:Chat-bot 聊天机器人
  • 十四、Attention-based Model
  • 十五、Reading Comprehension 阅读理解
  • 十六、Visual Question Answering 可视化答题
  • 十七、Speech Question Answering 语音问题解答
  • 十八、RNN vs Structured Learning


一、Slot Filling

假设一个人说了这样一句话 “I would like to arrive Taipei on November 2nd” ,假设有两个 Slot : 目的地和到达时间。那么 Slot Filling 的任务就是 识别这句话中每个词汇对应属于哪个 Slot,例如 Taipei 属于 目的地,November 2nd 属于 到达时间,其他词汇不属于任何 Slot

在这里插入图片描述

想实现这个效果,最简单的想法就是,直接将词汇转化为向量传给一个 全连接网络,输出是词汇属于每个 Slot 的概率

在这里插入图片描述

那么怎么将词汇转化为向量呢?可以用1-of-N Encoding,1-of-N Encoding中有一个存有很多词的词典,然后我们可以用类似one-hot编码的方式根据词典将词汇转化为向量

在这里插入图片描述

但是世界上的单词太多了,这样会导致词典过于庞大,所以我们可以只放一些出现频率较高的单词到词典里,其余基本不会出现的词统一用“other”代替(如下图所示)

在这里插入图片描述

还可以用单词的前后缀来构造向量

在这里插入图片描述

但是,使用单纯使用全连接网络的方法解 Slot Filling 问题会出现下图所示的问题。第一句话中的“Taipei”是目的地,但是第二句话中的“Taipei”却是出发地。两个完全相同的单词在不同的语句中,却应该属于不同的 Slot,这相当于要让模型在输入相同词汇的情况下有时候输出目的地,有时候输出起始地。对此,全连接网络表示:臣妾做不到呀~

在这里插入图片描述

于是我们就有了想法,有没有方法可以让神经网络具有“记忆力”,即可以记住一些上下文的咨询,帮助模型更好地理解当前词汇,输出最符合语境的结果呢 ?答案是:有的。它就是本文的主角 - Recurrent Neural NetWork(RNN),循环神经网络


二、Recurrent Neural NetWork(RNN)

那么RNN怎么做到让神经网络具有记忆的呢?其实也不难,其中一个想法就是,将同层中,上一个词汇的 Embedding 作为 当前词汇的 额外输入,这样就具有了上一个词汇的信息,而上一个词汇(如果不是第一个词汇的话)又具有上上个词汇的信息,以此类推,当前词汇就具有了上文所有词汇的信息。

这种以上一阶段,同层的 输出作为当前额外输入的 网络结构 称之为 Elman Network(如下图所示)

在这里插入图片描述

还有一种网络结构,它是以上一阶段最后的输出作为当前的额外输入,称之为 Jordan Network。通常 Jordan Network 具有更好的表现,可能是因为最后的输出比中间层的输出具有更具体完备的特征,即信息更有用。

在这里插入图片描述


三、Bidirectional RNN(双向RNN)

上面讲的是单向的RNN,即每一阶段只额外获取了上一阶段的咨询,也就是只对上文有记忆。

下面我们要讲对上下文都有记忆的双向RNN。其实思路很简单,就是一层正向走,一层反向走,然后对应位置的输出合在一起传给线性层进行分类,输出预测类别即可

如下图所示,上面的链是从语句的最后一个词开始,往前走。下面的链是从语句的第一个词往后走,然后对应位置的输出结合在一起,共同输出 y

在这里插入图片描述


四、Long Short Term Memory(LSTM)

Long Short Term Memory(LSTM),中文:长短期记忆网络。注意哈,这里的长短期记忆不是指长期或短期的记忆(我一开始就是这么认为的),其实是长的短期记忆的意思,也就是说LSTM其实还是短期记忆,只是稍微长了那么一些的短期记忆而已!

下面用一个形象的例子介绍一下 LSTM。我们前两节介绍的RNN的Memory都是来者不拒,统统记忆的,但是LSTM不一样,LSTM有三个门:

  • 第一个门:输入门。用来控制信息传入记忆的程度
  • 第二个门:输出门。用来控制记忆输出的程度
  • 第三个门:遗忘门。用来控制保留原有记忆的程度

这三个门都是网络自己学出来的,也就是说LSTM会在训练过程中不断学习怎么调节这三个门的参数,让它们合理的开关,这样可能可以过滤或遗忘掉不重要的上下文咨询,从而提升模型效果

在这里插入图片描述

下面是一个LSTM单元的实际结构。来自上一阶段的输出 z z z 作为当前阶段的输入, z z z 经过激活函数后变为 g ( z ) g(z) g(z) g ( z ) g(z) g(z) 再受到输入门影响,变为 g ( z ) f ( z i ) g(z)f(z_i) g(z)f(zi)。再看中间的蓝色部分,此时它还是原本的历史信息 c c c,经过遗忘门影响得到 c f ( z f ) cf(z_f) cf(zf),然后 g ( z ) f ( z i ) + c f ( z f ) g(z)f(z_i)+cf(z_f) g(z)f(zi)+cf(zf) 得到 c ′ c' c c ′ c' c 就是新的历史信息,然后讲 c ′ c' c输出,经过激活函数变为 h ( c ′ ) h(c') h(c),再受到输出门影响变为 h ( c ′ ) f ( z o ) h(c')f(z_o) h(c)f(zo),于是就得到了最终的输出: a = h ( c ′ ) f ( z o ) a=h(c')f(z_o) a=h(c)f(zo)

在这里插入图片描述

那么LSTM单元在神经网络单元里是怎么连接的呢?下面先看普通的神经网络神经元和输入之间的连接

在这里插入图片描述

然后再把LSTM当作一个特殊的神经元,从下图我们可以看出,由于LSTM多出了三个门,所以输入需要额外地与LSTM进行3次连接,即LSTM需要4个Input,这也就意味着LSTM的参数量是普通神经元的4倍

在这里插入图片描述

实际中,假设 第 t t t 个词汇的向量输入为 x t x^t xt,首先会将其进行变换为 z z z z z z 的某一个维度数就等于它对接的那一层的LSTM单元的数量,对应LSTM的输入。

在这里插入图片描述

x t x^t xt 还会进行变换为 z i z^i zi,对应LSTM的输入门

在这里插入图片描述

同样的, x t x^t xt 还会进行变换为 z f z^f zf z o z^o zo,分别对应LSTM的遗忘门和输出门

在这里插入图片描述

接下来,让我们用结构图表示一下LSTM的传播流程(按照下图右边的LSTM结构,下图左边, z z z 出来那根线应该少了个激活函数,我用红笔画出来了)

在这里插入图片描述

然后是同层之间,LSTM单元的连接(如下图所示),即不同词汇间的连接,记忆的传递

在这里插入图片描述

然后是多层的LSTM

在这里插入图片描述


五、Learning Target

每个词汇都有一个概率输出,表示其属于每个Slot的概率。损失函数就用交叉熵损失。目标是使得预测整个语句的交叉熵总和最小。

在这里插入图片描述


六、RNN 很难 Train

事实上,RNN是很难Train的,在RNN刚被提出时,很少有人能Train起来。其Loss曲线通常如下图绿线所示,蓝线是正常的Loss曲线。

在这里插入图片描述

为什么RNN如此难 Train ? 有人做了相关研究,发现是因为RNN的error surface的某些区域非常陡峭,在陡峭的区域,就可能导致参数只改动一点,却使得Loss产生巨大的变化。假设从橙色的点用gradient decent 开始调整参数两次,正好跳过悬崖,loss暴增;有时可能正好踩在悬崖上,悬崖上的gradient 很大,之前的都很小,可能learning rate就很大,很大的gradient 和learning rate就导致参数飞出去了。

Tips:可以采用clipping策略,当gradient 大于某个值的时候,直接令梯度等于该值,防止梯度过大。同样的方法可以用来防止梯度过小。

在这里插入图片描述

下面用一个详细的例子让大家感受一下。假设有一个包含1000个RNN的单层神经网络,假设除了第一个RNN单元的输入为1,其余均为0,假设所有RNN单元均没有偏置 b 。

  • 当所有RNN单元的w为1时, y 1000 = 1 y^{1000}=1 y1000=1
  • 当所有RNN单元的w为1.01时, y 1000 ≈ 20000 y^{1000}≈20000 y100020000

可以看出,w仅仅改变了0.01,就导致 y 1000 y{1000} y1000 的输出相差近20000倍。

在这里插入图片描述


七、Helpful Techniques

那么针对第六节提出的问题,有什么技巧可以帮我们解决该问题呢?本节就来介绍解决该问题的技术。

7.1 LSTM

其实,使用LSTM就可以解决这个问题,它可以让 error surface 不要那么陡峭,从而缓解该问题

问:为什么LSTM可以让梯度变小呢?(梯度变小的意思就是不那么陡峭)
答:RNN中,每个时间点,Memory里的咨询会被覆盖。但是在LSTM中,它的Memory是加权叠加性的,所以原来存在Memory里的值基本都会有所残留。(这也是因为,遗忘门很少情况为0)

在这里插入图片描述

7.2 GRU

GRU 和LSTM一样,也可以解决该问题

想了解GRU工作原理可以参考这篇文章: 人人都能看懂的GRU

在这里插入图片描述

7.3 Others

在这里插入图片描述


八、Many To One

之前讲的 Slot Filling 的例子是 Many To Many 的,即输入是向量序列,输出也是向量序列且长度和输入相同

那么 Many To One 指的就是 输入是向量序列,但是输出仅仅只是一个向量 的问题,下面会讲 Many To One 的实际应用

8.1 Sentiment Analysis 情绪分析

在这里插入图片描述

8.2 Key Term Extraction 关键词提取

在这里插入图片描述


九、Many To Many(Output is shorter)

9.1 Speech Recognition 语音辨识

常用的方法叫CTC,即定义一个代表空的符号,然后在得到Output的时候,讲空符号去掉,剩下的就是真正的Output

在这里插入图片描述

在用CTC法进行Train的时候,我们认为去掉代表空的符号之后是“好棒”的所有排列组合都是正确的

在这里插入图片描述

下面是一个CTC的例子,最终得到识别结果为 “HIS FRIEND’S”

在这里插入图片描述


十、Many To Many(No Limitation)

在这里插入图片描述


十一、Beyond Sequence

输出树结构的数据。方法:把树结构描述成一个序列进行训练。

在这里插入图片描述


十二、Sequence To Sequence Auto Encoder

12.1 Text

在这里插入图片描述
在这里插入图片描述

12.2 Speech

讲语音编码为向量,可以用于比较语音的相似程度

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


十三、Demo:Chat-bot 聊天机器人

在这里插入图片描述


十四、Attention-based Model

在这里插入图片描述


十五、Reading Comprehension 阅读理解

在这里插入图片描述


十六、Visual Question Answering 可视化答题

在这里插入图片描述
在这里插入图片描述


十七、Speech Question Answering 语音问题解答

在这里插入图片描述


十八、RNN vs Structured Learning

可以Deep Learning,是非常强的

在这里插入图片描述

但是他们两个可以结合。即将先用RNN提取到较好的讯息,然后再传给 Structured Learning 的模型进行接下来的步骤。这样可以结合两个模型的优势。

在这里插入图片描述

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

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

相关文章

CSDN竞赛14期·12月11日考试

CSDN竞赛14期12月11日考试 1、题目名称:字符串全排列 // 请关闭中文输入法,用英文的字母和标点符号。 // 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮, //…

半入耳式蓝牙耳机哪款音质好?音质好的半入耳式蓝牙耳机推荐

对于喜欢听歌的朋友来讲,你只佛会关注到蓝牙耳机的佩戴舒适度,音质清晰这种情况,入耳式的带有耳塞,往往更加佩戴有更好的密闭性,半入耳的不完全进入耳道,佩戴更加舒适,下面整理了几款音质不错的…

[附源码]Python计算机毕业设计非处方药的查询与推荐系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Prometheus+Grafana监控一网打尽

PrometheusGrafana监控一、Prometheus介绍二、监控组件node-exportermysqld-exportercadvisorprometheus三、Grafana 展示平台docker启动配置Data sources导入Dashboard模板Linux主机监控Mysql监控Nginx监控Redis监控PostgreSQL监控Kafka监控ElasticSearch监控一、Prometheus介…

这四类项目经理一定带不好项目

项目经理就一定可以带好项目嘛?,当然不一定 失败的项目不少,除去一些本身就很坑的项目,大多项目失败,都和项目经理的个性有关。 也总结了2组极端特质: 第一,烂好人VS劳模型 第二,马…

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-059(CVE-2019-0230)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

JavaEE-多线程初阶3

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录volatile关键字wait 和 notify多线程案例单例模式饿汉模式懒汉模式volatile关键字 volatile : 易变的,易失的 vo…

关于实体类中VO、DTO、Entity的区别

关于实体类中VO、DTO、Entity的区别 1、entity 里的每一个字段,与数据库相对应, 2、vo 里的每一个字段,是和你前台 html 页面相对应, 3、dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。(DTO中拥…

leetcode: 1091. 二进制矩阵中的最短路径

1091. 二进制矩阵中的最短路径 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/shortest-path-in-binary-matrix/description/ 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通…

刚刚接触编程,纠结应该先学Python还是Java?看完心里就有数了。

准备学习编程前,你一定会打开电脑搜索一下“先学Python还是先学Java?”扑面而来的是海量回答。 如果你问一名Java程序员,肯定会建议你先学Java,因为他们认为Python像个乳臭未干的黄毛小子。但如果你问Python程序员,可…

MacOS Ventura 13.1 (22C65) 正式版带 OC 0.8.7 and winPE 双分区原版黑苹果镜像

12 月 14 日,苹果向 Mac 电脑用户推送了 macOS 13.1 更新(内部版本号:22C65),本次更新距离上次发布隔了 34 天。本次更新引入了无边记应用,旨在让用户在空白的白板式画布上进行素描、绘画和写作&#xff0c…

[附源码]Nodejs计算机毕业设计基于Web的在线音乐网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

能力评估网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): (1)高校学生评估系统用户页面设计 前台页面主要是为用户设计,经过对用户和评估系统分析,目前主要…

足球视频位置与平面坐标的转换

依赖: C# OpenCVSharp WPF Numpy 目的:解决足球场上,人物投影到二维平面的位置坐标 图A / B/ C 一、基础概念 1.1标准球场的定义: 参考:https://zh.m.wikipedia.org/zh/%E8%B6%B3%E7%90%83%E5%A0%B4图 D 1.2 配准…

m软件接收机中同步技术以及LMS-RLS自适应均衡技术的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 自适应均衡属于自适应信号处理的应用范畴,各种各样的自适应均衡算法如迫零(ZF)算法、最小均方(LMS)算法、递归最小二乘(RLS)算法、变换域均衡算法、Bussgang算法、高阶或循环统计量算…

使用CreateJS实现一个【拯救球员】小游戏,快@你的小伙伴一起来玩儿吧

拯救球员游戏需求👇核心玩法👇👇界面原型👇👇成品演示👇游戏开发1.游戏素材准备2.代码实现1.创建index.html页面2.首页转场动画实现3.添加分数倒计时4.卡片排序展示5.游戏结束世界杯开赛前夕,球…

拷贝构造,赋值运算符重载(六千字长文详解!)

c之类和对象详解 拷贝构造,赋值运算符重载 文章目录c之类和对象详解 拷贝构造,赋值运算符重载拷贝构造拷贝构造特征拷贝构造的注意赋值运算符重载运算符重载赋值重载赋值运算符的写法注意赋值重载的默认性赋值重载和拷贝赋值的区别在哪里?拷贝…

Ubuntu问题汇总

1.sudo ifconfig 找不到命令 ubuntu找不到ifconfig_猿 白的博客-CSDN博客_ubuntu ifconfig命令找不到 没有找到ifconfig的命令,需要进行安装,按照提示中的命令安装相关的工具包 sudo apt install net-tools 2.ip查找 3.重启服务器后,nvid…

记一次浏览器预览通过nginx且有权限控制的静态文件

我的需求是,后台生成了合同文件,用户需要进行预览,如果采用流的实现方式的话,会涉及到输入流、输出流,性能开销较大,所以采用的是直接访问文件,这里就涉及到一个问题,就是 需要设置…

Mobtech秒验SDK——一站式解决用户登录场景

据悉,北京中文万维科技有限公司旗下多款APP,和MobTech开发的秒验SDK达成合作,为其提供用户一键登录解决方案。 北京中文万维科技有限公司是一家立志以移动互联网阅读为发展起点的阅读互动娱乐高新技术企业,旗下拥有多款阅读类APP。…