RNN:Recurrent Neural Network(上)

目录

1  为什么提出 RNN

1.1  什么是 Slot Filling

1.2  为什么 FFN 做不好 Slot Filling

1.3  为什么 RNN 能做好 Slot Filling

2  RNN 的整体结构

3  更高级的 RNN 结构

3.1  Deep RNN

3.2  Elman Network & Jordan Network

3.3  Bidirectional RNN


原视频:李宏毅 2020:Recurrent Neural Network (Part I)

1  为什么提出 RNN

李宏毅老师用了一个槽填充(Slot Filling)问题进行了解释。

1.1  什么是 Slot Filling

考虑以下场景:

这里有两个坑位(Slot),分别是目的地(Destination)和到达时间(Time of arrival)。槽填充(Slot Filling)要做的事情,就是从原始句子中提取有用信息,把这两个坑位(Slot)填上。

比如:Taipei 填目的地(Destination)这个坑位,November 2nd 填到达时间(Time of arrival)这个坑位。

1.2  为什么 FFN 做不好 Slot Filling

考虑 FFN 处理到 Taipei 时:

其中,输出(output)是 Taipei 分属于目的地(Destination)和到达时间(Time of arrival)这两个坑位的概率。根据原始句子,当然是 Taipei 属于目的地(Destination)的概率更高。

然而,当存在两个都包含 Taipei 的句子,但是句意完全不同时:

上图右侧是我按照自己的理解画的,不一定对

在第一句话中,Taipei 属于目的地(Destination);在第二句话中,Taipei 属于出发地(Place of departure)。然而,FFN 在处理 Taipei 时只能看到 Taipei 一词,不能看到前面的 arrive 或者 leave 。又因为模型输入(input)都是一模一样的 Taipei,所以输出结果(output)也会是一样的,即要么永远是目的地(Destination)的概率最高,要么永远是出发地(Place of departure)的概率最高。换句话说,FFN 不能根据句子的不同,灵活地判定 Taipei 是目的地(Destination)还是出发地(Place of departure)。

1.3  为什么 RNN 能做好 Slot Filling

根据上述分析可以看出,FFN 最大的问题就是看不见 Taipei 前面的单词。那我们让模型能够看见前文不就行了吗?这就引出了 RNN 模型以及 “记忆” 的概念。

“记忆” 就是指,让模型记住自己之前的处理结果,这样在处理当前输入时能够进行参考。比如,让模型记住它之前处理的是 arrive 或者 leave,那么在它处理 Taipei 时它就知道这是目的地(Destination)还是出发地(Place of departure)了。

那么 RNN 具体是怎么实现 “记忆” 的呢?如下图所示:

  • The output of hidden layer are stored in the memory.
  • Memory can be considered as another input.

这是 RNN 的两个特点。第一是,隐层的输出会被存储到 memory 中;第二是,memory 中的内容将会和下一时刻的输入(input)一起被送入到模型中。

我们再来看看 RNN 具体是如何处理输入(input)的:

上图只画了处理第一个输入 [1, 1] 的过程,后面的处理过程请自行脑补。

从这个例子中我们可以看出,即使第一个输入和第二个输入均为 [1, 1],但是输出结果竟然不同(前者是 [4, 4],后者是 [12, 12])。这是因为 RNN 不仅存储了 “记忆”(memory),还让这个 “记忆”(memory)一起作为输入(input)。

换句话说,实际的输入并不单单是一个 [1, 1],还有 “记忆”(memory)中的内容。不同时刻 “记忆”(memory)中的内容不同,那输出当然就不同了。

也正是因为 RNN 存储了 “记忆”(memory),它就不会认为 arrive 后的 Taipei 和 leave 后的 Taipei 是同一个东西啦!

为了简化例子,李宏毅老师假设每个神经元的激活函数均为线性函数,并且权重均为 1,同时没有偏置项。

2  RNN 的整体结构

事实上,1.3 节的图已经说明了 RNN 的整体结构,我们这里只是把循环给展开了:

