0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

放弃 RNN 和 LSTM 吧,它们真的不好用

8g3K_AI_Thinker 来源:未知 作者:胡薇 2018-04-25 09:43 次阅读

2014 年 RNN/LSTM 起死回生。自此,RNN/LSTM 及其变种逐渐被广大用户接受和认可。起初,LSTM 和 RNN 只是一种解决序列学习和序列翻译问题的方法(seq2seq),随后被用于语音识别并有很好的效果,比如 Siri,Cortana,Alexa 等;此外,这种技术在机器翻译领域也有应用,比如 Google Translate。

2015-2016 年,新的 ResNet 和 Attention 技术出现。实际上,我们可以将 LSTM 理解为一种巧妙地 bypass technique,而 attention 的成功表明了 MLP(多层感知器)网络可以被上下文向量影响的平均网络(averaging network)所替代。

两年过去了,我们现在已经可以给出结论:

放弃 RNN 和 LSTM 吧,它们真的不好用

基于 attention 的网络逐渐被越来越多的企业采用,比如 Google,Facebook,Salesforce 等公司都已经开始用基于attention的模型来替换RNN和其变种。RNN 在各种应用场景下时日无多,因为相比基于 attention 的模型,RNN 需要更多的资源来训练和运行。

编者注:训练 RNN 和 LSTM 是非常困难的,因为计算能力受到内存和带宽等的约束。这同时也是硬件设计者的噩梦,并最终限制了神经网络解决方案的适用性。简而言之,每个 LSTM 单元需要 4 个线性层(MLP 层),以便每个顺序时间步运行一次。线性层需要大量的内存带宽才能执行计算;由于系统没有足够的内存带宽将数据馈送到计算单元,实际上它们无法使用许多计算单元。添加更多的计算单元很容易,但添加更多的内存带宽却很难。因此,RNN/LSTM 及其变种并不和硬件加速非常匹配,一个可能的解决方案就是让计算在存储器设备中完成。

为什么 RNN/LSTM 真的不好用?

RNN,LSTM及其变种主要使用序列处理,如下图所示:

图1 RNN中的序列处理

图中的箭头表示长期信息在进入当前的处理单元前需要有序地进入所有其他的处理单元。也就是说,这很容易通过多次乘小于 0 的数字来进行破坏和攻击,这就是梯度消失的原因。

梯度消失可以利用 LSTM 模块来补救,目前的 LSTM 可是看作是多交换网关,有点像 ResNet。因为 LSTM 可以绕过一些单元,对长时间的步骤进行记忆,因此 LSTM 可以一定程度上解决梯度消失的问题。

图2 LSTM中的序列处理

从图2可以看出,从前面的单元传递来当前单元的序列路径依然存在。事实上,因为这条路径会不断添加并且会遗忘与之相关的路径分支,它会变得越来越复杂。LSTM、GRU 及其变体能学习大量的长期信息,但它们最多只能记住约 100s 的长期信息,而不是 1000s,10000s 甚至更长时间的信息。

RNN 还有一个问题就是并不与所有硬件兼容。如果要快速训练 RNN,那么就需要大量的计算资源,而这正是我们缺少的。如果在云上运行 RNN 模型的话,也会消耗比其他模型更多的资源。随着语音转文本需求的快速增长,云端的扩展也变得更加困难。

你需要做些什么?

因为大多数时间我们处理的都是实时的因果数据(casual data),我们想利用这些已知的数据来为之后的决策做准备。那如果可以避免进行序列处理,我们就可以找出更好的 look-ahead 和 look-back 的单元,这样的 look-ahead/back 就叫做 neural attention 模块。

这种补救方法融合了多个 neural attention 模块,组成了一个分层的 neural attention 编码器,如图3所示:

图3 分层 neural attention 编码器

还有一种更好地分析过去的方法就是用 attention 模块把过去所有的编码向量总结为一个上下文向量 Ct。

这里还有一个 attention 模块的分层,与神经网络和时间卷积网络(Temporal convolutional network)的分层非常像。分层神经 attention 编码器的多层 attention 能查看过去信息的一小部分,比如说 100 个向量,而上面分层的attention模块还能查看到 100 个下层的注意力模块,也就是 100×100 个向量。这极大地扩展了分层神经 attention 编码器的能力。

更重要的是将传播向量传输到网络输出所需要的路径长度:在分层网络中,路径长度与 Log(N)成比例的,其中 N 是分层的层数。这与 RNN 需要执行的T步骤形成了对照,其中 T 是需要记住的顺序的最大长度,而 T >> N。

Neural Turing Machines(NTM,神经图灵机)的架构也与图3类似,但是 NTM 是让神经网络来决定通过 attention 从内存中读取什么的。也就是说,真实的神经网络将决定哪个过去的向量对未来的决策更重要。

在内存存储方面。与 NTM 不同,上面的架构把所有之前的表示都储存在内存里,这就会造成效率比较低的问题。有一个解决的办法就是增加另外一个单元来防止有相互关系的数据多次保存。当前科学研究的重点是由应用去决定保存哪些向量,哪些不保存。

目前许多的公司仍在使用 RNN/LSTM 来进行语音转文本的工作,都没有意识到这种网络结构在效率和可扩展性上的缺点。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    41

    文章

    3338

    浏览量

    131251
  • rnn
    rnn
    +关注

    关注

    0

    文章

    67

    浏览量

    6793

