WMX · 随记
·AI· 3 分钟阅读

Top-k 采样:截断候选后需要重新归一化

把低概率词排除能限制采样空间,但 top-k 是按候选数量截断,与按累计概率截断的 top-p 不同。理解这一点有助于解释生成变化。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Let's build GPT: from scratch, in code

结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

AI 系列概览:模型机制、系统边界与效果评估
AI 系列概览:模型机制、系统边界与效果评估 点击图片查看大图 ↗

问题从哪里出现

把低概率词排除能限制采样空间,但 top-k 是按候选数量截断,与按累计概率截断的 top-p 不同。理解这一点有助于解释生成变化。

理解核心机制

先按 logits 选最高的 k 项,再对保留项计算概率。下面用固定随机种子演示一次采样;概率和候选集合比一次抽样结果更有解释价值。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。

Python10 行 · 可横向滚动
import math
import random
logits = {"red": 3.0, "blue": 2.0, "green": 1.0, "gray": -1.0}
k = 2
top = sorted(logits, key=logits.get, reverse=True)[:k]
peak = max(logits[word] for word in top)
weights = [math.exp(logits[word] - peak) for word in top]
sample = random.Random(7).choices(top, weights=weights, k=1)[0]
assert sample in {"red", "blue"}
print(top, sample)

适用边界与常见误区

示例只处理合法且小于候选数的 k,真实函数应验证边界和非有限数值。截断顺序、温度及其他惩罚项会共同影响结果。

继续练习

构造一个几乎均匀和一个极度集中的分布,比较同一个 k 保留的概率质量,再实现 top-p 进行对照。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档