知行札记
专题AI 模型与系统语言模型与生成机制

语言模型与生成机制

从 token 和条件概率,推导注意力、Transformer 块、缓存、位置编码与解码的工作方式。

从文本到下一步分布

token 是分词器处理文本的单位,可能是一个字、一个词、一段子词或字节。词表给每个单位分配编号。输入编号查找嵌入矩阵,得到向量,再经过多层模型变换。最后的输出投影为词表中的每个候选给出原始分数 logit,softmax 把分数变成概率。模型一次提供的是分布;解码规则选出一个 token,追加到输入,再计算下一步。

自回归生成把序列概率分解成条件概率链:

pθ(x1,…,xn)=∏t=1npθ(xt∣x<t).p_\theta(x_1,\ldots,x_n)=\prod_{t=1}^{n}p_\theta(x_t\mid x_{<t}).

θ\theta 是全部模型参数,x<tx_{<t} 是当前位置之前的 token。这里的“预测下一个”定义了计算目标;它并不限定模型只能利用局部词频。为了预测,模型可以利用语法、篇章结构、实体关系和任务规律。输出高概率也不等同于事实正确:训练语料的分布与世界事实仍有差距。

训练通常把整段真实序列一次送入,以真实前缀预测每个位置的下一个 token,这叫 teacher forcing。生成时前缀包含模型自己选出的 token,错误会改变后续条件。训练和生成因此共享条件概率形式,却有不同的输入分布。

注意力如何把上下文带入表示

设当前位置表示为 hih_i,学习到的投影把它变成查询 qi=WQhiq_i=W_Qh_i、键 ki=WKhik_i=W_Kh_i 和值 vi=WVhiv_i=W_Vh_i。查询与可见键做内积,得到匹配分数:

aij=softmax⁡j(qi⊤kjdk+mij),oi=∑jaijvj.a_{ij}=\operatorname{softmax}_j\left(\frac{q_i^\top k_j}{\sqrt{d_k}}+m_{ij}\right),\qquad o_i=\sum_j a_{ij}v_j.

dkd_k 是查询和键的维度。因果掩码 mijm_{ij} 让未来位置不可见,通常通过把其分数设为负无穷实现。在每个头内,权重非负、总和为一,输出是值向量的加权组合。多个头在不同学习空间中做匹配,再拼接并经过输出投影;整个多头模块的输出不受单个头的凸组合范围限制。Transformer 原始论文 给出了这一结构。

缩放因子有一个直观推导。假设各维独立、均值为零、方差为一,内积的方差随 dkd_k 增长,标准差是 dk\sqrt{d_k}。过大的分数差会让 softmax 接近单选,部分梯度很小。除以这个标准差使初始分数更容易处理。真实网络的分量会相关,归一化与训练也会改变幅度,因此这个推导解释设计动机,不能当作每层运行时的精确统计描述。

注意力让同一个 token 的表示随着前文改变。第二次出现的“它”能够携带不同指代信息。高层的键和值由已有上下文的隐藏表示产生,不能把它们理解成 token 自身固定不变的标签。

Transformer 块怎样补足注意力

单独的注意力主要做上下文聚合。逐位置前馈网络 FFN 增加非线性变换:普通形式是 W2ϕ(W1h)W_2\phi(W_1h);门控形式把一条分支的激活与另一条分支逐元素相乘,再投影回来,例如 SwiGLU。普通 FFN 有两次矩阵乘法,门控 FFN 有三次;比较参数和计算时必须一起比较中间宽度,不能只数矩阵。知识和行为分布于多个模块,FFN 的作用也不等于一张独立事实表。

残差把模块输出加回输入,提供绕过子层的路径。pre-norm 在子层之前归一化,post-norm 在残差相加后归一化;它们影响梯度传播与训练稳定性。RMSNorm 使用均方根缩放,不减去均值。若忽略数值稳定项和学习尺度,归一化后的均方幅度固定;真实 RMSNorm 带可学习尺度,输出范数还会随它变化。QK normalization 直接处理查询与键的尺度,目标更接近控制注意力分数。

RMSNorm 的逐维形式是

yi=gixid−1∑j=1dxj2+ϵ.y_i=g_i\frac{x_i}{\sqrt{d^{-1}\sum_{j=1}^{d}x_j^2+\epsilon}}.

