大模型学习笔记 02:注意力机制到底在算什么?从信息路由理解 Transformer
第一次认真看 Transformer 的公式时,我也被 Q、K、V 和几层矩阵乘法卡住过。后来换一个角度就顺了:序列中的每个位置都在问,“为了更新自己的表示,我应该从其他位置读取多少信息?”注意力权重,本质上就是一张动态的信息路由图。
先别急着背公式
- Query:当前位置想找什么信息。
- Key:每个位置提供什么线索,供别人匹配。
- Value:匹配后真正被读取的内容。
每个 token 的表示经过线性变换得到 Q、K、V。模型用 Q 与 K 的相似度计算权重,再对 V 加权汇总。缩放点积注意力常写成:
Attention(Q,K,V) = softmax(QK^T / sqrt(d_k)) V
除以 sqrt(d_k) 是为了控制点积随维度增大而变大的尺度,让 softmax 不至于过早饱和。多头注意力则让模型用多组投影并行建立不同的关系视角,再把结果组合起来。
位置和掩码分别解决什么问题
自注意力本身并不知道 token 的先后次序。位置编码把顺序信息注入表示;因果掩码则让 GPT 在预测当前位置时看不到未来 token。没有位置,模型难以区分“狗咬人”和“人咬狗”;没有因果约束,训练目标就泄漏了答案。
Transformer 块通常还包含前馈网络、残差连接和归一化。注意力负责跨位置传递信息,前馈层负责对每个位置做非线性变换,残差路径帮助信息和梯度在深层网络中流动。
输入表示 -> 注意力(跨 token 路由) -> 残差/归一化
-> 前馈网络(逐位置变换) -> 残差/归一化 -> 下一层
这套机制的成本也很直接
标准自注意力的计算和注意力矩阵存储会随序列长度近似平方增长。上下文长度翻倍,不只是多处理一倍 token;在朴素实现中,注意力相关开销可能接近四倍。这也是长上下文优化、KV Cache 和稀疏注意力等方向重要的原因。
调试模型时,可以看看注意力大致在关注哪里,但我不会把一张注意力热力图当成“模型为什么这么想”的完整解释。它只展示了局部信息,真正的表示是很多层、很多头共同形成的。
对应用开发者来说,注意力最值得记住的不是“它像人一样理解上下文”,而是它提供了一种可学习的信息混合机制,同时带来了随序列长度增长的计算成本。
可以用一个很小的例子来感受它的作用。“小王把书放在桌上,因为他要出门。”如果模型要判断“他”指谁,就需要把这个位置和前面的“小王”建立联系。不同的注意力头可能分别关注指代关系、句法关系或主题词,多个头叠在一起,才形成更丰富的表示。
当然,这个例子只是帮助理解,不代表某个注意力头永远对应某种人类概念。模型会根据训练任务自己寻找有用的关联。我们能确定的是:它通过动态加权让不同位置的信息发生交互,而不是在每个 token 上独立处理。
从工程角度看,长上下文的问题也因此很直观。输入越长,需要参与交互的位置越多,显存和计算都会上涨。以后看到“支持更长上下文”的模型,我会同时问两个问题:它在长文本任务上真的能找到关键内容吗?这种能力的推理成本是否还能接受?
注意力的另一个重要细节是 mask。做自回归生成时,当前位置不能偷看未来 token,否则训练时看到的就是答案本身;做双向编码时,一个位置又可以读取左右两边的内容。看似只是矩阵里的部分位置置零,实际上它决定了模型是在理解整段输入,还是根据前文续写。
所以 Transformer 不是一个单一模型,而是一套可以组合成不同模型的基本模块。编码器、解码器、掩码方式和训练目标不同,最后擅长的任务也不同。理解这些边界,比死记某个实现里的类名更有用。
参考:《大规模语言模型:从理论到实践》,第 2 章 2.1 节,PDF 第 25-35 页。本文为学习整理与独立阐释。

浙公网安备 33010602011771号