1.3 注意力与 Transformer:一切大模型的骨架#

注意力(Attention)机制使模型在处理每个 token 时依据相关度动态地对上下文加权求和,用一个 Query 与每个 Key 计算匹配度、再据此加权取回对应的 Value;Transformer 将该操作堆叠并在序列维度上并行化,取代了逐词递归的循环神经网络(RNN),成为 GPT、Llama、DeepSeek 等现代大模型的共同结构。

核心问题

  • RNN 被弃用的两个根本瓶颈:长依赖下的梯度消失,以及序列维度上无法并行;

  • 缩放点积注意力 $\mathrm{softmax}(QK^\top/\sqrt{d_k})V$ 的逐项含义,以及除以 $\sqrt{d_k}$ 的方差依据;

  • 自注意力与交叉注意力的区别、多头注意力的动机、因果掩码的实现与位置编码的必要性;

  • 一个完整 Transformer block(注意力、前馈网络、残差、LayerNorm)的构成,以及 encoder-only、decoder-only、encoder-decoder 三种架构的分野;

  • $QK^\top$ 蕴含的 $O(n^2)$ 复杂度如何埋下长上下文昂贵与 KV-Cache 显存瓶颈这两个系统级议题。

一、问题的提出:RNN 的两个根本瓶颈#

考察一个指代消解的实例。将英文 "The animal didn't cross the street because it was too tired" 译为中文,需先确定 it 的指代对象是 animal 还是 street;此处 itanimal,因为累了的语义只能落在动物上。

若将末尾的 tired 替换为 wide,得到 "The animal didn't cross the street because it was too wide"it 的指代随即翻转到 street(宽的是街)。

同一个 it,其指代随上下文内容完全反转,这是语言中典型的长距离且内容敏感的依赖:判定其指代需同时权衡前文的两个候选名词并结合后半句的形容词,而不能仅依据紧邻的一两个词。任何只保留最近若干词的模型都无法可靠处理此类句子。注意力机制的目标,正是让模型在生成或理解每个 token 时,动态决定关注上下文中的哪些 token、各以多大权重关注。

在 Transformer 之前,序列建模的主流是循环神经网络及其改良版 LSTM 与 GRU。其基本设计为维护一个隐状态 $h_t$,在读入第 $t$ 个词时将其与上一步的 $h_{t-1}$ 融合,即 $h_t = f(h_{t-1}, x_t)$,信息沿时间轴逐步向后传递。这一设计存在两个难以逾越的瓶颈1

第一个瓶颈是长依赖下的梯度消失(vanishing gradient)。训练时梯度需沿时间轴反向传播,每回退一步便乘一次权重矩阵;当这些乘子的量级小于 1,梯度会指数级衰减,传回早期 token 时几近归零。

因此当 itanimal 相隔七八个词时,误差信号回传至 animal 处已极其微弱,模型难以学到这条远距离指代,短期依赖主导了学习而长程呼应被系统性忽略。这一衰减可粗略量化:设每一步的有效衰减因子为 $\gamma\lt 1$,则跨越 $k$ 步后梯度约衰减至 $\gamma^k$;

即便 $\gamma=0.9$,跨 $50$ 步也仅存约 $0.5\%$,信号基本淹没于噪声。反之,若乘子量级大于 1 则导致梯度爆炸,训练发散,工程上须以梯度裁剪(gradient clipping)抑制。

LSTM 引入记忆单元与遗忘门、输入门、输出门,通过一条近似恒等的加法通路(cell state)减小衰减,将可用依赖长度从数十推至上百,但对更长序列(数百至上千 token)仍力有不逮,且门控本身带来更高的计算开销。

第二个瓶颈是逐词串行导致的训练效率低下。由于 $h_t$ 依赖 $h_{t-1}$,计算构成一条不可拆分的链,第 $100$ 个词须等前 $99$ 个算完,序列维度上无法并行。现代 GPU 的算力优势几乎完全来自对大批量数据的并行吞吐,而串行的循环结构使其大量计算核心闲置。

这一约束往往比梯度消失更为关键:即便通过各种技巧使 RNN 具备足够的记忆能力,只要训练无法并行提速,就难以在互联网级语料上扩展至数百亿参数,而规模正是大模型能力的核心来源。

注意力机制正对应这两个瓶颈。其一,它使任意两个位置直接相连,itanimal 之间只需一步而非沿链的多步;其二,同一层内所有位置可同时计算。原论文《Attention Is All You Need》以复杂度对照表明确了这两点2

层类型每层复杂度串行操作数最大路径长度
自注意力$O(n^2\cdot d)$$O(1)$$O(1)$
循环层$O(n\cdot d^2)$$O(n)$$O(n)$

表中最大路径长度指任意两位置间信息传递所需的步数:自注意力为 $O(1)$(直连),循环层为 $O(n)$(沿链传递),路径越短,长依赖越易学习。其代价是自注意力每层复杂度含 $n^2$ 项,这一因子将在本节末尾详细讨论。

二、注意力的机制:Query、Key 与 Value#

注意力可定义为一次基于内容的加权检索。对当前处理的 token,其机制包含四步:该 token 发出一个 Query,表示所需信息;上下文中每个 token 各持有一个 Key(其可被匹配的标签)与一个 Value(其可提供的内容);用 Query 与每个 Key 计算匹配度得到一组权重,相关者高、无关者低;

最后按权重对各 token 的 Value 加权求和,当前 token 的输出便融入了它最应关注的上下文信息。与普通哈希字典的离散命中(0 或 1)不同,注意力的权重是 $[0,1]$ 区间的连续值,可对不同位置分配不同份额。

以指代消解为例,处理 it 时其 Query 与 animal 的 Key 匹配度最高,故多数权重落在 animal 上,it 的输出向量随之融入 animal 的表示,模型据此确定其指代对象。

Query、Key、Value 并非直接给定,而是将 token 的嵌入向量 $x$ 分别乘以三个可学习的投影矩阵得到:$Q=xW_Q$、$K=xW_K$、$V=xW_V$。训练即学习如何将一个词投影为合适的查询、标签与内容表示,因此同一个词在不同上下文中扮演不同角色,依赖的正是这三套投影。

当 Query、Key、Value 均来自同一序列时,该操作称为自注意力(self-attention),即序列对自身建模其内部依赖。

三、缩放点积注意力#

上述机制可写成一个公式,即缩放点积注意力(scaled dot-product attention,原论文 Eq.1)2

$$\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\!\Big(\frac{QK^{\top}}{\sqrt{d_k}}\Big)\,V$$

先固定各维度以消除公式的抽象性。设序列有 $n$ 个 query 位置、$m$ 个 key/value 位置(自注意力中 $n=m$),每个 head 的 key 维度为 $d_k$、value 维度为 $d_v$,则 $Q\in\mathbb{R}^{n\times d_k}$、$K\in\mathbb{R}^{m\times d_k}$、$V\in\mathbb{R}^{m\times d_v}$。

矩阵积 $QK^{\top}\in\mathbb{R}^{n\times m}$ 的第 $(i,j)$ 个元素为第 $i$ 个 query 与第 $j$ 个 key 的点积相似度,两向量方向越一致点积越大,匹配度越高。

随后除以 $\sqrt{d_k}$ 做缩放(其依据下文专门推导),并沿 key 维(即每一行)做 softmax 归一化,将每行分数转为一组和为 1 的权重 $\alpha_{ij}$,表示 query $i$ 分配给各 key 的注意力份额。

最后乘以 $V$,得到 $\sum_j \alpha_{ij} v_j\in\mathbb{R}^{n\times d_v}$,即按权重对各 token 的 Value 加权求和。

softmax 在此承担两项功能:其一,将任意实数打分压成非负且可解释为份额的概率分布;其二,放大差异,指数函数使高分更高、低分更低,从而将注意力较尖锐地聚焦于少数真正相关的 token。

对第 $i$ 行的一组打分 $s_{i1},\dots,s_{im}$,权重为 $\alpha_{ij}=\dfrac{e^{s_{ij}}}{\sum_{j'} e^{s_{ij'}}}$,分子取指数保证非负并放大领先项,分母做归一化保证每行之和恰为 1。

值得强调的是,整套注意力中没有任何可学习参数是为某两个特定位置的连接而设。位置 $i$ 是否关注位置 $j$,完全由当下的 $Q_i$ 与 $K_j$ 内容算出,因此同一层注意力面对不同句子会自动形成不同的连接结构。这是它相较连接固定的卷积、仅连接相邻位置的循环层更为灵活的根本原因:连接关系由数据驱动、按内容寻址,而非固化于结构中。

可学习的仅有 $W_Q,W_K,W_V,W_O$ 等投影矩阵,它们决定如何将词映射为查询、标签与内容,而具体的关注关系交由运行时的内容匹配即时计算。

缩放因子 $\sqrt{d_k}$ 的方差依据#

