上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源)

栏目: 软件资讯 · 发布时间: 6年前

内容简介:RNN能够获取输入序列的顺序信息。两个最常用的循环单元是长短时记忆(LSTM)和门控循环单元(GRU),二者均能在隐状态存储之前的记忆,并使用门机制来决定有多少之前的记忆需要和当前输出结合。然而由于循环结构,RNN不能并行计算。因此训练RNN需要花费大量时间,从而限制了RNN在科研和工业的发展。一些学者通过改进循环单元来提升RNN的速度,也取得了较好的成果。但是这种方法虽然提升了RNN的速度,整体序列的循环结构并没有改变。我们依然需要等待前一步的输出,所以阻碍RNN速度提升的瓶颈依然存在。在这篇文章中,

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

一、介绍

RNN能够获取输入序列的顺序信息。两个最常用的循环单元是长短时记忆(LSTM)和门控循环单元(GRU),二者均能在隐状态存储之前的记忆,并使用门机制来决定有多少之前的记忆需要和当前输出结合。然而由于循环结构,RNN不能并行计算。因此训练RNN需要花费大量时间,从而限制了RNN在科研和工业的发展。

一些学者通过改进循环单元来提升RNN的速度,也取得了较好的成果。但是这种方法虽然提升了RNN的速度,整体序列的循环结构并没有改变。我们依然需要等待前一步的输出,所以阻碍RNN速度提升的瓶颈依然存在。在这篇文章中,我们将介绍切片循环神经网络(SRNN),SRNN的速度显著快于标准的RNN,而且不需要改变循环单元。当我们使用线性激活函数时,标准RNN即为一种特殊的SRNN,并且SRNN具有提取序列高级信息的能力。

为了方便对比,我们选用GRU作为循环单元。其他循环单元也可以用在SRNN的结构中,因为我们改进的是RNN的整体结构,而不是循环单元。

二、模型结构

门控循环单元GRU

GRU由reset gate r和update gate z组成。Reset gate决定有多少之前的记忆需要和新的输入结合,而update gate决定多少之前的记忆被保留下来。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

其中x是输入,h是隐状态。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

候选隐状态ht由reset gate控制。当reset gate为0时,之前的记忆就被忽略了。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

当update gate为1时,隐状态将之前的记忆拷贝给当前时刻,并且忽略当前输入。

标准RNN结构

标准RNN结构如图1所示,A代表循环单元。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

图1 标准RNN结构,每一步都需要等待前一步循环单元计算输出。

输入序列X的长度为T,假设T=8。标准RNN使用最后的隐状态h8作为全部序列的表示,然后增加一个softmax分类器来预测类标。在每一步,我们都需要等待网络计算前一步的输出:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

这一标准RNN结构由于每两个相邻神经元的连接,从而引起了速度瓶颈:输入序列越长,需要的时间越长。

切片循环神经网络(SRNN)

我们建立了一种新的RNN结构:切片循环神经网络(SRNN),如图2所示。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

图2 SRNN结构。

SRNN将输入序列划分成几个等长的最小序列,循环单元在每层的小序列上同时工作,然后信息可以通过多个网络层进行传递。

假设输入序列X的长度为T,输入序列为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

其中x是每一步的输入,可以有多个维度。然后我们将X划分成n个等长的子序列,每一个子序列N的长度为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

因此序列X则可以表示为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

每一个子序列为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

类似的,我们再将每个子序列N划分成n个等长的序列,然后重复这样的划分操作k次,直到最底层的最小子序列长度合适(图2中的第0层),然后通过这k次分割,就可以得到k+1层网络。第0层的最小子序列长度为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

第0层的最小子序列数量为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

由于p层的每个输入序列都被划分为n块,第p层的子序列数量为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

第p层的子序列长度为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

以图2为例,序列长度为T=8,切片次数k=2,每一层的切片数n=2。通过两次分割操作,我们在第0层得到了4个最小子序列,每个最小子序列的长度为2。如果序列或子序列的长度不能被n整除,我们就利用padding的方法或者在每一层选择不同的切片数。

SRNN与标准RNN的不同在于,SRNN将输入序列切割成许多最小子序列,并且在每个子序列上应用循环单元。这样一来,子序列就可以并行计算。在第0层,循环单元通过连接结构在每个最小子序列上进行操作。随后,我们获取每个最小子序列的最后的隐状态作为第1层的输入。以此类推,在p-1层每个子序列的最后的隐状态都作为第p层的输入子序列,然后计算第p层子序列最后的隐状态:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

