Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第1章 模型结构:一次前向计算的能力边界

语言模型可以解释退款政策、生成补丁,也可以输出一段结构化参数。这些能力都从一次前向计算开始:字符串被编码成 token,经过若干层的注意力与逐位置前馈网络,最后投影成下一个 token 的分布。本章先拆开这次前向计算,再回答两个相连的问题:模型的候选能力从哪里来,结构在哪些环节设定了边界?

本章以 ALR 告警诊断说明应用级失败定位;退款短语和代码片段只作为 token、张量与生成边界的局部特殊输入,因为这些算法机制需要短而可人工核对的序列。它们仅适用于本章对应小节:输入序列对应 ALR 的告警输入,键值材料对应 Evidence,输出检查对应诊断报告验收,不继承 ALR 的业务身份或动作权限。所有示例均为教学假设,不代表某个企业系统的实际实现,也不把某个模型家族的配置当作行业通用配置。

本次修订于 2026-10-31 重新访问章末 26 项原始来源,核对元数据与相关论点;结构机制另查论文正文和中文教材对应段落。本文的手算、资源估计和故障诊断是教学推导,不是模型或硬件实测。

1.1 序列建模与完整前向路径

语言模型估计序列出现的概率。对 token 序列 \(x_1,\ldots,x_N\),自回归分解为:

\[ p(x_1,\ldots,x_N)=\prod_{t=1}^{N}p(x_t\mid x_{<t}). \]

这是概率的条件分解,不是在宣称模型拥有人的理解或业务权限。早期 n-gram 用局部计数估计条件分布,长窗口会面临稀疏组合;神经概率语言模型联合学习词的连续表示与预测函数,让相近表达共享统计信息。Bengio 等的工作是这条路线的重要节点。[1]

表示共享解决了部分泛化问题,却没有消除序列计算的瓶颈。循环网络沿时间步传递状态,后一状态依赖前一状态,同一条样本的训练难以完全按位置并行。早期编码器—解码器还把整个输入压入固定长度表示。Bahdanau 等让解码器在生成时对输入位置做软对齐,针对的是固定向量瓶颈;其模型仍包含循环计算,不能把“出现 Attention”直接写成“已经是 Transformer”。[2]

Transformer 的转折在于,用注意力组织位置之间的信息交换,不再依赖循环结构串行形成全部隐藏状态。原论文在机器翻译上验证了这种结构的并行潜力。训练时目标序列已知,可以同时构造各位置的条件预测;因果掩码阻止读取未来标签,所以并行不等于泄漏答案。生成时未来 token 尚不存在,下一步仍依赖刚选出的 token。训练并行与生成串行可以同时成立。[3]

因此,从循环模型到 Transformer 的因果链是:序列依赖限制计算并行,注意力改变信息传递路径,并行训练让更大规模的数据与参数组合成为可能。它不是“注意力一出,所有任务自然解决”的历史。成本也随之移动:不用把远距离关系逐步压进一个循环状态,却要计算许多位置间的关系,维护更大中间状态,并处理位置和可见性。

对工程师而言,这个转折带来一个可检验的问题:一次失败来自模型没学会任务,还是输入并未按预期进入计算?若文本被截断、因果边界错位或缓存复用了其他请求的状态,更大的模型也无法修复输入契约。我们先把“字符串进、字符串出”拆成可以逐轴检查的前向路径,再讨论它如何形成能力。

把序列概率写成条件概率的连乘,还能澄清“预测下一个词为何能做复杂任务”的疑问。训练目标不要求模型先识别一个显式任务编号,而是让它在给定前缀时提高真实后续的概率。若语料中包含解释、程序、对话和推导,某些预测必须利用这些文本所表达的约束。不过,从目标形式只能说明这些约束可能有助于预测,不能直接推出训练一定学到可靠算法。一个模型可以通过表面共现降低平均损失,也可以学到更可迁移的关系;两者在普通样本上的输出可能接近,在反事实和组合条件下才分开。这里是从目标定义作出的分析,不是对某个模型内部表征的实测结论。

例如教学语料同时出现“完成退款后返回流水号”和“退款请求被拒绝时没有成功流水号”。如果评估只问常见的成功路径,模型靠高频续写就可能答对;若输入增加“审批尚未完成”,任务要求它识别状态边界,而不只是拼接常见字段。序列目标没有另设一个“事务已经提交”的真值位,系统必须提供状态证据,并在输出之后验证业务条件。语言预测与业务状态之间的这段距离,是后续 Agent 工程需要补齐的边界,不能靠给向量赋予拟人化名字消除。

训练损失通常把许多位置的负对数条件概率汇总。对一条长度为四的教学监督序列,若四个真实标签的条件概率分别是假设的二分之一、四分之一、二分之一、四分之一,那么损失由各自负对数相加或取平均得到。两个不同预测错误都可能使平均损失下降:模型在大量容易位置上变好,同时在一个罕见否定条件上变差。业务关心的是后一个位置,却可能被总体均值掩盖。因此读训练曲线时,要把统计目标和任务验收分开。后文用具体证据条件定位失败,正是因为单个标量不足以解释全部生成行为。

从前向依赖看,训练并行的含义也很具体。设一个教学前缀含四个位置,第一层所有位置的投影可以一起算,第二层仍要等第一层的表示准备好。并行化的是同层不同位置的计算,不是让所有层失去先后依赖。注意力让一个位置在一层内读取可见的远处表示,但经过多层组合才能形成更复杂的条件计算。把“一层能连到远处”说成“一层已理解完整上下文”,混淆了可达路径和学到的函数。图中的每条边表示信息能够流动;这条路径是否被训练成有用能力,还需要任务证据。

统一符号与两种长度

全章以批量优先的语义形状表达张量;实际框架可能转置、融合或分片。\(B\) 是批量大小,\(T\) 是当前查询长度,\(S\) 是键值长度,\(D\) 是残差流宽度,\(H_q\) 与 \(H_{kv}\) 分别是查询头和键值头数,\(d_h\) 是每头 Q/K 维度,\(d_v\) 是每头 V 维度。\(L\) 为层数,\(V_{\mathrm{vocab}}\) 表示输出词表投影行数,避免与 Value 张量 \(V\) 混用。普通教学示例设 \(d_h=d_v\)、\(D=H_qd_h\),这些等式不是所有模型的定义。

训练的自注意力通常有 \(T=S\)。增量生成时,单个新查询可以有 \(T=1\),而 \(S\) 包含历史缓存与当前 token。只写一个“序列长度”会掩盖这种差别。跨注意力的查询和键值来自不同序列,二者长度也可以不同。中文教材《动手学深度学习》用批量、时间步、隐藏维三轴解释 Transformer,适合作为本节形状阅读的补充。[4]

Tokenizer 把输入文本编码为整数 ID,得到 \([B,T]\)。Embedding 是可学习表 \(E\in\mathbb{R}^{V_{\mathrm{vocab}}\times D}\),按 ID 查表得到 \(X\in\mathbb{R}^{B\times T\times D}\)。这里没有按汉字直接索引的保证:一个汉字、一个英文词、一个空格与代码片段可能对应不同数量的 token。文字看起来相同,也应先确认实际 token ID、特殊符号和聊天模板是否一致。

Embedding 后需要让计算知道位置,但位置机制不总是一个加法。原始正弦位置编码可与输入表示相加;RoPE 则在注意力中的 Q/K 上施加旋转。所以下图把位置规则标在 Block 内,不把所有模型都画成“Embedding 加一个位置向量”。位置如何影响点积,在 1.3 节继续解释。

flowchart TD
    A["token IDs: B × T"] --> E["Embedding: B × T × D"]
    E --> N["Block 输入 / Norm: B × T × D"]
    N --> Q["Q: B × Hq × T × dh"]
    N --> K["K: B × Hkv × S × dh"]
    N --> V["V: B × Hkv × S × dv"]
    Q --> P["位置规则 + QKᵀ + mask<br/>分数 / 权重: B × Hq × T × S"]
    K --> P
    P --> Z["加权 V: B × Hq × T × dv"]
    V --> Z
    Z --> O["拼接 + 输出投影: B × T × D"]
    O --> R["残差 + FFN + 残差<br/>重复 L 个 Block"]
    R --> F["最终 Norm / 词表投影<br/>logits: B × T × Vocab"]
    F --> G["选择下一 token<br/>追加后继续生成"]

图中的 \(S\) 在无缓存自注意力中等于 \(T\);使用缓存时,K/V 节点含“历史状态加当前投影”。残差连接在图中简写为输出阶段,实际 Pre-Norm Block 的两条残差路径见 1.3 节公式。最终 Norm 是常见现代布局,原始 Transformer 的归一化位置不同。图是形状契约,不是某个框架的逐算子执行图。

隐藏状态、logits 与标签

每个 Block 保持残差流的 \([B,T,D]\) 形状。经过全部层后,输出投影 \(W_U\in\mathbb{R}^{D\times V_{\mathrm{vocab}}}\) 将隐藏向量映成每个词表项的分数。logits 还不是概率;沿词表轴应用 softmax,才得到当前位置预测下一个 token 的条件分布。输出表是否与 Embedding 共享权重,取决于具体结构,不能仅因维度兼容就默认共享。

把教学序列写成“开始、我、想、退款、结束”。训练时输入可为前四个位置,标签为后四个位置:用“开始”预测“我”,用“开始、我”预测“想”,依次类推。输入位置的隐藏状态可以含当前位置的 token,因为它预测的是下一个 token。标签若没有右移,模型可能学到复制输入;若被右移两次,又会训练错误目标。检查 loss 降低之前,要先打印一小条输入和监督位置。

