第 12 篇 给出词表上的 logits第 13 篇 保证每一步只基于合法前缀。推理的最后一跳是:从概率分布里选出下一个 token——永远 $\arg\max$ 会又稳又无聊,完全乱抽又会胡言乱语。

本篇讲清三条最常用旋钮:Temperaturetop-ktop-p(nucleus),并用 4 词小例子手算对照。

这是「大模型数学速成」续篇第 14 篇。建议先读第 12、13 篇。下一篇讲 量化(FP16 → INT4)

一、贪心 vs 采样

设 Softmax 后概率为 $\mathbf{p}$(第 05第 12 篇)。

策略 做法 典型观感
贪心(greedy) $i^\star = \arg\max_i p_i$ 稳、重复、模板腔
纯采样 按 $\mathbf{p}$ 多项式抽样 多样,但易抽到长尾怪词
截断 + 温度后再采 本篇重点 生产里最常见

解码循环(接第 13 篇 Decode)每步都是:

\[\text{logits } \mathbf{z} \;\xrightarrow{\text{改分布}}\; \mathbf{p}' \;\xrightarrow{\text{抽样}}\; \text{token id}\]

然后把新 token 写回序列,更新 KV Cache,再走下一步。

二、Temperature:拧「尖锐度」

在 Softmax 前把 logits 除以温度 $T > 0$:

\[p_i = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}}\]

$T$ 分布形态 直觉
$T \to 0^+$ 越来越接近 one-hot,近乎贪心 「只敢选最高分」
$T = 1$ 模型原始 Softmax 默认刻度
$T > 1$ 更平坦,尾部抬高 「更愿意试冷门」

注意:$T$ 不改变 $z_i$ 的排序,只改变相对差距被放大/缩小的程度。$T$ 不能为 0(除零);实现里极小 $T$ 等价贪心。

和生活类比

考试填空:

  • $T$ 很小 = 只写最有把握的那一个词;
  • $T$ 很大 = 一堆还行的词都觉得「差不多」,更容易写冷门搭配。

三、top-k:只留分数最高的 k 个

  1. 取 logits(或概率)最高的 $k$ 个词
  2. 其余位置概率置 0(或 logits 置 $-\infty$)
  3. 在这 $k$ 个上重新归一化,再采样

\[\mathcal{V}_k = \operatorname{top\text{-}k}(\mathbf{z}), \quad p'_i \propto \begin{cases} e^{z_i/T} & i \in \mathcal{V}_k \\ 0 & \text{otherwise} \end{cases}\]

$k$ 效果
$k=1$ 等价贪心(与 $T$ 无关,只剩一个)
$k$ 中等 去掉明显离谱的长尾
$k=V$(词表大小) 不做 top-k,退回全词表

局限:$k$ 固定。有时分布很尖,真正有质量的候选不到 $k$ 个;有时很平,固定 $k$ 又砍得太狠或太松——这就是 top-p 要解决的。

四、top-p(nucleus):按概率质量截断

  1. 将词按概率从大到小排序:$p_{(1)} \ge p_{(2)} \ge \cdots$
  2. 找最小集合,使其概率和 $\ge p$(常见 $p=0.9$ 等):

\[\mathcal{V}_p = \Big\{ (1),\ldots,(m) \;\Big|\; m = \min\big\{ m' : \sum_{t=1}^{m'} p_{(t)} \ge p \big\} \Big\}\]

  1. 集合外置 0,集合内重新归一化,再采样

称为 nucleus(核)采样:候选集大小随分布形状变——尖时自动变少,平时自动变多。

top-k top-p
截断依据 固定个数 累积概率质量
集合大小 恒为 $k$ 动态
常见组合 可与 $T$ 联用 常与 $T$ 联用(先 $T$ 再 top-p,或按实现顺序)

实现细节(先温度还是先截断、对 logits 还是对 $p$ 排序)因框架略有差异,读文档时看一眼即可;数学意图都是「丢掉不可靠长尾,再在可信集合上采样」。

五、手算:4 个词的对照

词表:{甲, 乙, 丙, 丁},某步 logits:

\[\mathbf{z} = [3.0,\ 1.0,\ 0.5,\ 0.0]\]

1)$T=1$,全词表 Softmax

\[e^{z} \approx [20.09,\ 2.72,\ 1.65,\ 1.00],\quad \sum \approx 25.45\]

\[\mathbf{p} \approx [0.789,\ 0.107,\ 0.065,\ 0.039]\]

贪心 → 永远

2)$T=0.5$(更尖)

\[z/T = [6.0,\ 2.0,\ 1.0,\ 0.0]\]

\[\mathbf{p} \approx [0.965,\ 0.018,\ 0.007,\ 0.002]\]

几乎锁定甲。

3)$T=1.5$(更平)

\[z/T = [2.0,\ 0.667,\ 0.333,\ 0]\]

\[\mathbf{p} \approx [0.615,\ 0.162,\ 0.116,\ 0.083]\]

乙丙丁都更有机会。

4)top-k,$k=2$,$T=1$

候选 {甲, 乙},原概率 $0.789,\ 0.107$,和 $0.896$,归一化:

\[p'_{\text{甲}} \approx 0.881,\quad p'_{\text{乙}} \approx 0.119\]

丙、丁概率为 0。

5)top-p,$p=0.9$,$T=1$

排序:甲 $0.789$ → 累加 $0.789 < 0.9$
再加乙 $0.107$ → 累加 $0.896 \ge 0.9$
→ 核 = {甲, 乙}(本例与 $k=2$ 相同;分布更平或更尖时,$|\mathcal{V}_p|$ 会与固定 $k$ 分叉)。

1
2
3
4
5
6
7
8
9
logits:  甲 3.0   乙 1.0   丙 0.5   丁 0.0

Temperature 扭曲尖锐度

top-k / top-p 砍长尾

重新 Softmax

多项式抽样 → 下一个 token

六、实践中怎么拧(经验向)

场景 常见倾向
代码、JSON、工具调用参数 低 $T$(如 $0.0$–$0.3$),甚至贪心;要结构化时还有约束解码
创意写作、头脑风暴 略高 $T$,配合 top-p(如 $0.9$–$0.95$)
一般助手对话 中等 $T$ + top-p,避免纯全词表乱采
要可复现实验 固定随机种子;记录 $T$/top-k/top-p

没有万能默认值——同一组超参在不同模型、不同任务上手感差很多。把它们理解成「改的是 $\mathbf{p}$ 的形状与支撑集」,调参才有方向。

与 Agent / 工具调用:AI 系列 里讲过的结构化输出,本质是进一步限制合法 token 集合,比 top-p 更硬。

七、和训练损失的关系(收束)

  • 训练优化的是 第 12 篇 的交叉熵,通常在 loss 里加 Temperature/top-p。
  • 推理阶段的 $T$/top-k/top-p 是解码策略,不更新权重。
  • 因此:同一套权重,换采样策略,输出分布可以完全不同——评测时必须写清解码配置。

八、小结

概念 要点
贪心 $\arg\max$,稳但易呆
Temperature $z_i/T$ 再 Softmax,调尖锐度
top-k 只保留最高 $k$ 个再归一化
top-p 累积概率达 $p$ 的最小核
顺序 改 logits/截断 → 归一化 → 抽样 → 下一步 Decode

大模型数学速成续篇第 14 篇完。下一篇 量化:从 FP16 到 INT4 的尺度——权重与 Cache 如何用更少比特近似,继续省显存。

系列导航

篇号 标题 状态
13 因果掩码与解码循环
14 采样:Temperature / top-k / top-p(本篇)
15 量化:从 FP16 到 INT4

完整大纲见工作区 docs/MATH_SERIES_OUTLINE_V2.md