Transformer 架构是一种围绕自注意力构建的神经网络设计。它不再主要依赖一步一步的顺序处理,而是让每个 token 都能从序列中其他相关 token 收集信息。
这也是 Transformer 在语言和其他序列任务中表现出色的原因。如果一个词依赖于另一个距离很远的词,注意力机制会在它们之间提供一条直接的信息路径。
Transformer 架构是什么意思
一个 Transformer 模块并不只是应用一个公式,但自注意力是其中的核心思想。在自注意力中,每个 token 会产生三个向量:
- query(查询),表示这个 token 正在寻找什么
- key(键),表示这个 token 可用于匹配的内容
- value(值),表示可以传递出去的信息
如果把 token 表示排成矩阵 ,那么一个注意力头通常会构造
其中 、 和 是通过训练学到的矩阵。
标准的缩放点积注意力公式是
这里的 是 key 的维度。除以 的缩放操作有助于防止随着维度增大,原始点积分数变得过大。
softmax 是按行应用的。每一行都在回答一个 token 的问题:“我应该对其他 token 分配多少注意力?”
用通俗语言理解自注意力如何工作
自注意力通常不会只选中一个 token 而忽略其他所有 token。它构造的是 value 向量的加权平均。
如果一个 token 与另一个 token 的 key 匹配得很强,那么后者会得到更大的权重。如果匹配较弱,权重就会更小。因此,一个 token 的输出就是来自整个序列信息的、带有上下文感知的混合结果。
这有助于处理主谓一致、代词指代以及其他长距离关系。模型不需要让信息经过许多中间步骤后才能被利用。
自注意力计算示例
考虑单个注意力头中的一个 query 和两个候选 token。为了让计算更简单,取 。
假设当前 token 的 query 是
两个候选 token 的 key 是
对应的 value 是
原始注意力分数就是点积:
因为 ,缩放因子是 ,所以缩放后的分数仍然是 和 。
现在对这两个分数应用 softmax:
注意力输出就是加权组合
核心思想很简单:因为 query 与 的匹配强于与 的匹配,所以输出会更接近 。
这就是一个更大模型内部的基本模式。真实的 Transformer 会在更高维空间中、对许多 token 同时执行这一过程,但计算思路是一样的。
Transformer 模块里还有什么
Transformer 不只是一个注意力公式。一个标准模块通常包含:
- 多头注意力,使模型能够同时学习多种不同类型的关系
- 逐位置前馈网络,在注意力之后变换每个 token 的表示
- 残差连接,帮助在层与层之间保留并细化信息
- 层归一化,帮助稳定训练过程
在最初用于序列到序列任务的 Transformer 架构中,模型包含编码器堆叠和解码器堆叠。
- 编码器对输入序列使用自注意力。
- 解码器使用带掩码的自注意力,因此某个位置不能提前看到未来的输出 token。
- 解码器还可以使用交叉注意力,此时 query 来自解码器,而 key 和 value 来自编码器输出。
许多现代语言模型只使用解码器这一侧。核心的注意力思想仍然存在,但整体架构专门针对下一个 token 预测进行了设计。
为什么 Transformer 需要位置信息
仅靠注意力,对于输入 token 的排列顺序,它是置换等变的。通俗地说,如果你只对同一组 token 向量应用注意力而不加入位置信息,模型本身并不知道哪个 token 先出现。
这就是为什么 Transformer 要加入位置信息,比如可学习的位置嵌入或位置编码。没有这个额外信号,像语言这样对顺序敏感的任务就会更难被正确建模。
关于 Transformer 架构的常见误区
认为注意力就是整个 Transformer
注意力是核心思想,但这个架构还依赖前馈层、残差路径、归一化和位置信息。
混淆自注意力和交叉注意力
在自注意力中,、 和 来自同一个序列。在交叉注意力中,它们并不全部来自同一个来源。
忽略掩码的作用
仅解码器语言模型在训练和推理时都需要因果掩码,这样一个 token 才不能关注未来的 token。
把注意力权重当成完整解释
注意力权重可能提供有用信息,但它们并不能完整证明模型的推理过程。最终行为还取决于 value 向量、后续层以及非线性变换。
Transformer 模型在什么时候使用
Transformer 被广泛用于语言建模、翻译、摘要、代码生成、语音以及许多视觉任务。当序列或集合中的关系比纯粹的局部模式更重要时,它们尤其有效。
但它们并不是所有场景下的万能方案。对于非常小的数据集、严格的实时约束,或者局部归纳结构最重要的问题,其他架构仍然可能更合适。
试着做一道类似的问题
取一个由三个词组成的短语,并聚焦其中一个词。判断另外两个词中哪些应该获得较高的注意力权重,并说明原因,然后构造一个很小的 query-key-value 例子来匹配这种直觉。
如果你想再进一步,可以手算一个很小的注意力输出。这通常是从“我知道公式”走向“我理解这个架构在做什么”的最快路径。