从"模型输出了什么"说起
很多人以为模型输出的是一个词,其实它每次输出的是一整张概率分布——词汇表里每个词各有一个分数,表示在这个上下文里它有多合适。
真正决定最终吐出哪个词的,是这张分布之后的采样策略。而温度和 top-p(以及 top-k),就是调这张分布形状的三个旋钮。
温度:把分布变尖或变平
温度作用在概率分布上:温度低,分布变尖,高概率的词更容易被选中;温度高,分布变平,原本概率很低的词也有了机会。
可以这样理解:
- 温度趋近 0:几乎变成"每次选概率最高的那个",输出稳定、可复现,但容易重复、显得呆板
- 温度适中:保留变化空间,又不至于乱说
- 温度偏高:多样性上升,但连贯性和事实性会下降
top-p 与 top-k:先把明显不合适的候选砍掉
温度解决的是"分布有多平",但它不解决一个问题:词汇表里有大量概率极低但数量庞大的词,它们累加起来的总概率可能不小。温度调高时,模型就可能从这些"长尾"里抽到明显不合理的词。
top-p(核采样)的做法是:把词按概率从高到低累加,累计到某个阈值就把后面的全部砍掉,只在前面的"核心集合"里采样。top-k 更直接:只保留概率最高的前若干个。
三个参数的对照
| 参数 | 作用对象 | 主要影响 | 典型使用场景 |
|---|---|---|---|
| 温度 | 整个分布 | 输出随机性与多样性 | 温度低偏稳定,高偏创意 |
| top-k | 候选数量 | 硬性限制候选池大小 | 简单直接,但池子大小不随场景自适应 |
| top-p | 候选累积概率 | 自适应地限制候选池 | 常与温度搭配,控制长尾带来的离谱输出 |
实践中常见的搭配是:先用温度定整体基调,再用 top-p 兜住长尾。两者不是独立作用,调一个往往需要重看另一个。
三个常见误解
误解一:温度越高越有创意。温度提高的是随机性,随机性不等于创意。超过某个点,输出会先失去连贯,然后才可能偶尔出现意外的组合。
误解二:温度设为 0 就完全可复现。即便是贪心解码,实际工程里仍可能受并行计算、批处理、数值精度等因素影响而出现细微差异。要严格复现,需要额外的工程约束。
误解三:把参数当"调优"的门槛。大多数体验问题来自提示与上下文,而不是采样参数。先修输入,再调旋钮,顺序反了会一直在错误的层面上调参。
一套简单的设定思路
- 先明确你要的是稳定还是发散——这决定了温度的区间
- 用 top-p 设一个上限,确保长尾里那些明显不合理的词进不来
- 固定一个基线配置,用它跑你自己的任务集,观察失败模式
- 只改一个参数、只改一个方向,确认影响后再动下一个
收尾
温度决定"你允许它多冒险",top-p 决定"哪些候选根本不参与冒险"。把这两个旋钮和"分布形状"对应起来,调参就不再是凭感觉试数字,而是有方向的调整。