Introduction

自2017年发明以来,基于神经网络的Transformer架构在不同的人工智能任务中取得了巨大成功。转换器体系结构通常可以分为三组:encoder-decoder体系结构、encoder-only体系结构和decoder-only体系结构。例如,在原始Transformer论文“Attention Is All You Need”中开发的用于解决语言翻译问题的Transformer使用encoder-decoder架构,曾经非常流行的基于Transformer架构的模型BERT能够处理各种不同的自然语言任务,使用encoder-only的架构,著名的OpenAI GPT系列模型,如ChatGPT,已被证明具有很好的人工通用智能,使用decoder-only架构。

基于Transformer结构的神经网络,特别是那些大型语言模型,通常有数十亿个参数。因此,即使是在大规模的预训练Transformer模型中运行推理也是一个挑战。在本文中,我想从数学的角度讨论如何优化Transformer自回归推理,特别是对于encoder-decoder架构和decoder-only架构的Transformer。

Transformer Autoregressive Inference Computational Complexity

在Transformer诞生之前,已经有一些其他类型的神经网络以自回归的方式进行推理。其中最著名的是递归神经网络。递归神经网络利用潜在状态特征向量在一定程度上“记忆”了自回归推理过程中的先验上下文。其自回归推理并不复杂。在每个时间步,递归神经网络只消耗一个令牌,并且推理是渐近的在固定时间内运行的操作。因此,要运行自回归推理 n 次对于递归神经网络,其推理渐近计算复杂度为.
然而,如果没有很好地优化,Transformer模型自回归推理可能会渐近地慢得多。Transformer模型不像循环神经网络那样“记忆”先前的上下文。相反,它们直接查看先前的上下文,并对先前的token给予不同的关注。在Transformer解码器自回归推理中,使用“vanilla”配方,在时间步长 n ,Transformer解码器必须消耗 n token,由于自我关注机制此时间步骤的推理是。因此,要运行自回归推理 n 对于Transformer decoder,其推理渐近计算复杂度为, 这是我们通常负担不起的。
然而,对 Transformer decoder 数学的仔细研究表明,有可能将时间步长n处推理的渐近复杂性从降低到。因此,对于transformer decoder运行n次自回归推理,推理的渐近计算复杂度可以从原来的降低到。

Transformer Autoregressive Inference Optimization

我们将在 Transformer 体系结构中的每一层类型中检查和优化transoformer自回归解码,例如masked self-attention head、编码器-解码器体系结构中使用的cross-attention head 和 multi-head attention layer。事实证明,通过适当的缓存,每种类型的层的推理都是增量的,也就是说,向每一层添加一个新的输入令牌不会影响前一个输入令牌的输出。因此,在时间步长n时,我们只需要提供一个令牌而不是n个令牌,并且只计算与该令牌相关的注意力,这大大降低了自回归推理成本。

Masked Self-Attention Head (decoder)

在自回归解码中,在时间步长 n 处,解码器的输入token个数为n。maksed self-attention head 的输入张量为 attention 张量,其中 n 为解码器的输入token个数,为每个令牌的注意特征个数。masked self-attention 的参数为: query 特征变换,key特征变换,value特征变换,其中为注意力头中每个令牌的query或key特征的个数,为注意头中每个令牌的值特征的个数。masked self-attention head的输出张量是一个注意张量。

Qurey:


Key:


Value:


Output:



需要 cache。是下一层的输入。

Cross Attention Head (encoder-decoder)




Multi-Head Attention



Other Layers

Layer normalization层,feed forward层,最终的softmax层等,在单个token特征上执行。很明显,我们只需要在每个时间步骤上计算新注意力token的输出张量,而不必重新计算前一个时间步骤的注意力标token。

Conclusions

在transformer自回归推理中,在每个时间步使用适当的缓存,就不需要计算所有先前的token attention。这降低了自回归推理运行n x的推理渐近计算复杂度。
然而,在内运行n次自回归推理仍然非常昂贵。这就是为什么在商业应用中允许的token数量通常是有限的。例如,ChatGPT只允许token的数量为几千。这也意味着,如果用户与ChatGPT交谈太多,ChatGPT将无法从对话开始一直回顾上下文。
最后,整个transformer自回归推理优化只有在transformer解码器中各类型层的推理都是增量的情况下才有效。如果某些层被更改,使其推理不再是增量的,例如 removing the mask from the self-attention heads,则在添加新token时,先前tokens的推理将被中断。因此,在这种情况下,在自回归推理期间,即使没有应用优化,推理行为也会变得“意外”或“未定义”。
来源丨 指北笔记

参考文献

https://leimao.github.io/article/Transformer-Autoregressive-Inference-Optimization/