说明:在第一个时间步输入 arrive 和 memory 的内容(初始为 0),隐层的处理结果存入 memory 中;在第二个时间步输入 Taipei 和 memory 的内容,隐层的处理结果存入 memory 中;在第三个时间步输入 on 和 memory 的内容,隐层的处理结果存入 memory 中;以此类推。

每个时间步的输出(output)均为 xxx 词属于各个坑位的概率。

虽然在 1.3 节已经讲了,但我们还是再来看看 RNN 是如何辨析 Taipei 的:

话说 values 不应该用 are 吗?不过我八百年没学英语了。。。

3  更高级的 RNN 结构

第 2 节讲的是最基础的 RNN,实际上 RNN 还有很多变形。

3.1  Deep RNN

这个名字是我随便取的,意思就是 RNN 的隐藏层可以叠加很多个:

3.2  Elman Network & Jordan Network

Elman Network 是我们在第 2 节中讲的那种 RNN,Jordan Network 的区别在于,它的 memory 存储的是输出(output)而不是隐层的输出:

传说 Jordan Network 的表现更好。因为在训练模型的时候,针对输出(output)是有目标(target)的,我们知道它学到的是什么信息;而针对隐层的输出是没有目标(target)的,我们不知道它学到的是什么信息。所以人们认为输出(output)是可知的、可控的,让它作为 memory 的内容,我们就能知道 memory 的内容是什么了。

3.3  Bidirectional RNN

双向 RNN 如下图所示:

若是单向 RNN,则每个时刻的输入只能关注到前面的内容;若是双向 RNN,则正方向让每个时刻的输入关注它前面的内容,反方向让每个时刻的输入关注它后面的内容。

双向 RNN 帮助我们关注上下文的信息。比如,在做完形填空的时候,我们既要关注前文,又要关注后文。


介于篇幅长度以及 LSTM 模型的地位,将在下一篇博客介绍 LSTM 模型。

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

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

相关文章

怎么样的布局是符合可制造性的PCB布局?

满足可制造性、可装配性、可维修性要求,方便调试的时候于检测和返修,能够方便的拆卸器件: 1)极性器件的方向不要超过2种,最好都进行统一方向等要求,如图1-1所示; 图1-1 极性器件方向统一摆放 2…

k8s的坑,从这里开始

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 以前刚接触k8s时踩了不少坑,比如这些: 问题1 1、在master节点使用kubectl命令时,报错&…

阿里云云原生弹性方案:用弹性解决集群资源利用率难题

作者:赫曦 随着上云的认知更加普遍,我们发现除了以往占大部分的互联网类型的客户,一些传统的企业,一些制造类的和工业型企业客户也都开始使用云原生的方式去做 IT 架构的转型,提高集群资源使用率也成为企业上云的一致…

20. 从零用Rust编写正反向代理,四层反向代理stream(tcp与udp)实现

wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子 项目地址 gite: https:…

【算法】串联所有单词的子串【滑动窗口】

题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。例如,如果 words ["ab","cd","ef"], 那么 "abcd…

2024 前端高频面试题之 JS 篇

JS 篇(持续更新中) 1、什么是原型、原型链?2、什么是继承?说一说有哪些?继承组合的原理及优点?3、new 操作符具体干了什么?4、js 有哪些方法改变 this 指向?5、bind 有哪些实现的注意…

通过manifest清单导入项目到gitlab中

文章目录 说明使用manifest得要求Manifest 格式演示示例 说明 从gitlab 11.2引入此功能。 GitLab 允许根据manifest清单文件(如 Android 存储库使用的清单文件)导入所需的 Git 存储库。 使用manifest得要求 GitLab 必须对其数据库使用 PostgreSQL。至少…

最终Docker6:nacos集群部署

目录 mysql容器构建 1.进入soft 文件夹,创建mysql文件夹 2.进入conf文件夹 放入my.conf 配置文件 3.运行mysql容器 4.进入script文件夹 导入 sql文件 5.进入mysql 容器 并登录 6.创建nacos 数据库并使用,运行nacos.sql文件 7.授予用户所有权限 部…

