读懂 Transformer:注意力如何把上下文变成计算

原载:荒岛书生 · 原文 · 作者:荒岛编辑部 · 原始发布日期:2026-09-05。 迁移核对:2026-11-07,依据当前公开正文;保留原文资料截止日期、作者观点与核验说明,不将历史资料视作今日消息。

先看它改变了什么

2017 年的《Attention Is All You Need》提出一种以注意力为核心的编码器—解码器架构。读这篇论文,最有用的问题是:一句话里的信息,究竟怎样从一个位置传到另一个位置?

循环网络沿序列逐步更新状态;自注意力允许同一层中的位置直接建立联系。这改变了信息传递方式,也使训练更适合并行矩阵计算。但不要把“可并行训练”理解为自回归生成时可以忽略前一个输出。

Q、K、V 是三种角色,不是三份知识库

把一句话分词并映射成向量,得到矩阵 X。经过不同线性变换,得到 Q、K、V:

Q = X Wq    K = X Wk    V = X Wv
A = softmax(Q Kᵀ / √d_k)
输出 = A V

可以把一个位置的 Q 理解为“当前需要找什么”,其他位置的 K 是“我能被怎样匹配”,V 则是匹配后传递的内容。这只是帮助理解的类比;三者实际上都是训练出来的数值向量,并没有人事先给它们填写自然语言标签。

考虑“杯子放在桌上,它是蓝色的”。当前位置需要利用上下文判断“它”与前文哪些词相关。注意力先产生一组权重,再对信息做加权汇总。它提供的是一种可学习的信息路由,而不是一句自带正确答案的语法规则。

用三个数字看懂一次汇总

假设某个注意力头对三个位置的分数是 2、1、0,softmax 后大约得到 0.665、0.245、0.090。若对应 V 的一个维度分别是 10、20、30,汇总结果约为:

0.665 × 10 + 0.245 × 20 + 0.090 × 30 ≈ 14.25

这不是选择一个词原样复制,而是按权重混合信息。真实模型会在很多维度、很多注意力头中同时进行类似计算。不同头可以学习不同投影,但“一个头必然负责语法、另一个负责事实”并不是架构保证。

缩放因子 √d_k 可以从数值尺度理解:如果两个随机向量各维度近似独立、方差相当,维度增加会让点积的方差变大。过大的分数容易让 softmax 过早集中,训练梯度变得不友好。这里的独立性是假设,用于说明缩放直觉,而非宣称训练后向量始终独立。

注意力之外,还有半个架构

注意力主要负责位置之间的信息交换;逐位置前馈层对每个位置的表示做非线性变换。残差连接提供直接的信息路径,归一化帮助控制数值行为。一个完整网络依赖这些组件配合,不能把它缩写成“只有注意力”。

位置编码也不可少。如果只对一组 token 做相同的匹配与汇总,而不提供位置,模型难以区分“甲追乙”和“乙追甲”的顺序意义。原论文使用的位置方案,与今天常见的旋转位置编码等变体需要分开阅读。

编码器、解码器与因果掩码

原论文的编码器可以读取整个输入句子;解码器生成目标序列时,需要防止当前位置看到未来目标 token。因果掩码就是把这些不该访问的位置排除在注意力分配之外。

训练时,已知正确目标序列,所以能够并行计算多个位置的预测损失;生成时,下一个 token 尚未确定,仍需要逐步推进。许多现代语言模型只保留解码器式结构,BERT 则是理解编码器路线的重要参照。

它的优势和代价要一起看

标准稠密注意力会比较大量位置对,序列增长带来明显的计算与内存压力。FlashAttention 通过改变数据搬运和计算安排提高效率,并不等于把注意力数学目标换成另一种近似算法。

还要区分“上下文装得下”和“信息用得对”。长上下文模型可能遗漏中间证据;模型学到相关性,也不等于具备事实验证器。对于知识问答,需要检索、引用检查和任务评估共同支撑。

一条实际可用的阅读顺序

先手算一次注意力汇总,再检查张量维度;接着看掩码和残差如何进入一个模块,最后才读大规模训练结果。若从大量基准分数开始,很容易记住“效果更好”,却不知道改动究竟发生在哪里。

可以用一句话自测:Transformer 把上下文中的信息交换做成可学习、可并行的运算,但训练目标、数据与系统设计决定了它最终能完成什么工作。

原始资料与阅读路径

本文为荒岛编辑部原创技术解读,公式示例与工程判断用于解释原理,不是对论文实验的独立复现。历史事实按上述原始资料核验,资料截止 2026 年 9 月 5 日。