← 课程库
解码 · 部署 · 应用模块七 · 随机采样及改进策略代码15 分钟

随机采样:温度、top-k、top-p

给生成加「可控的随机性」

学完这节你能:
  • 理解温度如何调节分布
  • 区分 top-k 与 top-p(核采样)
  • 知道参数对多样性的影响

开放式生成不想每次都一样,就按概率随机采样。三个旋钮控制随机性的大小。

  • 温度 T:softmax 前把 logits 除以 T。T<1 分布更尖锐(更保守)、T>1 更平坦(更随机)、T→0 退化成贪心。
  • top-k:只在概率最高的 k 个词里采样,其余置零。
  • top-p(核采样):从累计概率达到 p 的最小词集合里采样,集合大小随分布自适应。
带温度的 softmax:P(i)=exp(zi/T)jexp(zj/T)P(i) = \dfrac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}
T 越小越尖锐(越确定),T 越大越平坦(越多样)。
温度怎么改变分布
logits = [2, 1]
T=1:softmax = [0.73, 0.27]
T=0.5:logits→[4, 2],softmax = [0.88, 0.12](更尖锐 / 更确定)
T=2:logits→[1, 0.5],softmax = [0.62, 0.38](更平坦 / 更多样)
温度 + top-p 采样(示意)
logits = logits / T                     # 温度
probs = softmax(logits, dim=-1)
sorted_p, idx = probs.sort(descending=True)
cum = sorted_p.cumsum(-1)
mask = cum - sorted_p < p                # 保留累计概率达 p 的核
next_token = sample(sorted_p * mask, idx)

🔑 直觉:温度调「整体随机程度」,top-k 用「固定数量」截断长尾,top-p 用「累计概率」自适应截断。三者常配合使用,抑制低质长尾词又保留多样性。

自测把采样温度 T 调低(趋近 0),生成会:
// 带走一句话

随机采样三旋钮:温度(整体随机度,T→0 即贪心)、top-k(固定数截断)、top-p(累计概率自适应截断)。

独立练习

做到这些,才算完成本节

  1. 在本地运行代码,打印每个关键张量的 shape。
  2. 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
解码方法:贪心搜索与束搜索
下一课 →
全量解码 vs 增量解码:KV 缓存

学完不要急着赶进度:去练习自测,或完成对应的阶段实验