可逆Transformer(Reversible Transformer)是一种旨在解决传统Transformer内存消耗大问题的创新架构。传统Transformer在模型深度增加和处理长序列时,内存需求急剧上升,严重限制了其实际应用。可逆Transformer则通过独特的设计有效缓解了这一难题。

核心原理

可逆Transformer的核心基于可逆残差网络(RevNets)的原理。在普通神经网络的反向传播过程中,为了计算梯度,需要存储中间层的激活值,这使得内存占用随着网络层数线性增加。而可逆Transformer的设计允许从后续层的激活值恢复当前层的激活值,反向传播时无需存储中间激活值,从而大大降低内存需求。

在具体实现中,可逆Transformer将注意力层和前馈层进行整合,并把层归一化操作移至残差块内部。这样的结构调整避免了存储每层的激活值,去除了内存复杂度中与层数相关的因子。例如,在处理长序列文本时,传统Transformer可能因内存不足而难以完成任务,可逆Transformer却能凭借其低内存占用的特性顺利运行。

分块技术优化

除了上述的可逆结构,分块技术(Chunking)也是可逆Transformer的重要优化手段。前馈层的计算在序列位置间相互独立,基于此,可逆Transformer可以将前馈层的计算分块进行。这样一来,在计算过程中,不需要一次性处理整个序列,降低了内存使用。同时,输出层的对数概率也可以分块计算损失,进一步提升了内存使用效率。

内存优化策略

可逆Transformer通过结合分块技术和可逆层,使得网络激活内存的使用与层数无关,极大提升了内存使用效率。另外,为了解决随着层数增加,参数存储带来的内存问题,可逆Transformer采用了在非计算时将层参数在CPU和GPU间交换的策略。通过这种方式,在不影响计算效率的前提下,有效解决了内存占用问题,使得模型在处理大规模数据和复杂任务时更加高效、稳定 。

实验效果

在多个实验任务中,如enwik8 - 64K任务和WMT 2014英德翻译任务,可逆Transformer展现出了卓越的性能。在保持与传统Transformer相当准确率的同时,可逆Transformer显著节省了内存,并且在训练速度上也有一定优势。这表明可逆Transformer在实际应用中,既能保证模型的效果,又能降低硬件成本和计算资源的需求。