如何深度理解RNN?——看图就好!

a20923e1f4c2e10e4aca4280acd7c75969d8a9f6

欢迎来到循环神经网络的插图指南。我是迈克尔,也被称为LearnedVector,我是AI语音领域的机器学习工程师。如果你刚刚开始使用ML并希望在Recurrent神经网络背后获得一些直觉,那么这篇文章就适合你。

循环神经网络是一种强大的技术,如果你想进入机器学习,那么理解它就变得非常重要了。如果你使用智能手机或经常上网,那么你会经常使用RNN的应用程序。因为循环神经网络已经被用于语音识别、语言翻译、股票预测等等,它甚至用于图像识别来描述图片中的内容。

所以我知道有许多关于循环神经网络的指南,但我想以分享插图的方式解释我是如何理解它的。我将避免讲它背后的数学知识,而专注于RNN背后的真实的含义。通过阅读这篇文章,你应该对RNN有一个很好的理解。

序列数据

RNN是神经网络中的一种,它擅长对序列数据进行建模处理。要理解这意味着什么,让我们做一个小实验。假设你拍摄了一张球在时间上移动的静态快照。

6c5c9cea84c49f3ce63ef979cfe985a584e07af1

我们还要说你想预测球的移动方向。因此,只有你在屏幕上看到的信息,你才能做到这一点。但是你可以猜测,但你提出的任何答案都是随机的猜测。如果不知道球的位置,就没有足够的数据来预测球的位置。

如果你连续记录球位置的快照,那么你将有足够的信息来做出更好的预测。

9c8929cdb25682bd09d0a0525f534e4ed72c1b55

所以这是一个序列,一个特定的顺序,其中是一个事物跟随另一个事物。有了这些信息,你现在可以看到球向右移动。

序列数据有很多种形式。音频是一种自然的序列,你可以将音频频谱图分成块并将其馈入RNN。

57452aaa3e62b2f2ff85970ad1c068f55e855f44

音频频谱图切成块

文本也是一种形式的序列,你可以将文本分成一系列字符或一系列单词。

顺序存储

现在我们知道了RNN擅长处理预测的序列数据,但是它是如何实现的呢?

它通过我喜欢称为顺序存储的概念来做到这一点。获得顺序存储的能力意味着什么?我们通过一个小例子来说明它。

我想邀请你说出你脑海中的字母。

31f4145c650b657bb4bd665ec06f456846c9b5c1

这很简单吧,如果你被教了这个特定的序列,你应该能够很快记起它。

那么现在尝试反着说这些字母。

eb4d276947ab16903c814c57859d4be4ac9e9af4

我敢打赌,这要困难得多。除非你之前练过这个特定的序列,否则你可能会遇到困难。

现在来一个更有趣的,咱们从字母F开始。

5a023c47a904453593e4b5f2106cc839ef1ea6b5

首先,你会在前几个字母上挣扎,但是在你的大脑拿起图案后,剩下的就会自然而然。

因此,有一个非常合乎逻辑的原因是困难的。你将字母表作为序列学习,顺序存储是一种使大脑更容易识别序列模式的机制。

递归神经网络

这样咱们就可以知道RNN有顺序存储的这个抽象概念,但是RNN如何学习这个概念呢?那么,让我们来看一个传统的神经网络,也称为前馈神经网络。它有输入层,隐藏层和输出层。

bdf3d6c9e855f67035e3045ba7febedf3be3fb9f

我们如何训练一个前馈神经网络,以便能够使用以前的信息来影响以后的信息呢?如果我们在神经网络中添加一个可以传递先前信息的循环它将会变成什么呢?

f97385ee681d23eb94f7127beda3f0aaaec1c1a7

这基本上就是一个递归神经网络了。RNN让循环机制充当高速公路以允许信息从一个步骤流到下一个步骤。

85e955f492e98f50571f39cedf709b8501bdf12d

将隐藏状态传递给下一个步骤

此信息是隐藏状态,它是先前输入的表示。让我们通过一个RNN用例来更好地理解它是如何工作的。

假设我们想要构建一个聊天机器人,以为它们现在非常受欢迎。假设聊天机器人可以根据用户输入的文本对意图进行分类。

