模型参数设置
大模型在生成文本时,其实是在不停地做“根据前文猜下一个词”的选择题。模型为每个可能的下一个词(token)打一个原始分数(logits),然后通过转换成概率分布。而 Temperature、Top_p、Top_k 这些模型参数,就是用来控制“怎么从这个概率分布里挑选词”的,它们直接影响输出的随机性、创造性和可靠性。
1. Temperature(温度)—— 控制分布的“陡峭”程度
原理:在 Softmax 之前,把原始分数 除以温度
- T —> 0:z / T 会变得极大,高概率词的得分被急剧放大,低概率词被极度压制,分布几乎变成一个“独热向量”。模型每次都选概率最高的那个词,变成贪婪解码,输出完全确定。
- T = 1:不做任何缩放,使用模型原汁原味的概率分布。
- T > 1:所有得分被压缩,高、低概率之间的差距缩小,分布变得更均匀(平坦),原来低概率的词被“提”上来了,输出随机性增大。
直观作用
- 低温(0 ~ 0.3):模型很“保守”,非常拘谨,只敢选最安全、最符合语法的词。适合需要事实准确、逻辑严密的场景,如代码生成、数学解题、翻译、资料总结。
- 中温(0.5 ~ 0.8):在创造性和连贯性之间平衡,适合日常对话、通用写作。
- 高温(0.9 ~ 1.5+):模型变得“脑洞大开”,会频繁使用冷门词汇、意想不到的联想,但也更容易胡言乱语、跑题、逻辑断裂。适合诗歌、故事创意、头脑风暴。
示例(假设下一句是“我走在路上,突然看到一只...”)
T=0.1:大概率输出“猫”、“狗”、“小鸟”这种统计上最常见的词。T=1.0:可能输出“穿着西装的企鹅”、“从天空掉落的时钟”,开始有创意。T=1.5:可能输出“会说话的西兰花”、“昨天死去的记忆”甚至语无伦次的片段。
2. Top_p(核采样)—— 只从“核心”候选里挑
原理:将候选词按概率从高到低排序,然后依次累加概率,只保留累积概率刚好达到p的那一批词,把剩下那些无穷无尽但概率极低的“长尾”词全部砍掉。然后在保留下来的这个小集合里,按它们原本的概率(或经过温度调整后的概率)重新归一化并采样。
比如p=0.9,模型先拿出概率最高的词,如果它占了 50%,继续拿下一个(30%),下一个(12%),累积 92% ≥ 90% 就停止。这时候候选集可能只有 3~10 个词,那些可能性极低的几十万个词直接被屏蔽。
直观作用:它解决了一个关键问题:避免模型在“垃圾”选项上浪费概率并导致跑偏。哪怕单个垃圾词概率只有万分之一,但几万个加起来也会经常被抽中,使输出莫名其妙。Top_p 动态调整候选集大小:当模型对下一个词很确定时(分布尖锐),候选集很小;当模型很犹豫时(分布平坦),候选集会更大,保留更多可能性。
- p 很小(0.1 ~ 0.3):只保留极少数最可能的词,输出非常集中、乏味。
- p 适中(0.8 ~ 0.95):最常用的范围,既能排除垃圾输出,又能保持合理的多样性。
- p = 1.0:不使用核采样,所有词都有可能被抽中(当然概率还是很低的长尾词仍然可能被抽到)。
3. Top_k —— 粗暴地限定“前 k 名”
原理:直接只取概率最高的k 个词,其余的丢弃,然后在这k 个词中重新分配概率并采样。 k是个固定整数,比如 40、50。
与 Top_p 的区别
- Top_k 是固定名额:不管分布是尖锐还是平坦,永远只留 k 个词。如果模型很确定(比如只有前 2 个词有意义,后面全是噪音),Top_k=50 仍然会塞进 48 个垃圾词,导致输出质量下降。如果模型很犹豫(需要表达很多种可能),Top_k=5 又会粗暴地砍掉大部分合理选项,导致输出枯燥重复。
- Top_p 是动态百分比:能自动适应分布的“胖瘦”,因此通常更合理。
很多 API 同时支持 Top_k 和 Top_p,通常会先 Top_k 粗筛,再 Top_p 细筛(比如k=40, p=0.9),这样既保证效率又适应分布。但单独使用 Top_p 往往已经足够。
4. 其他重要解码参数
Repetition Penalty(重复惩罚):降低已经出现过的词的概率,参数常取 1.0~1.2。大于 1 时会惩罚重复,小于 1 反而鼓励重复(极少用)。能有效缓解“复读机”现象。
Frequency Penalty(频率惩罚):根据词在当前生成内容中出现的次数等比惩罚,出现次数越多,惩罚越重。取值范围常见 -2.0 到 2.0,正数减少重复。
Presence Penalty(存在惩罚):只要某个词已经出现过,就给予一次性惩罚,不累加。用来鼓励模型转向新话题。
5. 场景实战建议
场景 | Temperature | Top_p | 其他 |
代码生成、SQL、JSON 输出 | 0 ~ 0.2 | 0.1~0.2 或 1.0(不要 Top_p) | 最好直接用贪婪解码 |
事实问答、知识检索、翻译 | 0.1 ~ 0.3 | 0.3~0.5 | Repetition penalty = 1.0(不惩罚) |
通用聊天助手 | 0.6 ~ 0.9 | 0.8 ~ 0.95 | Frequency penalty 0~0.3 |
创意写作、故事 | 0.9 ~ 1.2 | 0.9 ~ 1.0 | 可加一点 presence penalty |
诗歌、极端头脑风暴 | 1.2 ~ 1.5+ | 0.95~1.0 | 可能需要反复筛选结果 |
