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.hqwc.cn/news/415595.html

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

相关文章

找免费PPT素材、模板,就上这6个网站。

这6个PPT模板网站,免费下载,可商用,赶紧来下载。 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYxMjky 菜鸟图库是一个设计、办公、媒体等素材非常齐全的网站,站内有几百万的庞大素材库,其中PP…

阿里云ack集群管理及故障处理

一、集群管理维护 二、常见故障处理 存储: 网络 弹性伸缩 service

SQL Server中数据表的增删查改

文章目录 一、增二、查三、改四、删除 一、增 进行增删查改的前提需要在指定数据库中创建数据表,对这块不大理解的可以先看看前面几期文章: 创建数据库 创建数据表 use StudentManageDB go insert into Students (StudentName,Gender,Birthday,Age,Stu…

Uniapp多选Popup(弹出层)

uniapp中多选组件很少,故个人简单开发了一个,可简单使用,也可根据个人需求稍微改进 支持的功能 单选多选(默认)限制选择数量默认选中禁用选项 属性说明 属性默认值说明singlefalsetrue为开启单选,否则为…

牛客.KY11二叉树遍历、 LeetCode104.二叉树的最大深度 ,110平衡二叉树

二叉树实操小练习~这里对二叉树的遍历要有一定的理解,如果还不熟悉的小伙伴可以看看我的这篇博客:数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q-CSDN博客 牛客.KY11二…

VB6.0报错:操作符AddressOf使用无效

VB调试,尝试调用DLL中的方法并带有回调函数,报错提示: 操作符AddressOf使用无效 代码: Private Sub btnScan_Click()... WCHBLEStartScanBLEDevices AddressOf callBackEnd Sub This function is called from the dll Public Fu…

[笔记]深度学习入门 基于Python的理论与实现(一)

代码仓库 gitee 1. python 入门 1.5之前是python安装和基础语法, 我直接跳过了 1.5 Numpy 深度学习中经常出现数组和矩阵运算,Numpy 的数组类 numpy.array 提供了很多便捷的方法 1.5.1 导入 Numpy import numpy as np1.5.2 生成 Numpy 数组 np.array()&#xf…

Java进阶-Tomcat发布JavaWeb项目

对于云服务器,程序员一般不会陌生,如果项目需要发布到现网,那么服务器是必不可缺的一项硬性条件,那么如何在云服务器上部署一个项目,需要做哪些配置准备,下面就由本文档为大家讲解,本篇以Tomcat…

机器学习周刊第六期:哈佛大学机器学习课、Chatbot Ul 2.0 、LangChain v0.1.0、Mixtral 8x7B

— date: 2024/01/08 — 吴恩达和Langchain合作开发了JavaScript 生成式 AI 短期课程:《使用 LangChain.js 构建 LLM 应用程序》 大家好,欢迎收看第六期机器学习周刊 本期介绍10个内容,涉及Python、机器学习、大模型等,目录如下&#xff…

ycsb压测mongodb

下载解压 https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-mongodb-binding-0.17.0.tar.gz tar -zxvf ycsb-mongodb-binding-0.17.0.tar.gzycsb提前已经在workload文件夹下准备好了几个压测场景分别对应workload[a:f] workloads/workloada 样例 …

Open CASCADE学习|显示模型

目录 1、编写代码 Viewer.h Viewer.cpp ViewerInteractor.h ViewerInteractor.cpp helloworld.cpp 2、配置 3、编译运行 1、编写代码 Viewer.h #pragma once ​ #ifdef _WIN32 #include <Windows.h> #endif ​ // Local includes #include "ViewerInteract…

热轧钢板、钢管测长仪 高温检测无压力

热轧钢管、钢板等轧材温度是非常高的&#xff0c;在线测长仪可对其进行在线检测&#xff0c;实现生产中的测量&#xff0c;同时也可给剪切机输送数据&#xff0c;帮助裁切。 测长仪是基于机器视觉的测量设备&#xff0c;能够拍摄被测物的清晰图片&#xff0c;并显示&#xff0c…