除以 $\sqrt{d_k}$ 并非任意常数,而是为控制点积的方差3。设 $Q$、$K$ 的各分量为独立、均值 0、方差 1 的随机变量,考察单个点积

$$q\cdot k=\sum_{i=1}^{d_k} q_i k_i.$$

每一项 $q_ik_i$ 的均值为 $E[q_i]E[k_i]=0$,方差为 $E[q_i^2]E[k_i^2]=1\cdot 1=1$;$d_k$ 个独立项相加时方差相加,故

$$\mathrm{Var}(q\cdot k)=d_k.$$

即 $d_k$ 越大,点积的波动幅度越大,其标准差为 $\sqrt{d_k}$。一旦点积出现绝对值很大的取值,softmax 会进入饱和区,某个权重逼近 1、其余逼近 0,近乎退化为 one-hot;而 softmax 在饱和区的梯度趋近于 0,训练信号随之消失。除以 $\sqrt{d_k}$ 恰将方差从 $d_k$ 拉回 1:

$$\mathrm{Var}\!\Big(\frac{q\cdot k}{\sqrt{d_k}}\Big)=\frac{d_k}{(\sqrt{d_k})^2}=1,$$

使打分保持在 softmax 梯度良好的区间。base 模型每个 head 的 $d_k=64$,故缩放因子为 $\sqrt{64}=8$。

缩放因子不可省略。若去掉 $\sqrt{d_k}$ 而直接对大 $d_k$ 做 softmax,实测会在训练早期将注意力压成尖锐的 one-hot,梯度消失、损失停滞。这正是缩放点积缩放二字的全部意义:它并非为数值美观,而是为保持梯度可用。

数字算例#

设某 query $q=[1,\,0,\,1]$,序列中三个 token 的 key 分别为 $k_1=[1,0,1]$(与 query 同向)、$k_2=[0,1,0]$(正交)、$k_3=[1,0,0]$,对应标量化的 value 为 $v_1=10,\,v_2=0,\,v_3=2$,此处 $d_k=3$,$\sqrt{d_k}\approx1.73$。

原始点积为 $q\cdot k_1=2,\ q\cdot k_2=0,\ q\cdot k_3=1$;缩放后约为 $1.15,\ 0,\ 0.58$;取指数得 $e^{1.15},e^{0},e^{0.58}\approx 3.16,\,1,\,1.79$,归一化后权重约为 $[0.53,\,0.17,\,0.30]$;

加权求和 value 得 $0.53\times10+0.17\times0+0.30\times2\approx 5.9$。由于 query 与 $k_1$ 最同向,过半权重分配给它,输出由 $v_1=10$ 主导,与基于内容检索的机制相符。

需注意即便 $k_1$ 取得 0.53 的最大权重,$k_3$ 仍分得 0.30、正交的 $k_2$ 也有 0.17,没有任何位置被完全清零。这是 softmax 连续加权的固有特性:注意力始终为每个位置保留一定份额,其收益是梯度处处存在、可平滑训练,其代价是当序列很长、无关 token 极多时,这些微小份额累加会稀释真正相关的信号,即所谓注意力被摊薄。

若要使分布更尖锐,可在打分上乘一个大于 1 的温度倒数(等价于放大 $QK^\top$ 的尺度),但这又会将模型推回上述 softmax 饱和、梯度变小的困境。尖锐程度与可训练性之间存在固有张力,$\sqrt{d_k}$ 缩放正是为将默认工作点稳定在这一张力的适宜区间。

四、自注意力与交叉注意力#

改变 Query、Key、Value 的来源,即得到用途不同的两类注意力。自注意力(self-attention)中 Query、Key、Value 全部来自同一序列,用于建模序列内部的依赖,例如 it 指向 animal,是 GPT 与 BERT 的主体结构。

交叉注意力(cross-attention)中 Query 来自一个序列(如 decoder 正在生成的译文),Key 与 Value 来自另一个序列(如 encoder 编码后的原文),它使 decoder 在生成每个词时动态关注输入的相关部分,是经典 seq2seq(翻译、摘要)的核心4

以翻译为例,模型在生成中文时,其 Query 会在原文 "The cat sat on the mat" 的各词上打分,最终将多数注意力落在 cat 上,从而使目标词自动对齐到原文对应的英文词。

从时间脉络看,注意力机制最早于 2014–2015 年为解决神经机器翻译的对齐问题而提出,早于 Transformer。早期 seq2seq 将整句原文压缩为一个固定向量再解码,长句因压缩而丢失信息;随后有工作提出让 decoder 每生成一个词都对原文各位置重新计算权重,效果显著。

