百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

ASAPP与MIT联合发文:我们该如何训练RNN才能使其像CNN那样快?

ztj100 2024-12-19 17:57 33 浏览 0 评论

图:pixabay

原文来源:arxiv

作者:Tao Lei Yu Zhang

「机器人圈」编译:嗯~阿童木呀、多啦A亮

相信大家都知道,由于在并行化其状态计算时所存在的固有困难,循环神经网络的规模状态相对来说比较差。例如,直到ht-1的整个计算完成之后,ht的前向计算才开始执行,这就是并行计算村子的主要瓶颈问题。在这项工作中,我们提出了一种可替代的RNN实现方法,即故意简化状态计算并展现更多的并行性。而我们在此处所提出的循环单元的运行速度与卷积层一样快,甚至要比经cuDNN优化的LSTM快5至10倍。我们展示了该单元在广泛应用中所展现的有效性,包括分类,问答,语言建模,翻译以及语音识别。而我们将开源用PyTorch和CNTK1实现的代码资源。

现如今,在深度学习中所取得的一系列最新进展大都得益于日益增加的模型容量和相关的计算。这通常涉及使用更大更深的网络,而这往往是通过广泛的超参数设置进行调整得到的。但是,不断增长的模型大小和超参数,大大增加了训练时间。例如,训练一个最先进的翻译或语音识别系统往往需要几天的时间才能完成(Vaswani等人于2017提出,Wu等人于2016提出,Sak等人于2014提出)。很显然的一点是,计算已经成为深度学习研究领域的主要瓶颈问题。

为了应对显著增加的计算需求,诸如GPU加速训练这样的并行化已被广泛应用于扩展深度学习领域中(Diamos等人于2016提出; Goyal等人于2017提出)。虽然诸如卷积和注意这样的操作非常适合于多线程/ GPU计算,但是循环神经网络仍然不太适合并行化。在一个典型的实现中,输出状态ht的计算将会保持暂停,直到ht-1的整个计算完成。这个约束阻碍了独立的计算,并且大大地减缓了序列处理的进程。图1展示了经cuDNN优化的LSTM(Appleyard等,2016)和使用conv2d的词级卷积的处理时间。它们之间的区别是非常明显的——即使是经过特别优化的LSTM的实现速度也要慢10倍以上。

图1:使用cuDNN LSTM、单次级别卷积conv2d和建议的RNN实现的一批32个样本的平均处理时间(以毫秒为单位)。l:每个序列的token数,d:特征维度和k:特征宽度。报道的数字是基于具有Nvidia GeForce GTX 1070 GPU和Intel Core i7-7700K处理器的PyTorch。

在这项工作中,我们介绍了简单循环单元(SRU),其运行明显快于现有的循环实现。循环单元简化了状态计算,从而暴露出与CNN、注意力和前馈网络相同的并行性。具体来说,虽然内部状态ct的更新仍然使用先前的状态ct-1,但是在循环步骤中对ht-1的依赖性已经下降。因此,可以在不同的维度和步骤中容易地并行化循环单元中的所有矩阵乘法(即gemm)和元素操作。类似于cuDNN LSTM和conv2d的实现,我们通过将所有元素操作编译成单个内核函数调用来执行对SRU的CUDA级优化。如图1所示,我们的实现达到了与其conv2d配对物相同的速度。

当然,不能提供可比较或更好的准确性的替代实现将不具有适用性。为此,我们评估SRU广泛的应用范围包括分类、问答、语言建模、翻译和语音识别。实验结果证实了SRU的有效性——与这些任务的循环(或卷积)基线模型相比,它实现了更好的性能,同时能够更快地进行训练。

这项工作提供了简单的循环单元(SRU),其运行速度与CNN一样快速的模块,可轻松扩展到10层以上。 我们对NLP和语音识别任务进行了广泛的评估,证明了这个循环单元的有效性。我们开源实现方法,以促进未来NLP和深度学习的研究。

论文全文链接:https://arxiv.org/pdf/1709.02755.pdf

PyTorch代码实现:https://github.com/taolei87/sru

相关推荐

sharding-jdbc实现`分库分表`与`读写分离`

一、前言本文将基于以下环境整合...

三分钟了解mysql中主键、外键、非空、唯一、默认约束是什么

在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。...

MySQL8行级锁_mysql如何加行级锁

MySQL8行级锁版本:8.0.34基本概念...

mysql使用小技巧_mysql使用入门

1、MySQL中有许多很实用的函数,好好利用它们可以省去很多时间:group_concat()将取到的值用逗号连接,可以这么用:selectgroup_concat(distinctid)fr...

MySQL/MariaDB中如何支持全部的Unicode?

永远不要在MySQL中使用utf8,并且始终使用utf8mb4。utf8mb4介绍MySQL/MariaDB中,utf8字符集并不是对Unicode的真正实现,即不是真正的UTF-8编码,因...

聊聊 MySQL Server 可执行注释,你懂了吗?

前言MySQLServer当前支持如下3种注释风格:...

MySQL系列-源码编译安装(v5.7.34)

一、系统环境要求...

MySQL的锁就锁住我啦!与腾讯大佬的技术交谈,是我小看它了

对酒当歌,人生几何!朝朝暮暮,唯有己脱。苦苦寻觅找工作之间,殊不知今日之事乃我心之痛,难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日,可惜在下京东上的小金库都要见低啦。每每想到不由心中一...

MySQL字符问题_mysql中字符串的位置

中文写入乱码问题:我输入的中文编码是urf8的,建的库是urf8的,但是插入mysql总是乱码,一堆"???????????????????????"我用的是ibatis,终于找到原因了,我是这么解决...

深圳尚学堂:mysql基本sql语句大全(三)

数据开发-经典1.按姓氏笔画排序:Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as//从少...

MySQL进行行级锁的?一会next-key锁,一会间隙锁,一会记录锁?

大家好,是不是很多人都对MySQL加行级锁的规则搞的迷迷糊糊,一会是next-key锁,一会是间隙锁,一会又是记录锁。坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分析加...

一文讲清怎么利用Python Django实现Excel数据表的导入导出功能

摘要:Python作为一门简单易学且功能强大的编程语言,广受程序员、数据分析师和AI工程师的青睐。本文系统讲解了如何使用Python的Django框架结合openpyxl库实现Excel...

用DataX实现两个MySQL实例间的数据同步

DataXDataX使用Java实现。如果可以实现数据库实例之间准实时的...

MySQL数据库知识_mysql数据库基础知识

MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:查看数据库命令:(1).查看存储过程状态:showprocedurestatus;(2).显示系统变量:show...

如何为MySQL中的JSON字段设置索引

背景MySQL在2015年中发布的5.7.8版本中首次引入了JSON数据类型。自此,它成了一种逃离严格列定义的方式,可以存储各种形状和大小的JSON文档,例如审计日志、配置信息、第三方数据包、用户自定...

取消回复欢迎 发表评论: