Module 2 · LLM Lesson 17 下钻 · 过滤候选

Top-k / Top-p

Temperature 调整候选概率的集中程度,但不会删除任何候选。Top-k / Top-p 在 Sampling 前先过滤不靠谱的长尾,只允许“合理候选集合”参与抽签。

位置logits → Temperature → softmax → Top-k / Top-p 过滤 → 重新归一化 → Sampling
解决的问题Sampling 可能抽中概率极小、明显荒谬的长尾 token
输入按概率从高到低排列的候选 token
输出更小的允许采样候选集合
边界它们不决定最终选谁;最终仍由 Sampling 抽签

① 已学对象为什么还不够

假设 Temperature 调整后概率如下:

mat 0.42 floor 0.25 sofa 0.15 chair 0.08
dog 0.04 moon 0.025 banana 0.015 ...大量长尾

Sampling 理论上可以抽中任何概率不为 0 的 token。即使 banana 只有 1.5%,多轮生成中也可能被抽到,造成语句突然跑偏。

因此需要在抽签前先回答:

哪些候选“有资格”进入抽签池?

② Top-k:固定保留前 k 名

功能:按概率排名,只保留最高的 k 个 token,其余概率直接设为 0,再把留下的概率重新归一化到总和 1。

Top-k = 3 → 只留下 mat / floor / sofa

③ Top-p:保留累计概率达到 p 的最小集合

功能:从最高概率开始累加,直到累计概率第一次达到阈值 p;保留这些 token,其余删除。也叫 nucleus sampling(核采样)

mat 0.42 累计 0.42
floor 0.25 累计 0.67
sofa 0.15 累计 0.82
chair 0.08 累计 0.90 ← Top-p=0.90,到这里停止
dog / moon / banana ... 删除

Top-p 的候选数量是动态的:

机制心智模型:Top-k 问“保留几个人”;Top-p 问“覆盖多少总把握”。

④ 交互对比

固定保留前 k 名。

保留累计概率达到 p 的最小集合。

Top-k 结果

Top-p 结果

⑤ 删除后为什么还要重新归一化?

例如保留的原概率是:

[0.42, 0.25, 0.15] 总和 = 0.82

Sampling 需要一张总和为 1 的抽签面积图,所以要把留下的数各除以 0.82:

[0.512, 0.305, 0.183] 总和 = 1

这里不需要重新理解 Softmax:功能上只是将被过滤后的剩余概率重新缩放为比例

⑥ Top-k 与 Top-p 如何配合

只用 Top-k候选数量固定,行为容易预测,但不适应模型的确定/犹豫程度
只用 Top-p候选数量动态,更适应当前概率分布
两者一起通常先限制最多 k 个,再从中保留累计概率 p 的集合;最终取更严格的结果
一句话全链:Temperature 调整概率分布尖/平 → Top-k/Top-p 删除不合格候选 → 剩余概率重新归一化 → Sampling 抽出 token id。

✅ 快速检查(用自己的话答)

  1. Top-k 和 Top-p 分别用什么标准决定“谁有资格进入抽签池”?
  2. 为什么说 Top-p 是动态候选数?请用“模型很确定 / 很犹豫”解释。
  3. Top-k/Top-p 和 Sampling 各负责什么?过滤后为什么要重新归一化?

答完后,采样控制链就完整了。下一步将回到 Module 2 地图,决定继续 Context Window,还是先做一次“输出→采样”小复习。