Transformer 的贡献在于将这一回看思想从decoder 关注 encoder推广到序列关注自身(自注意力),并彻底移除了循环结构。

从计算上看,两类注意力使用完全相同的缩放点积公式,唯一区别在于 Query 与 Key/Value 的来源。这也解释了一个常见困惑:decoder-only 的 GPT 没有独立 encoder,是否因此缺乏跨序列关注能力。

实际上,它将输入与待生成文本拼接为同一条序列(例如将提示词与回答首尾相接),于是关注提示词在 GPT 中退化为普通的自注意力,无需单独的交叉注意力子层。这正是 decoder-only 架构广泛胜出的原因之一:将理解输入与生成输出融入同一条自回归序列,以同一套自注意力完成,结构最为简洁。

交叉注意力如今更多存在于多模态场景,例如让文本 Query 关注图像编码器输出的视觉 Key/Value,从而将视觉信息接入语言模型。

五、多头注意力#

一次注意力只能学习一种配对模式,而语言中的关系是多样的,涵盖指代(itanimal)、句法(主谓宾)、位置邻近与语义呼应等。将这些关系压入一组 Query/Key/Value,会使表达力受限。

此外,即便只需建模单一关系,单头注意力仍有先天的表达上限:一次 softmax 注意力对每个 query 只产生一个归一化的权重分布,本质上只能聚焦于一处或几处并加权平均;当一个词需同时从多个互不相干的来源取信息(例如既需关注主语、又需关注时态标记、还需关注远处的话题词),单一分布要么顾此失彼、要么被平均得模糊。

多头注意力将这份表达预算拆分为并行的多份,每份各自尖锐地聚焦一处,互不干扰。

多头注意力的做法是将 $d_{\text{model}}$ 维切分为 $h$ 份,用 $h$ 组独立的 $W_Q^{(i)},W_K^{(i)},W_V^{(i)}$ 将输入投影到 $h$ 个不同的低维子空间,每组各自独立运行一次缩放点积注意力,再将 $h$ 个输出拼接、经输出投影 $W_O$ 投回 $d_{\text{model}}$:

$$\mathrm{MultiHead}(Q,K,V)=\mathrm{Concat}(\mathrm{head}_1,\dots,\mathrm{head}_h)\,W_O,\quad \mathrm{head}_i=\mathrm{Attention}(QW_Q^{(i)},KW_K^{(i)},VW_V^{(i)}).$$

由于每组投影矩阵随机初始化各异、训练中各自收敛,最终会学到不同的关系模式,例如某些头侧重句法、某些头侧重指代、某些头侧重相邻位置5。base 模型取 $h=8$ 头,每头 $d_k=d_v=d_{\text{model}}/h=512/8=64$。

之所以切分为小子空间而非令单头在 512 维内承担全部职责,仍是因为单一注意力分布只能表达一种对应关系,一句话中并存的多重关系若压入一个分布会相互干扰、被平均掉。研究者对训练好的模型做可视化,确实观察到部分头呈现可解释的分工(如专门连接相邻词、专门连接句子分隔符);

但需指出,并非每个头都干净地对应某一语言学概念,许多头的作用弥散、冗余,甚至可被剪枝,多头必然各司其职是一种便于理解却不完全准确的表述。

多头几乎不增加计算量。将 512 维切分为 8 个 64 维后,每头的矩阵更小,8 头合计的浮点运算量与单个 512 维全头相当。多头以近乎相同的成本换取多个子空间并行建模的表达力,而非通过堆叠算力实现。

此处还埋下一个后续伏笔:多头中的 $h$ 组 Key/Value 正是推理时 KV-Cache 显存的来源。

现代模型(Llama2 起)普遍改用分组查询注意力(GQA),令多个 query 头共享一组 Key/Value 头,从而大幅削减 KV-Cache,这一线索留待 1.7 · 现代 Transformer 架构第 10 章 · KV-Cache 优化 展开6

六、因果掩码#

语言模型是自回归的,逐词生成,在写第 $t$ 个词时不能看到第 $t{+}1$ 个及以后的词,否则训练时相当于预习了答案,而推理时并无未来可看,二者不一致。实现方式极为简洁:在 softmax 之前,给打分矩阵 $QK^\top/\sqrt{d_k}$ 加一个上三角为 $-\infty$ 的掩码。