生成时先处理提示前缀,即 prefill,得到最后一个有效输入位置的 logits;选出的 token 追加进序列,再进行下一步 decode。Padding 批次不能无条件取数组最后一格:右侧补齐时,那里可能是无效位置,调用方需要按实际实现找到最后有效位置。停止符、最大生成长度和后处理,也会影响用户最终看见的字符串。

由形状还可得到资源上的教学推导:若训练保留全部 \([B,T,V_{\mathrm{vocab}}]\) logits,词表维会带来明显中间量;实现可以用融合损失等方法改变实际内存分配,因此“写出了这个形状”不代表一定完整物化它。相同原则贯穿本书:先写语义张量和依赖,再讨论框架如何节省存储,不把数学对象与实际分配强行等同。

从输入契约追踪到输出分布

为使形状不只是符号,下面固定一组独立教学假设:两条样本、每条最多四个输入位置、残差宽度八、两个查询头、每头四维、词表投影共有十六行。第一条样本的有效长度为四,第二条为三,第四格用补齐符占位。输入 ID 数组包含八个整数,但有效输入只有七个位置。Embedding 查表返回六十四个数,其中补齐位置也可能有数值;“它有向量”不等于“它应参与监督”。有效性属于额外的语义契约,不能靠向量是否全零判断。

教学阶段语义形状元素数与检查含义
输入整数两个样本、四个位置八个槽位,七个有效位置
查表后的残差流两个样本、四个位置、八维六十四个数,宽度保持一致
单种查询投影拆头后两个样本、两个头、四个位置、四维元素总数不变,轴意义变化
每头分数两个样本、两个头、四个查询、四个键六十四个分数,按各自样本遮蔽
拼头并投影后的残差流两个样本、四个位置、八维返回残差所需形状
全位置词表分数两个样本、四个位置、十六项一百二十八个分数,沿词表轴解释

表中的元素数来自教学维度的乘法,不是硬件测量。它揭示了两类不同错误:一种是维度不兼容,框架通常立即报错;另一种是元素数兼容而语义错位,例如把头轴当位置轴、把补齐位置当最后一个有效位置。这类错误可能持续输出流畅文本,甚至仍使损失下降。形状检查必须附带轴的解释,不能只打印一个尺寸列表就宣布实现正确。

下一步把标签与输入逐格对齐。假设一条完整教学序列是开始符、告警、来自、服务、结束符;模型输入前四项,监督目标是后四项。输入第三格的隐藏状态可以看到“开始符、告警、来自”,目标是“服务”。若在训练框架内部已经执行错位,数据准备阶段就不应再次错位。接口契约不同会导致两种正确代码拼起来变成错误系统,因此应保留一条实际进入损失函数的输入与标签对照,而不是仅检查数据文件看起来合理。

损失屏蔽与注意力屏蔽还需要分别记录。前者决定哪些位置对梯度目标贡献,后者决定哪些键可供查询读取。假设指令微调只监督回答部分,提示文本仍应被回答读取;把提示的损失置零,不意味着把提示从注意力中移除。反过来,补齐位置不应贡献监督,也通常不应被有效查询读到。两个掩码恰好使用相同长度,并不意味着语义可以合并。这个区别对理解后训练尤其重要,后续训练章会沿同一契约继续展开。

词表投影还提供了另一种读模型的方法。每个词表项对应输出矩阵中的一个方向,隐藏状态与这些方向相乘产生分数。共享输入输出权重时,查表和输出比较使用关联的参数;不共享时,两张表可以独立学习。两种配置的张量都能正常运行,但参数数目、检查点键和训练约束不同。转换模型时仅凭“都有同样的词表大小”就合并两张表,会改变模型函数。结构阅读应该把“尺寸相同”“参数同一对象”“数值目前相同”作为三个不同事实。

从 logits 到最终文本,中间还有选择规则。贪心选择取最大分数项,随机采样按分布抽取;温度改变分数的相对尺度,截断候选集合则改变采样支持集。这些操作属于生成过程,不会在一次请求内自动更新模型参数。若同样的前缀得到不同文本,先固定采样配置与随机条件,再比较前向分数;否则无法区分模型计算差异和选择差异。讨论“稳定回答”时,也要说明稳定的是分数、候选排序还是最终字符串。

以两个候选近似并列的教学情形为例,极小的浮点误差可能交换第一名与第二名,贪心生成随后进入不同前缀,后续文字便可能明显分叉。这不意味着每个算子的误差都很大,而是离散选择把连续差异转成了路径差异。检验数值实现时应比较相同前缀上的 logits 和中间状态;评估服务时才进一步统计最终任务结果。将这两个比较层混在一起,会把允许的数值差异误判为结构错误,也可能漏掉确实影响任务的微小排序变化。

最后,输入文本不是天然等于模型看到的序列。角色标记、系统说明、工具返回、分隔符和终止标记共同构成真实前缀;模板可能添加额外 token。可复现输入应记录序列化后的内容与有效长度,在合适权限范围内保存必要证据。对含敏感信息的应用,可以保存受控样本或脱敏复现材料,但不能用脱敏后语义已改变的输入声称复现了原事故。书稿中的短语仅用于手算,实际工程则要建立从用户请求到最终 token 序列的可追溯转换关系。

1.2 Attention 与 Q/K/V 的计算

flowchart LR
 X["当前层表示"] --> Q["查询"]
 X --> K["键"]
 X --> V["值"]
 Q --> S["匹配分数"]
 K --> S
 M["因果与有效性约束"] --> S
 S --> A["沿键轴归一化"]
 A --> Z["聚合内容"]
 V --> Z
 Z --> O["拼头并回到残差宽度"]

匹配空间与内容空间

对单层输入 \(X\),标准多头自注意力通过不同的可学习投影得到 Query、Key 和 Value。暂设 \(H_q=H_{kv}=H\),且各头维度相同:

\[ Q=XW_Q,\qquad K=XW_K,\qquad V=XW_V. \]

其中 \(W_Q,W_K\in\mathbb{R}^{D\times Hd_h}\),\(W_V\in\mathbb{R}^{D\times Hd_v}\);再把最后一轴拆成头轴并转置,形成 \(Q,K:[B,H,T,d_h]\) 与 \(V:[B,H,T,d_v]\)。原始多头机制是在多个投影子空间中分别计算,再拼接输出。[3]

Q 表达“当前位置按什么特征寻找信息”,K 表达“各位置按什么特征被匹配”,V 提供被聚合的内容。这是帮助理解的类比,不意味着某个向量有稳定、可直接命名的语义字段。Q/K 的最后一轴必须兼容,才能计算点积;V 只需与 K 在来源位置轴上一一对应,其特征宽度可以不同。

因此,把三个投影合成一个权重矩阵做一次大矩阵乘法,是实现上的融合,并不使三种角色相同。若强行令 Q 与 K 共享同一投影,就给匹配关系增加结构约束;模型是否接受这种约束,要靠训练与评估决定,而不是因代码更短就视为等价替换。跨注意力进一步说明了角色区别:Q 可以来自目标序列,K/V 来自源序列,查询与被查询内容并不必来自同一组输入。

例如本书构造两条信息:第一条键表示“退款政策”,值是政策摘要;第二条键表示“物流时效”,值是配送说明。查询需要按主题匹配,输出却需要聚合具体内容。若用 V 直接替代 K,匹配就被迫使用内容空间;当内容维度不同,甚至无法与 Q 点积。即使维度相同,令 \(W_K=W_V\) 也改变了原来的参数化,原有模型的权重与结果不再自动保持。这个反例说明可以设计共享参数的结构,却不能无损删掉既有模型的 K。

对每个头,计算为:

\[ A=\operatorname{softmax}_{S}\left(\frac{QK^{\mathsf T}}{\sqrt{d_h}}+M\right), \qquad Z=AV. \]

\(K^{\mathsf T}\) 只转置最后两轴;\(QK^{\mathsf T}\) 的形状是 \([B,H,T,S]\)。softmax 沿键位置 \(S\) 归一化,让一个查询对可见来源分配权重。它既不是沿头轴归一化,也不是在整个批次上分配概率。\(M\) 是可广播到分数形状的加性掩码,允许位置取零,禁止位置概念上取负无穷。

原论文用一个简化假设解释缩放:若 Q/K 各分量独立、零均值、单位方差,点积是 \(d_h\) 项乘积之和,方差随 \(d_h\) 增长;除以 \(\sqrt{d_h}\) 后保持量级。真实训练向量未必满足独立假设,不能把这个推导当作训练全程的精确分布模型。其作用是解释为什么大维度未缩放点积容易把 softmax 推向饱和区,而不是保证任何输入都得到均匀梯度。[3]

用一条教学查询手算可见性:假设三个键位置的未缩放匹配分数为零、零、很大的正数,但第三个位置被禁止。先加掩码,第三项不参与归一化,前两项权重各为二分之一;再乘 V,输出为前两个内容向量的平均。若先 softmax 再把第三个权重清零,却不重新归一化,前两项的和通常小于一,已经改变了数学定义。大匹配分数也不等于事实可信度,只说明当前参数表示下的匹配程度。

图中匹配与聚合分成两条路径,意味着“选择哪个来源”和“来源提供什么内容”可以使用不同特征。以下数值和扰动例子均为本书构造的教学推导,用于检验计算定义;它们不代表训练后某个头固定承担了某项人类可命名的职责。

