ICLR 2020 | Reformer ,一种高效的Transformer
- 2020 年 4 月 19 日
- AI
本文介绍的是ICLR2020入选 Oral 论文《Reformer: The Efficient Transformer》,作者来自UC 伯克利和谷歌大脑。
作者 | 李光明
论文地址://openreview.net/pdf?id=rkgNKkHtvB
Transformer是NLP中广为应用的成熟技术,在许多任务中取得了骄人的成绩,尤其是长序列文本上表现突出,但却极其耗费算力和内存资源,Transformer网络一层的参数量约0.5B,需要2G的内存空间,单层网络的Transformer在单台机器上尚可满足,但鉴于以下考虑,整个Transformer网络所需要的资源是惊人的:
-
一个N层的网络需要的内存资源要多于一层所需内存的N倍,因为同时需要存储激活结果,在反向传播时使用。 -
Transformer前馈全连接神经网络的宽度(神经单元数)要比attention激活的宽度(可理解为embedding的size)多,需要更多的内存消耗。 -
对一个长度为L的序列,Attention层的复杂度是,这对长序列文本处理是无法接受的。
针对上述问题,这篇文章通过下面几项技术解决上面提到的几个问题:
-
使用可逆残差层取代标准残差层,在训练阶段只需要存储一层的激活结果而不是N层(N是网络层数)(消除了网络中N的倍数)。 -
分离前馈全连接层的激活部分,分区块进行处理,消除对内存的消耗。 -
使用局部敏感哈希(Local-Sensitive Hashing, LSH)技术把计算attention部分的复杂度(主要来自于点乘)从降至(其中L代表序列长度)。


为计算LSH attention,首先重写的一次attention计算如下:
为了解决这个问题,首先通过确保。接下来根据桶号和桶内序列位置对 queries 进行双层排序,排序后可以得到一个新的排序,排序后的 attention 矩阵,同一个桶的将聚集在对角线附近,如下图c所示(Q=K,文中的设定,实验阶段会验证此设定不会造成太大影响),接下来可以定义一种批处理方法,使得排序后的 m 个连续的块相互关联,如下图d所示,关联规则是后面的块只需要往前看一个块,并对设置如下:
可逆残差网络的思路是在反向传播梯度时,仅依赖模型参数,就可以利用后续网络层恢复任何给定层的激活结果,从而节省内存空间。标准的残差层是从一个输入到一个输出 的映射,而可逆层的输入输出都是成对的: ,计算公式如下:
逆向过程通过减残差实现:
将可逆残差网络的思想应用到 Transformer 中,充分结合 Attention 层和 Feed-Forward 层,上式中的变成 Attention 层,变成 Feed-Forward 层,于是有:
Transformer 前馈网络的中间向量维度甚至更高维度,依然非常占用内存;其实,序列中不同位置的文本可以完全独立计算,因此可以拆分成多个区块并行计算:
