深入理解大模型采样参数:Temperature、Top-p 与 Top-k
2025-12-08
深度学习
00

目录

深入理解大模型采样参数:Temperature、Top-p 与 Top-k
一、大模型如何生成 Token?
1.1 逐字生成的过程
1.2 Softmax 前后发生了什么?
二、Temperature:控制创造性的旋钮
2.1 Temperature 的数学原理
2.2 不同 Temperature 值的效果
2.3 实际应用建议
三、Top-p (Nucleus Sampling):动态筛选候选集
3.1 Top-p 的工作原理
3.2 Top-p 的优势
四、Top-k:简单直接的截断策略
4.1 Top-k 的工作原理
4.2 Top-k 的局限性
五、三个参数如何协同工作?
常见配置方案
六、实验:看看参数如何改变输出
总结

深入理解大模型采样参数:Temperature、Top-p 与 Top-k

当我们与 ChatGPT、Claude 等大语言模型对话时,可能会注意到它们的回答既流畅又富有变化。这背后的关键机制就是采样策略。本文将深入浅出地介绍大模型如何生成文本,以及 Temperature、Top-p、Top-k 这三个关键参数如何影响输出结果。

一、大模型如何生成 Token?

1.1 逐字生成的过程

大语言模型的文本生成是一个逐个 token 生成的过程(token 可以简单理解为词或字)。就像我们写作时一个字一个字地思考和书写,模型也是根据前面已经生成的内容,预测下一个最合适的 token。

这个过程可以概括为:

展开代码
输入文本 → 模型编码 → 预测下一个token → 将新token加入输入 → 继续预测...

1.2 Softmax 前后发生了什么?

让我们具体看看模型内部是如何工作的。假设模型的词汇表有 50,000 个 token(实际中可能更多),生成每个 token 的过程如下:

Softmax 之前 - Logits(原始分数)

模型最后一层会输出一个长度为 50,000 的向量,每个位置对应词汇表中一个 token 的原始分数(logits)。这些分数没有经过归一化,可能是任意实数。

例如:

展开代码
"苹果" → 8.2 "香蕉" → 3.1 "电脑" → 6.5 "的" → 7.8 "是" → 2.3 ... (共50,000个token)

这些原始分数反映了模型认为每个 token 作为下一个词的"合理程度",但它们还不是概率。

Softmax 之后 - 概率分布

Softmax 函数将这些原始分数转换为概率分布,使得:

  • 所有概率都在 0 到 1 之间
  • 所有概率之和等于 1

公式为:

P(tokeni)=elogitij=150000elogitjP(token_i) = \frac{e^{logit_i}}{\sum_{j=1}^{50000} e^{logit_j}}

转换后:

展开代码
"苹果" → 0.352 (35.2%) "香蕉" → 0.023 (2.3%) "电脑" → 0.078 (7.8%) "的" → 0.265 (26.5%) "是" → 0.011 (1.1%) ... (概率总和 = 1.0)

现在每个 token 都有了明确的被选中概率。但模型并不总是选择概率最高的那个,这就引出了我们的采样策略。

二、Temperature:控制创造性的旋钮

Temperature(温度)参数控制概率分布的"平滑程度",从而影响输出的随机性和创造性。

2.1 Temperature 的数学原理

Temperature 在 Softmax 之前就开始发挥作用,它会对 logits 进行缩放:

P(tokeni)=elogiti/Tj=150000elogitj/TP(token_i) = \frac{e^{logit_i/T}}{\sum_{j=1}^{50000} e^{logit_j/T}}

其中 T 就是 temperature 参数。

2.2 不同 Temperature 值的效果

让我们看看同一组 logits 在不同温度下的变化:

原始 logits:

展开代码
"苹果": 8.2, "电脑": 6.5, "的": 7.8, "香蕉": 3.1

Temperature = 1.0(标准情况):

展开代码
"苹果": 35.2% "的": 26.5% "电脑": 7.8% "香蕉": 2.3%

Temperature = 0.5(更保守):

展开代码
"苹果": 58.7% ← 概率进一步集中 "的": 34.1% "电脑": 3.2% ← 小概率项被压制 "香蕉": 0.1%

Temperature = 2.0(更随机):

展开代码
"苹果": 28.3% ← 概率更平均 "的": 22.1% "电脑": 12.8% ← 小概率项机会增加 "香蕉": 5.6%

Temperature → 0(接近贪婪):

展开代码
"苹果": 99.9% ← 几乎确定选最高的 "的": 0.1% "电脑": 0.0% "香蕉": 0.0%

