学习 / 神经网络 / 06

神经网络 · 第 06 条 · 结构

注意力机制与 Transformer

注意力机制只做了一件事:让序列里的每个位置都能直接看到其他所有位置。就这一句话,解释了它为什么这么强。

难度 入门约 14 分钟前置:1 条更新 2026-09-28

先看它解决了什么问题

在注意力出现之前,处理序列主要靠循环网络(RNN)——一个词一个词地读,把信息压缩在一个「记忆状态」里往后传。

这有两个硬伤:一是长距离信息会被稀释(读到第 100 个词时,第 1 个词的信息已经很模糊);二是无法并行(必须读完前一个才能读下一个,训练极慢)。

注意力同时解决了这两个问题:任意两个位置之间的距离都是「一步」,而且所有位置可以并行计算。

QKV 是什么

注意力用一个查询的比喻来解释:

记号含义类比
Q(Query)当前位置在找什么我拿着一个检索词
K(Key)每个位置能提供什么每份文档的标签
V(Value)每个位置的实际内容文档的正文

计算过程是:用 Q 和所有 K 做匹配,得到一组权重;再用这组权重对所有的 V 加权求和。权重高的位置,信息被更多地取用。

注意力本质上是一个「软检索」。它不像数据库那样精确匹配某一条记录,而是按相关度把所有信息按比例混合起来。这也是它比硬性规则更灵活的原因。
每个位置都能直接看到其他所有位置猫追狗。输入序列注意力权重矩阵55201510184228121426481210121464Q 我在找什么K 我有什么V 我的内容Q×K 得到权重,再用它加权取 V对角线偏亮(自己看自己),但非对角线也有值——这就是「软检索」:不精确匹配,而是按相关度混合
右边那个矩阵是每个位置对其他位置的注意力权重(数字是百分比)。对角线偏亮说明模型也确实在看自己,但非对角线也有明显数值——这就是「每个词都能直接看到所有词」。也正因为这个矩阵本身不含顺序信息,才必须额外加位置编码。

为什么需要位置编码

注意力有一个副作用:它本身对顺序毫无概念。把所有输入打乱,只要「谁和谁配对」,结果是一样的。但语言里顺序至关重要(「猫追狗」和「狗追猫」完全不同)。

所以必须额外把位置信息注入进去,这就是位置编码的作用。它是一个必需补丁——不是锦上添花。

代价是什么

注意力的计算量随序列长度的平方增长。序列长度翻一倍,计算量翻四倍。

这是长上下文的核心瓶颈,也是近年大量研究的焦点:稀疏注意力、滑动窗口、线性注意力等各种变体,本质上都在想办法在不损失太多效果的前提下,把这个平方复杂度降下来。

为什么它成了主流

因为它匹配的假设是「序列中任意两个位置都可能相关」,这个假设比循环网络的「信息按顺序传递」更弱、更通用。假设越弱,适用的范围越广。

加上它可以高度并行,正好适配 GPU 的并行能力——算法结构和大规模算力同时站在了它这一边。这是它取代 RNN 的根本原因。

要点回顾
← 卷积网络在做什么 训练一个大模型需要什么 →