![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
# 大语言模型五种采样策略对比
## 1. 五种采样策略对比
| 策略 | 实现方式 | 主要特点 |
| --- | --- | --- |
| 贪心解码(Greedy Decoding) | 每一步都选择概率最大的词 | 稳定、可复现,但缺少多样性 |
| 按概率采样(Multinomial Sampling) | 按模型输出的概率分布随机抽取一个词 | 具有多样性,但可能抽到低概率的异常词 |
| 温度采样(Temperature Sampling) | 使用温度参数调整概率分布,然后随机抽样 | 可以控制随机程度:温度低时更保守,温度高时更开放 |
| Top-K 采样 | 只保留概率最高的 K 个词,再从中随机采样 | 能过滤低概率异常词;K 越小越稳定,K 越大多样性越高 |
| Top-P 采样(Nucleus Sampling) | 保留累计概率达到 P 的最小候选词集合,再从中随机采样 | 候选词数量会随概率分布动态调整,比固定 K 更灵活 |
## 2. 温度参数 T 的效果
| 温度 T | 效果 |
| --- | --- |
| `T → 0` | 概率分布高度集中,效果接近贪心解码 |
| `T = 0.5` | 分布更尖锐,高概率词更容易被选中,输出更保守 |
| `T = 0.7` | 略微保守,是常见的默认取值 |
| `T = 1.0` | 不改变原始概率分布,执行标准采样 |
| `T = 2.0` | 随机性很强,低概率词也有较大机会被选中 |
## 3. Top-K 参数的效果
| K 值 | 效果 |
| --- | --- |
| `K = 1` | 只保留概率最高的词,效果等价于贪心解码 |
| `K = 3` | 只从概率最高的 3 个候选词中采样,输出相对稳定 |
| `K = 5` | 候选范围更大,多样性提高,但异常词风险也会增加 |
## 4. Top-P 参数的效果
| P 值 | 效果 |
| --- | --- |
| `P = 0.5` | 保留累计概率覆盖 50% 的最小头部候选词集合,输出较保守 |
| `P = 0.9` | 保留累计概率覆盖 90% 的最小候选词集合,兼顾质量与多样性 |
| `P = 1.0` | 保留全部候选词,接近按原始概率分布采样 |
## 5. 策略与核心代码的对应关系
| 策略 | 核心代码 |
| --- | --- |
| 贪心解码 | `torch.argmax(logits)` |
| 按概率采样 | `torch.multinomial(softmax(logits), 1)` |
| 温度采样 | `torch.multinomial(softmax(logits / T), 1)` |
| Top-K 采样 | 先使用 `torch.topk(logits, k)` 筛选候选词,再调用 `torch.multinomial(...)` 抽样 |
| Top-P 采样 | 按累计概率过滤候选词,再调用 `torch.multinomial(...)` 抽样 |
## 6. 示例代码中的完整函数
| 策略 | 函数 | 关键实现 |
| --- | --- | --- |
| 贪心解码 | `greedy_decode(logits)` | 使用 `torch.argmax(logits, dim=-1).item()` 选择概率最大的词 |
| 按概率采样 | `multinomial_sample(logits)` | 先执行 `F.softmax(logits, dim=-1)`,再按概率随机抽样 |
| 温度采样 | `temperature_sample(logits, temperature)` | 先执行 `logits / temperature`,再计算概率并随机抽样 |
| Top-K 采样 | `top_k_sample(logits, k)` | 使用 `torch.topk(logits, k)` 选出前 K 个词,再从中抽样 |
| Top-P 采样 | `top_p_sample(logits, p)` | 使用 `torch.cumsum` 计算累计概率,筛选达到 P 的候选词集合后抽样 |
## 7. 实际选择建议
| 使用需求 | 建议方案 |
| --- | --- |
| 输出稳定、可复现 | 使用贪心解码,或设置较小的 T、K、P |
| 平衡生成质量与多样性 | 设置 `T = 0.7~1.0`,并配合 Top-K 或 Top-P |
| 输出更有创造性 | 适当增大 T、K 或 P |
| 避免生成低概率异常词 | 使用 Top-K、Top-P,或降低温度 |
| 生成多个不同结果 | 使用按概率采样、温度采样、Top-K 或 Top-P |
## 8. 参数关系说明
- 温度 T 负责调整整个概率分布的平滑程度。
- Top-K 负责限制候选词的固定数量。
- Top-P 负责根据累计概率动态决定候选词数量。
- 实际生成时,温度通常可以与 Top-K 或 Top-P 组合使用:先用温度调整概率分布,再过滤候选词,最后随机采样。
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()