6f97cbc0d671ccee94174d606a53b0768848e908

对用户输入的意图进行分类

为了解决这个问题。首先,我们将使用RNN对文本序列进行编码。然后,我们将RNN输出馈送到前馈神经网络中,该网络将对用户输入意图进行分类。

假设用户输入:what time is it?首先,我们将句子分解为单个单词。RNN按顺序工作,所以我们一次只能输入一个字。

a6d32540b33670afa360c22573b4a53a8054c9ce

将一个句子分成单词序列

第一步是将“What”输入RNN,RNN编码“what”并产生输出。

c5e5f0cd2dd08ad78404c87eda017db709e0081e

对于下一步,我们提供单词“time”和上一步中的隐藏状态。RNN现在有关于“what”和“time”这两个词的信息。

2d8af5d42312d58c750cfbbf5ce341f4126a8987

我们重复这个过程,直到最后一步。你可以通过最后一步看到RNN编码了前面步骤中所有单词的信息。

b50879acf5c16b0f2ff0eb5e4d0342eef5858c5c

由于最终输出是从序列的部分创建的,因此我们应该能够获取最终输出并将其传递给前馈层以对意图进行分类。

49d57f9120bd4843ae328d614cd376d5705cfc57

对于那些喜欢在这里查看代码的人来说,使用python展示了控制流程应该是最好的方式。

9d0349ef76aef669d318d9a9ec4c3fa7bb6d066c

RNN控制流的伪代码

首先,初始化网络层和初始隐藏状态。隐藏状态的形状和维度将取决于你的递归神经网络的形状和维度。然后循环输入,将单词和隐藏状态传递给RNN。RNN返回输出和修改的隐藏状态,接着就继续循环。最后,将输出传递给前馈层,然后返回预测。整个过程就是这样!进行递归神经网络的正向传递的控制流程是for循环。

梯度消失

你可能已经注意到隐藏状态中奇怪的颜色分布。这是为了说明RNN被称为短期记忆的问题。

0405cb968997ea228b39d83757185a705fc3a414

RNN的最终隐藏状态

短期记忆问题是由臭名昭着的梯度消失问题引起的,这在其他神经网络架构中也很普遍。由于RNN处理很多步骤,因此难以保留先前步骤中的信息。正如你所看到的,在最后的时间步骤中,“what”和“time”这个词的信息几乎不存在。短期记忆和梯度消失是由于反向传播的性质引起的,反向传播是用于训练和优化神经网络的算法。为了理解这是为什么,让我们来看看反向传播对深度前馈神经网络的影响。

训练神经网络有三个主要步骤。首先,它进行前向传递并进行预测。其次,它使用损失函数将预测与基础事实进行比较。损失函数输出一个错误值,该错误值是对网络执行得有多糟糕的估计。最后,它使用该误差值进行反向传播,计算网络中每个节点的梯度。

0dedc05e79a44d776cf5780f96494390c927c14c

梯度是用于调整网络内部权重的值从而更新整个网络。梯度越大,调整越大,反之亦然,这也就是问题所在。在进行反向传播时,图层中的每个节点都会根据渐变效果计算它在其前面的图层中的渐变。因此,如果在它之前对层的调整很小,那么对当前层的调整将更小。

这会导致渐变在向后传播时呈指数级收缩。由于梯度极小,内部权重几乎没有调整,因此较早的层无法进行任何学习。这就是消失的梯度问题。

58145b150ffbf1a7a6e605b1ac577f6431912e92

梯度向后传播时收缩

让我们看看这如何适用于递归神经网络。你可以将循环神经网络中的每个时间步骤视为一个层。为了训练一个递归神经网络,你使用了一种称为通过时间反向传播的方法。这样梯度值在每个时间步长传播时将呈指数级收缩。

a70a5563a4e384ba2ad06d72382dac3e5f42541a

随着时间的推移,梯度会收缩

同样,梯度值将用于在神经网络权重中进行调整,从而允许其学习。小的渐变意味着小的调整。这将导致最前面的层没有优化。

由于梯度消失,RNN不会跨时间步骤学习远程依赖性。这意味着在尝试预测用户的意图时,有可能不考虑“what”和“time”这两个词。然后网络就可能作出的猜测是“is it?”。这很模糊,即使是人类也很难辨认这到底是什么意思。因此,无法在较早的时间步骤上学习会导致网络具有短期记忆。

LSTMGRU

RNN会受到短期记忆的影响,那么我们如何应对呢?为了减轻短期记忆的影响,研究者们创建了两个专门的递归神经网络,一种叫做长短期记忆或简称LSTM。另一个是门控循环单位或GRU。LSTM和GRU本质上就像RNN一样,但它们能够使用称为“门”的机制来学习长期依赖。这些门是不同的张量操作,可以学习添加或删除隐藏状态的信息。由于这种能力,短期记忆对他们来说不是一个问题。如果你想了解有关LSTM和GRU的更多信息,你可以在其上查看我的插图视频。

总结

总而言之,RNN适用于处理序列数据以进行预测,但却会受到短期记忆的影响。vanilla RNN的短期存储问题并不意味着要完全跳过它们并使用更多进化版本,如LSTM或GRU。RNN具有更快训练和使用更少计算资源的优势,这是因为要计算的张量操作较少。当你期望对具有长期依赖的较长序列建模时,你应该使用LSTM或GRU。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

java有string这个类型吗_关于java的String类型

String类型的不可变众所周知,String类型是不可变的,一旦String对象被创建好了则这个字符串中的序列就不可改变。为什么String类型是不可变?根据阅读源码可知,String类是一个final类,但是String不可变并不是因为它是一个…

理论与实践:如何从Hadoop迁移到MaxCompute

直播视频回看,传送门!分享资料下载,传送门!更多精彩内容传送门:大数据计算技术共享计划 — MaxCompute技术公开课第二季 以下内容根据演讲视频以及PPT整理而成。 通常而言,将Hadoop迁移到MaxCompute会分为…

rocketmq原理_彻底看懂RocketMQ事务实现原理