设一个查询的维度为二,取向量为 \((\sqrt{2},0)\),三个键依次为 \((0,1)\)、\((1,0)\)、\((2,0)\)。除以 \(\sqrt{2}\) 后,三个匹配分数依次为零、一、二。若第三个位置属于未来,允许集合只剩前两个;归一化权重分别约为零点二六九和零点七三一。再令三个值依次为 \((2,0)\)、\((0,4)\)、\((100,100)\),输出约为 \((0.538,2.924)\)。第三个值故意设得很大,但正确结果与它无关:可见性先决定谁能参与,分数再在允许集合内决定比例。

这个例子同时给出三个可检验断言。只改变第三个值,较早查询的输出不变;只改变第一个键,输出会因匹配权重改变而变化;只改变第一个值,权重本身不变,但聚合结果变化。若某实现对这三种扰动都表现相同,很可能把键与值的职责混在了一起。它们比“结果看着差不多”更有诊断力,因为每次只改变一条因果路径。

对允许集合的每行分数同时加一个常数,softmax 不变。实现常利用这一性质先减去行最大值,再计算指数,减少溢出风险。注意这一变换的对象是同一查询的全部允许分数,不是给每个键随意加不同偏置。后者会改变相对权重,正是位置分数偏置等方法能够影响注意力的原因。数值稳定变换与模型结构变换在代码中都可能表现为一次加减,却有完全不同的语义。

softmax 的导数也解释了“饱和”的具体含义。若一行概率为 \(a_i\),它对分数 \(s_j\) 的导数是 \(a_i(\delta_{ij}-a_j)\)。当某一项接近一,其他项接近零时,很多导数会变小;缩放减少初始化时点积过大导致过早进入这种区域的风险。这里不能倒推“所有尖锐注意力都是坏事”:经过训练后,有些任务确实需要集中读取一个位置。应区分不受控制的数值饱和和任务所需的选择性,而不是要求所有头都保持平均分配。

权重和为一还意味着,单头、单次聚合在值空间中是允许值向量的凸组合。因此本例的输出不会越过这些值构成的凸包。不过这个结论只属于这一局部运算:输出投影可以含正负权重,残差可以再加上原表示,FFN 可以做非线性变换,多层整体不受同一个凸包限制。由局部加权平均推断整个模型只能做平均,是把中间张量的性质错误推广到了复合函数。

同样,注意力分数高不必意味着某证据对答案贡献最大。假设一个头给某位置很高权重,但该位置的值向量经过输出投影后接近零,它对残差更新可能很小;另一个权重较低的位置却可能携带幅值更大的有效方向。再加上其他头与残差通路,单张热力图不能承担完整的因果解释。若要评估证据是否影响结果,可以设计受控删除、替换和位置迁移实验,并比较相同输出条件下的变化;这仍是行为证据,不能未经额外分析就命名内部神经元的真实职责。

缩放、聚合与多头输出

每个头输出 \(Z_h\in\mathbb{R}^{B\times T\times d_v}\),拼接得到 \([B,T,Hd_v]\),再乘 \(W_O\in\mathbb{R}^{Hd_v\times D}\) 回到残差流宽度。输出投影会混合各头的信息,不能把一个头的权重图直接当作最终答案的完整解释。多头允许学习不同的匹配与内容子空间,但不保证每头分别负责语法、数学或权限。

固定总宽度 \(D=Hd_h\) 时,增加头数会缩小每头宽度。它提供更多独立匹配分布,同时减少各头的特征空间;“头越多越好”没有从该等式中得到证明。若固定每头宽度再增加头数,总投影宽度和参数成本则会变化,已经不是同预算比较。评估应说明固定了哪个量,并把任务质量和运行成本一起记录。

拼头前先交换头轴与位置轴,再检查 view 所需的内存布局条件。

标准稠密注意力的分数对象含 \(BHTS\) 个元素,点积和内容聚合的计算随 \(TS\) 增长。自注意力 \(T=S\) 时出现二次项;这不等于整个 Transformer 的全部计算都只有这个项,投影与 FFN 也有成本。先确认工作负载受哪个量主导,再讨论长上下文优化,避免把一种局部复杂度写成整个平台的容量结论。

在多头拼接处,最好使用非对称的手工张量检验布局。假设两个头在两个位置上的单维输出分别为头一的十一、十二和头二的二十一、二十二。正确拼接后,位置一得到十一与二十一,位置二得到十二与二十二。如果直接按错误内存顺序重排,则可能得到十一与十二以及二十一与二十二。两种结果形状相同、元素总数相同,甚至整体均值相同;只有逐位置语义断言能把它们区分开。这个反例说明聚合统计适合观测,不能替代局部正确性检查。

对自注意力来说,矩阵乘法还可以按行理解:每个查询形成一行读取方案,每个键是可供读取的一列。跨注意力则把这张“读取关系表”的两边放在不同序列上。假设目标已有两个位置,源文本有五个位置,分数就有两行五列,而不是五行五列。把自注意力的方阵假设写进通用实现,会在这种情形或增量缓存下暴露。统一保留查询长度与键值长度两个符号,正是为了让这些依赖在接口层就显式出现。

因果掩码、Padding 与全屏蔽行

因果掩码按绝对位置阻止查询读取未来。无缓存教学输入中,查询位置 \(i\) 可见 \(j\leq i\) 的键,因为该位置预测下一 token。Padding mask 则阻止读取无效的补齐键。两者组合表达“既有效、又在时间上可见”,不能把一个三角矩阵当作所有批次的完整有效性定义。原论文的遮蔽与输出错位共同维护自回归条件。[3]

缓存后的查询位置要加上前缀偏移。若前缀长为 \(P\),当前块内第 \(i\) 个查询对应绝对位置 \(P+i\),它可见的键界限是这个位置,而不是局部下标 \(i\)。直接生成 \(T\times S\) 的左上角三角阵,可能错误屏蔽大部分历史缓存。反过来,训练中把不同样本拼接时若没隔开样本边界,会让一个样本读取另一个样本;仅有因果性仍不足以保证数据隔离。

全屏蔽行需要单独定义。本节数学式对一行全为负无穷的分数没有正常的概率分布;直接相减最大值可能产生未定义值。用有限极小数代替又可能得到看似正常的均匀权重,所以“没出现 NaN”不能证明掩码正确。本书教学参考规定:有效查询至少有一个可见键;若输入违反,显式报错。用于处理 padding 查询的优化实现也可以约定零输出,但必须与调用方契约和测试一致,不能悄悄把无效行当正常预测。

继续构造一个缓存教学例子:历史前缀有三个位置,当前一次计算两个新位置,合计五个键。当前第一行查询对应绝对位置三,可读键零到三;第二行查询对应绝对位置四,可读键零到四。允许关系分别有四个和五个位置。如果程序只根据当前块长度生成左上角三角形,第一行就只能读一个键,第二行只能读两个键,历史大部分信息会被错误隐藏。这个错误不会产生维度冲突,甚至可能在没有历史前缀的测试中完全消失。

当前查询绝对位置应允许的键位置局部三角阵的典型错误
当前块第一项三零、一、二、三误以为只能读取零
当前块第二项四零、一、二、三、四误以为只能读取零、一
右补齐的无效项不作为真实查询由实现定义零输出或跳过被当成正常预测行

表中的数字是从零开始的位置编号,不能与文本中的“第一个词”口语序号混用。位置 ID、缓存有效长度和掩码边界必须使用一致约定。若服务把前缀分成多个块计算,每个块都需要延续逻辑位置;块只是执行单位,不应悄悄重置模型看到的序列起点。

当两条样本长度不同时,掩码通常需要同时表达批次、查询和键的有效性。一个仅含长度维的掩码若被广播到整个批次,可能让较短样本读取补齐键;一个将样本维错误解释为头维的掩码,则可能只影响部分头。这些问题适合用“调换批次顺序后,逐样本结果应保持对应一致”来检验。该断言以关闭随机性、保持同一参数与精度为前提;真实低精度批处理可能有小数值差异,需要给出合理容差,但不应出现结构性的内容串扰。

训练时把多条短文本打包进一个长序列,可以减少补齐浪费,但是否允许跨文档读取必须由训练目标定义。若目标是独立样本,只有下三角因果掩码还不够,因为后一个样本仍可看见前一个样本。若目标明确把文档视作连续文本流,则边界规则又不同。工程上不应把某一种打包策略的假设偷偷写成通用注意力定义;数据构造、损失边界与可见性必须一起审查。

全屏蔽行应进入边界测试,同时检查返回约定和下游是否跳过无效查询;形状正确不能使无条件上下文变成有效预测。

1.3 Block 的稳定性与位置信息

flowchart TD
 X["残差流输入"] --> N1["按特征归一化"]
 N1 --> A["带位置关系的注意力"]
 A --> ADD1["相加"]
 X --> ADD1
 ADD1 --> N2["再次按特征归一化"]
 N2 --> F["逐位置非线性变换"]
 F --> ADD2["本层输出"]
 ADD1 --> ADD2
 P["逻辑位置规则"] --> A

残差与逐位置前馈

注意力让不同位置交换信息,FFN 在每个位置对特征作非线性变换。一个简化的 Pre-Norm Block 可写为:

\[ U=X+\operatorname{Attention}(\operatorname{Norm}(X)),\qquad Y=U+\operatorname{FFN}(\operatorname{Norm}(U)). \]

这里 Attention 包含输出投影。两次加法要求分支回到 \([B,T,D]\);残差提供跨子层的直接路径,子层学习对现有表示的增量。它有助于优化深网络,却不保证每层输出都保留某个业务事实,更不是一个可以替代运行时状态的记事本。

普通两层 FFN 为 \(\operatorname{FFN}(x)=\phi(xW_1+b_1)W_2+b_2\),先从 \(D\) 映到中间宽度 \(D_{ff}\),经非线性再映回 \(D\)。同一组权重用于各位置,“逐位置”表示它在这一步不再跨 token 聚合,并不表示每个位置拥有一套不同参数。原始论文与中文教材均区分了注意力聚合和逐位置网络。[3] [4]

没有非线性时,两层线性变换仍可合成一个线性变换;中间扩维只有与非线性等机制结合,才提供不同的表达形式。现代门控变体会增加投影分支,不能拿普通两矩阵参数公式直接估算所有 FFN。教学层面可先把 Attention 理解为位置间的信息混合,把 FFN 理解为位置内的特征加工;但不要进一步声称“全部知识只存在 FFN”,因为最终行为依赖多层联合计算。

图的两条旁路说明,残差流并不在每个子层后被从头替换。按本节公式,某层输出等于输入加两个学习到的更新;若更新暂时很小,信号仍有直通路径。这可以从导数上理解:简化为 \(y=x+f(x)\) 时,其雅可比为 \(I+J_f(x)\),包含恒等项。这里的代数性质不等于深层训练已经稳定,因为多个层的雅可比仍会连乘,子层的尺度和方向也可能改变梯度。因此残差、归一化、初始化和学习率属于相互配合的设计,不能把其中任何一项单独当作“不会梯度异常”的保证。

残差还要求子层返回同一表示空间。假设教学宽度为八,注意力内部可以分成两个四维头,FFN 内部可以扩到二十四维,但两条分支相加前都必须回到八维。扩维不是为了让下一层的残差永久变宽,而是为子层提供更丰富的中间变换。若某实现省略输出投影,只有偶然相等的维度还能相加,参数化却已改变。理解“内部自由、外部契约固定”,有助于读懂不同模型为何能共享 Block 接口却拥有不同内部成本。

普通 FFN 与门控 FFN 的差别可用一个局部公式展示。令两条升维支路分别输出 \(a=xW_a\)、\(b=xW_b\),门控形式可写作 \((\phi(a)\odot b)W_c\)。其中逐元素乘法让一个支路调节另一个支路,而不是仅把一条非线性向量投回去。若维持相同中间宽度,三矩阵结构比两矩阵结构多一组参数;若要比较同参数预算,就需要调整中间宽度。这个计算例子只说明参数与运算关系,不声称某种门控在所有训练条件下更优。

从张量依赖还能解释“逐位置”的准确含义。某个位置进入 FFN 的向量已经经过注意力,可能混入许多前文信息;FFN 虽然不在这一算子里跨位置读取,处理的却不是孤立词义。把它称为“只看当前词”容易误导,因为“当前位置表示”与“原始词向量”已经不同。多层结构不断交替做位置交换和局部加工,后一层的查询又基于已加工的表示生成,所以不同深度的注意力不是对同一张静态词表反复检索。

LN、RMSNorm 与 BN 比较什么

LayerNorm 在单个位置的特征维上计算统计量。对 \(x\in\mathbb{R}^{D}\),其形式为:

\[ \mu=\frac1D\sum_i x_i,\quad \sigma^2=\frac1D\sum_i(x_i-\mu)^2,\quad \operatorname{LN}(x)_i=\gamma_i\frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta_i. \]

它不依赖另一条请求是否放进同一个 batch,训练与推理沿用相同的归一化计算方式。Ba 等提出这种按样本归一化的思路,针对了批量统计在序列任务中的使用问题。[5]

RMSNorm 以均方根做缩放,通常写为:

\[ \operatorname{RMSNorm}(x)_i=\gamma_i\frac{x_i}{\sqrt{D^{-1}\sum_jx_j^2+\epsilon}}. \]

它省去显式减均值,不等同于把 LN 中心化结果换个名字。论文在多种任务上验证了简化方案,但具体耗时收益与硬件、算子融合、精度有关,不能引用一组实验比例承诺所有大模型都同幅提速。\(\epsilon\) 防止分母过小,其位置和计算精度属于实现契约,需要在复现时检查。[6]

归一化放在哪里也影响优化。Post-Norm 对“输入加子层输出”再归一化,Pre-Norm 则先归一化输入、再走子层与残差相加。Xiong 等分析了两者初始化时的梯度差异,并在研究配置中探索减轻 warmup 需求。不能把它推广为任何 Pre-Norm 大模型都无需学习率预热;优化器、深度与训练规模仍需共同验证。[7]

BN 的典型统计轴包含 mini-batch,而 LN 的本节定义沿特征轴;BN 训练时估计批量统计、推理时常用累计统计,所依赖的信息不同。Ioffe 与 Szegedy 提出了 BN 的机制与实验。对本书序列教学场景,批大小变化、可变长度和在线单请求会使批量统计契约更复杂,这是选择 LN 类方案时应考虑的条件,而不是“BN 在任何序列模型里都错误”的结论。[8]

归一化本节统计范围是否减均值训练与推理关注点
BN包含批量轴的同类特征统计是批量估计与累计统计的差异
LN单位置的特征轴是不依赖其他样本;核对特征维
RMSNorm单位置的特征均方根否不具有同样的平移不变性;核对精度与epsilon

替换归一化还会改变已训练模型的函数,不能把相近用途等同于无损兼容。对已有权重,应在转换方案、继续训练和回归证据齐备后再判断是否可替换;对新训练配置,则应记录归一化位置和参数,避免制品同名而计算不同。

统计轴可以通过样本隔离检验:只改第二条样本,第一条样本某位置的 LN 结果不应改变。平移性质则用下面的数值例子说明。

现在用一组教学数值比较归一化。令向量为 \((1,3)\),忽略稳定常数,取缩放参数为一、偏移为零;LayerNorm 的均值为二、方差为一,得到 \((-1,1)\)。RMSNorm 的均方根为 \(\sqrt{5}\),得到 \((1/\sqrt{5},3/\sqrt{5})\)。再把两个特征同时加十,LayerNorm 仍得到相同结果,RMSNorm 则一般改变。这是中心化带来的不变性差别,不是精度高低的区别,也不意味着任何被消去的均值方向都对所有任务无用。

缩放不变性也有前提。忽略稳定常数时,把向量乘以一个正数,归一化后的方向可以保持;当向量范数很小,稳定常数不再可忽略,结果不会严格不变。把输入乘以负数时,方向可能翻转,同样不能沿用正比例结论。单元检查应清楚区分数学理想条件和有限精度实现,既不要用理想等式苛求所有边界,也不要以“浮点有误差”为理由接受任意变化。

低精度计算使这些边界更有工程意义。平方求和、除法与开平方可能采用不同累加精度;两个实现即使使用同样的最终存储类型,也可能有不同的内部舍入路径。一个可靠的比较先固定归一化轴、稳定常数、参数和输入,再用更高精度参考判断误差模式。若误差主要发生在极小范数或大幅值输入,优先检查数值范围与累加;若修改另一条样本就出现大变化,优先检查轴;若所有输入都系统偏移,则检查中心化与参数加载。不同症状对应不同因果假设,不应只给一个最终平均误差。

顺序如何进入计算,扩窗为何还要验证

如果没有任何位置机制,单纯的自注意力难以区分仅由位置置换造成的差异;因果可见性虽引入方向约束,仍不能代替完整的位置表示。原始 Transformer 使用正弦位置编码;不同频率为不同距离提供可组合信号。绝对位置表、旋转位置与分数偏置是不同设计,不能在图中随意互换。[3]

RoPE 将成对特征按位置旋转。用 \(R_m\) 表示位置 \(m\) 的旋转,匹配可写为 \((R_mq)^{\mathsf T}(R_nk)=q^{\mathsf T}R_m^{\mathsf T}R_nk\);成对旋转具有相对位移结构,使点积包含 \(n-m\) 的关系。这个等式解释位置怎样进入匹配,不证明模型在训练外的任意距离都能可靠推理。[9]

ALiBi 不向 Embedding 加位置向量,而是在分数上加入与距离有关的线性偏置。论文展示了特定模型与语料上的长度外推实验;这种证据应保留配置前提,不能写成“加偏置就无限上下文”。RoPE 与 ALiBi 都改变了模型使用距离信息的方式,但其作用位置和归纳偏好不同。[10]

因此,扩窗至少要分别检查三个层面:算子能否接受更大位置索引,计算与缓存是否装得下,模型是否真正用上远处证据。窗口字段变大,只能说明某项配置允许更长输入;若关键条款在中段仍被忽略,业务能力并未因配置通过而自动达标。教学评估可把同一事实放到开头、中间和末尾,再插入干扰与否定条件,分别观察检索、引用和判断是否变化。这里的评估方案是本书建议,不能当作位置论文已经证明的产品结论。

位置机制则是在另一条维度上定义“相同内容出现在哪里”。考虑没有位置编码、没有因果掩码的自注意力:若同时置换输入位置,Q、K、V 按相同方式置换,输出也随之置换。这种置换等变性意味着结构不会凭空知道某个词是第一项还是最后一项。因果掩码会破坏任意置换对称,提供方向与不同可见集合,但仍不等于显式表达所有距离关系。顺序信息来自具体结构的共同作用,不能用一句“Attention 不知道顺序”覆盖所有带掩码实现。

RoPE 的二维旋转可以进一步手算。假设一对坐标的旋转角为位置乘某个频率,同一查询和键一起平移相同的位置偏移时,两者的相对旋转角保持。这个性质说明点积可通过相对位移变化,但它不意味着整段输入在任意平移后所有输出都必然一致:模型可能还有其他位置相关机制,掩码有效范围也可能变化,有限精度与训练分布都要考虑。使用 RoPE 的缓存还必须保持旋转约定一致,不能把已经旋转的键当作未旋转键再次处理。