原文标题:放弃 RNN/LSTM 吧,因为真的不好用!望周知~

文章出处:【微信号:AI_Thinker,微信公众号:人工智能头条】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    插拔类的接线端子,要测试多次吃插拔才算成功

    1、插拔类的端子好不好用
    发表于 03-25 14:28

    求助Proteus大神帮助

    我在Proteus中画了一个图,运行起不好用,编程应该是没有问题的,因为是小白所以不知道错误出在哪里 ,祈求帮助,
    发表于 03-20 08:17

    请问大家有没有类似流动管道的控件

    自己用滑动杆做了一下模拟管道液体流动的自定义控件,感觉不好用,请问下有官方的这种类似控件吗?
    发表于 03-16 15:37

    什么是RNN (循环神经网络)?

    循环神经网络 (RNN) 是一种深度学习结构,它使用过去的信息来提高网络处理当前和将来输入的性能。RNN 的独特之处在于该网络包含隐藏状态和循环。
    发表于 02-29 14:56 439次阅读
    什么是<b class='flag-5'>RNN</b> (循环神经网络)?

    SPI中断收取数据不全怎么解决?

    了,处理内容不是很多,所以我把时钟HFClk和SysClk从24MHz改成了32MHz,问题是解决了,但是我改成更高的时钟48MHz,发现又不好用了,这是为什么呢?有什么好的办法来处理一次性接收138Bytes数据的问题吗?
    发表于 02-18 08:02

    精选 25 个 RNN 问题

    ,非常适合RNN。与其他神经网络不同,RNN具有内部存储器,允许它们保留来自先前输入的信息,并根据整个序列的上下文做出预测或决策。在本文中,我们将探讨RNN的架构、它
    的头像 发表于 12-15 08:28 228次阅读
    精选 25 个 <b class='flag-5'>RNN</b> 问题

    EVAL-AD7190测试数据都是FFFFFF,请帮忙分析一下哪里有问题?

    我买了一个EVAL-AD7190开发板,测试了一段时间一切正常,现在EVAL-AD7190的测试数据都是FFFFFF。AD7190已经更换了一次还是这个现在。就是不好用了。之前用STM32F105RC SPI实验过这个EVAL-AD7190也是FFFFFF。帮忙分析一下哪里有问题谢谢。
    发表于 12-11 08:18

    为什么ad5737不工作?

    初始化步骤是按datasheet里写的 电路也是按datasheet里弄的, 我可以对5737进行读写,但就是不工作,应该是DC_DC没有上电, 读出来的时候DC_DC也是1,但就是不好用
    发表于 12-04 07:17

    CC430系列有似arduino那样简单的开发环境吗?

    最近想玩玩大气压传感器,想起手上还有TI的Chronos手表套件,上边有个大气压传感器,但是CCS开发环境不好用,求推荐类似arduino那样的,简单粗暴无脑的开发环境,当然得带ez430-Chronos库函数的,energia好像不支持CC430?​​
    发表于 10-19 07:36

    Vitis AI RNN用户指南

    核、工具、库、模型和示例设计组成。它们在设计时充分考虑了高效率和易用性,可在 Xilinx FPGA 和自适应计算加速平台 (ACAP) 上释放 AI 加速的全部潜力。RNN 工具通过抽象底层 FPGA 和 ACAP 的复杂性,使开发
    发表于 09-13 17:32 0次下载
    Vitis AI <b class='flag-5'>RNN</b>用户指南

    fpga进行图像处理的优势是什么

    可能制约FPGA在这些方面应用的关键还是人才的缺乏。大家不知道FPGA擅长什么,想用却又不知道怎么用。网上很多传说都说这个FPGA编程很底层,很不好用
    发表于 08-25 09:21 694次阅读
    fpga进行图像处理的优势是什么

    求助,有没有SC0用作串口的例程?

    有没有SC0 用作串口的例程?在BSP包里面的不好用
    发表于 08-24 06:43

    手持激光焊接机厂家镭拓告诉你手持激光焊好用

    ,如不锈钢、碳钢、铜、铁等材料。很多人会问手持激光焊接与传统的焊接方式相比究竟好不好用?本篇镭拓就给大家详细分析一下手持激光焊是否真的好用。手持激光焊接机是否好用
    的头像 发表于 07-11 10:40 430次阅读
    手持激光焊接机厂家镭拓告诉你手持激光焊<b class='flag-5'>好用</b>吗

    PyTorch教程-10.1. 长短期记忆 (LSTM)

    10.1. 长短期记忆 (LSTM)¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab
    的头像 发表于 06-05 15:44 504次阅读
    PyTorch教程-10.1. 长短期记忆 (<b class='flag-5'>LSTM</b>)

    大家觉得示教器好不好用

    示教器怎么设计最好用? 机器人编程,看是一种程序设计,实际上更多的是建模数据设计。 所以, 示教器更接近3d建模最好,例如,一定要有sin,cos等三角形和圆形计算按钮。 我的三角形学得很烂,就不多说了。 要说编程功能的话,一定要有api表,可以一键调用。 我没有上过机,如果说错了请不要介意。
    发表于 05-24 15:32