由于 $e^{-\infty}=0$,这些指向未来的位置权重自动变为 0,仅保留下三角(含对角线)可见,从而保证位置 $t$ 只能关注 $0\dots t$7

$$\text{mask}_{ij}=\begin{cases}0 & j\le i\ (\text{可见}) \\ -\infty & j\gt i\ (\text{未来,屏蔽})\end{cases}$$

BERT 一类理解模型不加掩码,双向皆可关注,因其不做自回归生成;GPT 一类生成模型则必须加掩码。掩码是 encoder 与 decoder 在注意力层上最本质的区别。

因果掩码还带来一项训练效率上的显著收益。由于一句训练文本中每个位置只依赖其左侧内容,可将整句一次性输入,让模型在掩码保护下并行地对第 1、2、3……个位置同时预测各自的下一个词。这称为教师强制(teacher forcing)下的并行训练:一次前向传播即为整句每个位置算出训练损失,无需像推理时那样逐词生成。

于是训练并行、推理自回归这一非对称性成为 GPT 系高效训练的基石,掩码既保证不作弊、又不牺牲训练并行度。这也是它相较 RNN 的又一优势:RNN 训练时同样无法摆脱串行,而掩码自注意力的训练是完全并行的。

七、位置编码#

注意力具有一个易被忽略的性质:它对 token 顺序不敏感(置换不变)。由于每个 query 对所有 key 做加权求和,打乱输入序列并不改变注意力算出的结果集合,"狗咬人""人咬狗" 在纯注意力中并无区别。而语言的意义高度依赖顺序,故须额外注入位置信息。原论文采用正弦位置编码,对不同位置、不同维度填入不同频率的正余弦值2

$$PE_{(pos,\,2i)}=\sin\!\Big(\frac{pos}{10000^{2i/d_{\text{model}}}}\Big),\qquad PE_{(pos,\,2i+1)}=\cos\!\Big(\frac{pos}{10000^{2i/d_{\text{model}}}}\Big).$$

其效果是为每个位置生成一组独特的读数,模型据此分辨先后8。之所以采用多个不同频率而非直接将位置序号这一整数加入嵌入,是因为单个整数随位置线性增大,数值会失控且难以表达相对距离;

而一组从高频到低频的正余弦,既让相邻位置具有细腻区分(高频),又让远距离具有粗粒度定位(低频),且任意两个位置的偏移都可表示为一个固定的线性变换,从而使模型较易学到相隔 $k$ 个位置这类相对关系。

现代大模型(Llama、PaLM 等)多改用旋转位置编码(RoPE):不再将位置信息加到嵌入上,而是用旋转矩阵将位置写入 Query 与 Key,使两个位置做点积时显式依赖其相对偏移9

位置编码的种类、RoPE 的完整推导、实现细节与长序列外推边界见 1.8 · 位置编码与 RoPE;此处只需把握一点:缺少位置编码时,Transformer 能计算词与词的内容相关度,却无法完整区分 "狗咬人""人咬狗" 的顺序。

八、Transformer block#

单独一层注意力尚不构成 Transformer。其真正骨架是将注意力子层与逐位置前馈网络(FFN)子层打包为一个 block,每个子层外裹残差连接与 LayerNorm,再将 block 逐层堆叠。三个组成部分的作用如下。

前馈网络对每个位置独立地经过一个升维、非线性、降维的两层 MLP(base 中中间维度 $d_{ff}=2048$,为 $d_{\text{model}}=512$ 的 4 倍)。注意力负责跨 token 混合信息,FFN 负责在每个 token 内部深加工,两者分工互补:注意力决定将哪些信息汇聚到当前位置,FFN 则在本地对汇聚而来的信息做加工并调用存储于权重中的知识。

大模型的绝大部分参数量位于 FFN(因其具有 4 倍中间维度),许多关于事实知识存储位置的研究亦指向 FFN。现代模型还常将 FFN 的激活替换为 GLU 家族(如 SwiGLU),并将其替换为稀疏的专家混合(MoE),以在不增加每 token 计算量的前提下扩容,这些是后续章节的主题。

残差连接(residual)定义为 $\text{out}=\text{Sublayer}(x)+x$,为梯度提供一条直接回传的通路,是将网络堆叠至数十乃至上百层仍能训练的关键。其另一层含义是每个子层无需从零重写表示,只需在原表示上叠加一个增量修正,从而使深层网络的每一层都能小步渐进地改动,兼顾可训练性与稳定性。

