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

阅读论文 《Train RNN as fast as CNN》

左边是通用的RNN结构,右边是SRU

  • 在传统的结构中,每次输入step xt, t=1,,n 依赖于前一步。这阻碍了并行化。
  • SRU的设计,使得处理输入的过程能与其他输入独立(大灰块),用相对轻量级的计算做递归组合(小灰块)。主要的计算(虚线框内)能被轻易的并行化。

Average processing time

阅读论文 《Train RNN as fast as CNN》

使用cuDNN LSTM和字级别的2D卷积,提出的SRU在32个样本每一批的平均处理时间(毫秒)
- D:特征维数
- K:特征宽度
- l:每一个序列的令牌数

METHOD

Formula

SRU的基础形式包含一个遗忘门,给出一个在t时间给出xt输入,我们可以计算一个装换x~t和一个遗忘门ft

x~t=Wxt

ft=σ(Wfxt+bf)

计算只依赖xt,使得能让所有的时间步并行化, 遗忘门能调制用来产生输出的状态的ht的内部状态ct.
ct=ftct1+(1ftx~t)

ht=g(ct)

其中g()是一个**函数,用来产生ht状态。使用公路连接(SRistava等人,2015),并添加类似于遗忘门ft计算的复位门rT。复位门用于计算输出状态ht作为内部状态g(ct)和输入xt的组合。
完整结构如下:
(1)ct=ftct1+(1ftx~t)

(2)ht=g(ct)

(3)rt=σ(Wrxt+br)

(4)ct=ftct1+(1ft)x~t

(5)ht=rtg(ct)+(1rt)xt

We set g() = tanh for all our experiments, unless specified otherwise

完全抛弃第t步的门计算和第t=1n步之间的联系。给定输入序列x1,,xn,得到t=1n时对应的x~t,ft,rt,能进行并行计算

CUDA-LEVEL Optimization

优化SRU和cuDNN LSTM是如何优化的一样。SRU公式允许两个优化:
- 第一个: 把公式13中的在批处理中的矩阵运算优化:

UT=(WWfWr)[x1,x2,,xn]

- 第二个:序列的所有元素操作可被融合成一个核函数,并在隐藏状态D的维度上并行化。

Algorithm I

阅读论文 《Train RNN as fast as CNN》

论文原文:Train RNN as fast as CNN
机器之星的翻译

相关文章: