一个训练好的语言模型,权重固定之后,对同一个 prompt 只会输出同一组 logits。但把这组 logits 换成文本的那一步——选贪心、开 beam、调 temperature、切 top-p、加多大的重复惩罚——完全在权重之外发生,而且足以让同一个模型看起来像两个不同的产品:一个稳定但呆板,一个多变但容易跑偏。
这不是一个可以随手调的“默认参数”问题。生产系统里,代码生成、JSON 输出、工具调用几乎总用低随机性甚至贪心;创意写作、闲聊、头脑风暴则要开采样甚至调高 temperature。同一份权重、同一个 checkpoint,靶子完全不同的两组解码参数背后,是完全不同的失败模式:一边怕重复和死板,一边怕幻觉和格式跑飞。这篇要把“解码”当成一层独立的策略问题来拆:它接的输入是模型给的分布,输出是最终呈现给用户的 token 序列,中间每一个旋钮都有自己的几何直觉、失效条件和副作用。
本篇边界说明在前面:KV Cache 如何让自回归推理避免重算前缀,见 49|KV Cache;用小模型加速验证的 Speculative Decoding 算法,见 50|Speculative Decoding;解码失控导致的死循环、乱码、数值溢出的完整机制,见 59|推理退化。这三篇处理的是缓存实现、加速算法和故障机制;本篇钉住的是策略层本身——同一个分布下,为什么选不同的解码策略会得到质量、风格、幻觉风险完全不同的文本。
本篇能让你学会三件事:
- 贪心和 Beam Search 在机器翻译时代管用、在开放生成里却显得枯燥重复的原因,以及学界对这个现象给出了哪些不同解释;
- temperature、top-k、top-p、min-p 各自的几何直觉,以及同时拧多个旋钮、不同推理框架应用顺序不同会带来什么陷阱;
- 重复惩罚、presence/frequency penalty 如何缓解重复,又如何伤到专有名词和代码这类“该重复”的内容。
一、logits、softmax、temperature:解码接的是哪个输入
模型最后一层输出一个长度等于词表大小的向量,这是 logits。\(z_i\) 越大,token \(i\) 在当前上下文下越可能。softmax 把它变成概率分布:
\[ p_i=\frac{e^{z_i}}{\sum_j e^{z_j}} \]
到这里为止,模型的工作结束了——它给出的是一个完整的、固定的分布 \(p\)。解码策略要做的事情,是在这个分布上定义一个“选择规则”:贪心选 \(\arg\max\),采样按 \(p\) 抽签,Beam Search 在序列层面找高概率路径。同一个 \(p\),不同选择规则会给出完全不同的 token。这是本篇要反复强调的一点:解码不是模型能力的延伸,是模型能力之外、独立可调的策略层。
temperature 在 softmax 之前先缩放 logits:
\[ p_i(T)=\frac{\exp(z_i/T)}{\sum_j \exp(z_j/T)} \]
这个形式来自统计力学里的 Boltzmann 分布,\(T\) 对应温度,能量对应 \(-z_i\)——这也是“temperature”这个名字的来源,不是比喻。几何上,\(T<1\) 把 logits 的差距放大,分布向着最大值坍缩,接近 one-hot;\(T>1\) 把差距压缩,分布趋于均匀。\(T \to 0\) 就是贪心解码;\(T \to \infty\) 就是均匀随机采样。所有后面要讲的策略,本质上都是在“要不要相信模型给出的相对大小”和“要给多少随机性”这两个维度上做选择。
temperature 不改变模型的知识或推理能力,它改变的是这个分布被“信任”到什么程度。低 temperature 意味着相信模型给出的排序是对的,把差距拉大到几乎只选第一名;高 temperature 意味着不完全信任这个排序,愿意让原本分数不高的候选也有机会。
二、贪心解码:局部最优的正反馈陷阱
贪心解码每一步取 \(\hat y_t=\arg\max_y p(y\mid x,\hat y_{<t})\)。它确定、可复现、延迟最低,对格式固定、答案唯一的任务(分类、抽取、闭式问答)往往就是最优选择——没有必要为了“多样性”去牺牲稳定性。
但贪心把每一步的局部最优当成了全局目标,而生成一个序列不是逐位置独立分类。Holtzman 等人在《The Curious Case of Neural Text Degeneration》(ICLR 2020)里给出了一个具体机制:训练数据里确实存在少量真实重复(强调、口吃、格式化文本),模型据此学到的条件概率 \(P(x_t=w\mid x_{t-1}=w)\) 并不总是很低。一旦某一步贪心选中了 \(w\),上下文变成“……\(w\ w\)”,模型看到连续重复后,往往会把“继续重复”的概率抬得更高——因为它在训练里也见过这种模式延续下去的样本。这不是某一步概率算错了,而是贪心把一个不算离谱的局部偏好(比如 0.15 对其他候选的 0.03)锁成了确定性路径:采样有 85% 的机会绕开它,贪心 100% 会踩进去。这条正反馈回路在 59|推理退化 里有更完整的注意力层面推导;这里只强调它的解码层根源——贪心本身没有“回头路”的机制。
三、Beam Search:机器翻译时代的最优搜索,为什么在开放生成里显得枯燥
3.1 beam 在做什么
Beam Search 保留 \(k\) 条累计对数概率最高的候选序列,每步用所有候选扩展词表后再截断回 \(k\) 条:
\[ \log P(Y)=\sum_{t=1}^{|Y|}\log p(y_t\mid y_{<t}) \]
它比贪心多探索了 \(k\) 倍的路径,能纠正贪心因为一步选错而回不了头的问题。Sutskever、Vinyals 和 Le 在《Sequence to Sequence Learning with Neural Networks》(NeurIPS 2014)里用 beam search 把 seq2seq 翻译模型的效果显著推高,这也是 beam 在 NMT 时代成为默认选择的起点:翻译任务的目标相对明确——给定源句,找到概率尽量高的目标句,搜索空间里“好翻译”和“坏翻译”的概率差距通常足够大,让近似 MAP 搜索是合理目标。
3.2 长度惩罚:为什么不能直接比较对数概率
对数概率是负数的累加,序列越长,\(\log P(Y)\) 越小(更负)。如果不做任何修正,beam search 会系统性偏好短句子。Wu 等人在《Google’s Neural Machine Translation System》(arXiv:1609.08144, 2016)里给出了 GNMT 生产系统实际使用的评分函数:
\[ s(Y,X)=\frac{\log P(Y\mid X)}{lp(Y)}+cp(X;Y),\qquad lp(Y)=\frac{(5+|Y|)^{\alpha}}{(5+1)^{\alpha}} \]
其中 \(lp(Y)\) 是长度惩罚(length penalty),\(\alpha\in[0.6,0.7]\) 在他们的开发集上表现最好;\(cp(X;Y)\) 是覆盖度惩罚,用 encoder-decoder 的注意力权重衡量源句是否被“看全”,避免漏译。这个公式本身就是一个提醒:beam search 从来不是“无脑找最大概率”,产品级系统里它背着好几个手调的正则项才能用。
3.3 从翻译搬到开放生成之后出了什么问题
聊天、故事续写这类开放式生成没有唯一正确答案,好文本的概率质量并不集中在一两条路径上,而是分散在很多种合理表达之间。这时候找“全局最高概率序列”反而会撞上一个反直觉的结果:Holtzman 等人(ICLR 2020)发现,用 beam search 或直接最大化似然生成的文本,其困惑度(perplexity)往往低于人类真实文本——也就是说,模型找到的“最可能”序列比人类写的还更“可预测”,代价是重复、乏味、缺乏信息增量。Zhang、Duckworth、Ippolito 和 Neelakantan 在《Trading Off Diversity and Quality in Natural Language Generation》(HumEval 2021)把这个现象称为“似然陷阱”(likelihood trap):高似然序列经常和人类判断的高质量并不一致,这个结论是他们在质量-多样性谱系上做大规模人类评测后得到的,不是单点观察。
为什么会这样?Meister、Cotterell 和 Vieira 在《If beam search is the answer, what was the question?》(EMNLP 2020,Honorable Mention)给出了一个更精确的刻画:如果 beam search 真的是在逼近精确 MAP 解码,那么随着 beam size 增大、搜索越精确,翻译质量应该单调变好;但实验里搜索误差更大的小 beam 反而经常给出更好的 BLEU。他们反过来问:beam search 真正精确求解的目标函数是什么?答案是它隐式鼓励了均匀信息密度(uniform information density,UID)——一种源自认知科学、认为人类倾向于让语言信号的信息量均匀分布的假说。也就是说,beam search 的“好”不是因为它更接近 MAP,而是它带着一个训练目标里没写出来的额外偏好。这个偏好在翻译里恰好和质量正相关,但在开放生成里没有这层保护——没有源句约束搜索空间,MAP 附近聚集的反而是重复、通用、信息密度过于均匀因而枯燥的句子。
四、top-k、top-p、min-p:候选集合的几何直觉
4.1 top-k:固定基数,不看分布形状
top-k 只保留概率最高的 \(k\) 个 token,在其中重新归一化后采样。它的问题是 \(k\) 是固定数字,不随分布形状变化。分布很尖锐时(比如代码补全里下一个 token 几乎确定),\(k=50\) 里后面 40 多个都是长尾噪声,采样时有一定概率选到明显不合理的候选;分布很平坦时(比如故事开头第一句怎么写),\(k=50\) 可能把很多合理候选都切掉了。Fan、Lewis 和 Dauphin 在《Hierarchical Neural Story Generation》(ACL 2018)里用 top-k 采样替代 beam search 做故事生成,是这个方法在开放生成里被系统使用的代表工作之一。
4.2 top-p(nucleus sampling):按累计概率截断
top-p 保留使累计概率达到阈值 \(p\) 的最小 token 集合:
\[ V_p=\min\Big\{V'\subseteq V : \sum_{i\in V'}p_i\ge p\Big\} \]
这是 Holtzman 等人(ICLR 2020)提出的核心方法,论文原名叫 nucleus sampling——候选集合是分布的“核”,大小随分布形状自动伸缩:分布尖锐时核很小,接近贪心;分布平坦时核很大,接近均匀采样。相比 top-k 固定基数,这是它更适合自然语言的原因:不同上下文里“合理候选数量”本来就不是常数。
4.3 min-p:用最高概率做动态基准
top-p 也有失效的场景。当 temperature 调高、分布被拉平后,累计概率达到 \(p\) 可能需要纳入几十甚至上百个 token,其中很多已经是明显不合理的长尾。Nguyen、Baker、Neo 等人在《Turning Up the Heat: Min-p Sampling for Creative and Coherent LLM Outputs》(arXiv:2407.01082, ICLR 2025 Oral)提出 min-p:阈值不再是固定的累计概率,而是相对最高概率 token 动态缩放——
\[ V_{\text{min-}p}=\{i : p_i \ge p_{\text{base}}\cdot \max_j p_j\} \]
模型对当前预测越有信心(最高概率越大),候选集合收得越紧;模型越不确定,候选集合放得越宽。论文在 GPQA、GSM8K 和 AlpacaEval Creative Writing 上的实验显示,这个机制在高 temperature 下能同时改善质量和多样性——这正是 top-p 在高温区间的薄弱环节。
4.4 组合陷阱:同时拧多个旋钮,顺序也是参数
生产系统几乎不会只用一个旋钮,通常是 temperature + top-p(甚至加 top-k)一起用。这里有两层容易被忽略的陷阱:
第一层是参数之间会互相抵消或叠加,不是独立生效。调高 temperature 让长尾 token 概率上升,如果 top-p 阈值不变,被纳入候选集合的 token 数量会跟着变多——你以为只是“让模型更有创造力”,实际上顺带放宽了候选集合的范围,两个效果叠加在一起,比单独调任何一个都更接近“均匀采样”,幻觉和格式跑飞的风险会超线性上升。
第二层更容易被忽略:不同推理框架对多个采样步骤的应用顺序不同,同样的参数值会得到不同分布。min-p
论文作者在开源实现说明里指出,vLLM 是先做 temperature
缩放再做 top-k/top-p 截断,而 Hugging Face Transformers
的默认实现顺序相反——先截断再缩放。顺序不同,结果不同:先截断再升温,候选集合是在原始(未被拉平)分布下选出的,截断范围更窄,之后升温只在这个窄集合内部重新分配概率;先升温再截断,候选集合本身就是在已经被拉平的分布上选出的,截断范围更宽,进入候选集合的长尾
token 更多。这意味着把同一套
temperature=0.8, top_p=0.9
从一个框架换到另一个框架部署,实际采样行为并不等价——这是一个源码/实现层面的事实,不是理论假设,排查“同参数换服务框架后风格变了”的问题时值得先确认解码库的处理顺序。
五、重复惩罚与 presence/frequency penalty:缓解重复的代价
5.1 重复惩罚的机制
Keskar 等人在 CTRL 模型(arXiv:1909.05858, 2019)里引入了重复惩罚(repetition penalty):对已经在上下文里出现过的 token,在采样前把它的 logit 按系数 \(\theta>1\) 缩小,\(z_i' = z_i/\theta\)(logit 为正时缩小,为负时反而放大,实践中通常只对正 logit 生效或采用等价的加性形式)。这相当于在概率层面直接打断“同一个词连续出现的概率经常偏高”这条 59|推理退化 里描述的正反馈链路的第一环。
5.2 presence 与 frequency:两种不同的计价方式
OpenAI 的 API 文档(Advanced usage)把重复抑制拆成了两个独立参数,计价方式不同。设 \(c_j\) 为 token \(j\) 在已生成文本里出现的次数,惩罚后的 logit 是:
\[ \mu_j = z_j - \alpha_{\text{freq}}\cdot c_j - \alpha_{\text{presence}}\cdot\mathbb{1}[c_j>0] \]
frequency penalty 按出现次数线性计价,出现得越多,压得越狠,针对的是“逐字重复同一句话”;presence penalty 是一次性的:只要出现过一次就扣一个固定值,不管出现了多少次,针对的是“老在同一个话题上打转”,鼓励模型转向新话题。官方文档给出的实践经验是:系数在 0.1 到 1 之间通常只是轻微降低重复;超过 1 到 2 会明显压制重复,但会“显著损害样本质量”——这句话本身就是官方对副作用边界的正面承认,不是使用者的猜测。
5.3 副作用:专有名词和代码是重灾区
这两种惩罚的机制都是“出现过就扣分”,而没有区分“这个 token 该不该重复”。这直接冲突两类内容:
- 专有名词、人名、术语:一段回答里反复提到同一个产品名、人名或缩写是正常且必要的,惩罚会让模型倾向于换用代词、近义词甚至编造一个新说法来规避重复,结果是指代不清或者引入不准确的替代表述。
- 代码生成:变量名、函数名、JSON 的
key、循环体里重复的语法结构(
if、return、缩进)本来就应该原样重复,repetition penalty 或 frequency penalty 会把这些必要的重复也一起压低,轻则风格奇怪,重则改错变量名导致代码不可运行。这也是为什么多数推理框架和 API 文档建议代码类任务把这些惩罚系数调到 0 或很小,单独靠低 temperature、贪心或者 no-repeat-ngram 之类只作用于连续片段的机制来控制重复,而不是全局按 token 计价。
没有一组惩罚系数能同时不伤害专有名词、不伤害代码、又能压住闲聊里的死循环。这本身就是解码策略层的一条边界:重复惩罚解决的是统计意义上的“大多数重复是不好的”,不理解“这一次重复是不是例外”。
六、争论:采样是不是在掩盖模型校准问题
这里有一个学界没有共识的问题:如果模型的输出分布是准的(校准良好),那贪心或 beam search 找到的高概率序列应该就是好文本;既然它经常不是,问题出在哪一层?至少有三种不完全一致的解释,分别指向不同的修复位置。
归因给序列级分布扩散:Ott、Auli、Grangier 和 Ranzato 在《Analyzing Uncertainty in Neural Machine Translation》(ICML 2018)系统测量了 NMT 模型的校准情况,发现模型在 token 级和 句子级 上总体是校准良好的——预测的概率和实际频率基本吻合。但模型把太多概率质量摊在了整个假设空间(hypothesis space)上,导致 beam size 变大之后,搜索反而更容易找到一条”看起来概率不低但实际是差翻译”的路径。按这个解释,问题不在某一步 token 预测错了,而是序列层面的分布过于扩散,采样和 beam 是在一个本身没有单点错误、却整体发散的分布里挑东西。
归因给隐藏的搜索偏好:前面提到的 Meister 等人(EMNLP 2020)的结论换个角度看,其实是在说:beam search 表现好不是因为它逼近了训练目标(最大似然)定义的 MAP,而是因为它顺带引入了训练目标里没有的额外偏好(UID)。如果这个解释成立,那”采样/beam 掩盖校准问题”这个提法本身就问错了方向——真正的问题是训练目标(似然)和我们真正想要的目标(可读、有信息量的文本)之间存在缺口,解码策略只是在事后拼凑一个折中。
归因给训练目标本身:Welleck 等人在《Neural Text Generation with Unlikelihood Training》(ICLR 2020)站得更激进:他们认为 top-k、nucleus sampling 这类方法是”事后补丁”(post-hoc fixes),没有解决根本问题——标准的最大似然训练本身就会让模型给重复序列和高频词分配过高的概率,这是训练目标的锅,不是解码策略选错了。他们提出在训练阶段引入 unlikelihood 目标,直接惩罚这些不该被强化的候选,结果显示配合标准 beam search 或贪心解码,生成质量就能超过”训练不变、只换用 nucleus sampling”的方案。
三派共同的证据是同一个现象——高似然不等于高质量——分歧在于把责任归到序列级搜索、隐藏的评价偏好,还是 token 级训练目标。这个问题还没有定论,直接后果是:遇到重复或枯燥的输出,“调大 top-p”和”换用更好的训练目标”是两条完全不同的修复路径,选错方向就是在浪费工程时间。
七、开放问题:可控生成与评测
Zhang 等人(HumEval 2021)在做质量-多样性谱系的大规模评测时提到一个更基础的困难:目前没有共识用什么指标去比较不同解码算法——困惑度、BLEU、人类评分在不同区间给出的排名并不一致,当”多样性优先”时几种解码方法表现相近,当”质量优先”时 nucleus sampling 更好,但”质量”本身是靠人工评测确定的,不是一个可以自动计算、可复现的数字。
这带来两个还没解决的具体问题:
没有单一指标能同时刻画质量和多样性,评测协议本身在演化。困惑度衡量的是模型自己给序列打的分,而模型打分和人类偏好的关系正是似然陷阱要质疑的东西——用这个指标去评价解码策略,某种程度上是循环论证。人类评测成本高、主观性强,且很难在不同论文之间复现出一致的排名。这不是”评测还不够细”,而是评测目标本身——“什么样的文本算好”——在开放生成里没有唯一定义。
可控生成的旋钮和”用户真正想要什么”之间还有一层没打通。temperature、top-p、重复惩罚都是关于概率分布形状的旋钮,却不直接对应”更有创意”“更简洁”“更少幻觉”这些产品需求。min-p、contrastive search、mirostat 这类近年方法试图用模型自身的置信度或目标困惑度做自适应调节,方向是让旋钮更贴近语义目标而不是纯统计量,但这些方法各自的适用边界(任务类型、模型规模、是否需要额外校准)还在被持续验证,不构成已解决的答案。
八、关键概念回顾
- logits / softmax:模型输出未归一化分数,softmax 转成概率分布;解码策略作用在这个分布之上,是模型能力之外独立的一层。
- temperature:缩放 logits 的尖锐程度,源自统计力学的 Boltzmann 分布类比,决定分布被”信任”的程度。
- 贪心解码:每步取 \(\arg\max\),把局部最优当全局目标,容易被正反馈锁进重复。
- Beam Search:保留多条累计对数概率最高的路径;在 MT 时代靠长度惩罚、覆盖度惩罚校正,在开放生成里因为隐式偏好均匀信息密度而显得枯燥。
- top-k / top-p / min-p:候选集合截断的三种几何直觉——固定基数、累计概率、相对最高概率的动态阈值;叠加使用时受截断顺序影响。
- repetition penalty / presence penalty / frequency penalty:分别按”是否出现过”“是否出现过一次”“出现了多少次”三种计价方式压低重复概率,代价是伤害专有名词和代码里必要的重复。
- 似然陷阱(likelihood trap):高似然序列常常不是高质量文本,这是贪心和 beam search 在开放生成里表现不佳的经验现象。
九、常见误解
9.1 “temperature 越高模型越聪明”
不对。temperature 只改变随机性和候选被信任的程度,不改变模型的知识或推理能力,调高只会让模型更容易探索到低概率的候选,包括好的和坏的。
9.2 “Beam Search 总比采样好,因为它更接近最优解”
不成立。Beam Search 逼近的是似然最大化,而 Meister 等人(EMNLP 2020)的分析表明它的实际效果来自隐式的 UID 偏好,不是”更接近最优”这件事本身带来质量提升;在没有源句约束的开放生成里,这个隐式偏好反而会导致枯燥。
9.3 “重复惩罚是纯粹的正向优化,加了总没错”
不对。OpenAI 官方文档明确写了系数过大会”显著损害样本质量”;代码生成、专有名词密集的任务里,这类惩罚经常是负优化,需要按任务关掉或调低。
9.4 “解码策略之间互相独立,可以随便叠加”
不对。同时用 temperature 和 top-p 会互相影响候选集合大小;不同推理框架对多个采样步骤的应用顺序不同,同样的参数值在不同服务后端会得到不一样的分布,这是可以在源码层面核实的实现差异,不是理论假设。
十、下一步
解码策略决定每一步在给定分布上选哪个 token,但它假设了这个分布已经算好、随时可以取用。下一篇 49|KV Cache 回答另一个问题:自回归推理每一步都要重新过一遍 Transformer 吗?历史前缀能不能复用?这决定了解码策略在真实服务里跑得多快、能不能撑住长对话。
十一、参考文献
论文
- Sutskever, I., Vinyals, O., & Le, Q. V. “Sequence to Sequence Learning with Neural Networks.” NeurIPS 2014. Beam Search 在神经序列生成里被系统使用的早期代表工作。
- Wu, Y. et al. “Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation.” arXiv:1609.08144, 2016. GNMT 生产系统使用的长度惩罚与覆盖度惩罚公式来源。
- Ott, M., Auli, M., Grangier, D., & Ranzato, M. “Analyzing Uncertainty in Neural Machine Translation.” ICML 2018. 分析 NMT 模型的校准情况,指出问题在序列级分布扩散而非 token 级校准。
- Holtzman, A., Buys, J., Du, L., Forbes, M., & Choi, Y. “The Curious Case of Neural Text Degeneration.” ICLR 2020. nucleus sampling(top-p)的原始论文,系统分析了贪心/beam 的文本退化现象。
- Meister, C., Cotterell, R., & Vieira, T. “If beam search is the answer, what was the question?” EMNLP 2020(Honorable Mention). 提出 beam search 隐式求解的是均匀信息密度(UID)目标,不是单纯的 MAP 逼近。
- Welleck, S., Kulikov, I., Roller, S., Dinan, E., Cho, K., & Weston, J. “Neural Text Generation with Unlikelihood Training.” ICLR 2020. 主张标准似然训练目标本身是重复退化的根因,解码策略只是事后补丁。
- Fan, A., Lewis, M., & Dauphin, Y. “Hierarchical Neural Story Generation.” ACL 2018. top-k 采样在开放式故事生成中的代表性应用。
- Zhang, H., Duckworth, D., Ippolito, D., & Neelakantan, A. “Trading Off Diversity and Quality in Natural Language Generation.” HumEval 2021. 大规模人类评测确认”似然陷阱”,指出解码算法评测缺乏统一标准。
- Keskar, N. S., McCann, B., Varshney, L. R., Xiong, C., & Socher, R. “CTRL: A Conditional Transformer Language Model for Controllable Generation.” arXiv:1909.05858, 2019. 引入 repetition penalty 机制。
- Nguyen, N. M., Baker, A., Neo, C., Roush, A., Kirsch, A., & Shwartz-Ziv, R. “Turning Up the Heat: Min-p Sampling for Creative and Coherent LLM Outputs.” arXiv:2407.01082, ICLR 2025 (Oral). min-p 采样;同时指出不同推理框架对 temperature 与截断采样的应用顺序不同会导致行为差异。
- Vaswani, A. et al. “Attention Is All You Need.” NeurIPS 2017.
文档
- OpenAI. “Advanced usage: Frequency and presence penalties.” OpenAI API Documentation. presence_penalty / frequency_penalty 的官方定义与调参建议。
← 上一篇:47|Diffusion + Transformer | 下一篇:49|KV Cache →
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Transformer 与注意力机制】59|推理退化:乱码、死循环与无意义文本为何不是同一种 bug
推理退化不是单一故障。死循环、乱码/控制字符、无意义数字串各自踩中注意力正反馈、数值溢出与词表边缘的不同路径。本文分清三种形态的触发条件与可观察信号,钉住 Softmax 马太效应、Attention Sink、Causal Mask 退路切断、FP16/量化与 KV Cache 污染,并给出架构到运行时的分层防线、争论与开放问题。
【Transformer 与注意力机制】33|RLHF:从 PPO 到 DPO,再到 GRPO
SFT 的似然目标画不出相对偏好,只能到一个由数据规模决定的天花板。RLHF 用奖励模型把偏好压成标量再接 PPO,代价是 KL 约束、采样成本和可实测的奖励黑客曲线;DPO 从同一个 KL 目标解出隐式奖励绕开在线采样,GRPO 在可验证奖励场景把 critic 也省掉。工程细节外链 rl-posttraining 系列。
【Transformer 与注意力机制】34|Scaling Laws:Kaplan 与 Chinchilla 之争,以及算力预算怎么分配
Kaplan(2020)第一次把 loss 随参数、数据、算力的幂律关系钉成经验规律,却因为训练配方设计的一个隐藏 bug 把配比钉歪了;Chinchilla(Hoffmann et al., 2022)用三种独立方法纠正过来,结论是很多大模型不是不够大,是每个参数看过的 token 不够多。本文用两篇论文的原始公式、Epoch AI 的复现危机和“过训/欠训”的真实工程后果,讲清楚 compute-optimal 到底在优化什么,以及这套规律正在被哪些新事实推着往前走。
【Transformer 与注意力机制】36|训练稳定性:损失尖峰、混合精度与梯度爆炸
大模型训练最怕的不是 loss 降得慢,而是它在一切正常时突然尖峰、发散、NaN。本文从 GLM-130B、OPT-175B、PaLM 的真实训练事故出发,讲清 loss spike、梯度爆炸的现场停训判据,warmup、Pre-LN、BF16、梯度裁剪各自修复的是哪个假设,以及为什么小模型上验证过的稳定超参放大后会失效。