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

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

内容简介: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倍!(代码已开源)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

The Zen of CSS Design

The Zen of CSS Design

Dave Shea、Molly E. Holzschlag / Peachpit Press / 2005-2-27 / USD 44.99

Proving once and for all that standards-compliant design does not equal dull design, this inspiring tome uses examples from the landmark CSS Zen Garden site as the foundation for discussions on how to......一起来看看 《The Zen of CSS Design》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换