Transformer 的基本计算结构
从注意力、位置表示和逐位置变换理解 Transformer,避免只用模型名称解释模型。
Transformer 的基本计算结构
Transformer 以注意力机制处理序列中不同位置的关系,并使用逐位置前馈网络继续变换表示。原始结构包含编码器和解码器,多头注意力、位置编码、残差连接与归一化共同工作。只提“注意力”不足以说明完整计算过程。
注意力按查询选择信息
缩放点积注意力把输入投影为查询、键和值。查询与各键计算相似分数,经过缩放和 softmax 得到权重,再对值做加权汇总。输出因此依赖当前查询以及所有允许访问的位置。
缩放因子用于控制向量维度增加时点积数值过大,避免 softmax 进入梯度很小的区域。注意力权重表达模型当前计算中的信息分配,不应直接等同于人类可解释的重要性或因果贡献。
多头机制建立多个投影空间
多头注意力将查询、键和值投影到多个子空间,分别计算注意力,再拼接并变换。不同头可以学习不同位置关系或表示组合,但并不保证每个头都具有清晰、固定的语言学含义。
头数增加会改变每个头的维度、计算量和参数组织。是否有效要由任务和模型规模验证,不能把更多头简单理解为更多知识。
位置信息补回序列顺序
单纯的自注意力对输入排列缺少顺序区分,因此需要位置表示。原始论文使用正弦与余弦位置编码,将位置向量加入词表示。后续模型也采用可学习位置、相对位置等方法,但它们不属于所有 Transformer 的共同实现。
位置机制决定模型怎样感知距离和顺序,也影响超出训练长度时的行为。支持较长输入格式,不表示模型在所有距离上都能稳定利用信息。
编码器与解码器承担不同交互
编码器层使用自注意力和前馈网络更新整段输入表示。解码器除了自注意力,还可对编码器输出进行交叉注意力。生成任务中的解码器自注意力需要因果掩码,使当前位置不能读取未来标记。
掩码还可排除填充位置。掩码含义、张量形状或数值处理错误,会造成信息泄漏或无效关注。编码器模型、解码器模型和编码器解码器模型使用结构的方式不同,不能仅用 Transformer 名称推断能力。
残差与逐位置网络完成层变换
每个注意力子层之外还有残差连接和归一化,帮助信息与梯度跨层传播。逐位置前馈网络对每个位置独立使用相同参数进行非线性变换,补充注意力中的位置间混合。
自注意力对序列长度的计算和内存成本通常增长较快,长序列需要考虑实际实现和近似方法。原始结构提供了基础框架,具体模型还会改变归一化顺序、位置机制、激活和注意力范围。
资料依据
- Ashish Vaswani 等:Attention Is All You Need,https://arxiv.org/abs/1706.03762
- Ian Goodfellow、Yoshua Bengio、Aaron Courville:《Deep Learning》在线版,https://www.deeplearningbook.org/