最近因为要理解大模型训练、推理过程中的GPU服务器的各种参数,所以重新阅读了相关文章以对transformer架构重新梳理和回顾,感觉清晰了不少。
1.Transformer基础知识
Transformer模型具有编码器-解码器架构,并在许多神经机器翻译(neural machine translation, NMT)模型中常用。后来简化的Transformer被证明在语言类任务中有更加出色的性能,例如仅有编码器的BERT、仅有解码器的GPT。
(1)注意力和自我注意力 Attention and Self-Attention
注意力是神经网络中的一种机制,模型可以通过选择性地关注一组给定的数据来学习进行预测。注意力的数量通过学习的权重来量化,因此输出通常形成加权平均值。
自我注意力是一种注意力机制,其中模型使用关于同一样本的观察的其它部分对数据样本的一部分进行预测。自我注意力是排列不变的,换句话说,它是对 Sets 的操作。这里的Sets指的是序列数据中的各个位置上的特征向量的集合。这种特性使得自注意力机制非常适合处理那些内部元素顺序不固定但彼此之间存在复杂交互的数据结构,比如自然语言文本。
注意力/自我注意力有多种形式,Transformer依赖的是缩放点积注意力(scaled dot-product attention):给定一个查询矩阵Q、一个键矩阵K和一个值矩阵V,输出是值向量的加权和。这点对理解大模型推理过程中的GPU显存的作用很重要。
(2)多头自我注意力
多头自注意力模块是 Transformer 中的关键组件。多头机制不是只计算一次注意力,而是将输入分成更小的块,然后并行计算每个子空间上的缩放点积注意力。独立的注意力输出被简单地连接起来,并线性地转换为预期的维度。
举个例子,每个词最终的编码都是主要受该词本身的影响,如果只有1个head,虽然可以关注到其它位置的词,但如果它的关注点和你想要的点不一样?这个时候如果你有多个head就好办了,一个词本身没有多少种含义,总有一个head是关注到你想要的。
(3)编码器-解码器架构
编码器生成一个基于注意力的表示,能够从上下文中定位特定的信息。
Transformer解码器的功能是从编码的表示中检索信息。其架构与encoder非常相似,不同之处在于decoder包含两个多头注意力子模块,而不是每个相同的重复模块中的一个。第一个多头注意力子模块被屏蔽,以防止位置关注未来。
(4)位置编码
因为自我注意力操作是排列不变的,所以使用合适的位置编码很重要。位置编码与输入嵌入(input embedding)具有相同的维度,因此可以直接将其添加到输入上。Transformer考虑了两种类型的编码,正弦位置编码和相对位置编码。
2.上下文
transformer 模型在推理时输入序列的长度是用于训练的上下文长度的上限。如果增加上下文会导致时间和内存的高消耗,并且由于硬件限制可能不支持。例如自注意力机制中的QKV矩阵大小与序列长度的平方成正比,计算时间也是与序列长度的平方成正比。
领取专属 10元无门槛券
私享最新 技术干货