残差是 2015 年 ResNet 引入的思想,Transformer 予以继承;若无残差连接,数十层的堆叠几乎无法收敛。

LayerNorm 对每个 token 的特征向量做归一化(减均值、除标准差,再以可学习的缩放与平移还原表达力),稳定数值分布、加速收敛。它与批归一化(batch normalization)的关键差异在于沿特征维而非批次维归一化,因而不依赖 batch 大小、对变长序列友好,天然适配自然语言处理。

现代大模型(Llama 等)还常将 LayerNorm 简化为 RMSNorm,只除以均方根而不减均值,减少一半统计量、性能几乎无损,进一步加速。

base 模型堆叠 $N=6$ 层 encoder 与 $6$ 层 decoder,中间以 dropout $=0.1$ 抑制过拟合2。LayerNorm 的放置位置颇为关键:原论文采用 Post-LN(子层输出与残差相加之后再归一化),后来发现深层时训练不稳定,需依赖学习率 warmup 维持;

现代大模型几乎全部改用 Pre-LN(LayerNorm 置于子层入口),可采用更高学习率、免去 warmup,并在更深的堆叠下更稳定10。这一演化同样是 1.7 · 现代 Transformer 架构 的主题之一。

一个 block 内注意力子层、FFN 子层与两处残差、LayerNorm 的连接方式见图 1

Attention Is All You Need 论文图 1 展示的 Transformer 编码器与解码器完整架构。
图 1 Transformer 的原始编码器与解码器架构。引自 Vaswani 等 2017 年论文图 1;注意力、前馈网络、残差连接与归一化共同构成可堆叠的编码器和解码器。

大模型将数十至上百个 block 纵向堆叠,并在两端连接输入嵌入与词表预测层。每增加一层,表示就多经历一次跨位置汇聚与逐位置加工;层数、宽度 $d_{\text{model}}$ 与头数对参数量和显存的影响由 1.4 · 资源核算 继续计算。

九、三种架构:encoder-only、decoder-only、encoder-decoder#

同一套 block 按是否含编码器、是否含解码器、是否含交叉注意力的组合,分出三大家族,其结构与用途对照见图 2411

三类 Transformer 的核心差别是输入编码方式与注意力可见范围。
图 2 Transformer 三类架构的结构差异。教程综合图;编码器、解码器与交叉注意力的组合决定注意力可见范围及其适用任务。

三类架构的注意力可见范围、训练目标与适用任务均已并列放入图中。当前通用生成模型主要采用 decoder-only;BERT 类 encoder-only 仍适合分类与抽取,T5 类 encoder-decoder 仍适合输入输出边界明确的序列转换。

模型家族注意力与训练设置架构位置具体例子
BERT编码器双向注意力,约 15% 位置参与掩码目标encoder-only输入 [CLS] 巴黎是法国的 [MASK] [SEP],被遮位置聚合左右两侧线索预测首都
GPT / Llama解码器因果注意力,所有位置预测下一 tokendecoder-only序列 A、B、C 产生 B、C、D 三个监督目标;生成时 KV-Cache 保存历史键值
T5编码器读取完整输入,解码器因果生成并交叉读取编码结果encoder-decoder输入 translate English to German: house,解码器逐 token 生成 Haus
Llama 3 405BGQA 使用 128 个查询头与 8 个 KV 头decoder-only 内的自注意力每 16 个查询头共享一组 K/V,KV-Cache 头数缩为原来的 $1/16$

生成式大模型最终收敛到 decoder-only,其原因可从三个方面拆解。其一是训练信号最密:对一句 $n$ 个词的文本,decoder-only 的预测下一个词目标在每个位置都产生一个监督信号,相当于一句训练 $n$ 次,而 BERT 式掩码语言建模只在被遮住的少数位置(通常约 15%)产生信号,样本利用率显著更低。

其二是任务最通用:续写这一目标可将翻译、问答、摘要、代码、对话统一表达为给定前文、生成后文,无需为每类任务改动结构,天然契合以单一模型完成多种任务的范式。其三是推理最省:只有一条序列、一套注意力,且可配合 KV-Cache 做增量生成,工程链路较 encoder-decoder 更简单。

这三者叠加,使 decoder-only 在参数、数据、算力持续放大的过程中胜出。这并不意味着 encoder-decoder 已无价值,在输入输出边界清晰的经典 seq2seq(如专用翻译、语音识别)中它仍具竞争力,只是在通用大模型这一方向上,decoder-only 占据了主导。

十、$QK^\top$ 中的 $O(n^2)$ 复杂度#