举例说,一个历史键最初在逻辑位置五完成旋转并写入缓存。如果后续代码因物理页移动而把它当作位置零重算,缓存中的内容与查询使用的位置规则便不再匹配。这里错误来自把物理存储下标当成逻辑序列位置。分页、分块和缓存压缩可以改变存储方式,却必须保留计算所需的位置语义;这是结构与服务系统之间一个重要接口。反过来,若只是物理复制缓存而逻辑位置不变,就不应重新解释其位置身份。

位置外推还可以拆成不同失败模式。模型可能接受长索引,但远处键的匹配分数不再有训练时的分布;也可能成功找出一条远处事实,却无法同时结合多条相距很远的条件;还可能只是在更长输入下被干扰材料诱导。单次“藏一条事实再找出来”的演示只覆盖部分能力。教学评估应固定语义后改变距离、位置、干扰量和条件数量,观察错误随哪个变量变化,而不是只画窗口长度与一个总分的关系。

这里的取舍是明确的:更丰富的位置机制提供有用归纳偏好,同时增加配置与转换契约;更长窗口提供更多可见材料,同时增加计算、缓存和任务分布变化。能加载长序列属于运行能力,能引用正确证据属于检索与利用能力,能依据多个条件得出有效结论属于任务能力。三个层次需要分别验收,这也为下一节讨论架构与资源代价准备了判断坐标。

1.4 架构变体与资源代价

flowchart TD
 A["任务目标与可见性"] --> B["编码器或因果生成或编解码"]
 B --> C["注意力缓存表示"]
 C --> D["独立多头"]
 C --> E["共享或分组键值"]
 C --> F["联合潜在压缩"]
 B --> G["前馈参数布局"]
 G --> H["稠密网络"]
 G --> I["稀疏专家路由"]
 D --> J["分别核算质量与资源"]
 E --> J
 F --> J
 H --> J
 I --> J

架构、可见性与目标要一起读

Encoder、Decoder 和 Encoder–Decoder 首先描述信息如何连接,训练目标再决定模型因什么监督信号更新。BERT 用双向上下文学习表征,适合通过任务头等方式进行理解任务微调;它的掩码语言建模不是直接从左到右预测完整文本的同一个目标。[11] T5 将不同任务统一成 text-to-text 接口,其迁移学习框架并不要求所有模型都改为单一 Decoder。[12] GPT-3 则展示了自回归模型在无需参数更新的上下文少样本设置下完成多种任务的能力与限制。[13]

路线典型可见性与信息路径本节采用的目标描述适用判断与限制
Encoder / BERT输入位置双向交互遮蔽位置的表征学习可做分类和检索表征;不能直接把普通MLM当自回归聊天生成
Encoder–Decoder / T5源序列编码;目标因果生成,并跨注意力读取源统一文本到文本的迁移框架输入输出边界清楚;两侧状态与目标需分别理解
Decoder-only / GPT路线同一流内因果可见下一token预测提示与生成接口统一;仍受训练分布和输入证据限制

具体到原始 LLaMA,它属于因果生成路线,并在报告中采用 Pre-Norm、RMSNorm 与旋转位置机制;与 BERT 的双向遮蔽表征路线相比,差别同时包括训练目标、可见范围与常见输出用途,不能只按开源与否分类。[14] 这段结论限定在原版报告,不代替后续代际的配置核验。

T5 的跨度破坏会把连续缺失片段换成 sentinel 标记,目标序列用这些标记串起待恢复片段;解码器通过跨注意力读取编码器结果。[12] GPT-2 则用因果语言建模连续预测后续文本,采用 Transformer 语言模型结构;它没有 T5 那样独立的源序列编码器与编码器—解码器跨注意力。[15] 因此,接口都能返回文本,不等于它们的监督位置和条件路径相同。

从本书工程视角推导,Decoder-only 可将提示、示例与输出组织在同一序列中,接口与部署链路较统一;Encoder–Decoder 则显式区分源输入与目标生成,适合比较输入输出职责清晰的条件生成任务。这些是结构取舍,不是对“流行程度”的市场统计,也不证明前者在所有任务、长度和预算上更优。

表格用于选择阅读方式,不是永久的能力分区。Encoder 可以参与生成系统,Decoder 也可提取表示;是否适合任务,还要看训练方法、输出接口和评测结果。不能从“只有 Decoder”推断它没有理解能力,也不能从“能读取完整输入”推断它获得了正确授权的最新事实。

MHA、MQA 与 GQA 减少了什么

MQA 让不同查询头共享一组 K/V,以减少增量生成时需要写入和读取的缓存。它保留多个查询头,而不是把整个模型改成一个注意力头。Shazeer 的工作指出了这种共享与解码带宽之间的关系。[16] GQA 位于 MHA 与 MQA 之间:\(H_q\) 个查询头分为 \(H_{kv}\) 组,每组共享一个 K 头和 V 头;\(H_{kv}=H_q\) 回到 MHA,\(H_{kv}=1\) 回到 MQA。[17]

按本章约定,Q 的形状仍为 \([B,H_q,T,d_h]\),K/V 的头轴缩为 \(H_{kv}\)。令每组查询数 \(g=H_q/H_{kv}\),教学实现要求 \(H_q\) 能被 \(H_{kv}\) 整除,第 \(h\) 个查询头使用第 \(\lfloor h/g\rfloor\) 个 KV 头。这是分组映射,不是把 \(H_q\) 写成 \(H_{kv}\) 后让输出头数跟着减少。框架若显式复制 KV 作为正确性参考,实际内存节省要另由原生分组算子实现。

对普通、未压缩且 K/V 每头宽度相等的缓存,可按维度推得:

\[ \text{KV bytes}=2BL S H_{kv}d_hs, \]

其中 \(s\) 是每元素字节数;一般宽度不同则为 \(BLSH_{kv}(d_h+d_v)s\)。这个式子只计算缓存载荷,不含权重、激活、页表、分配碎片、复制与其他工作区,也没有自动给出多卡分片后的单卡值。它帮助比较同一口径下的头共享,不是生产显存总账。

例如在教学假设 \(H_q=8,H_{kv}=2\) 下,若其他轴与精度相同,GQA 缓存载荷是 MHA 的四分之一;这不表示请求延迟也变成四分之一。投影、FFN、调度、缓存读取与硬件利用率共同影响实际延迟。将既有 MHA 权重改成 GQA 也不是只改配置,原论文的 checkpoint 转换和继续训练正说明结构变化需要适配。[17]

DeepSeek-V2 的 MLA 用低秩向量联合承载 K/V 的内容表示,并为位置部分采用解耦 RoPE。按该论文缓存设计,需要保留压缩内容向量和解耦的位置键;若维度分别为 \(d_c\) 与 \(d_r\),其对应载荷为 \(BLS(d_c+d_r)s\)。这是该结构的限定口径,不能把 \(d_c\) 填进标准 GQA 公式后再机械乘二、乘头数。重建向量、投影吸收以及位置支路是否物化,会影响实际执行。[18]

注意力结构缓存的主要语义对象本节可以据此判断什么
MHA每个查询头对应的K与V头数直接参与标准KV载荷
MQA所有查询共享的一组K与V缓存缩小,查询子空间仍可多个
GQA每组查询共享的K与V在共享程度与容量间选配置
MLA(DeepSeek-V2)联合压缩内容及解耦位置状态必须按潜变量与位置支路重新记账

这里没有按结构给模型质量排永久名次。论文中的比较来自具体训练和实验,不能把“缓存小”直接推出“准确率高”。

还可以从一个小型分组例子看出共享的边界。假设四个查询头分为两组,前两个查询使用第一组 K/V,后两个使用第二组 K/V。即使组内键值完全相同,不同查询向量仍会产生不同匹配分数,因而输出不必相同。共享的是被读取的表示,不是查询条件,也不是最后的聚合结果。若误把组内查询先平均再计算,就把多个独立读取问题合成了一个问题,与 GQA 的定义不同。

MLA 的压缩则可以用线性代数辨认。假设内容键由低维潜变量 \(c\) 经过上投影 \(W\) 得到,则查询与内容键的点积为 \(q^{\mathsf T}Wc=(W^{\mathsf T}q)^{\mathsf T}c\)。这说明在适当条件下,可以把部分变换移到查询侧,在潜变量空间完成匹配。这个等式只讨论内容支路;加入随位置变化的旋转后,矩阵是否能被这样吸收需要重新检查,不能把位置算子任意交换顺序。这正是阅读解耦位置设计时需要关心的结构问题,而不只是比较一个压缩率数字。

Dense、MoE 与算子的不同取舍

稀疏专家混合把部分网络计算分给门控选择的专家,早期工作用条件计算扩大参数容量而不同比增加每个样本的计算。[19] Switch Transformer 进一步研究简单稀疏路由及其通信、稳定性与扩展问题。[20] 专家通常是参数子网络,不必天然对应“财务”“法律”等人类部门。

因此总参数、每 token 激活参数、常驻权重和通信量要分开计。只激活少数专家,仍可能需要存放全部专家权重或安排跨设备访问;路由不均会使部分设备忙、部分设备闲。Dense 布局没有同样的专家路由成本,MoE 则提供另一种容量与计算折中。两者都不能仅凭模型名称或激活参数数字判断单机是否装得下。