dd 是特征数,gig_i 是学习尺度,ϵ\epsilon 避免除零。构造输入 x=(3,4)x=(3,4),忽略 ϵ\epsilon 且取 g=(1,1)g=(1,1),均方根为 12.5\sqrt{12.5},输出约为 (0.849,1.131)(0.849,1.131),长度为 2\sqrt2;若把 gg 改成 (2,1)(2,1),长度就不再固定。Q/K 归一化控制注意力幅度的效果还取决于尺度参数和后续温度,不能由归一化名称推导所有分数都有同一上界。RMSNorm 原论文

这些设计帮助深层堆叠,却不自动免除学习率、warmup、精度或梯度裁剪的调节。不同架构对数据、优化器和硬件有不同要求,不能把某一模型配置视为通用块模板。

顺序如何进入模型

没有位置信息的普通全注意力对输入排列具有置换等变性:输入行一起换位,输出行也相应换位。模型需要额外的位置信号来区分顺序。绝对位置嵌入把位置向量加到 token 表示;正弦位置编码用固定频率;RoPE 对查询和键做随位置变化的旋转,使内积包含相对位置;ALiBi 直接对注意力分数加入与距离有关的偏置。RoPE 与 ALiBi 是两种不同的处理方式。

在二维子空间里,位置 mm 对应旋转 RmR_m。同频率旋转满足

(Rmq)⊤(Rnk)=q⊤Rn−mk.(R_mq)^\top(R_nk)=q^\top R_{n-m}k.

相对位置因此进入打分。完整向量由多个频率的二维平面组成;实际分数同时依赖内容向量,不能简化成只看距离。ALiBi 的因果形式则为不同头设置斜率,在分数上减去与历史距离成比例的偏置,形成明确的局部偏好。

扩展位置编码的取值范围,只解决位置表示的一部分问题。模型是否能可靠利用更长输入,还依赖训练长度分布、信息位置、注意力结构、缓存容量和任务难度。位置插值把原位置按训练长度与目标长度比例缩放,可能损伤相邻位置的分辨;分频率重标定让不同频段采取不同缩放,再配合训练或注意力尺度调整。它们需要验证远距离信息的真实使用能力,不能把频率公式的延长写成理解能力的延长。

KV cache、共享头与潜表示

因果模型追加一个 token 时,过去位置可见的前缀没有变化。在模型参数、位置处理和前缀内容保持一致的条件下,各层过去位置的键和值可以复用。KV cache 缓存这些张量,避免每一步重新计算全部前缀。修改早期消息、换模型或换适配器后,受影响的缓存应重新建立。

常规缓存的理想载荷估算为

MKV=2 L B n HKV dh s.M_{KV}=2\,L\,B\,n\,H_{KV}\,d_h\,s.

LL 是层数,BB 是同时驻留的序列数,nn 是每序列缓存长度,HKVH_{KV} 是键值头数,dhd_h 是头维度,ss 是每元素字节数。因子二对应键和值。分页元数据、对齐、量化尺度和分配碎片需要另计。假设 80 层、8 个键值头、头维度 128、每元素 2 字节,单序列每个 token 的载荷是 320 KiB;8192 个 token 约 2.5 GiB。这是给定假设下的算术结果,不能直接当作任意模型的显存需求。

多头注意力 MHA 为每个查询头配置独立键值头。MQA 让全部查询头共享一组键值,GQA 把查询头分组共享。它们减少 HKVH_{KV},同时改变表示能力和训练结构。已有 MHA 权重不能仅改缓存数组就无代价地成为 GQA。GQA 论文 讨论了相应训练方法。

MLA 把键值压缩到低维潜表示,再按需要使用投影。对部分注意力计算,矩阵乘法的结合律允许把投影吸收到查询或输出侧,减少需要缓存的对象。位置编码与潜表示如何组合会影响能否完全吸收;缓存节省也取决于潜维度、位置分支和内核实现。DeepSeek-V2 是具体架构案例,论文中的节省比例不适用于所有配置。

以内容键 kj=WUKcjk_j=W_{UK}c_j、值 vj=WUVcjv_j=W_{UV}c_j 为例,查询打分可以改写为

qi⊤WUKcj=(WUK⊤qi)⊤cj,∑jaijWUVcj=WUV∑jaijcj.q_i^\top W_{UK}c_j=(W_{UK}^\top q_i)^\top c_j, \qquad \sum_j a_{ij}W_{UV}c_j=W_{UV}\sum_j a_{ij}c_j.