我们在每一层均重复该操作,直到我们获得顶层(第k层)的隐状态F:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

分类问题

与标准RNN类似,我们将softmax层加在最终的隐状态F后面对类标进行分类:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

损失函数为负对数似然函数:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

速度优势

SRNN之所以能够并行计算是因为它改进了传统的连接结构。在SRNN中,不是每一个输入都与其之前的时刻相关联,但是整个序列通过切片的方式连接起来。SRNN依然可以通过每个子序列的循环单元获取序列顺序,然后通过多层网络传递信息。假设每个循环单元需要花费的时间为r,则标准RNN需要花费的时间为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

T为序列长度。而在SRNN中,每个最小子序列可以并行计算,所以在第0层花费的时间为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

以此类推,在第p层花费的时间为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

因此SRNN花费的总时间为:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

我们可以计算出SRNN的速度优势:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

R是SRNN比标准RNN快的倍数。我们可以选择不同的n和k来得到不同的速度优势。

SRNN与标准RNN的关系

在标准RNN结构中,每一步都与输入和前一步相关:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

其中x表示输入,h表示隐状态。函数f可以是非线性激活函数,例如sigmoid,或者线性激活函数例如ReLU。为了简化问题,我们讨论使用线性函数的情况:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

我们将偏置b和h0设为0。对于标准RNN,最后的隐状态可以通过如下计算得到:  上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

假设我们构建SRNN(n,k),即切片k次,切片数量为n。SRNN有k+1层,每一层的子序列长度为n。我们可以计算第0层每个最小子序列的最后输出隐状态:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

类似的,我们将p-1层得到的隐状态作为第p层的输入,然后计算第p层的隐状态:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

从第0层到第k层重复该操作,最后可以得到第k层的最终隐状态F:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

当我们把之前层的隐状态计算公式代入上式,可以得到:  上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

对比该式和标准RNN的计算式,我们可以发现当满足如下条件时:

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

这两个公式可以得到相同的结果。其中I为单位矩阵,U和W是网络参数。这意味着当函数f为线性函数,并且满足上述条件时,SRNN的输出与标准RNN的输出相同,所以标准RNN是SRNN的一种特殊情况。因此,当不同层的参数不同时,SRNN比标准RNN能够从输入序列中获取更多的信息。

三、实验

数据集

我们在6个大型情感分析数据集上对SRNN进行测试。表1给出了这些数据集的信息。每个数据集的80%用于训练,10%用于验证,10%用于测试。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源)

表1 数据集信息

Yelp点评:Yelp点评数据集来自Yelp数据集挑战赛,有5个情感标签。这个数据集包含4736892个文档,我们提取了三个子集,Yelp2013,2014和2015,分别包含468608、670440和897835个文档。Yelp_P是极性数据集,仅包含两类情感类标,一共598000个文档。

Amazon点评:Amazon点评数据集包含对2441053个产品的34686770条点评,来自6643669个用户。每条评论都有一个标题、一条内容和一个情感类标,我们将标题和内容结合成一个文档。这个数据集也被分为一个完整数据集,具有3650000个文档,和一个极性数据集,具有4000000个文档。

实验基线

我们主要对比SRNN和标准RNN结构,用GRU作为循环单元。我们用最后输出的隐状态作为文档的表示,在后面接入softmax层来预测类标。为了将SRNN和卷积结构进行对比,我们也构造了空洞因果卷积层作为实验基线。

训练

我们使用Keras自带的序列预处理工具,使所有序列的长度均为T。短于T的序列在末端补0,长于T的序列则从末端裁剪。Yelp数据集的T设为512,Amazon数据集的T设为256。对于每个数据集,我们用出现频率最高的30000个词作为词典。用预训练的GloVe来初始化词嵌入。

GRU的循环单元激活函数为sigmoid函数,每一层之后的激活函数为线性函数。

实验结果与分析

表2给出了每个数据集上的实验结果。我们选用了不同的n和k值,得到了不同的SRNN。例如SRNN(16,1)表示n=16,k=1,即当序列长度T=512时,最小子序列长度为32。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源)

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