FlashAttention 优化的是另一层:通过分块和减少 GPU 高带宽内存与片上存储之间的数据搬运,实现精确注意力计算。它不是 GQA 的同义词,也不是以减少注意力头获得同样收益;普通稠密注意力的二次算术项并未因此自动消失。[21] 这也解释了为什么结构设计、算子实现、服务调度要分别记录:某层的节省不能重复算进另一层账本。

对 MoE 也应先问路由发生在哪里。一个 token 在某层被送到哪个专家,与下一层的路由可以不同;同一个句子中的不同 token 也未必走相同专家。假设某批次的大部分 token 恰好选择同一设备上的专家,平均激活参数仍然很少,但该设备可能成为关键路径。因而条件计算的算术节省与分布式执行的负载平衡是两个相连而不同的问题。评估应保留每层专家负载与通信分布,不能只看全模型平均激活参数。

路由结果还必须说明组合规则。若教学路由概率为零点六、零点三、零点一,选择前两个专家后,可以按原权重组合,也可以在选中集合内重新归一化为三分之二和三分之一;两者输出尺度不同,复现时必须遵守训练时定义。Switch 的单专家选择仍保留门控系数,并非选择后无条件以单位权重输出。[20]

容量约束限制的是每批送入专家的 token 数。按 Switch 的静态容量定义,假设八个 token、四个专家、容量因子为一,每个专家有两个槽位;若四个 token 都选同一专家,其中两个可能溢出。该论文实现让溢出 token 跳过这一专家计算,经残差继续传递,不是删除文本位置。扩大容量缓解溢出,却增加空槽与资源成本。[20]

训练和推理都可能受容量限制,但负载不同:训练通常有更多位置可共同分配,逐步解码的小批次更容易出现不均;训练还可用辅助损失影响未来路由,推理不执行这个参数更新。由此推导,不能把训练平均负载直接作为服务上限。动态容量、拒绝溢出或改送其他专家属于不同执行选择,必须核对与已训练模型的计算契约,而不能把改路由当作纯调度优化。

讨论结构取舍时,至少区分总参数量、每 token 激活参数量和常驻权重显存。下面按一个 Decoder-only Pre-Norm Block 记账,假设 \(d_h=d_v\)、线性层不含 bias,且 FFN 是普通的两投影结构;Embedding、最终 Norm 和词表输出层位于单层 Block 之外。

单层组成权重形状或数量参数量
Query 投影 \(W_Q\)\(D\times H_qd_h\)\(DH_qd_h\)
Key、Value 投影 \(W_K,W_V\)各 \(D\times H_{kv}d_h\)\(2DH_{kv}d_h\)
输出投影 \(W_O\)\(H_qd_h\times D\)\(DH_qd_h\)
注意力合计上述四个矩阵\(2Dd_h(H_q+H_{kv})\)
普通两投影 FFN\(D\times D_{ff}\) 与 \(D_{ff}\times D\)\(2DD_{ff}\)
两个 RMSNorm每个含一个长度为 \(D\) 的缩放向量\(2D\)

若线性层带 bias,需要逐项加上输出维度;若使用带 bias 的 LayerNorm,两个 Norm 共计 \(4D\);若使用 SwiGLU 等三投影门控 FFN,FFN 主项变为 \(3DD_{ff}\)。以 \(D=2048,H_q=16,H_{kv}=4,d_h=128\) 为例,注意力四个投影共 \(10{,}485{,}760\) 个参数,其中 \(W_O\) 占 \(4{,}194{,}304\),不能从账本中省略。Embedding 表按 \(V_{\mathrm{vocab}}\times D\) 计,输出表是否与它共享权重需要查看具体配置。稀疏专家结构还要分别记录全部专家参数和每 token 激活参数;把这些口径合成一个“模型大小”,会系统性扭曲显存与成本估算。复算时还应记录权重共享、bias、FFN、Norm 和参数口径,并保留复算过程;只给最终总数,无法定位两个实现为何不同。这份记录也是后续显存预算与检查点审查的输入。

仅以 Qwen2 技术报告 v4 的 7B Dense 配置为例:残差宽度3584、28层、28个查询头、4个KV头、每头128维,采用 GQA、RoPE、RMSNorm 等设计。[22] 官方 Qwen2-7B 配置页面显示文件修订9b039ab,对应头数、层数和宽度一致;其 Embedding 表行数为152064,而报告列出的有效词表为151646,不能混同。[23]

这组配置每个 KV 头服务7个查询头。若只做形状阅读,读者可将 \(D,H_q,H_{kv},d_h\) 代入前述张量约定;若要估算缓存,还须另给 \(B,S,s\) 等工作负载。这里没有据此给出设备吞吐、真实窗口质量或最新版 Qwen 的保证。产品家族的代际更新可能同时改变注意力、词表与模板,所以模型制品应绑定具体配置和版本,再交给评估与发布流程。

1.5 训练与推理的资源差异

flowchart LR
 W["共同模型权重"] --> T["训练全序列"]
 W --> P["提示预填充"]
 W --> D["逐步解码"]
 T --> G["激活与梯度及优化器状态"]
 P --> K["建立历史键值缓存"]
 K --> D
 D --> R["读取历史并追加当前状态"]
 R --> D

同一个结构在训练和生成时对应不同的资源账本。前四节已经定义训练并行、prefill、decode 与 KV 缓存的计算路径;这里把它们放到同一张表中比较,避免把训练显存、单步延迟和缓存载荷混成一个数字。

阶段查询长度 \(T\)键值长度 \(S\)主要资源压力
训练\(T=S\)(全序列)全序列激活、梯度与优化器状态
Prefill提示长度提示长度一次性大矩阵计算
Decode1历史长度KV 缓存读写与显存

训练侧还要为反向传播保存中间激活,并维护梯度与优化器状态;第 5 章给出完整训练账本,第 9 章展开训练平台实现。推理侧的批处理会引入 padding 与长度差异,连续批处理、缓存分页和服务并行由第 10 章展开。第 8 章先给出两类基础设施的总体边界。本章只要求读者从配置中识别 \(T\)、\(S\)、层数、精度和 KV 头数,并在相同口径下比较资源。

把参数、激活与缓存放进同一份账本

以下资源估计统一采用教学假设,不作为设备选型或吞吐承诺。先设模型含 \(N\) 个权重,每个权重实际存储占 \(s_w\) 字节,那么未分片的权重载荷为 \(Ns_w\)。若权重被量化,缩放因子、零点、分组元数据与对齐填充需要另外计算;若只改变权重类型,KV 缓存和中间激活未必一起改变。模型文件大小、加载后的常驻显存与峰值运行显存因此通常不能互换。

训练还要维护梯度、优化器状态以及反向传播需要的中间量。为了说明口径,假设某实现为每个参数保留二字节计算权重、二字节梯度、四字节主权重副本,以及两个各四字节的优化器状态,则这几项合计每参数十六字节。这个十六来自明确的假设相加,不是所有训练框架的固定比例;若没有主副本、梯度采用其他类型,或状态被分片与卸载,账本就要重算。更关键的是,它仍没包含激活、临时工作区和通信缓冲。

激活与参数有不同的增长规律。固定模型宽度和层数时,批量与序列长度增加会扩大很多中间张量;固定批量与序列时,增加参数通常改变权重和部分激活,却不是所有项都按同一比例变化。训练的激活保存策略还决定反向时是直接读取还是重新计算。重计算可以减少保存量,同时增加计算与调度负担;只有把省下的内存与多做的工作放在同一账本里,才能判断它是否解决当前限制。

账本项主要随什么增长能否跨请求共享常见误算
模型权重参数量、实际存储格式同一模型副本通常共享把文件压缩率当运行峰值缩减
训练梯度与状态参数量、优化器与分片策略不按普通独立请求解释用推理显存估训练预算
训练激活有效批量、长度、层宽及保存策略绑定当前训练计算图只按参数量估全部内存
推理缓存活跃请求的历史长度、层数、缓存宽度仅满足严格前缀条件时可能共享将所有请求长度视为同一值
临时工作区算子、形状、并行与执行策略取决于生命周期认为张量公式已覆盖所有分配

对长度不同的推理请求,更准确的载荷估计应把 \(BS\) 改成各条活跃请求长度之和。在其他层配置相同、采用标准等宽缓存的假设下,载荷为 \(2LH_{kv}d_hs\sum_b S_b\)。若某实现按最大长度预分配,实际占用可能更接近批量乘最大长度;若按块分配,还要考虑尾块浪费和元数据。两种实现服务同一批请求,语义载荷可以相同,物理占用却不同。区分这两层,才能评价分页是否有效,而不把布局优化误认为模型结构变小。

用一组可复算的教学配置说明缓存增长:层数三十二,键值头数八,每头一百二十八维,每元素二字节。每新增一个 token,每条请求需要缓存的 K/V 载荷为 \(2\times32\times8\times128\times2=131072\) 字节,即一百二十八 KiB。单请求历史长度为八千一百九十二时,载荷恰为一 GiB;四条相同长度请求为四 GiB。这里只计算缓存,不含权重与工作区,也不声称某真实模型正好采用该配置。

如果把教学配置的 KV 头数从八改为二,标准缓存载荷减为原来的四分之一;但若增加四倍并发,缓存总载荷又回到原先水平。结构优化释放的空间往往被更多请求或更长上下文消耗,所以“缓存节省”应报告固定了并发还是固定了长度。对用户体验而言,也要记录排队时间与生成速度,不能用更大的批量吞吐掩盖单请求等待变长。

从算术量解释 prefill 与 decode 的不同瓶颈

