Wink Pings

温度调到0,模型会更准吗?先看它怎么挑下一个词

LLM 每一步给词表里所有 token 打分,再转成概率采样。Temperature、top-k、top-p 只改采样,不碰权重。低温不会让模型更正确,只会让它更稳定地犯错。

把一个 LLM 生成文字的过程拆开,它并不直接选一个词。每一步,模型先给词表里每个 token 一个原始分数,再把这些分数变成概率,最后从概率分布里采样一个 token。Temperature、top-k、top-p 都在这个采样环节起作用,它们不改模型权重。

Akshay 把这条流程画成了一张图,视频里能直接看到采样器怎么处理候选 token:

三个参数的分工可以这样看。

Temperature 会重新缩放原始分数。低值让分布变尖,少数 token 占掉大部分概率。高值让分布变平,冷门 token 也有机会冒头。

Top-k 只保留概率最高的 k 个 token。k 设成 50,排名 50 之后的 token 全被丢掉。无论当前分布是尖还是平,候选数量都固定。

Top-p 保留累计概率至少达到 p 的最小 token 集合。p 设成 0.9,如果下一个 token 很明确,可能只留下几个候选。如果上下文开放,留下的候选会多很多。

最后一步是 sample:采样器从剩下的 token 里挑一个。

关键差别在于,top-k 永远保留固定数量的 token,top-p 会跟着模型的置信度调整候选集会多大。有网友提到,top-k 固定保留 3 个候选,top-p 在累计概率到 0.9 时截断,用 cat 和 mat 这类例子对比,差别会更容易看明白。

低温常被当成“更聪明”的旋钮,这里容易误读。Akshay 写得很直接:低温不会让模型更正确,它只减少随机性。上下文给错了,模型照样会自信地给出错误答案。有网友补了一个生产场景:评分工具在 temperature 0.0 下可能每次都给同一个错误评分,老师检查两次,反而把这种一致性读成准确。重复运行只能说明随机性,不能说明正确性。

如果要从默认值开始调,可以参考这组起点:

  • 分类和抽取:0.0 到 0.2
  • 代码生成:0.0 到 0.3
  • 通用聊天:0.5 到 0.8
  • 头脑风暴:0.7 到 1.2

有网友说,代码任务超过 0.3 之后,模型开始编造方法名。这个经验不一定适用于所有模型,但方向值得记住。代码和抽取要的是收敛,头脑风暴要的是发散,温度不该一套值打天下。

调参顺序也有讲究。Akshay 建议先调 temperature,再用 top-p 修剪长尾的低概率 token。评估时一次只改一个设置,不要三个一起拧。有网友提到生产环境里的常见坑:temperature 和 top-p 同时堆高,两个旋钮会互相打架。探索性任务选一个主旋钮,另一个留在默认值附近,除非你测过任务收益。

还有一个容易被忽略的开关。有网友提醒,在 transformers 里如果 do_sample=false,temperature 不会生效。比较 0.2 和 0.8 之前,先确认采样是否真的开着。

这些参数只发生在采样阶段。再往前后看,LLM 推理还包括 tokenization、embedding、attention、prefill 和 decode 两个阶段、KV cache 以及量化。Akshay 在长文里把这条链路拆得很细:prefill 是计算受限,decode 是内存受限,KV cache 会随着生成长度吃掉显存,量化则用更低位宽换速度和显存。生产环境的优化图也有人整理过,Avi Chawla 分享过一张较全的版图:

生产环境 LLM 优化技术图

回到最实际的问题:当模型表现不对,先分清是“开始得慢”还是“流式输出慢”,再分清是采样太随机,还是上下文本身不够。temperature 调到 0 不会补上缺失的信息,它只会让模型更稳定地沿着现有概率走。

Akshay 的完整推理拆解在这里:http://x.com/i/article/2050553855281451008

发布时间: 2026-11-06 07:36