回看核心公式,$QK^\top$ 是一个 $n\times n$ 矩阵,序列中每个 token 都需与其余每个 token 计算一次相似度,故计算量与显存均随序列长度 $n$ 平方增长,即 $O(n^2)$:序列翻倍,注意力成本变为四倍。这正是长上下文既昂贵又缓慢的根源12

推理时还存在第二重代价。自回归生成第 $t$ 个词时,需以其 Query 与前面所有 token 的 Key/Value 计算注意力;若每生成一个词都重算前面全部内容,将产生 $O(n^2)$ 量级的重复计算。

工程上的解法是 KV-Cache:将历史 token 的 Key/Value 缓存下来,每步只计算新 token 的 Query/Key/Value,避免重复。但缓存本身占用显存,且随序列长度线性增长,在长对话、长文档场景下 KV-Cache 会成为显存瓶颈12

将这两笔账落到数字上更为直观。就算力而言,注意力打分矩阵为 $n\times n$,序列从 $2\text{K}$ 增至 $32\text{K}$(16 倍),仅此一步的计算量便增长 $256$ 倍,因此扩大上下文窗口并非无代价,长文档、长对话、长代码库一旦引入,注意力部分的开销会以平方速度消耗预算。

就显存而言,KV-Cache 需为每一层、每一个 KV 头、每一个历史 token 各存一份 Key 向量与一份 Value 向量,占用量大致正比于层数 × KV 头数 × 序列长度 × 每头维度 × 2(K 与 V)× 每个数的字节数,再乘以并发请求数(batch)。

因此在高并发、长上下文的线上服务中,KV-Cache 常比模型权重本身更占显存,成为决定单卡可同时服务多少路对话的硬约束。这也说明了多头注意力一节所埋伏笔的重要性:将 KV 头数从与 Query 头等量降至若干 Query 头共享一个 KV 头(GQA),可近乎线性地削减 KV-Cache,是近年最实用的一类优化。

$O(n^2)$ 的算力墙与 KV-Cache 的显存墙,是现代推理系统绕不开的核心矛盾,也构成本书后半程的一条主线。在系统级加速方面,9.5 · 内核与 Triton 所述的 FlashAttention 以融合与分块将注意力显存从 $O(n^2)$ 降至线性并大幅提速;

在 KV-Cache 优化方面,第 10 章 · KV-Cache 优化 系统讲解 GQA/MQA/MLA 压缩、量化与驱逐等五条战线;在长上下文方面,第 14 章 · 长上下文 讨论如何将窗口从数千推至数十乃至上百万 token。

近年业界亦在探索亚二次(sub-quadratic)的替代架构以绕开 $n^2$。一类是状态空间模型(如 Mamba),其思路类似循环网络,维护一个随序列演化的状态、使计算量对序列长度只呈线性增长,但通过精巧的参数化与并行扫描算法解决了旧 RNN 训练慢、记忆弱的两大缺陷。

另一类是线性注意力,通过改写 softmax 的核函数消去 $QK^\top$ 的显式 $n\times n$ 矩阵,换取线性复杂度。这些方向在长序列上颇具吸引力,实践中也常与标准注意力混合使用(若干层注意力配若干层状态空间层),取长补短。

不过截至目前,标准的 softmax 注意力仍是主流大模型的核心,其在中短上下文上的质量与训练稳定性经过了最充分的检验,亚二次架构更多在超长上下文这一特定场景发挥作用。能否在保持质量的同时真正终结 $n^2$,仍是该方向尚无定论的开放问题。

延伸阅读:Jay Alammar 的《The Illustrated Transformer》是公认较好的可视化入门;欲将直觉与底层机制打通,可参考 3Blue1Brown 的注意力可视化视频系列(见参考文献)。

小结#

  • 注意力在生成每个 token 时依相关度对上下文加权取信息:Query 查询、Key 匹配、Value 提供内容,以缩放点积 $\mathrm{softmax}(QK^\top/\sqrt{d_k})V$ 加权求和,除以 $\sqrt{d_k}$ 是为将点积方差拉回 1、防止 softmax 饱和使梯度消失
  • 多头提供多个子空间的并行视角,因果掩码屏蔽未来位置,位置编码补回顺序信息,残差与 LayerNorm 使深层堆叠可训练
  • Transformer 将这些 block 堆叠并在序列维度上并行化,取代了长依赖易遗忘且无法并行的 RNN,成为 encoder-only、decoder-only、encoder-decoder 三大家族的共同骨架,其中生成式大模型收敛到 decoder-only
  • 而公式中 $n\times n$ 的 $O(n^2)$ 复杂度,正是长上下文昂贵与 KV-Cache 显存瓶颈的总根,一路延伸至本书的系统、KV-Cache 与长上下文章节

