关于序列建模,是时候抛弃RNN和LSTM了

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

作者表示:我们已经陷入 RNN、LSTM 和它们变体的坑中很多年,是时候抛弃它们了!


在 2014 年,RNN 和 LSTM 起死回生。我们都读过 Colah 的博客《Understanding LSTM Networks》和 Karpathy 的对 RNN 的颂歌《The Unreasonable Effectiveness of Recurrent Neural Networks》。但当时我们都「too young too simple」。现在,序列变换(seq2seq)才是求解序列学习的真正答案,序列变换还在语音到文本理解的任务中取得了优越的成果,并提升了 Siri、Cortana、谷歌语音助理和 Alexa 的性能。此外还有机器翻译,现在机器翻译已经能将文本翻译为多种语言。在图像到文本、文本到图像的变换以及视频文字说明的应用中,序列变换也是卓有成效。


在 2015-2016 年间,出现了 ResNet 和 Attention 模型。从而我们知道,LSTM 不过是一项巧妙的「搭桥术」。并且注意力模型表明 MLP 网络可以被「通过上下文向量对网络影响求平均」替换。下文中会继续讨论这一点。


经过两年多的时间,我们终于可以说:「放弃你的 RNN 和 LSTM 路线吧!」


我们能看到基于注意力的模型已越来越多地被用于谷歌、Facebook 和 Salesforce 的 AI 研究。它们都经历了将 RNN 模型和其变体用基于注意力的模型替换的过程,而这才刚刚开始。RNN 模型曾经是很多应用的构建基础,但相比基于注意力的模型,它们需要更多的资源来训练和运行。(参见:https://towardsdatascience.com/memory-attention-sequences-37456d271992)


为什么?


RNN、LSTM 和其变体主要对时序数据进行序列处理。如下图中的水平箭头部分:


640?wx_fmt=png

RNN 中的序列处理过程,来自《Understanding LSTM Networks》


这些箭头表明,在长期信息访问当前处理单元之前,需要按顺序地通过所有之前的单元。这意味着它很容易遭遇梯度消失问题。


为此,人们开发了 LSTM 模型,LSTM 可以视为多个转换门的合并。ResNet 也借鉴于这种结构,它可以绕过某些单元从而记忆更长时间步的信息。因此,LSTM 在某种程度上可以克服梯度消失问题。

640?wx_fmt=png

LSTM 中的序列处理过程,来自《Understanding LSTM Networks》


但这并不能完全解决该问题,如上图所示。LSTM 中仍然存在按顺序地从过去单元到当前单元的序列路径。实际上,现在这些路径甚至变得更加复杂,因为路径上还连接了加如记忆的分支和遗忘记忆的分支。毫无疑问,LSTM、GRU 和其变体能学习大量的长期信息(参见《The Unreasonable Effectiveness of Recurrent Neural Networks》),但它们最多只能记住约 100s 的长期信息,而不是 1000s 或 10000s 等。


并且,RNN 的一大问题是它们非常消耗计算资源。即如果需要快速训练 RNN,需要大量的硬件资源。在云端上运行这些模型的成本也很高,随着语音到文本的应用需求快速增长,云计算资源目前甚至赶不上它的需求。


解决方案是什么?


如果序列处理无可避免,那么我们最好能找到可向前预测和向后回顾的计算单元,因为我们处理的大多数实时因果数据只知道过去的状态并期望影响未来的决策。这和在翻译语句或分析录制视频时并不一样,因为我们会利用所有数据并在输入上推理多次。这种向前预测和后向回顾的单元就是神经注意力模块,下面将简要介绍这一点。


为了结合多个神经注意力模块,我们可以使用下图所示的层级神经注意力编码器:


640?wx_fmt=png

层级神经注意力编码器


观察过去信息的更好方式是使用注意力模块将过去编码向量汇总到上下文向量 C_t。请注意上面有一个层级注意力模块,它和层级神经网络非常相似。


在层级神经注意力编码器中,多层注意力可查看过去信息的一小部分,例如 100 个向量,而上面层级的注意力模块能查看到 100 个下层的注意力模块,也就是 100×100 个向量。即利用层级模块可极大地扩展注意力机制观察的范围。


这就是一种能回顾更多的历史信息并预测未来的方法。


这种架构类似于神经图灵机,但令神经网络通过注意力决定从记忆中需要读取什么。这意味着一个实际的神经网络将决定过去的哪个向量对未来的决策更重要。


但记忆的储存呢?与神经图灵机不同,上面的架构将会把所有的历史表征储存在记忆中。这可能是不高效的,若储存视频中每一帧的表征,而大多数情况下表征向量并不会一帧帧地改变,所以这导致储存了太多的相同信息。我们确实可以添加另一个单元来防止储存相关数据,例如不储存与之前太相似的向量。但这只是一种技巧,更好的方法可能是让架构自己判断哪些向量需要储存,而哪些不需要。这一问题也是当前研究领域的重点,我们可以期待更多有意思的发现。


所以,最后总结来说:忘了 RNN 和它的变体吧,你仅需要的是注意力机制模块。


目前我们发现很多公司仍然使用 RNN/LSTM 作为自然语言处理和语音识别等架构,他们仍没有意识到这些网络是如此低效和不可扩展。例如在 RNN 的训练中,它们因为需要很大的内存带宽而很难训练,这对于硬件设计很不友好。本质上来说,递归是不可并行的,因此也限制了 GPU 等对并行计算的加速。


简单来说,每个 LSTM 单元需要四个仿射变换,且每一个时间步都需要运行一次,这样的仿射变换会要求非常多的内存带宽,因此实际上我们不能用很多计算单元的原因,就是因为系统没有足够的内存带宽来传输计算。这对于模型的训练,尤其是系统调参是非常大的限制,因此现在很多工业界应用都转向了 CNN 或注意力机制。


论文:Attention Is All You Need


640?wx_fmt=png


论文链接:https://arxiv.org/abs/1706.03762

作者:Eugenio Culurciello

编译:刘晓坤、思源

文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。

640?wx_fmt=png

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

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

相关文章

如何运用并行编程Parallel提升任务执行效率

本文来自小易,【DoTNET技术圈】公众号已获得转载授权。《.NET并发变成实战》读后感:并行编程Parallel手打目录:一、前言二、任务并行库(TPL)的介绍三、Parallel.Invoke的使用四、Parallel.For的使用五、Parallel.ForEa…

VMware View 与Citrix XenDesktop对决之用户体验篇

看看真实的VMware View 与Citrix XenDesktop对比。 用户体验作为虚拟桌面成功的关键因素,看看VMware View如何在这方面立于不败之地。 对于测试中暴露的差异,您也许会觉得困惑。其实当您了解完下面这些,就全明白了。 Citrix的XenDesktop使用的…

c语言整数四则运算表达式的输出格式控制,Educoder CC++基本输入输出

第1关:重要的事情说三遍1.这里结合的一个具体场景是:程序接受一个输入字符,然后将该字符输出三遍,再输出一个!。// 包含标准输入输出函数库#include // 定义main函数int main(){// 请在此添加‘重要的事情说三遍’的代…

通过 GitHub Actions 自动创建 Github Release

通过 GitHub Actions 自动创建 Github ReleaseIntro在 GitHub 上维护了几个小的开源项目,每次在发布新版本的时候会创建一个 release,这样可以比较方便的找到对应的版本的代码,不需要再人肉的从 git log 中找到指定的 commit,而且…

利用win7的applocker功能来有组织的阻止相关软件运行

我有4年没用360相关的软件了,没有360的弹窗用电脑就是舒服。但是我的电脑有时候会有别人来用,我的同学或者我的父母。但是他们经常会自作主张地在我的电脑上装上360卫士,还有360浏览器。每次都是装了我再删,反反复复也不是办法。后…

人工智能会让工作环境变得更公平,还是更压抑?

人工智改变的不仅仅是工作内容……人工智能(AI)正在踏足商业领域。正如我们本周的特别报道所诠释到的那样,所有类型的公司都在利用人工智能来预测需求,雇佣员工和对付客户。2017年,企业在与人工智能相关的并购交易中支…

递归C语言排列组合方式,递归解决一种排列组合的方法

问题场景:比如说一件商品有3中属性,每个属性又有3种不同的值,那么此时问,这几种属性可能的组合性,相信你很快就得到结果为"33327"种,此时你可以实现的方式可以为三个for循环嵌套来实现&#xff0…

windows服务autofac注入quartz任务

概述Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理。我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动…

离开时请告诉自己生意就是生意

离开时请告诉自己生意就是生意 离职或者被离职,是职场中很常见的事情,每天这个星球上不知道要发生多少次,不管你经历过与否、体会到其中的滋味与否,他都会一直存在着!当这一切发生时,不管你是获利者还是受害…

如何假装成一名好程序员?

最近我对一位资深程序员就工作生活问题进行了深度采访,采访内容如下:Q:请问你工作多久了?A:5年了Q:你觉得,程序员这份工作对你有什么影响吗?A:有Q:那你的生活…

c语言常见英文提示词,c语言-常见英语-词汇及其他提示语.doc

c语言-常见英语-词汇及其他提示语运算符与表达式:1.constant 常量2. variable 变量3. identify 标识符4. keywords 关键字5. sign 符号6. operator 运算符7. statement语句8. syntax 语法9. expression 表达式10. initialition 初始化11. number format 数据格式12 …

不一样的虚假(Bogus)和骗子(Faker)

首先声明,Bogus是一个Nuget包的名称,Faker是它内部的一个类,这个库的作用就是模拟生成实体类的数据,特别适合测试时的场景,不用苦思冥想,辛辛苦苦来造不同的实体类了。当然,造出来的都是虚假的(…

用一个Sql语句查询出表中的一个字段的数据类型

select name,(select name from systypes where xusertypesyscolumns.xusertype) from syscolumns where idobject_id(aa) 如果是其它的表,把aa换成别的表名就行了 转载于:https://blog.51cto.com/lightweight/502307

c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用

GBK编码共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。以两个字节表示一个汉字,编码范围是0x8140~0xfefe,兼容GB2318,并覆盖了unicode中的所有汉字。Win7记事本默认以GBK保存汉字。开发环境…

云服务器下行_腾讯云轻量应用服务器简单测评

这台机器的配置是1核心1G内存3M带宽,一直在吃灰,到现在才想起来应该测评一下腾讯云活动推荐​cloud.tencent.com测评机器概况从图中可以看到这台机器CPU采用 AMD EPYC 7K62 48-Core Processor 主频2.60GhzI/O大致129.3MB/S 用来建站是没问题的。3Mbps上行带宽跑满,下…

这是我见过的最全的训练数据集,没有之一!

从大学毕业起,小编就开始收集各类数据集,经过近几年的积累和沉淀,小编收集整理了32套数据集,内容涵盖“自动驾驶”、“人脸识别”、“世界杯”、“股票数据”、“基因组数据”、“全球各大社交媒体数据”等。现在,小编…

运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

前言上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详细介绍。正文关于…

Linux5配置jboss环境

Linux5配置jboss环境 说明: Linux版本:Redhat Enterprise Linux 5 JDK版本:jdk1.6.0_21(安装文件:jdk-6u21-linux-i586-rpm.bin) Jboss版本:jboss-5.1.0.GA 进入系统的用户是用root,拥有最大的权限。 1…

c语言判断x的个位数是否为5,用C语言编程从键盘输入一个正整数,判断其个位数是否为5,若是5则输出“yes”,否则输出“no”...

#include int main(){int five;printf("输入一个整数:");scanf("%d",&five);while(five>10){five five%10;}if(five 5)printf("yes");elseprintf("no");return 0;}扩展资料:“模”是“Mod”的音译,模运…

从基础概念到数学公式,这是一份520页的机器学习笔记(图文并茂)

导读:近日,来自SAP(全球第一大商业软件公司)的梁劲(Jim Liang)公开了自己所写的一份 520 页的学习教程(英文版),详细、明了地介绍了机器学习中的相关概念、数学知识和各种…