解析Linux中的VFS文件系统机制(根文件系统的由来)以及 ARM Linux启动流程-根文件系统的加载

《解析Linux中的VFS文件系统机制(根文件系统的由来)》 以及 《ARM Linux启动流程-根文件系统的加载》两篇文章都是好文章,但是第一篇缺少了rootfs的由来,让人觉得不能融会贯通,缺点火候。 第一篇文章:试图…

深入理解MyBatis中的#{ }和${ }占位符及参数传递过程

深入理解MyBatis中的#{ }和${ }占位符及参数传递过程 MyBatis是一个广泛使用的持久层框架,它以其强大的数据库访问能力和灵活的SQL映射配置而著称。在MyBatis中,#{ } 和 ${ } 是两种常用的占位符,用于构建动态的SQL语句。本文将深入研究这两种…

扭蛋机小程序搭建:互联网时代下的“潮玩经济”

近几年,潮玩文化逐渐兴起,盲盒经济闯入了各个消费者的视野中。扭蛋机不同于盲盒,包含的产品多数来自于各类热门动漫IP等,这些产品被装进一个扭蛋中,大众根据概率获得不一样的产品。扭蛋机具有产品多样、好玩不贵的特点…

【Git】实习使用记录

Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取 https://blog.csdn.net/wohu1104/article/details/105601657 浏览器可以访问github仓库,但是使用git就用不了 https://blog.csdn.net/m0_63230155/article/details/132070860 可…

Vscode安装Eslint扩展后无法实现保存自动修复

前言: 一个现有项目引入eslint时,vscode的eslint扩展会报很多错,通过打开eslint的autoFixOnSave配置自动修复。 从2.0.4版本开始,eslint扩展就移除了autoFixOnSave配置项。因为保存自动修复成为了vscode的Code Action on Save的一…

基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 双边滤波数学模型 4.2 双边滤波的特性 4.3 FPGA实现架构 5.算法完整程序工程 1.算法运行效果图预览 将FPGA数据导入到matlab对比测试: 2.算法运行软件版本 vivado2019.2 …

c# 自定义 滑块TrackBar

辛苦半天做出来的,如果觉得好用,记得点赞 效果图如下: 具体操作: 1 、添加代码(代码在下面),重新生成下整个工程,在工具栏中就出现控件,将控件拖到窗体中 2、只需要调整…

使用人工智能助手 Github Copilot 进行编程 01

本章涵盖了 AI 助⼿如何改变新程序员的学习⽅式为什么编程永远不会再⼀样了AI 助⼿如 Copilot 的⼯作原理Copilot 如何解决⼊⻔级编程问题AI 辅助编程的潜在危险 在本章中,我们将讨论人类如何与计算机进行交流。我们将向您介绍您的 AI 助手 GitHub Copilot&#x…

dp专题15 零钱兑换

本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目: 思路: 这道题,是个比较模板的完全背包问题,这里要求的是问凑成总金额所需的最少的硬币的个数。 我们明确一下 dp[ …

QT第四天

要求&#xff1a;使用QT完成计算器UI设计&#xff0c;如下图&#xff1a; 程序运行结果&#xff1a; 代码&#xff1a; mainwindow.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>MainWindow</clas…

使用pycharm连接读取orcl数据库的表

背景&#xff1a;工作需要 需求&#xff1a;使用pycharm访问远程oracle类型数据库的表&#xff0c;表中包含lob字段&#xff08;这也是个坑&#xff01;&#xff09; 麻了&#xff0c;搞了一个星期&#xff0c;终于成功了&#xff0c;真可谓是每步都有坑&#xff0c;看的文章也…

Microsoft365管理员创建共享邮箱

​​​​​​ 创建共享邮箱 项目2023/08/2110 个参与者 反馈 本文内容 创建共享邮箱并添加成员您应使用哪些权限&#xff1f;阻止登录共享邮箱帐户向 Outlook 添加共享邮箱 显示另外 3 个 备注 如果你的组织使用的是混合 Exchange 环境&#xff0c;则你应使用本地 Excha…