在普通等宽多头假设下,一层注意力的 QK 与 AV 两次矩阵乘法合计约需 \(4BHTSd_h\) 次浮点运算,这里把一次乘加记为两次运算,忽略 softmax、掩码与非矩阵操作。自注意力整段计算时,查询长度和键长度一起增长;增量解码时,当前查询长度常为一,键长度却随着历史继续增长。这个算式用于比较增长方向,具体算子可能跳过因果遮蔽区域,不能将它不加修正地当作设备实测计数。

投影与 FFN 则有另一种尺度。一个输入宽度 \(D\)、输出宽度 \(F\) 的线性层,对 \(BT\) 个位置做计算,主要乘加项约为 \(2BTDF\)。当序列较短而宽度较大时,这些线性变换可能占据主要算术工作;当序列继续变长,位置两两关系的项会更显著。说“注意力是二次复杂度”提供了重要方向,却不足以说明任何长度下哪个算子最慢。需要把实际配置代入,再结合硬件读取与计算能力分析。

prefill 的多个查询能够共同使用权重和键值块,形成较大的矩阵运算;单请求 decode 每步只增加少量查询,但仍要读取大量模型权重与历史缓存。因此后者可能更受数据搬运限制。将多条请求组成批次可以提高权重利用程度,却同时扩大缓存与调度约束。这里的“可能”具有具体含义:瓶颈取决于批量、上下文、模型宽度、算子实现和硬件,不能把两个阶段永久归类为唯一一种瓶颈。

一个简化的延迟下界可以写成计算量除以有效计算速率、搬运字节数除以有效带宽两者的较大值,再考虑无法重叠的开销。它是帮助辨认限制的粗略模型,不是精确性能预测;通信、启动、排队、同步与分配都可能让实际时间更长。若观察到低算力利用率,也不能立即推断“GPU 没有工作”,它可能正在等待内存或通信。只有把相关字节量和依赖链一起看,低利用率指标才有解释意义。

FlashAttention 的分块思想可以用一行 softmax 的累计量理解。对一部分键计算行最大值、指数和与加权值和,再并入下一块时,用新的最大值重标定旧累计量,从而维持与整行归一化一致的数学结果。这样可以避免把整张分数或概率矩阵反复写入高带宽内存。这里给出的是对精确注意力重排的教学解释,实际内核还要处理并行、反向、精度和硬件限制;其主要原则已有原论文依据。[21]

这一重排没有减少模型定义中允许读取的键,也没有把稠密注意力自动改成稀疏模式。若应用需要输出完整注意力权重矩阵,仍然要为该输出支付相应存储与传输成本。反之,若只需要聚合后的向量,数学定义中的大中间对象未必需要永久物化。讨论算法内存时,应该明确需要保留哪些输出、哪些对象只是推导中的中间量,避免用一个公式形状否定实现能够节省内存的可能。

用前缀等价性约束缓存优化

KV 缓存能够复用的根本原因,是在因果模型中,固定前缀位置的隐藏表示不依赖后续新 token。在参数、位置、掩码和数值计算约定相同时,历史位置的键值可以保留,下一步只计算新位置,再读取历史状态。它节省了重复计算前缀,却没有让模型忘记历史长度对当前注意力的影响;每一步仍需要按所选结构使用那些历史状态。

这个论证也给出了失效条件。若修改了前缀中的一个 token,受其影响的后续历史表示就可能全部变化,不能只改对应缓存槽位后继续。若切换模型权重、适配器、位置缩放规则或聊天模板,即使显示文本相似,也不能未经证明复用旧缓存。缓存键应描述实际计算身份;只有模型名称或用户文本摘要通常不足以表达所有依赖。具体服务实现由推理基础设施章节展开,本章先要求能从前向函数推出这些条件。

实现验证可以固定一条前缀,比较一次整段前向与分步缓存前向在对应位置的 logits。再加入分块长度变化、左补齐与右补齐、不同有效长度以及请求重排,观察差异是否在合理数值容差内。若只有带前缀时出错,优先检查绝对位置偏移;若只有请求交换时出错,优先检查缓存归属;若只有 GQA 配置出错,优先检查头分组;若误差随序列渐进放大,则还要区分累计数值误差与重复旋转等结构错误。

因此一个资源优化应同时交付两种证据:固定语义输入下的计算等价性,以及固定负载口径下的资源变化。只有前者,说明没有明显破坏结果但尚未证明收益;只有后者,可能是删掉了计算或截断了上下文换来的虚假加速。本章的账本与等价性断言共同定义优化边界,使后续平台章节能够在正确的函数上讨论更高吞吐。

1.6 能力边界与失败定位

flowchart TD
 A["冻结输入与版本"] --> B{"证据到达上下文"}
 B -->|否| C["检查召回过滤与截断"]
 B -->|是| D{"计算契约一致"}
 D -->|否| E["检查掩码位置与缓存"]
 D -->|是| F{"结论得到证据支持"}
 F -->|否| G["构造反事实评估与行为修复"]
 F -->|是| H["检查格式和执行状态"]

从训练目标到可验证的能力

理解结构后,仍不能仅从参数规模预测任务表现。预训练通过数据和目标塑造表示与生成分布;同一结构换用不同语料、训练预算或目标,会得到不同能力边界。GPT-3 的上下文少样本设置在请求中给示例,无需梯度更新,所以“本次请求会做新格式”不等于模型权重已经永久学习该知识。[13] 第 2 章讨论数据、Tokenizer、目标与规模的共同约束。

后训练进一步改变默认行为。InstructGPT 用示范进行监督微调,再利用输出排序与人类反馈做强化学习;其结果也仍包含错误,不能把更受偏好的回答当作事实保证。[24] DPO 从偏好优化目标的重参数化得到更直接的训练方式,在其研究条件下简化了训练链路;这不意味着所有后训练都等同于 DPO,也不意味着无需检查数据分布与行为回归。[25] 第 3 章展开后训练的目标、数据与优化闭环。

推理期计算改变的是一次请求怎样产生和检查候选。CoT 的研究表明,给出中间步骤的示例可以改善若干算术、常识与符号推理任务。[26] 但一段流畅解释仍可能建立在错误前提上。本书据此采用的工程判断是:增加计算前,先问结果能否由测试、数值条件、引用证据或业务规则验证;若不可验证,多生成一些候选也可能只是积累更有说服力的错误。第 4 章讨论推理预算、候选搜索与停止条件。

阶段改变的主要对象需要独立验证的结果
预训练参数中的基础分布与可迁移表示数据覆盖、泛化与任务能力
后训练默认行为和任务响应方式指令、格式、偏好与能力回归
推理期策略本次请求的候选、搜索和验证预算成功率、验证误判、延迟与成本

表格不是一条必须全部自建的流水线,阶段划分的作用是避免把每种失败都送回训练:知识过期先查来源,格式截断先查输出契约,确定需要改变模型行为时再研究训练。

以下分层是本书教学诊断法。先冻结实际输入和版本,再按“数据是否到达—计算是否符合约定—输出是否符合契约—结果是否有证据”的顺序定位。把所有错误标成幻觉,会把完全不同的修复路径混在一起。

现象优先取得的证据对应责任与验证
长输入遗漏关键例外token化结果、截断记录、实际上下文先看证据是否到达,再做位置与任务能力评估
相同前缀逐步生成与整段结果不一致mask、位置ID、KV版本和长度核对绝对位置偏移、分组映射与缓存读取
JSON缺字段或被截断原始输出、停止原因、schema区分生成约束、长度限制和解析器问题
政策回答错误授权来源、文档版本、召回与最终上下文区分未召回、未装配、误读和规则缺失
升级后质量或成本回退模型、Tokenizer、模板、精度与评估版本比较同一任务切片与资源口径

从错误告警诊断走到可修复证据

以全书默认的 ALR-20260429-017 为例,Agent 把相似症状误写成“数据库连接池耗尽”。先核对 E12 指标候选是否来自约定窗口;再查 Runbook v1/v2/v3 的版本、部署映射与 owner;接着确认适用条件是否进入最终上下文;最后检查模型是否把候选线索错误升级成根因。这里任一环节失败,都可能产生同一句错误诊断。

若适用 Runbook 没进入上下文,优先修召回、过滤或装配;若候选状态清楚在场而判断仍越界,可构造“不得把时间邻近和单一指标写成根因”的模型回归用例。修复后分别复测这些条件,而不是仅凭新模型在一条演示上答对就关闭事故。稳定的回归单元应绑定输入、版本、证据和断言,后续评估与反馈闭环再定义 Eval Case。

结构层也有自己的排查方法。若因果训练 loss 异常低,先看标签右移与未来可见性;若改 batch 排列就改变单样本结果,先看 mask 广播、归一化轴和状态隔离;若长前缀 decode 错乱,先看 \(T\) 与 \(S\)、位置偏移和缓存归属。推理质量问题与实现正确性问题可能叠加,只有逐个控制变量,才知道更换架构解决了什么。

这些诊断不要求应用团队先重写一个 Transformer。使用托管模型时,无法看到内部张量,也仍可记录最终输入、请求版本、停止原因与评估切片;自建推理时,则可以增加前缀一致性与算子对照。可见性决定能直接验证到哪一层,不能取得的证据应标为未知,不能用对模型内部的猜想填满事故报告。

为了让这一诊断闭环可以真正被执行,下面继续使用假设告警构造一个受控复现。输入声称错误率升高,证据 E12 只说明某个窗口内连接数变化;Runbook v2 对旧部署适用,v3 对当前部署适用,且当前材料尚未确认连接池耗尽。预期输出应把“候选原因”和“已验证原因”分开,给出下一步需要的证据,而不是直接宣告根因。这个验收条件来自案例的事实状态,不来自模型说话是否自信。

