Temperature 调整候选概率的集中程度,但不会删除任何候选。Top-k / Top-p 在 Sampling 前先过滤不靠谱的长尾,只允许“合理候选集合”参与抽签。
| 位置 | logits → Temperature → softmax → Top-k / Top-p 过滤 → 重新归一化 → Sampling |
| 解决的问题 | Sampling 可能抽中概率极小、明显荒谬的长尾 token |
| 输入 | 按概率从高到低排列的候选 token |
| 输出 | 更小的允许采样候选集合 |
| 边界 | 它们不决定最终选谁;最终仍由 Sampling 抽签 |
假设 Temperature 调整后概率如下:
Sampling 理论上可以抽中任何概率不为 0 的 token。即使 banana 只有 1.5%,多轮生成中也可能被抽到,造成语句突然跑偏。
因此需要在抽签前先回答:
哪些候选“有资格”进入抽签池?
功能:按概率排名,只保留最高的 k 个 token,其余概率直接设为 0,再把留下的概率重新归一化到总和 1。
功能:从最高概率开始累加,直到累计概率第一次达到阈值 p;保留这些 token,其余删除。也叫 nucleus sampling(核采样)。
Top-p 的候选数量是动态的:
固定保留前 k 名。
保留累计概率达到 p 的最小集合。
例如保留的原概率是:
Sampling 需要一张总和为 1 的抽签面积图,所以要把留下的数各除以 0.82:
这里不需要重新理解 Softmax:功能上只是将被过滤后的剩余概率重新缩放为比例。
| 只用 Top-k | 候选数量固定,行为容易预测,但不适应模型的确定/犹豫程度 |
| 只用 Top-p | 候选数量动态,更适应当前概率分布 |
| 两者一起 | 通常先限制最多 k 个,再从中保留累计概率 p 的集合;最终取更严格的结果 |
答完后,采样控制链就完整了。下一步将回到 Module 2 地图,决定继续 Context Window,还是先做一次“输出→采样”小复习。