这样可以先在潜空间聚合,再做输出侧投影。随位置变化的 RoPE 旋转一般无法吸收进一个对全部位置固定的矩阵;解耦 RoPE 把内容与位置分支分开,额外缓存位置键。是否直接使用潜缓存或展开各头,由阶段、内核与设备的计算/带宽比例决定。

TransMLA 对其给定注意力形式分析了 GQA 到 MLA 的等价表示,再研究移除部分位置维度、低秩压缩和继续训练。等价重参数化不自动减少缓存,进一步压缩可能改变输出;恢复质量与取得加速需要分别验证。这保留了“表达能力”和“实际压缩收益”的区别。TransMLA,2025 年第三版,第 4 节与附录 A

MoE 怎样扩展参数容量

混合专家 MoE 用路由器为每个 token 选择少量专家网络,输出由被选中的专家组合。总参数量决定需要存储多少权重,激活参数量更接近单 token 的部分算术工作;二者都不能独立预测实际速度。专家跨设备分布时还需要交换 token 和结果。

路由失衡会让少数专家负担过重,部分专家训练不足。辅助损失把负载均衡加入优化目标,可能与任务损失产生张力;路由偏置调整把部分均衡控制放到选择阶段。某些设计使用 si+bis_i+b_i 选择专家,再用原始 sis_i 形成输出权重,使负载控制与内容权重承担不同职责。偏置更新的节奏、允许路由范围和剩余辅助目标都属于具体方法条件。

固定容量缓冲区可能丢弃溢出 token,动态或无丢弃实现则增加分配和通信要求。共享专家承接所有 token,路由专家处理分工。若八个专家中每 token 只激活两个,专家权重载荷仍包含八份,token 还需送到被选设备并将结果送回。具体设计需要同时考察质量、容量、通信和设备利用率;Switch Transformer 展示了稀疏路由的一个实现。

分布怎样变成输出

贪心每步取概率最大 token,得到局部最优路径。它可能重复或缺乏多样性,但重复并非确定性解码必然造成。采样根据概率随机选择。温度把 logits 除以 TT:较低温度使分布更尖,较高温度使它更平;它不增加模型知识,也不提供事实保证。

top-k 保留固定数量的高概率候选;top-p 保留累计概率达到阈值的最小前缀;min-p 保留相对最高概率不低于指定比例的候选。截断后需重新归一化。候选规模、温度与重复惩罚相互影响,接口暴露哪些参数也各不相同。核采样研究 说明了开放生成中高似然搜索与文本质量之间的差异。

beam search 同时保留多条部分序列,比较累计分数,常需要长度归一化。它增加搜索范围,也增加内存和协调开销;短序列天然获得更大概率的倾向需要处理。任务中是否存在稳定、可判定的目标输出,比“随机还是确定”更能决定选择。

长输入的三个约束

精确全注意力的交互规模随长度平方增长,常规 KV 缓存随长度线性增长,位置和训练分布又限制模型能否理解长度范围内的信息。三者需要分别处理。

FlashAttention 分块计算并使用在线 softmax,减少大中间矩阵在显存之间的往返;它在数值误差允许范围内保持同一注意力计算,渐近算术复杂度仍为二次。滑动窗口只访问局部历史,窗口外信息需要借助跨层传播或全局层。线性注意力把历史聚合进固定大小状态,节省长期缓存,但状态压缩可能损伤精确回忆。混合结构在这些机制间分配工作,没有同时免除全部成本的保证。FlashAttention 原始论文 给出了 IO 调度路线。

需要补公式背景时,可阅读 向量、梯度与概率。这个页面解释运算,当前正文已经包含理解生成链所需的符号定义。

生成目标还有哪些形式

自回归从左到右固定前缀,离散扩散语言模型可以对含掩码的序列学习恢复,再经过多轮预测逐步确定 token。一个去噪轮次可处理多个位置,后续轮次也可改变尚未确定的内容。块大小、解掩码顺序、重掩码和停止规则决定并行度、修正能力与延迟;它仍需多次模型运算,并无任意任务一次完成的保证。LLaDA,2025 年研究,第 2 节

全上下文双向去噪会改变已确定位置的条件,常规因果 KV 复用不能原样套用。分块因果或混合模型可以恢复部分缓存条件。比较生成路线应统一质量、输出长度、设备、并发与端到端延迟,不以某次批内并行速度代表整个任务优势。本文主要推导因果 Transformer;扩散、循环状态和混合结构为不同约束提供其他计算方式。

最后更新于

本页目录