2.3 实际应用建议

  • T = 0.0-0.3: 用于事实性问答、代码生成等需要精确性的任务
  • T = 0.7-1.0: 平衡创造性和连贯性,适合日常对话
  • T = 1.5-2.0: 用于创意写作、头脑风暴等需要多样性的场景

三、Top-p (Nucleus Sampling):动态筛选候选集

Top-p 采样(也称核采样)是一种更智能的筛选机制,它不是固定选择多少个候选,而是动态选择累计概率达到 p 的最小候选集

3.1 Top-p 的工作原理

假设经过 Temperature 调整后,我们得到以下概率分布(按概率降序排列):

展开代码
"苹果": 35.2% "的": 26.5% "手机": 12.3% "电脑": 7.8% "很": 5.1% "好": 3.2% "香蕉": 2.3% ...其他数万个token

如果 Top-p = 0.9:

  1. 从概率最高的开始累加:

    • "苹果": 35.2% (累计: 35.2%)
    • "的": 26.5% (累计: 61.7%)
    • "手机": 12.3% (累计: 74.0%)
    • "电脑": 7.8% (累计: 81.8%)
    • "很": 5.1% (累计: 86.9%)
    • "好": 3.2% (累计: 90.1%) ✓ 超过90%,停止
  2. 候选集包含:["苹果", "的", "手机", "电脑", "很", "好"]

  3. 将这些候选的概率重新归一化,然后从中随机采样

如果 Top-p = 0.6:

只会保留 ["苹果", "的", "手机"],候选范围更小,输出更保守。

如果 Top-p = 0.95:

可能包含十几个候选 token,输出更多样。

3.2 Top-p 的优势

Top-p 的巧妙之处在于它是自适应的:

  • 当模型很确定时(某个词概率很高),候选集自动变小
  • 当模型不确定时(概率分散),候选集自动变大

这比固定数量的 Top-k 更加灵活智能。

四、Top-k:简单直接的截断策略

理解了 Top-p,Top-k 就非常简单了。

4.1 Top-k 的工作原理

Top-k 就是只保留概率最高的 k 个候选,忽略其他所有选项。

如果 Top-k = 5:

展开代码
保留: "苹果": 35.2% "的": 26.5% "手机": 12.3% "电脑": 7.8% "很": 5.1% 舍弃: "好": 3.2% "香蕉": 2.3% ...其他所有token

然后将这 5 个候选的概率重新归一化后采样。

4.2 Top-k 的局限性

Top-k 的问题是不够智能:

  • 无论概率分布如何,都固定选 k 个
  • 当某个词概率达到 80% 时,保留其他低概率词反而引入噪声
  • 当概率很分散时,k 个候选可能不够

这就是为什么 Top-p 通常更受欢迎。

五、三个参数如何协同工作?

在实际应用中,这三个参数通常组合使用:

展开代码
原始logits ↓ 应用 Temperature 调整 ↓ 通过 Softmax 得到概率分布 ↓ 应用 Top-p 或 Top-k 筛选候选集 ↓ 从候选集中采样一个 token

常见配置方案

1. 精确任务(翻译、代码、数学)

  • Temperature: 0.0-0.3
  • Top-p: 0.1-0.5
  • 或者直接使用贪婪解码(选概率最高的)

2. 日常对话

  • Temperature: 0.7-1.0
  • Top-p: 0.9-0.95
  • 平衡流畅性和多样性

3. 创意写作

  • Temperature: 1.0-1.5
  • Top-p: 0.95-1.0
  • 鼓励更多创造性和意外惊喜

六、实验:看看参数如何改变输出

让我们用一个例子直观感受这些参数的影响。

提示词: "今天天气真好,"

配置1: Temperature=0.1, Top-p=0.5 可能输出: "今天天气真好,适合出门散步。"(保守、常见)

配置2: Temperature=1.0, Top-p=0.9 可能输出: "今天天气真好,我们去公园野餐吧!"(自然、有变化)

配置3: Temperature=1.5, Top-p=0.95 可能输出: "今天天气真好,云朵像棉花糖一样飘在天空中。"(更有创意)

总结

  • Token 生成: 模型逐个预测,通过 Softmax 将原始分数转为概率分布
  • Temperature: 调整概率分布的"陡峭程度",控制随机性
  • Top-p: 动态选择累计概率达到 p 的候选集,智能且自适应
  • Top-k: 固定选择前 k 个候选,简单但不够灵活

理解这些参数,你就能更好地调教大模型,让它在不同任务中发挥最佳表现。记住:没有绝对"最好"的参数设置,关键是根据具体任务和需求进行调整!

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!