表2 模型在验证集和测试集上的准确率和训练时间

实验结果表明SRNN的表现更好,并且比标准RNN具有更高的速度,而且参数更少。在不同数据集上,不同结构的SRNN分别取得了不同的表现。通过对比在Yelp数据集上测试的SRNN(2,8)和在Amazon数据集上测试的SRNN(2,7),我们发现即使他们没有获得最好的表现,也并没有损失太多准确率。这意味着SRNN能够将信息在多层网络之间传递,正因为如此,SRNN在训练很长的序列时可取得显著成效。当n=2时,SRNN与DCCNN具有相同的层数,但是其准确率远远高于DCCNN。这也说明SRNN的循环结构要优于空洞因果卷积结构。

当n和k的值较大时,SRNN的速度可以更快。我们在5120个文档上训练了模型,训练时间如表3所示。

 上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源) 

表3 在不同序列长度上的训练时间和速度优势

当序列长度为32768时,SRNN只需要52秒,而标准RNN需要将近2个小时,SRNN比标准RNN快136倍。并且序列长度越长,SRNN的速度优势就越明显。因此SRNN可以在例如语音识别、字符级别文本分类和语言建模等长序列任务上获得更快的速度。

为什么选择SRNN

这一部分我们将讨论SRNN的优势和重要性。随着RNN在NLP任务中的成功应用,许多研究提出通过改进RNN循环单元的结构来提升RNN的速度。但是RNN的连接结构才是限制RNN速度提升的瓶颈。SRNN通过切片结构提升了传统的连接结构,从而实现了RNN的并行计算。实验结果显示SRNN比标准RNN取得了更好的表现。

我们将原因归纳为以下三点:

(1) 当我们使用标准RNN连接结构时,循环单元很重要,但是当序列很长时,它们不能存储所有的重要信息。而SRNN将长序列分割成许多短的子序列,并且提取了短序列中的重要信息。SRNN能够将重要信息在多层结构中传递。

(2) SRNN能够从序列中获取高级信息,而不仅仅是单词级别的信息。以SRNN(8,2)为例,第0层获取的是从词嵌入中得到的语句级别的信息,第1层可以获得段落级别的信息,而第2层可以产生最终的文档级别的信息。而标准RNN只能获得单词级别的信息。

(3) 从处理序列的角度来看,SRNN更接近人类大脑的机制。例如,如果给我们一篇文章,并且向我们提出一些相关问题,我们一般不需要阅读整篇文章来得到正确答案。我们会定位到具体信息的段落,然后找到能够回答问题的语句。SRNN也可以通过多层网络结构做到这一点。

除了准确率的提升,SRNN最重要的优势在于它可以并行计算,从而获得更高的速度。实验结果和理论推导都证明SRNN的速度可以达到标准RNN的数倍。并且SRNN在越长的序列长可以得到更快的速度。随着网络的发展,每天都在产生大量的数据,而SRNN为我们处理这些数据提供了新方法。

四、未来研究方向

SRNN在文本分类问题中已经得到了成功应用,在未来,我们希望将其推广至更多NLP问题,例如回答问题、总结文本和机器翻译。在Seq2Seq模型中,SRNN可以用作编码器,而解码器可以通过反SRNN结构来改进。我们希望SRNN可以用于长序列任务,例如语言模型、音乐生成和语音生成。未来我们将探索更多的SRNN变体,例如加入双向结构和注意力机制。

查看论文原文:

项目开源代码:

https://github.com/zepingyu0512/srnn

感谢蔡芳芳对本文的策划和审校。


以上所述就是小编给大家介绍的《上交大提出支持并行计算的SRNN:比RNN快136倍!(代码已开源)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

码农翻身

码农翻身

刘欣 / 电子工业出版社 / 2018-6-1 / 69.00元

《码农翻身》用故事的方式讲解了软件编程的若干重要领域,侧重于基础性、原理性的知识。 《码农翻身》分为6章。第1章讲述计算机的基础知识;第2章侧重讲解Java的基础知识;第3章偏重Web后端编程;第4章讲解代码管理的本质;第5章讲述了JavaScript的历史、Node.js的原理、程序的链接、命令式和声明式编程的区别,以及作者十多年来使用各种编程语言的感受;第6章是作者的经验总结和心得体会,......一起来看看 《码农翻身》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具