输出采样账:贪心、Beam 与 top-k/top-p 的工程选择
同一个模型,"怎么把下一个 token 选出来"能决定服务质量、也决定推理成本。贪心、Beam Search、top-k/top-p 采样、temperature——它们各是什么、何时用、成本差多少?本文把输出采样的工程账算清,衔接 投机解码。
1. 解码策略分类:质量与成本的四个档位
| 策略 | 原理 | 输出质量 | 计算成本 | 适用 |
|---|---|---|---|---|
| 贪心(greedy) | 每步选概率最高的 token | 稳定但平淡、易重复 | 最低 | 摘要/翻译等确定性任务 |
| Beam Search | 每步保留 K 条最优路径 | 最高(全局近似最优) | K 倍 | 需要"最佳答案"的场景 |
| top-k 采样 | 从概率最高的 k 个中采样 | 多样性+可控 | 与贪心同 | 对话/创作 |
| top-p 采样 | 从累计概率 p 的最小集合采样 | 动态自适应 | 与贪心同 | 对话/创作的默认 |
判断:对话/生成默认 top-p 采样(p≈0.9-0.95),需要确定性答案用贪心/Beam——不要全程贪心,会让模型陷入重复循环。
2. temperature:分布的"锐化/平滑"开关
- T>1:分布变平,输出更随机、更多样;
- T<1:分布变尖,倾向高分 token,更确定;
- T→0:等价贪心。
工程要点:temperature 与 top-p 配合使用——先按 p 截断低概率尾部,再用 T 调锐度。T 不是越大越好:T 过高会产出语义漂移,0.7-1.0 是创作默认区间。
3. 采样在推理成本里的位置
| 阶段 | 是否随采样策略变化 |
|---|---|
| 前向计算(权重读取/算力) | 不变(decode 每步都算全词表) |
| 输出 token 数 | 变(采样可能提前 EOS,也可能绕远) |
| 投机解码收益 | 变(草稿分布与主模型越一致,接受率越高) |
判断:采样策略本身几乎不增加计算(成本在 decode 前向),真正影响成本的是输出长度与重复调用(如多次采样取优 = 推理时算力翻倍,见 Inference-time scaling)。
4. 与投机解码的衔接:一致性是前提
投机解码用草稿模型猜、主模型验证,接受率取决于草稿分布 q(x) 与主模型 p(x) 的一致性:
- 采样参数(T、top-p)必须两端一致,否则接受率崩、投机收益归零(见 投机解码 的一致性校验);
- 这也是"采样策略影响成本"的隐藏通道:一致性差的采样配置会白搭草稿模型的开销。
5. 可复算 Python:采样 vs 贪心的成本示意
python
def decode_cost(greedy_len, sample_len, k_trials=1):
"""输出成本:decode token 总量(含多次采样取优)"""
return greedy_len, sample_len * k_trials
decode_cost(greedy_len=512, sample_len=480, k_trials=3)
# 贪心 512 token vs 采样3次取优 1440 token → 成本 ×2.8
# 提示:多次采样换质量=推理算力翻倍,先评估 Inference-time scaling 的 ROI6. 交付清单
- 对话/创作默认 top-p 采样(p≈0.9-0.95, T≈0.7-1.0),确定性任务用贪心/Beam;
- 采样参数与投机解码草稿配置保持一致,否则接受率崩;
- "多次采样取优"按推理算力翻倍计成本,与换更大模型对比 ROI;
- 上线前固定采样参数并做 A/B(见 llm-serving-sre)。
本文为本站整理思考后撰写,用于知识库学习交流;公式与算例为本站自行推导整理,具体版本与实测数据以现场为准。