Train RNN as fast as CNN
@(NLP)[cuDNN-LSTM, SRU]
ABSTRACT
作者提出了一个简单循环单元的架构(SRU),能够轻易的实现并行化。SRU像CNN一样快,比优化后的LSTM实现快5到10倍。
In SRU, the majority of computation for each step is independent of the recurrence and can be easily parallelized. SRU is as fast as a convolutional layer and 5-10x faster than an optimized LSTM implementation.
Architecture
左边是通用的RNN结构,右边是SRU
- 在传统的结构中,每次输入step , 依赖于前一步。这阻碍了并行化。
- SRU的设计,使得处理输入的过程能与其他输入独立(大灰块),用相对轻量级的计算做递归组合(小灰块)。主要的计算(虚线框内)能被轻易的并行化。
Average processing time
使用cuDNN LSTM和字级别的2D卷积,提出的SRU在32个样本每一批的平均处理时间(毫秒)
- D:特征维数
- K:特征宽度
-
:每一个序列的令牌数
METHOD
Formula
SRU的基础形式包含一个遗忘门,给出一个在t时间给出
输入,我们可以计算一个装换
和一个遗忘门
计算只依赖 ,使得能让所有的时间步并行化, 遗忘门能调制用来产生输出的状态的 的内部状态 .
其中 是一个激活函数,用来产生 状态。使用公路连接(SRistava等人,2015),并添加类似于遗忘门 计算的复位门 。复位门用于计算输出状态 作为内部状态 和输入 的组合。
完整结构如下:
We set g() = tanh for all our experiments, unless specified otherwise
完全抛弃第 步的门计算和第 步之间的联系。给定输入序列 ,得到 时对应的 ,能进行并行计算
CUDA-LEVEL Optimization
优化SRU和cuDNN LSTM是如何优化的一样。SRU公式允许两个优化:
- 第一个: 把公式
中的在批处理中的矩阵运算优化:
- 第二个:序列的所有元素操作可被融合成一个核函数,并在隐藏状态D的维度上并行化。