在 API 客户端中,我们经常可以看到这两个参数:

它们和一致性和随机性有关,但本帖将介绍相关原理。
在继续之前,我会假设你已经知道了 LLM 的基本原理是根据上下文来预测下一个词是什么。
Temperature(温度)
我们已经知道了 LLM 是根据上文来预测下一个单词,然而下一个单词显然有很多选择。
e.g.
事已至此,先圈钱吧
假设模型在输出 “事已至此,先” 后,有如下选择:
| 令牌 | 概率 |
|---|---|
| 圈钱吧 | 0.5 |
| 搞钱吧 | 0.3 |
| 跑路吧 | 0.2 |
| 睡觉吧 | 0.1 |
Temperature 影响的就是这一步中,具体选择哪个令牌。
简单来说,Temperature 越低,选择概率高的令牌的概率也越低。Temperature 为 0 时,模型永远只选择概率最高的令牌。
但随着 Temperature 越高,随机性也越强。
某种程度,这可以被视为与模型输出的谨慎程度呈反比。
Top P (nucleus sampling, 核采样)
如果说 Temperature 控制了选择令牌时的随机性,那么Top P就控制的是可能令牌的范围。
流程大致为:
- 从前往后累计概率
- 直到累计概率大于 Top P
- 将之后的令牌全部排除
这还是过于抽象了,因此:
e.g.
事已至此,先圈钱吧
假设模型在输出 “事已至此,先” 后,有如下选择:
| 令牌 | 概率 |
|---|---|
| 圈钱吧 | 0.50 |
| 搞钱吧 | 0.25 |
| 跑路吧 | 0.15 |
| 睡觉吧 | 0.10 |
假设 Top P 设为 0.9。
那么,在进入 Temperature 之前,进行筛选可用令牌的流程是:
- 圈钱吧 - 当前累计概率:0,小于 Top P,将此令牌加入候选并累计概率,累计概率增加 0.5,当前累计概率 0.5,小于 Top P = 0.9,继续。
- 搞钱吧 - 当前累计概率:0.5,小于 Top P,将此令牌加入候选并累计概率,累计概率增加 0.25,当前累计概率 0.75,小于 Top P = 0.9,继续。
- 跑路吧 - 当前累计概率:0.75,累计会导致累计概率等于 Top P(0.75 + 0.15 = 0.9 = Top P),将此令牌加入候选,退出。
因此,睡觉吧 会被排除在外,其余令牌进入下一步。
想必你应该理解了原理。但可能对于 Top P 的目的抱有疑问。
Top P 的主要目的简单来说是防止一些概率过低的令牌进入候选来干扰选项,特别是在 Temperature 很高的情况下。
你可能注意到了,主要目的 - Top P 的次要目的是在概率较为稀疏的情况下,尽可能让更多有用的令牌入选。
在日常场景中,我推荐将 Top P 设为 0.9 - 0.95,这样能保证更好的稳定性。
抽象
这两个参数都是通过调节模型"对令牌的选择概率"来影响生成的,并不存在通用解,因此需要根据具体场景进行调整。
学到了