LSTM的性能局限

2023-10-18 21:10
文章标签 性能 lstm 局限

本文主要是介绍LSTM的性能局限,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

元学习论文总结||小样本学习论文总结

2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019

一:LSTM的局限性
      

循环神经网络(RNN),长短期记忆(LSTM),在现在都得到了广泛的应用。LSTM和RNN被发明于上世纪80、90年代,于2014年死而复生。接下来的几年里,它们成为了解决序列学习、序列转换(seq2seq)的方式,这也使得语音到文本识别和Siri、Cortana、Google语音助理、Alexa的能力得到惊人的提升。另外,不要忘了机器翻译,包括将文档翻译成不同的语言,或者是神经网络机器翻译还可以将图像翻译为文本,文字到图像和字幕视频等等。

      在接下来的几年里,ResNet出现了。ResNet是残差网络,意为训练更深的模型。2016年,微软亚洲研究院的一组研究员在ImageNet图像识别挑战赛中凭借惊人的152层深层残差网络(deep residual networks),以绝对优势获得图像分类、图像定位以及图像检测全部三个主要项目的冠军。之后,Attention(注意力)模型出现了。所有的大型科技企业企业已经将RNN及其变种替换为基于注意力的模型。因为比起基于注意力的模型,RNN需要更多的资源来训练和运行。

2.1 LSTM的缺点分析

记住:不管是RNN还是LSTM及其衍生主要是随着时间推移进行顺序处理。请参阅下图中的水平箭头:

 

水平箭头的意思是长期信息需在进入当前处理单元前顺序遍历所有单元。这意味着其能轻易被乘以很多次<0的小数而损坏。这是导致vanishing gradients(梯度消失)问题的原因。

为此,今天被视为救星的LSTM模型出现了,有点像ResNet模型,可以绕过单元从而记住更长的时间步骤(LSTM之所可以解决梯度问题是因为它避免了无休止的连乘,而是边加边乘,这和resnet本身就是异曲同工的)。因此,LSTM可以消除一些梯度消失的问题。

 

从上图可以看出,这并没有解决全部问题。我们仍然有一条从过去单元到当前单元的顺序路径。事实上,这条路现在更复杂了,因为它有附加物,并且忽略了隶属于它上面的分支。毫无疑问LSTM和GRU(Gated Recurrent Uni,是LSTM的衍生)及其衍生能够记住大量更长期的信息!但是它们只能记住100个量级的序列,而不是1000个量级,或者更长的序列。

      还有一个RNN的问题是,训练它们对硬件的要求非常高。另外,在我们不需要训练这些网络快速的情况下,它仍需要大量资源。同样在云中运行这些模型也需要很多资源。训练RNN和LSTM的噩梦,RNN和LSTM的训练是困难的,因为它们需要存储带宽绑定计算,这是硬件设计者最糟糕的噩梦,最终限制了神经网络解决方案的适用性。简而言之,LSTM需要每个单元4个线性层(MLP层)在每个序列时间步骤中运行。线性层需要大量的存储带宽来计算,事实上,它们不能使用许多计算单元,通常是因为系统没有足够的存储带宽来满足计算单元。而且很容易添加更多的计算单元,但是很难增加更多的存储带宽(注意芯片上有足够的线,从处理器到存储的长电线等)。因此,RNN/LSTM及其变种不是硬件加速的良好匹配,

2.2 缺点总结

(1)RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是不够。它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然会显得很棘手。

(2)计算费时。每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。


————————————————————————————————————————————————

 

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

https://blog.csdn.net/heyc861221/article/details/80174475

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及其变种主要使用序列处理,如下图所示:

 

640?wx_fmt=png

图1 RNN中的序列处理

 

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

 

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

 

640?wx_fmt=png

图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所示:

 

640?wx_fmt=jpeg

图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 来进行语音转文本的工作,都没有意识到这种网络结构在效率和可扩展性上的缺点。

 

所以,转发这篇文章,告诉他们,RNN/LSTM 真的不好用,尽早放弃吧。

这篇关于LSTM的性能局限的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/235165

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

SQL2005 性能监视器计数器错误解决方法

【系统环境】 windows 2003 +sql2005 【问题状况】 用户在不正当删除SQL2005后会造成SQL2005 性能监视器计数器错误,如下图 【解决办法】 1、在 “开始” --> “运行”中输入 regedit,开启注册表编辑器,定位到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVer

Linux性能分析工具合集

Linux性能分析工具合集 工具合集主要包含以下各种工具,对于了解Linux系统结构、网络结构、内核层次具有一定的帮助。 Linux Performance Observability ToolsLinux Static Performance ToolsLinux Performance Benchmark ToolsLinux Performance Tuning ToolsLinux

Linux的系统性能监测参数获取方法介绍

目前的工程需要简单的监测一下Linux系统的:CPU负载、内存消耗情况、几个指定目录的磁盘空间、磁盘I/O、swap的情况还有就是网络流量。   Linux下的性能检测工具其实都有很多。   mrtg(http://people.ee.ethz.ch/~oetiker/webtools/mrtg/)就是一个很不错的选择。不过用mrtg就要装sysstat、apache、snmp、pe

性能测试工具 wrk,ab,locust,Jmeter 压测结果比较

前言 在开发服务端软件时,经常需要进行性能测试,一般我采用手写性能测试代码的方式进行测试,那有什么现成的好的性能测试工具吗? 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 详见: 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 Jmeter性能测试 入门