面试中经常会问到比如RocketMQ的事务是如何实现的呢?学习框架,我们不仅要熟练使用,更要掌握设计及原理,才算熟悉一个框架。1 RocketMQ 事务使用案例public class CreateOrderService { Autowired private OrderDao orderDao; A…

要活 102 年,阿里凭借的是什么?

戳蓝字“CSDN云计算”关注我们哦!作者 | 屠敏责编 | 阿秃由浅到深、由轻到重、由拥抱到创新,看似“风平浪静”的历史背后,中国互联网江湖的发展实则“波涛汹涌”。对于身处核心位置的科技巨头阿里巴巴而言,将如何更好地去实现“希…

阿里云 x 蒙牛 | 打通数据孤岛,基于MaxCompute实现产销协同的智慧运营

每一个公司转型的背后 都有着不为人知的秘密 今天,让我们一起探秘 内蒙古蒙牛乳业(集团)股份有限公司是中国发展速度最快的乳品企业之一,2017年实现收入601.56亿元,位列全球乳业第10位,与2016年同比收入增…

(Docker实战) 第3篇:Centos7 拉取和部署Mysql

文章目录搭建mysql1. 创建mysql的配置文件2. 创建mysql配置/srv/mysql/conf/custom.cnf3. 下载并安装mysql 5.7(注意修改密码)搭建mysql 1. 创建mysql的配置文件 mkdir -p /srv/mysql/conf /srv/mysql/logs /srv/mysql/data2. 创建mysql配置/srv/mysql…

Hadoop迁移MaxCompute神器之DataX-On-Hadoop使用指南

DataX-On-Hadoop即使用hadoop的任务调度器,将DataX task(Reader->Channel->Writer)调度到hadoop执行集群上执行。这样用户的hadoop数据可以通过MR任务批量上传到MaxCompute、RDS等,不需要用户提前安装和部署DataX软件包,也不需要另外为…

(Docker实战) 第三篇:配置_开发环境

文章目录一、开发环境-建立开发环境1.1. 常用环境下载地址1.2. IDEA的maven配置1.3. 导入项目示例1.4. IDEA教程,如何从eclipse过渡1.5. gblfy的快捷键风格一、开发环境-建立开发环境 1.1. 常用环境下载地址 jdk8下载地址: https://www.oracle.com/te…

阿里云史上最大技术升级:面向万物智能的飞天2.0

1991年,《科学美国人》杂志描绘了一种“无处不在的计算设备,没人会感觉到它的存在”,拉开了万物智能的序幕。 27年后的2018杭州•云栖大会上,阿里云公布了面向万物智能的新一代云计算操作系统——飞天2.0,可满足百亿级…

杭州·云栖大会宣布多款核心云产品降价,最高降幅达90%

2018杭州云栖大会,阿里云宣布开启新一轮核心产品降价,再次用科技普惠广大开发者和用户,加速产业升级。本次降价涉及近20款产品,产品包括智能语音交互、图像识别、性能测试PTS、云数据库RDS等,其中事务消息降价90%&…

(Docker实战) 第四篇:建立持续集成环境01

标签: gblfy技术文档 文章目录一、 jenkins环境建立1.1. jenkins安装1.2. 安装jenkins前提:下载jdk1.3. 配置jenkins1.3.1. 配置远程发布插件Publish over SSH 选择系统设置1.3.2. 配置jdk,git,maven 选择系统管理->全局工具配…

系统无法分配所需内存_Innodb内存管理解析

本文主要介绍innodb的内存管理,涉及基础的内存分配结构、算法以及buffer pool的实现细节,提及change buffer、自适应hash index和log buffer的基本概念和内存基本配比,侧重点在内存的分配和管理方式。本文所述内容基于mysql8.0版本。基础内存…

飞天2.0面向万物智能的操作系统正式启幕

原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里数据总监分享《阿里数据中台建设实践案例》,PPT+语音讲解!

戳蓝字“CSDN云计算”关注我们哦!作者 | 技术领导力责编 | 阿秃本文整理自,阿里巴巴集团数据部商业应用总监列文,在“2019年阿里云(上海)峰会”上的分享,以PPT图片文字语音的方式呈现给各位社区读者。如果…

(Docker实战) 第五篇:建立持续集成环境02

标签: gblfy技术文档 文章目录一、 jenkins实战,持续集成实际项目1.1. 安装maven插件1.1.1. 找到Maven Integration这个插件1.1.2. 确保jenkins的maven本地仓库有一定的权限1.1.3. 创建job1.1.4. 配置参数1.1.5. 配置git仓库信息1.1.7. 配置构建信息1.1.…

阿里云OCR证件识别商业化发布,减少人工审核误差节省成本

随着互联网的发展,利用现代信息技术开展高效快捷便民服务工作,已经势在必行。证件识别算法,极大地提高了办公效率,现已在互联网金融、银行保险、电信通讯运营商、智能交通、政府、航空、社保局等行业领域被广泛运用。 近日&#…

(Docker实战) 第六篇:建立持续集成环境03

标签: gblfy技术文档 文章目录六、 git核心概念6.1. git学习地址6.2. github和码云的介绍6.3. git常用命令和操作6.3.1. 命令行常用命令6.3. IDEA操作方法(具体看视频)6.3.1. 合并分支6.3.2. compare with6.3.3. rename6.3.4. 看历史记录(所有的和单个文…

程序员:站在“自学”鄙视链顶端的王者

我在大学的时候,真的遇到一个神人,叫他小马吧。几乎没见过小马上课,第一节实验课就完成全学期所有实验,大一就自学大二课程,大四还没毕业就拿到了阿里offer,然后在我们苦兮兮找工作的时候,人家已…

用户需求源源不断,阿里云网络创新不止

2018杭州云栖大会,阿里云网络产品重点介绍了两个创新产品,智能接入网关和云企业网,以及全球领先的云网络系统-飞天洛神。智能接入网关是业内主要云服务商中第一家提供这样产品的,云企业网更是业内首创的多地域互联产品…

漫画:要跳槽?这道缓存设计题你有必要看看!

戳蓝字“CSDN云计算”关注我们哦!作者 | 程序员吴小胖责编 | 阿秃金九银十招聘季,社畜跳槽,学生出笼,也是非常热闹。不过今年继续互联网寒冬,能苟着还是苟着吧,猥琐发育别浪。苟着除了写Bug,还…