先比较实际送入模型的材料与检索结果。如果检索列表中有 v3,但最终上下文只有 v2,故障发生在装配或预算裁剪;如果最终上下文包含 v3,却丢掉了限定部署的那一行,单纯统计文档命中仍会误判召回成功。可复现证据需要精确到模型看到的片段与版本,而不能只记录一个文档标题。此时换更强模型可能偶然猜对,但没有修复输入条件;正确修复应恢复适用材料,并用同样的裁剪条件复测。

再保持最终上下文完全不变,只把问题从“根因是什么”改为“哪些结论已经被证据直接支持”。若模型能正确列出证据,却在原问题中越界,说明读取能力与结论控制需要分开评估。这个干预不是自动证明后训练有缺陷,而是缩小假设范围:至少材料已到达,且模型在某个提问条件下能够使用它。下一步可加入格式契约和反事实样本,验证模型是否在证据不足时稳定保留不确定状态。

反事实样本不应只是把服务名换掉。可以保持症状相同而替换适用版本,保持版本相同而撤掉关键指标,或明确给出排除连接池问题的观测。若模型无论怎样改变证据都输出同一根因,它可能过度依赖提示中的高频模式;若只有否定条件变化时失败,则应单独建立否定与例外切片。这样的错误分类比“十条题答对九条”更能指导修复,因为它指出了失败依赖哪种条件。

输出契约还应把计算结果与执行结果分开。一段合法 JSON 可以表达错误根因,一段正确建议也不证明工具已经执行;反过来,模型输出被最大长度截断,不能据此判断其没有学会字段含义。诊断时保留原始输出、停止原因和解析错误,把语义判断放在完整候选上评估,把格式与截断放在生成接口上评估。否则格式修复可能掩盖事实错误,或把服务预算问题错误送回训练团队。

受控变化保持不变的条件主要观察可以收窄的假设
恢复被裁剪的适用条款模型、模板与问题是否停止引用旧规则上下文装配影响
改问证据直接支持什么最终证据片段能否正确读取限定条件读取与结论控制差异
撤除关键支持证据症状描述与输出契约是否仍宣告同一根因证据依赖不足
增加明确反证其他上下文与采样条件是否修正结论否定与例外处理
固定前缀比较缓存与整段权重、位置与精度对应 logits 是否接近结构实现一致性

这些干预都要避免一次改变太多变量。例如升级模型时顺手换模板、扩大窗口、改变采样并接入新检索器,最终答对只能说明整套系统有所改变,无法解释是哪项修复起作用。工程上可以分阶段比较,在每个阶段保留同一组关键断言;若为了应急必须整体切换,也应把因果归属标为尚未拆分,之后再补回归分析。明确未知比给一个听起来完整但没有证据的内部机制解释更可靠。

最后,关闭问题的条件应与原故障相对应。装配问题需要证明适用条款确实进入最终上下文;缓存问题需要通过前缀等价性与隔离断言;证据越界需要在有支持、缺支持、含反证三类样本上保持正确状态。一次生成了满意答案不足以覆盖这些条件。本书在这里建立的是“可观察输入—受控变化—对应断言”的诊断方法,后续评估章节再把它扩展成持续运行的用例集与发布门槛。

用局部不变量验收实现

状态:练习设计完成;独立实现未提供,未实测。 采用教学输入 \(B=2,T=S=4,D=8,H_q=H_{kv}=2,d_h=d_v=4\),关闭 dropout,以 float64 慢速参考为对照。依次实现投影、拆头、缩放点积、因果与 padding mask、softmax、聚合、拼接和输出投影;在独立实验仓库实现,不把代码放进书稿临时目录作为运行依赖。

验收断言: 每个中间张量满足本章形状;有效查询的允许权重和为一,禁止位置权重为零;改变未来位置的 V 不改变较早查询输出;不同样本的 padding 长度不互相干扰;全屏蔽有效行显式报错。教学误差阈值可设为最大绝对误差小于 \(10^{-8}\),仅适用于该双精度参考条件,不能用它要求所有低精度设备。

失败回收: softmax 轴错、mask后置、未先转置就拼头、全屏蔽行产生伪分布,都应有能稳定触发的非对称输入。只让全零输入通过或最终形状正确,不算完成计算验证;运行结果、环境和断言输出需要单独保存,不能由本卡的存在推断已运行。

状态:练习设计完成;独立实现未提供,未实测。 设 \(B=2,T=S=4,D=8,H_q=4,H_{kv}=2,d_h=d_v=2\)。先按分组索引计算,再用显式展开KV的慢速版本作为正确性参考。两者在同一参数、输入、mask和位置规则下比较;显式展开仅用于对照,不声称它实现了缓存节省。

验收断言: 输出保留4个查询头,KV缓存只按2个KV头计;拒绝查询头数不能被KV头数整除的输入;全前缀计算与逐token缓存计算在有效位置接近;前缀绝对位置偏移正确;两条请求不能复用彼此缓存。固定教学条件下沿用 \(10^{-8}\) 参考阈值;同时打印缓存元素数,确认没有因先复制KV而把节省吃回去。

迁移问题: 再加入非零前缀长度、分块decode、不同有效长度及位置旋转,观察哪些错误只有在 \(T\ne S\) 时出现。MLA不属于本练习的等价替换:它要定义不同的缓存状态与对照路径。没有完成这些实现和运行记录前,两张卡均只标设计,不能上调为手写能力或硬件实测。

本章小结

Transformer 改变了序列的信息交换与并行方式;Q/K 负责匹配,V 负责聚合,输出投影与 FFN 把计算接回残差流。归一化、位置、可见性与头共享共同决定结构如何运行,也各自引入前提。读懂它们的价值,是能从 token、轴、缓存与证据开始定位问题。

预训练形成基础能力,后训练塑造行为,推理期策略组织候选与验证;三者都建立在结构之上,也都受训练分布与输入证据的限制。结构决定一种计算方式,训练决定它学到什么,推理期策略决定本次请求怎样花算力。下一章回到预训练的数据、目标与规模,沿这条因果链继续展开。

参考资料

  1. Bengio et al.,A Neural Probabilistic Language Model,2003 / JMLR 3。核验日期:2026-10-31。
  2. Bahdanau, Cho, Bengio,Neural Machine Translation by Jointly Learning to Align and Translate,2015 ICLR / arXiv v7。核验日期:2026-10-16。
  3. Vaswani et al.,Attention Is All You Need,2017 / arXiv v7。核验日期:2026-10-16。
  4. 张阿斯顿、Zachary C. Lipton、李沐、Alexander J. Smola,动手学深度学习:10.7 Transformer,中文在线版 2.0.0。核验日期:2026-10-16。
  5. Ba, Kiros, Hinton,Layer Normalization,2016 / arXiv v1。核验日期:2026-10-16。
  6. Zhang, Sennrich,Root Mean Square Layer Normalization,2019 NeurIPS / arXiv v1。核验日期:2026-10-16。
  7. Xiong et al.,On Layer Normalization in the Transformer Architecture,2020 ICML / arXiv v2。核验日期:2026-10-16。
  8. Ioffe, Szegedy,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,2015 / arXiv v3。核验日期:2026-10-16。
  9. Su et al.,RoFormer: Enhanced Transformer with Rotary Position Embedding,2021 preprint / arXiv v5 2023。核验日期:2026-10-16。
  10. Press, Smith, Lewis,Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation,2022 ICLR / arXiv v2。核验日期:2026-10-16。
  11. Devlin et al.,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,2019 NAACL。核验日期:2026-10-16。
  12. Raffel et al.,Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer,2020 JMLR 21(140)。核验日期:2026-10-16。
  13. Brown et al.,Language Models are Few-Shot Learners,2020 / arXiv v4。核验日期:2026-10-16。
  14. Touvron et al. / Meta AI,LLaMA: Open and Efficient Foundation Language Models,2023 / arXiv v1。核验日期:2026-10-16。
  15. Radford et al. / OpenAI,Language Models are Unsupervised Multitask Learners,2019 official report。核验日期:2026-10-16。
  16. Shazeer,Fast Transformer Decoding: One Write-Head is All You Need,2019 / arXiv v1。核验日期:2026-10-16。
  17. Ainslie et al.,GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints,2023 EMNLP / arXiv v3。核验日期:2026-10-16。
  18. DeepSeek-AI,DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model,2024 / arXiv v5。核验日期:2026-10-16。
  19. Shazeer et al.,Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer,2017 / arXiv v1。核验日期:2026-10-16。
  20. Fedus, Zoph, Shazeer,Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity,2022 JMLR 23(120)。核验日期:2026-10-16。
  21. Dao et al.,FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness,2022 / arXiv v2。核验日期:2026-10-16。
  22. Yang et al. / Qwen team,Qwen2 Technical Report,2024 / arXiv v4。核验日期:2026-10-16。
  23. Qwen,Qwen2-7B config.json,file revision 9b039ab。核验日期:2026-10-16。
  24. Ouyang et al.,Training language models to follow instructions with human feedback,2022 / arXiv v1。核验日期:2026-10-16。
  25. Rafailov et al.,Direct Preference Optimization: Your Language Model is Secretly a Reward Model,2023 / arXiv v3 2024。核验日期:2026-10-16。
  26. Wei et al.,Chain-of-Thought Prompting Elicits Reasoning in Large Language Models,2022 / arXiv v6 2023。核验日期:2026-10-16。