从 Top-k 到幻觉:把大模型里那几个“知道名字但说不清”的概念讲清楚
从 Top-k 到幻觉把大模型里那几个“知道名字但说不清”的概念讲清楚三个场景估计很多人都遇到过调 API 时面对temperature、top_p、top_k一排参数凭感觉乱填读论文时看到 Scaling Laws 的 loss 曲线只知道结论是“大力出奇迹”但说不出为什么生产环境里模型一本正经地编造引用文献排查半天不知道该从哪一层下手。这几个概念散落在推理、训练、评估三个阶段但内部其实有一条完整的逻辑链。我把它们串起来梳理一遍很多零散的经验会突然变得自洽。一、采样模型吐字前的最后一步自回归模型每生成一个 token 前输出的并不是一个词而是词表上 N 维的概率分布。采样策略决定“怎么从这个分布里挑一个词出来”这是理解一切采样参数的起点。温度只整形不裁剪温度 T 直接作用在 logits 上再做 softmaxpᵢ ∝ exp(zᵢ / T)T 越小分布越陡峭高概率 token 更占优T 越大分布越平滑低概率 token 机会增加。关键在于温度调整的是整个分布的形状候选集始终是全部 N 个 token一个都不会被踢出去。Top-k固定数量的截断将所有 token 按概率降序排列取前 k 个组成候选集 Sₖ其余全部清零再归一化p̂ᵢ pᵢ / Σⱼ∈Sₖ pⱼ两个边界情况值得记住k N 时退化为纯温度采样截断不生效k 1 时退化为贪心解码greedy永远选概率最高的 token输出完全确定。Top-p核采样数量自适应的截断Top-k 的死穴在于“数量固定”。分布很陡时比如第一个 token 占 0.95k5 会放进四个垃圾 token分布很平时一百个 token 各占 0.01k5 又会误杀大量合理候选。核采样的思路是不数个数数概率质量按概率降序累加直到累积和首次达到阈值 p这个最小前缀集合就是“核集合”Sₚ argmin |S|, s.t. Σᵢ∈Sₚ pᵢ ≥ p p̂ᵢ pᵢ / Σⱼ∈Sₚ pⱼ用一组具体数字对比一下p 0.9k 3token原始概率Top-k (k3) 归一化Top-p (p0.9) 归一化猫0.400.5000.430狗0.250.3130.269鱼0.150.1880.161鸟0.0800.086虫0.0500.054这里 top-p 留了 5 个 token累积到 0.93 才过阈值而如果分布是[0.95, 0.02, 0.01, ...]top-p 只会保留第一个top-k5 却照样放进来四个噪声。候选集大小随分布形状自动伸缩这就是核采样在开放式生成里几乎全面取代 top-k 的原因。整条解码流水线串起来是这样的logitsN 维温度缩放logits / Tsoftmax 得到分布Top-k 截断Top-p 截断重新归一化多项式采样顺手写一份最小实现三个参数的作用一目了然importtorchdefsample_token(logits,temperature1.0,top_kNone,top_pNone):# 1. 温度作用在 logits 上不裁剪候选logitslogits/temperature probstorch.softmax(logits,dim-1)# 2. Top-k按排名截断iftop_kisnotNone:kthtorch.topk(probs,top_k).values[...,-1,None]probstorch.where(probskth,torch.zeros_like(probs),probs)# 3. Top-p按累积概率质量截断iftop_pisnotNone:sorted_probs,sorted_idxtorch.sort(probs,descendingTrue)cumsumtorch.cumsum(sorted_probs,dim-1)# 累积和(不含自身)已达阈值的 token 全部清零keep(cumsum-sorted_probs)top_p sorted_probssorted_probs*keep probstorch.zeros_like(probs).scatter_(-1,sorted_idx,sorted_probs)# 4. 归一化后采样probsprobs/probs.sum()returntorch.multinomial(probs,num_samples1)注意顺序温度在前、top-k 在中、top-p 在后——主流推理框架基本都遵循这个管线所以这几个参数是叠加生效的全调大时候选集会比想象中宽得多。二、缩放法则算力怎么花才不亏Scaling Laws 回答的是训练阶段的问题在计算预算固定的情况下参数量 N 和数据量 D 应该怎么配比才能把 loss 压到最低Kaplan 等人 2020 年的核心发现是loss 随 N、D、算力 C 的变化在多个数量级上服从幂律。这意味着“堆资源”的收益是可预测的不是玄学这也是各大厂敢提前押注万卡集群的理论底气。真正的转折点是 Chinchilla2022。它把配比问题形式化为L(N, D) E A/N^α B/D^β (α ≈ 0.34, β ≈ 0.28)在 C ≈ 6ND 的约束下求最优解结论是N 和 D 应大致同比例增长每个参数约配 20 个训练 token。这个配比下的 Chinchilla70B 参数 / 1.4T token用不到 Gopher280B 参数四分之一的参数量打平甚至超过了它。但这里有个容易被忽略的后续Llama、Mistral 这一代模型故意偏离了 Chinchilla 最优点用远超 20 token/参数的比例去“过训练”小模型比如 7B 模型喂上万亿 token。原因很实际——Chinchilla 最优只优化训练算力而部署阶段推理成本会伴随模型一生。训练一次、推理十亿次边际账要重新算。所以我对 Scaling Laws 的态度是它给的不是一个教条式的“配方”而是边际收益曲线的形状。知道形状之后训练目标和部署场景变了最优点自然要重新求。三、幻觉这条流水线的固有误差输出幻觉指模型生成的内容与客观事实、用户输入或上下文相矛盾——本质是模型在过度自信地“编造”而非准确检索或推理。常见分类事实性幻觉违背世界事实比如编造不存在的论文引用忠实性幻觉摘要、翻译等任务中不忠于源文本内在幻觉与当前输入直接矛盾对应的还有外在幻觉内容与输入无关且无法由输入验证。从概率视角看幻觉的来源至少有三层而且和前两部分直接勾连训练目标是似然不是真值。模型学的是 p(token | context)“流畅且貌似合理”与“真实”在训练信号里根本不可区分——loss 不会因为一句假话而额外惩罚它。参数化知识是有损压缩。长尾事实在训练数据里覆盖稀薄但解码端没有默认的“我不知道”倾向RLHF 甚至倾向于鼓励给出完整、确定的回答。采样策略是放大器。这就绕回第一部分了temperature 和 top-p 调高候选集变宽低概率的“编造路径”更容易被选中自回归的误差还会累积——一个错误 token 会成为后续所有生成的 context。对应的缓解手段也就有了明确的落点RAG 提供外部证据降低对参数化知识的依赖降低温度、收紧 top-p 压缩候选集self-consistency 多次采样投票输出格式上强制引用与可验证结构。有一点必须说清贪心解码k1 或 T→0并不能消灭幻觉它只是收敛到分布的众数而众数本身可能就是错的甚至可能触发重复循环。幻觉是训练范式的性质不是解码器某个可修的 bug。串起来看这三个概念其实描述的是同一条流水线的三个断面Scaling Laws回答训练时算力和知识怎么配比采样策略决定推理时如何从知识分布中取出 token幻觉是这条概率生成流水线不可避免要付出的误差代价且误差大小部分掌握在你手里那几个采样参数的手里。一个我还没想明白的问题既然幻觉源于“似然不等于真值”这个结构性错位那对齐训练和后验校验能把它压到工程上可接受的漏检率还是说只要生成范式不变它就永远只能被管理、不能被消除目前看到的证据更支持后者。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →