🧠AI LLM 基础
采样参数与输出控制
面试回答
常见问法
温度、top-p、max tokens 这些推理参数分别起什么作用?
回答
温度主要控制随机性,越高越发散;top-p 控制候选词的累计概率范围,限制采样空间;max tokens 控制输出长度和成本。它们本质上是在”稳定性、创造性、成本”之间做权衡。
# 采样参数使用示例
import torch
def generate_with_params(model, input_ids,
temperature=0.8,
top_p=0.95,
max_tokens=100):
"""
使用不同采样参数生成文本
温度=0.2: 确定性高,适合问答系统
温度=0.8: 创造性高,适合写作任务
top-p=0.9: 限制90%概率质量的候选词
max_tokens: 控制输出长度和成本
"""
outputs = model.generate(
input_ids,
do_sample=True,
temperature=temperature,
top_p=top_p,
max_new_tokens=max_tokens,
pad_token_id=model.eos_token_id
)
return outputs
# 温度对生成多样性的影响
low_temp_prompt = "写一个关于夏天的故事"
high_temp_prompt = "发挥创意,写一个奇幻的夏天故事"
# 低温度:确定性输出
low_temp_output = generate_with_params(model, low_temp_prompt, temperature=0.2)
# 高温度:创造性输出
high_temp_output = generate_with_params(model, high_temp_prompt, temperature=0.8)
追问
- 为什么温度调高后更容易胡说?(低概率token被采样)
- top-p 和 top-k 有什么差别?(累积概率 vs 固定数量)
- 线上系统为什么常常需要对输出长度做硬限制?(成本控制)
原理展开
模型先给出每个 token 的概率分布,采样参数决定如何从这个分布里挑下一个 token。温度会改变分布陡峭程度,top-p 会裁掉尾部低概率候选,max tokens 则直接限制生成步数。
实际工程里,这些参数不只是”生成质量”问题,还会影响接口延迟、token 成本和产品稳定性。越开放的采样通常越适合创作型任务,越保守的采样越适合问答和生产系统。
# 手动实现top-p采样
def top_p_sampling(logits, top_p=0.95):
"""
Top-p采样实现
1. 按概率排序
2. 累积概率达到top_p
3. 只从这些token中采样
"""
probs = torch.softmax(logits, dim=-1)
sorted_probs, sorted_indices = torch.sort(probs, descending=True)
# 累积概率
cumulative_probs = torch.cumsum(sorted_probs, dim=-1)
# 找到top_p对应的阈值
threshold_idx = torch.searchsorted(cumulative_probs, top_p)
threshold_prob = sorted_probs[threshold_idx]
# 过滤低于阈值的token
mask = probs >= threshold_prob
filtered_logits = logits.masked_fill(~mask, float('-inf'))
# 从过滤后的分布中采样
filtered_probs = torch.softmax(filtered_logits, dim=-1)
sampled_idx = torch.multinomial(filtered_probs, 1)
return sampled_idx
# 温度对分布的影响
def apply_temperature(logits, temperature):
"""
温度调节
temperature < 1: 分布更尖锐(确定性更强)
temperature > 1: 分布更平滑(创造性更强)
"""
return logits / temperature
易错点
- 认为单独调一个参数就能稳定解决所有输出问题
- 不区分模型能力问题和采样策略问题
- 忽略参数组合的效果(如高温度+低top-p可能不稳定)
记忆技巧
记住采样三要素:
- 温度 = “控制随机性”(0.2-0.8范围)
- top-p = “概率质量限制”(0.9-0.95范围)
- max tokens = “长度和成本控制”
典型应用场景:
- 问答系统:低温度+高top-p+适中长度
- 创作任务:高温度+中top-p+较长长度
- 代码生成:低温度+高top-p+精确长度