难以置信!LSTM和GRU的解析从未如此清晰(动图+视频)
作者 | Michael Nguyen
编译 | 蔡志兴、费棋
编辑 | Jane
出品 | AI科技大本营
【导语】机器学习工程师 Michael Nguyen 在其博文中发布了关于 LSTM 和 GRU 的详细图解指南。博文中,他先介绍了 LSTM 和 GRU 的本质, 然后解释了让 LSTM 和 GRU 有良好表现的内部机制。 当然,如果你还想了解这两种网络背后发生了什么,那么这篇文章就是为你准备的。
视频详解
▌短时记忆
RNN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。 因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。
在反向传播期间,RNN 会面临梯度消失的问题。 梯度是用于更新神经网络的权重值,消失的梯度问题是当梯度随着时间的推移传播时梯度下降,如果梯度值变得非常小,就不会继续学习。
梯度更新规则
因此,在递归神经网络中,获得小梯度更新的层会停止学习—— 那些通常是较早的层。 由于这些层不学习,RNN 可以忘记它在较长序列中看到的内容,因此具有短时记忆。
▌作为解决方案的 LSTM 和 GRU
LSTM 和 GRU 是解决短时记忆问题的解决方案,它们具有称为“门”的内部机制,可以调节信息流。
这些“门”可以知道序列中哪些重要的数据是需要保留,而哪些是要删除的。 随后,它可以沿着长链序列传递相关信息以进行预测,几乎所有基于递归神经网络的技术成果都是通过这两个网络实现的。
LSTM 和 GRU 可以在语音识别、语音合成和文本生成中找到,你甚至可以用它们为视频生成字幕。对 LSTM 和 GRU 擅长处理长序列的原因,到这篇文章结束时你应该会有充分了解。
下面我将通过直观解释和插图进行阐述,并避免尽可能多的数学运算。
本质
让我们从一个有趣的小实验开始吧。当你想在网上购买生活用品时,一般都会查看一下此前已购买该商品用户的评价。
当你浏览评论时,你的大脑下意识地只会记住重要的关键词,比如“amazing”和“awsome”这样的词汇,而不太会关心“this”、“give”、“all”、“should”等字样。如果朋友第二天问你用户评价都说了什么,那你可能不会一字不漏地记住它,而是会说出但大脑里记得的主要观点,比如“下次肯定还会来买”,那其他一些无关紧要的内容自然会从记忆中逐渐消失。
而这基本上就像是 LSTM 或 GRU 所做的那样,它们可以学习只保留相关信息来进行预测,并忘记不相关的数据。
▌RNN 述评
为了了解 LSTM 或 GRU 如何实现这一点,让我们回顾一下递归神经网络。 RNN 的工作原理如下;第一个词被转换成了机器可读的向量,然后 RNN 逐个处理向量序列。
逐一处理矢量序列
处理时,RNN 将先前隐藏状态传递给序列的下一步。 而隐藏状态充当了神经网络记忆,它包含相关网络之前所见过的数据的信息。
将隐藏状态传递给下一个时间步
让我们看看 RNN 的一个细胞,了解一下它如何计算隐藏状态。 首先,将输入和先前隐藏状态组合成向量, 该向量包含当前输入和先前输入的信息。 向量经过激活函数 tanh之后,输出的是新的隐藏状态或网络记忆。
RNN 细胞
激活函数 Tanh
激活函数 Tanh 用于帮助调节流经网络的值。 tanh 函数将数值始终限制在 -1 和 1 之间。
当向量流经神经网络时,由于有各种数学运算的缘故,它经历了许多变换。 因此想象让一个值继续乘以 3,你可以想到一些值是如何变成天文数字的,这让其他值看起来微不足道。
没有 tanh 函数的向量转换
tanh 函数确保值保持在 -1~1 之间,从而调节了神经网络的输出。 你可以看到上面的相同值是如何保持在 tanh 函数所允许的边界之间的。
有 tanh 函数的向量转换
这是一个 RNN。 它内部的操作很少,但在适当的情形下(如短序列)运作的很好。 RNN 使用的计算资源比它的演化变体 LSTM 和 GRU 要少得多。
▌LSTM
LSTM 的控制流程与 RNN 相似,它们都是在前向传播的过程中处理流经细胞的数据,不同之处在于 LSTM 中细胞的结构和运算有所变化。
LSTM 的细胞结构和运算
这一系列运算操作使得 LSTM具有能选择保存信息或遗忘信息的功能。咋一看这些运算操作时可能有点复杂,但没关系下面将带你一步步了解这些运算操作。
核心概念
LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。
因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。
Sigmoid
门结构中包含着 sigmoid 激活函数。Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到 0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,因为任何数乘以 0 都得 0,这部分信息就会剔除掉。同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。这样网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。
Sigmoid 将值压缩到 0~1 之间
接下来了解一下门结构的功能。LSTM 有三种类型的门结构:遗忘门、输入门和输出门。
遗忘门
遗忘门的功能是决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。
遗忘门的运算过程
输入门
输入门用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。
其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。
输入门的运算过程
细胞状态
下一步,就是计算细胞状态。首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。
细胞状态的计算
输出门
输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。
最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。
输出门的运算过程
让我们再梳理一下。遗忘门确定前一个步长中哪些相关的信息需要被保留;输入门确定当前输入中哪些信息是重要的,需要被添加的;输出门确定下一个隐藏状态应该是什么。
代码示例
对于那些懒得看文字的人来说,代码也许更好理解,下面给出一个用 python 写的示例。
python 写的伪代码
1.首先,我们将先前的隐藏状态和当前的输入连接起来,这里将它称为 combine;
2.其次将 combine 丢到遗忘层中,用于删除不相关的数据;
3.再用 combine 创建一个候选层,候选层中包含着可能要添加到细胞状态中的值;
4.combine 同样要丢到输入层中,该层决定了候选层中哪些数据需要添加到新的细胞状态中;
5.接下来细胞状态再根据遗忘层、候选层、输入层以及先前细胞状态的向量来计算;
6.再计算当前细胞的输出;
7.最后将输出与新的细胞状态逐点相乘以得到新的隐藏状态。
是的,LSTM 网络的控制流程就是几个张量和一个 for 循环。你还可以使用隐藏状态进行预测。结合这些机制,LSTM 能够在序列处理中确定哪些信息需要记忆,哪些信息需要遗忘。
▌GRU
知道了 LSTM 的工作原理之后,来了解一下 GRU。GRU 是新一代的循环神经网络,与 LSTM 非常相似。与 LSTM 相比,GRU 去除掉了细胞状态,使用隐藏状态来进行信息的传递。它只包含两个门:更新门和重置门。
GRU 的细胞结构和门结构
更新门
更新门的作用类似于 LSTM 中的遗忘门和输入门。它决定了要忘记哪些信息以及哪些新信息需要被添加。
重置门
重置门用于决定遗忘先前信息的程度。
这就是 GRU。GRU 的张量运算较少,因此它比 LSTM 的训练更快一下。很难去判定这两者到底谁更好,研究人员通常会两者都试一下,然后选择最合适的。
▌结语
总而言之,RNN 适用于处理序列数据用于预测,但却受到短时记忆的制约。LSTM 和 GRU 采用门结构来克服短时记忆的影响。门结构可以调节流经序列链的信息流。LSTM 和 GRU 被广泛地应用到语音识别、语音合成和自然语言处理等。
原文链接:https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21
2018 AI开发者大会
◆
拒绝空谈,技术争鸣
◆
2018 AI开发者大会(AI NEXTCon)由中国IT社区CSDN与硅谷AI社区AICamp联合出品的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们只讲技术,拒绝空谈,诚挚邀请AI业内人士一起共铸人工智能新篇章!
2018 AI开发者大会首轮重磅嘉宾及深度议题现已火热出炉,扫码抢“鲜”看。国庆特惠,购票立享 5 折优惠!
相关文章:

php 开发restful api,用PHP创建RESTful API?
如果您的服务支持所有CRUD操作,则始终建议实现RESTful接口.这样做并不是很难.我已经概述了下面的一些基础知识.RESTful服务只是做了一些事情:>它使用HTTP请求方法进行CRUD操作的通信>它使用HTTP状态代码来传达响应状态,以及>它使用URI来定义您的资源(您正在…

MySQL服务器的配置教程
1、安装MySQL 这个应该很简单了,而且我觉得大家在安装方面也没什么太大问题,所以也就不多说了,下面我们来讲讲配置。 2、配置MySQL 注意,在Ubuntu下MySQL缺省是只允许本地访问的,如果你要其他机器也能够访问的话&am…

php开发我的世界插件,WorldEdit/开发与API
本页面已存在其他语言的内容,请协助翻译为本地化的中文。点击此处开始翻译。如本模板出现在原文存档页面,请注意更新主页面后,仍需要去除此处该模板如当前页面已经没有需要翻译的内容,请删去待翻译模板有标题的大篇幅文章…

关于AI,腾讯又有大动作!开发者该如何应对?
时隔 6 年后,腾讯公司的组织架构迎来新一轮的优化调整,在原有七大事业群(BG)的基础上进行重组整合。 腾讯公司董事会主席兼首席执行官马化腾表示:“作为一家以互联网为基础的科技和文化公司,技术是腾讯公司…

Android存储方式之SQLite
前言 SQLite数据库操作在Android开发中非常常用今天我将带大家全面了解关于SQLite数据库的操作(增、删、查、改)目录 1. SQLite数据库介绍 SQLite是Android内置的一个小型、关系型、属于文本型的数据库。 > Android提供了对 SQLite数据库的完全支持&a…

最近要换个主机,现在的太慢了
最近在学习wtl,打算做一个文件搜索工具来练手,需要正则表达式处理、数据库存储、键盘HOOK以及UI等技术UI用WTL搞定正则表达式的处理:http://research.microsoft.com/projects/greta/regex_perf.htmlhttp://www.tropicsoft.com/Components/Reg…

oracle数据库配置失败,oracle11g – Oracle 11G XE安装错误:数据库配置失败
在linuxMint上安装后运行oracle配置时:/etc/init.d/oracle-xe configure指定以下错误:sudo /etc/init.d/oracle-xe configureOracle Database 11g Express Edition Configuration-------------------------------------------------This will configure …
显示来自多个表的数据——JOIN
表关系简介 一、语法 SELECT 字段列表FROM TABLE1 [CROSS JOIN TABLE2 ] | [NATURAL JOIN TABLE2 ] | [JOIN TABLE2 USING (字段名) ] | [JOIN TABLE2 ON (TABLE.COLUMN_NAME TABLE2.COLUMN_NAME) ] | [(LEFT | RIGHT | FULL OUT) JOIN TABLE2 ON (TABLE1.COLUMN_NAME TABL…

20年第三次架构大调整,腾讯永远年轻!
整理 | 琥珀出品 | AI科技大本营(公众号ID:rgznai100)凌晨,腾讯官方公众号发布了一则消息,公布了成立 20 周年以来的新一轮整体战略升级。此前,国内各大互联网公司包括阿里、百度、美团、滴滴、京东都相继进…

NHibernate和Cuyahoga(二)(翻译):
原文:http://www.cuyahoga-project.org/home/developers.aspxMappings: 在我们使用像NHibernate这样强大的ORM工具的时候,映射类有时候是相当严格的.这就造成了很大的障碍,尤其是由于没有足够的真实的映射例子(更确切的说,对于Java版本的Hibernate来说,会有更多的例子).…

Enterprise Library Step By Step系列(十二):异常处理应用程序块——进阶篇
一.把异常信息Logging到数据库在日志和监测应用程序块中,有朋友提意见说希望能够把异常信息Logging到数据库中,在这里介绍一下具体的实现方法。1.创建相关的数据库环境:我们可以用日志和监测应用程序块自带的SQL语句来…

观点PK_倘若做不好AI,云服务商还能勇往直前吗?
AI强大却不独立存在,如今已经成为人们普遍接受的理念之一。在这个火热的时代,AI技术不是一个独立的产品,而是一种“基本生产力”,它适用于大部分经济活动,可以让各行各业都产生“增倍效应”,可以预见的是&a…

练习 MongoDB 操作 —— 备份篇(三)
2019独角兽企业重金招聘Python工程师标准>>> mongodb数据备份和还原主要分为二种, 一种是针对于库的mongodump和mongorestore, 一种是针对库中表的mongoexport和mongoimport。 mongodb 数据库操作--备份 还原 导出 导入 导入与导入 导入与导出…

判断是否为闰年oracle,ORACLE 通过日期变量判断是否闰年
最近在做同比环比报表,2月份的日期需要判断是否闰年,在网上查了很多资料,大部分都是用sysdate说明的,不是很理想,自己捣鼓了半天,终于整出来了。跟大家分享下。declarevbdate date;V_LASTDAY NUMBER(2,0);V…

CentOS 6.x中目录结构及用途
目录名称作用/根目录,一般根目录下只存放目录,不要存放文件/bin存放普通用户可执行的系统命令/sbin存放的是超级管理员执行的系统命令/etc系统管理和配置文件存放路径/etc/rc.d启动的配置文件和脚本存放目录/etc/passwd系统用户密码文件,包含…

oracle dataguard 日志 很多no,oracle dataguard 日志传输原理
Services),它不仅控制着传输redo数据到其它数据库,同时还管理着解决由于网络中断造成的归档文件未接收的过程。一、如何发送数据在primary数据库,DataGuard可以使用归档进程(ARCn)或者日志写进程(LGWR)收集redo数据并传输到standby࿰…

“偷鸡”不成的马斯克,终于丢掉了自己的“王位”
整理 | 非主流出品 | AI科技大本营(公众号ID:rgznai100)昨天,好战的马斯克丢了一血。据多家外媒报道,美国当地时间周六,埃隆马斯克与美国证券交易委员会(SEC)达成和解协议。马斯克必…

JVM指令详解(上)
文中提及的栈是虚拟机栈中的栈帧的操作数栈,本地变量表是栈帧中的本地变量表,如下图:/*** Author: qlq* Description* Date: 22:44 2018/9/25*/ public class MathTest {public static void main(String a[]){MathTest mathTest new MathTest();System.…

oracle修改时区无效,Oracle 时区问题
oracle中的tz_offset是用来返回给定时区与标准时区(UTC universal of time Coordinate 通用时间坐标)的偏移量,其参数可以是:1.一个合法的时区名2.一个离UTC的标准偏移量3.关键字SessionTimeZone或者是DB_timezone其中合法的时区名可以从系统视图V$TimeZ…

::operator new、sgi stl alloc、dlmalloc测试结果
注: 使用的dlmalloc为2.8.3版本使用GetTickCount(),测试1000000次的new/delete分配空间大小为2的幂,依次递增在Debug模式下sgi-stl alloc > dlmalloc > ::operator new在Release模式下dlmalloc > sgi-stl alloc > ::operator new…
假期快乐!超强面试资源等你Pick,先收藏!
整理 | Jane 出品 | AI科技大本营 【导读】准备面试不是一件简单的事情,本文的作者在过去一段时间先后参加 50 多次面试。过程是艰难的,但是在这个过程中也积累了一些非常有用的资源。今天 AI科技大本营就为大家整理了那些有价值的学习资源,…

oracle判断值是否为0的高数,SQLServer和Oracle的常用函数对比
数学函数1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 …

9月机器学习开源项目Top10
作者 | Mybridge译者 | 王天宇整理 | Jane出品 | AI科技大本营【导读】我们从过去一个月近 250 个有关机器学习的开源项目中,精心挑选出了最热门的 10 个。在挑选过程中,我们始终在各个项目之间作比较。Mybridge AI 基于大量的因素来估量项目的专业水平&…

翻译:CREATE DATABASE语句
本文为mariadb官方手册:CREATE DATABASE的译文。 原文:https://mariadb.com/kb/en/create-database/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/create-database/ 语法 CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT …

Consultanting Service
在我所做的咨询顾问工作中最耗费精力的事情就是去客户那边提案,对于咨询公司来说,这个过程就像高考一样。 这里的提案指的是,咨询公司给企业做的报告或者方案的演示 。提案之所以重要,是因为它质量的好坏直接关系到客户是否会继续…

第三次组织架构变动背后,腾讯AI走向何方?
AI科技大本营注:在 9 月末一场轰轰烈烈的“甚至连腾讯人自己都是睡梦中得知”的组织架构大调整后,不少业内人士给出了对暴风雨中腾讯的上帝视角评价。据了解,此次腾讯组织架构调整,酝酿已久,在腾讯内部早已不是秘密。如…

使按钮响应回车键
定在<head></head>之间 <script language"javascript"event"onkeydown"for"document">if(event.keyCode13) { document.all(Button1).focus(); document.all(Button1).click(); }</script> 转载于:https://www.cnb…

oracle cusor游标,ORACLE CURSOR 游标详解
DECLAREsqlStr VARCHAR2(2000); --拼写sqlflag int; --判断是否存在col_name VARCHAR2(100); --字段名字tab_name VARCHAR2(100); --表名col_type VARCHAR2(100); --表名operator_str VARCHAR2(100) : ;FindUser VARCHAR2(50) :ERSAFETY; --要查…

【播放器SDK】Android如何实现固定竖屏播放视频
安卓的固定竖屏播放并不受手机是否开启旋转的限制,需要用户设置Activity为固定竖屏。目前带皮肤的播放器内部对竖屏播放视频做了一定的支持.用户使用相对比较简单. 带皮肤播放器 参考Demo代码FixedSkinActivity 1.在onCreate里面设置当前Activity为固定竖屏模式. se…

命令别名的设置alias,unalias
alias命令的作用是为系统中的命令设置别名,如果常用命令比较长,那么为其设置别名可以简化用户操作,例如为ls -l | more命令设置别名lm,这样只需要输入lm就可以得到和 ls -l | more相同的效果;为rm -i设置别名为rm,可以…