上一节1.2 · Token 与嵌入下一节1.4 · 资源核算:参数量、显存、FLOPs本章总览第 1 章 · 大模型基础

参考文献#

HTML 全文 https://arxiv.org/html/1706.03762v7

及其 IO 感知的线性显存缓解,自注意力 $O(n^2)$、KV-Cache 随序列长度线性增长的系统级背景). https://arxiv.org/abs/2205.14135


  1. Upadhyay, Problems with RNNs: Vanishing and Exploding Gradients(RNN 梯度沿时间衰减、LSTM 记忆单元 + 门控缓解). https://www.aryanupadhyay.com/post/problems-with-rnns-vanishing-exploding-gradients ↩︎

  2. Vaswani, Shazeer, Parmar, Uszkoreit, Jones, Gomez, Kaiser, Polosukhin, Attention Is All You Need, arXiv:1706.03762, 2017-06-12(含缩放点积公式 Eq.1、base 超参 $d_{\text{model}}=512/h=8/d_k=d_v=64/N=6/d_{ff}=2048/P_{drop}=0.1$、复杂度对照表、正弦位置编码). https://arxiv.org/abs/1706.03762 。 ↩︎ ↩︎ ↩︎ ↩︎

  3. APML, Scaled Dot-Product Attention Explained($Q,K$ 独立零均值单位方差时点积方差为 $d_k$、除 $\sqrt{d_k}$ 使方差回 1、避免 softmax 饱和区小梯度). https://apxml.com/courses/foundations-transformers-architecture/chapter-2-attention-mechanism-core-concepts/scaled-dot-product-attention ↩︎

  4. Encoders and Decoders in Transformer Models, Machine Learning Mastery(GPT decoder-only 无 cross-attention;T5 decoder 在自注意力后有 cross-attention,Q 来自 decoder、K/V 来自 encoder). https://machinelearningmastery.com/encoders-and-decoders-in-transformer-models/ ↩︎ ↩︎

  5. Raschka, Why do LLMs use multi-head attention?(各头独立 Q/K/V 投影、随机初始化后学到不同表示子空间、拼接过 $W_O$ 投回 $d_{\text{model}}$). https://sebastianraschka.com/faq/docs/multi-head-attention.html ↩︎

  6. Ainslie et al., GQA: Training Generalized Multi-Query Transformer Models, arXiv:2305.13245, 2023-05(每组 query 头共享一个 KV 头,Llama2 起采用、Llama3 保留,已成开源事实标准). https://huggingface.co/papers/2305.13245 ↩︎

  7. Sarkar, Masked and Causal Attention(上三角 $-\infty$ 掩码在 softmax 前应用,使位置 $t$ 只可见 $0\dots t$,用于自回归生成). https://www.abhik.ai/concepts/transformers/masked-attention ↩︎

  8. Positional Embeddings in Transformer Models, ICLR 2025 Blogpost(注意力置换不变、每个 query 关注所有 key 而不管顺序,故需位置编码注入顺序). https://iclr-blogposts.github.io/2025/blog/positional-embedding/ ↩︎

  9. Su et al., RoFormer: Enhanced Transformer with Rotary Position Embedding, arXiv:2104.09864, 2021-04-20(旋转矩阵编码绝对位置并注入相对位置依赖,被 Llama、PaLM 采用). https://arxiv.org/abs/2104.09864 ↩︎

  10. APML, Pre-LN vs Post-LN Transformer Analysis(原论文 Post-LN 训练不稳、依赖 warmup;现代大模型用 Pre-LN,可更高学习率并免 warmup). https://apxml.com/courses/foundations-transformers-architecture/chapter-6-advanced-architectural-variants-analysis/pre-ln-vs-post-ln ↩︎

  11. T5 Architecture Explained & Encoder-Decoder Comparison, AIML.com(encoder-only BERT / decoder-only GPT / encoder-decoder T5 三类对比). https://aiml.com/t5-architecture-explained-encoder-decoder-model-comparison/ ↩︎

  12. Dao, Fu, Ermon, Rudra, Ré, FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness, arXiv:2205.14135, 2022-05-27(标准注意力对序列长度 $O(N^2)$ 的算力与显存开销。 ↩︎ ↩︎