内容简介:RNN能够获取输入序列的顺序信息。两个最常用的循环单元是长短时记忆(LSTM)和门控循环单元(GRU),二者均能在隐状态存储之前的记忆,并使用门机制来决定有多少之前的记忆需要和当前输出结合。然而由于循环结构,RNN不能并行计算。因此训练RNN需要花费大量时间,从而限制了RNN在科研和工业的发展。一些学者通过改进循环单元来提升RNN的速度,也取得了较好的成果。但是这种方法虽然提升了RNN的速度,整体序列的循环结构并没有改变。我们依然需要等待前一步的输出,所以阻碍RNN速度提升的瓶颈依然存在。在这篇文章中,
一、介绍
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决定多少之前的记忆被保留下来。
其中x是输入,h是隐状态。
候选隐状态ht由reset gate控制。当reset gate为0时,之前的记忆就被忽略了。
当update gate为1时,隐状态将之前的记忆拷贝给当前时刻,并且忽略当前输入。
标准RNN结构
标准RNN结构如图1所示,A代表循环单元。
图1 标准RNN结构,每一步都需要等待前一步循环单元计算输出。
输入序列X的长度为T,假设T=8。标准RNN使用最后的隐状态h8作为全部序列的表示,然后增加一个softmax分类器来预测类标。在每一步,我们都需要等待网络计算前一步的输出:
这一标准RNN结构由于每两个相邻神经元的连接,从而引起了速度瓶颈:输入序列越长,需要的时间越长。
切片循环神经网络(SRNN)
我们建立了一种新的RNN结构:切片循环神经网络(SRNN),如图2所示。
图2 SRNN结构。
SRNN将输入序列划分成几个等长的最小序列,循环单元在每层的小序列上同时工作,然后信息可以通过多个网络层进行传递。
假设输入序列X的长度为T,输入序列为:
其中x是每一步的输入,可以有多个维度。然后我们将X划分成n个等长的子序列,每一个子序列N的长度为:
因此序列X则可以表示为:
每一个子序列为:
类似的,我们再将每个子序列N划分成n个等长的序列,然后重复这样的划分操作k次,直到最底层的最小子序列长度合适(图2中的第0层),然后通过这k次分割,就可以得到k+1层网络。第0层的最小子序列长度为:
第0层的最小子序列数量为:
由于p层的每个输入序列都被划分为n块,第p层的子序列数量为:
第p层的子序列长度为:
以图2为例,序列长度为T=8,切片次数k=2,每一层的切片数n=2。通过两次分割操作,我们在第0层得到了4个最小子序列,每个最小子序列的长度为2。如果序列或子序列的长度不能被n整除,我们就利用padding的方法或者在每一层选择不同的切片数。
SRNN与标准RNN的不同在于,SRNN将输入序列切割成许多最小子序列,并且在每个子序列上应用循环单元。这样一来,子序列就可以并行计算。在第0层,循环单元通过连接结构在每个最小子序列上进行操作。随后,我们获取每个最小子序列的最后的隐状态作为第1层的输入。以此类推,在p-1层每个子序列的最后的隐状态都作为第p层的输入子序列,然后计算第p层子序列最后的隐状态:
我们在每一层均重复该操作,直到我们获得顶层(第k层)的隐状态F:
分类问题
与标准RNN类似,我们将softmax层加在最终的隐状态F后面对类标进行分类:
损失函数为负对数似然函数:
速度优势
SRNN之所以能够并行计算是因为它改进了传统的连接结构。在SRNN中,不是每一个输入都与其之前的时刻相关联,但是整个序列通过切片的方式连接起来。SRNN依然可以通过每个子序列的循环单元获取序列顺序,然后通过多层网络传递信息。假设每个循环单元需要花费的时间为r,则标准RNN需要花费的时间为:
T为序列长度。而在SRNN中,每个最小子序列可以并行计算,所以在第0层花费的时间为:
以此类推,在第p层花费的时间为:
因此SRNN花费的总时间为:
我们可以计算出SRNN的速度优势:
R是SRNN比标准RNN快的倍数。我们可以选择不同的n和k来得到不同的速度优势。
SRNN与标准RNN的关系
在标准RNN结构中,每一步都与输入和前一步相关:
其中x表示输入,h表示隐状态。函数f可以是非线性激活函数,例如sigmoid,或者线性激活函数例如ReLU。为了简化问题,我们讨论使用线性函数的情况:
我们将偏置b和h0设为0。对于标准RNN,最后的隐状态可以通过如下计算得到:
假设我们构建SRNN(n,k),即切片k次,切片数量为n。SRNN有k+1层,每一层的子序列长度为n。我们可以计算第0层每个最小子序列的最后输出隐状态:
类似的,我们将p-1层得到的隐状态作为第p层的输入,然后计算第p层的隐状态:
从第0层到第k层重复该操作,最后可以得到第k层的最终隐状态F:
当我们把之前层的隐状态计算公式代入上式,可以得到:
对比该式和标准RNN的计算式,我们可以发现当满足如下条件时:
这两个公式可以得到相同的结果。其中I为单位矩阵,U和W是网络参数。这意味着当函数f为线性函数,并且满足上述条件时,SRNN的输出与标准RNN的输出相同,所以标准RNN是SRNN的一种特殊情况。因此,当不同层的参数不同时,SRNN比标准RNN能够从输入序列中获取更多的信息。
三、实验
数据集
我们在6个大型情感分析数据集上对SRNN进行测试。表1给出了这些数据集的信息。每个数据集的80%用于训练,10%用于验证,10%用于测试。
表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。
表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所示。
表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倍!(代码已开源)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- PHP通过表单直接提交大文件
- 上海交大:基于近似随机Dropout的LSTM训练加速
- 推荐几个清华和交大学霸的公众号,值得学习!
- 上交大卢策吾团队AlphaPose更新,顶级性能的实时姿态估计
- 云从科技联合上交大提出DCMN匹配机制,刷新机器阅读理解记录
- 前端设计图转代码,西安交大表示复杂界面也能一步步搞定
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。