当前位置: 首页 > news >正文

【LLM基础】6. LLM 推理时的温度值、top_p、top_k等采样算法原理


在大语言模型(LLM)的开发与应用中,我们经常遇到这样一个问题:为什么相同的 Prompt,模型每次给出的回答都不一样?如何才能让它的输出变得高度稳定?

这背后的核心枢纽,就是模型的采样算法(Sampling)。当 Transformer 网络的最后一层输出包含数万个词汇特征的 Logits(未归一化的得分)时,模型面临着“下一个词该选谁”的抉择。本文将从数学原理到工程实现,带你彻底看懂 Temperature、Top-k、Top-p 及其组合策略。

一、 核心采样参数解析

在探讨组合策略之前,我们必须先严谨地定义这三个最常用的控制旋钮。

1. Temperature (温度):改变概率分布的形状

Temperature 是对模型原始输出 Logits 进行缩放的参数。在工程实现中,为了防止指数爆炸(溢出为 NaN),底层计算 Softmax 前必定会先减去 Logits 中的最大值(即平移不变性)。其真实的底层数学计算公式如下:

P(yi)=e(xi−xmax)/T∑j=1Ve(xj−xmax)/TP(y_i) = \frac{e^{(x_i - x_{max})/T}}{\sum_{j=1}^{V} e^{(x_j - x_{max})/T}}P(yi)=j=1Ve(xjxmax)/Te(xixmax)/T

  • T = 1.0:标准状态,不改变模型原始输出的相对概率。
  • T > 1.0(升温):分母变大,指数项趋近于 0,经过exe^xex计算后所有词的概率会趋于平均。值越大,模型越“放飞自我”,随机性和创造性越强。
  • T < 1.0(降温):这是提高稳定性的关键。当TTT变小,原本哪怕只有微弱优势的最大值xmaxx_{max}xmax,在除以极小的TTT后,其与次大值的差距会被无限放大。
  • 极致情况 T → 0:在数学极限下,最大值的概率无限逼近 1.0。在工程代码中,一旦检测到T=0T=0T=0,系统通常会直接触发特判分支,跳过上述除法与 Softmax,执行argmax(贪心采样),即 100% 只取 Logit 最高的词。

2. Top-k 采样:基于排名的硬性截断

模型词表通常高达几万到十几万,其中存在大量极不合理的“废词”。Top-k 的作用是粗筛

  • 原理:将所有候选词按概率从高到低排序,只保留前 k 个。将第k+1k+1k+1名及之后的所有候选词的 Logits 强制设为−∞-\infty
  • 缺点:不够智能。在分布集中的场景下,选前 50 会引入垃圾词;在分布平滑的场景下,选前 50 可能会扼杀合理的创造力。

3. Top-p (Nucleus) 采样:基于质量的动态截断

为了弥补 Top-k “一刀切”的缺陷,Top-p 引入了动态质量控制

  • 原理:将候选词按概率降序排列,并依次累加。当累积概率首次超过 p 时,停止保留
  • 优势:如果模型当前非常“自信”(前两个词概率加起来就到了ppp),候选池就只有 2 个词;如果模型在“犹豫”(概率平缓),候选池可能动态扩展到几十个词。

二、 采样流水线:参数组合的先后顺序

在主流的推理框架(如 Hugging Facetransformers、vLLM)中,当你同时传入这三个参数时,它们不会冲突,而是构成一条串行处理流水线(Logits Processors)

处理顺序如下:

  1. 温度缩放 (Temperature Scaling):最先执行。直接在最原始的 Logits 数组上除以TTT
  2. Top-k 截断 (Top-k Filtering):基于缩放后的 Logits 进行排序,保留前kkk个,其余设为−∞-\infty
  3. Top-p 截断 (Top-p Filtering):对剩下的kkk个词计算一次临时概率,按概率累加,超过阈值ppp的部分再次设为−∞-\infty
  4. 最终采样 (Final Softmax & Sample):对历经两轮砍伐后存活下来的 Logits 执行最终的 Softmax,并进行多项式采样(加权随机掷骰子,即将厮杀后还幸存的token按照logits归一化,后按照归一化后的概率进行采样。e.g. “你”的概率是0.7,“我”的概率是0.2,“好”的概率是0.1,那么在[0,1]之间掷骰子,落在[0,0.7]则选择“你”,[0.7, 0.9]则选择“我”,[0.9, 1]则选择“好”)。

最佳实践建议:在日常业务调参中,强烈建议仅调节 Temperature 或 Top-p 其中之一,另一个保持默认。同时调节两者会让生成结果的分布变化变得不可预测,难以进行控制变量分析。


三、 参数调优速查表

参数名取值范围调大时的影响 (↑)调小时的影响 (↓)建议设定场景
Temperature0.0 ~ 2.0+分布变平缓,随机性与创造力增强,可能出现幻觉。分布变尖锐,确定性增强,输出趋向保守和重复。创意写作: 0.7~1.2
代码/信息抽取: 0.0
Top-p0.0 ~ 1.0候选池扩大,包容更多长尾词,多样性增加。候选池收缩,仅保留头部高确信度词汇,稳定性提升。闲聊对话: 0.8~0.95
严谨问答: 0.1~0.5
Top-k0 ~ V (词表大小)截断变宽,允许更多生僻词出现。截断变严,可能导致表达单一。通常设为 40~50 作为兜底,防止极低概率词出现即可。

(注:Top-k 为 0,Top-p 为 1.0 时,通常代表禁用该过滤项。)


四、 如何最大限度保证绝对稳定性?

在提取 JSON 结构、进行严肃的数学推理等工业场景中,我们要求模型输出的“随机性尽可能为 0”。要做到这一点,需要从算法和系统两个层面下手:

第一步:算法层锁死(贪心搜索)

最直接的方法是设置Temperature = 0
如前文所述,这会触发底层框架的argmax逻辑,直接抛弃一切概率采样行为,采用贪心解码策略(每次只拿得分最高的那个词)。此时,传入的 Top-p 和 Top-k 参数将会失效(被框架忽略)。

第二步:系统层消除浮点误差(针对极其严苛的场景)

大家可能经常会发现:明明设置了 Temperature = 0,为什么面对极长的长文本生成时,模型偶尔还是会改变输出?

这就是工业界常踩的坑:浮点数非确定性(Floating-Point Non-determinism)
在 GPU 并行计算庞大的注意力矩阵时,由于浮点数加法不满足结合律(即(a+b)+c≠a+(b+c)(a+b)+c \neq a+(b+c)(a+b)+c=a+(b+c)在极高精度下成立),底层 CUDA 算子并行的原子累加操作顺序不同,会导致算出的 Logits 在小数点后极低位(如第 6 位)产生微小波动。
如果某次推理恰好有两个 Token 的 Logits 极其接近(例如都是 15.220000),这种微小的浮点噪音就会导致argmax选出的冠军发生易主!

缓解方案:

  1. 固定随机种子 (Seed):强制 GPU 算子以固定的模式执行计算,大多数接口均提供seed参数。
  2. 强制 FP32 累加:在某些支持底层的推理引擎中,开启更高精度的浮点数累加(而非 FP16/BF16),减少舍入误差。

http://www.jsqmd.com/news/494830/

相关文章:

  • 『NAS』将NAS变成单词收割机-QwertyLearner
  • 基于深度学习的表格识别技术:通过多模态预处理、神经网络分析和高精度OCR识别,实现复杂银行流水的自动化解析
  • 【第10篇】Mamba 100篇合集 · 从入门到天花板
  • 少走弯路:10个降AI率网站开源免费测评与推荐
  • java面试题总结2
  • LeetCode 1727.重新排列后的最大子矩阵:枚举矩形底边是哪一行 + 排序
  • 2026年塑料瓶粉碎机厂家实力榜TOP3,谁是行业领头羊?
  • 2026年主流论文降AI率工具实测:亲测有效的神器全在这
  • Windows系统漏洞MS17-010全解析
  • 一次签名毁掉数亿美元,深度拆解DeFi历史级漏洞
  • geocode.com.cn:经纬度查询省市县乡街道的地理编码服务
  • 花2千块法人号码核验百万条号码,结果一半是空号”:B端拓客的核验陷阱,该到头了,终于找到了个便宜的法人号码核验就是氪迹科技
  • 7-2 然后是几点
  • 2026年AI编程实战:如何用Gemini 3.1 Pro与国内镜像站提升开发效率
  • 2026年知网AIGC检测4.0升级了什么?这样降AI才有效
  • 做立辉物性表学到的word技巧
  • RabbitMQ在大数据领域的应用场景全解析
  • Linux命令 date详解
  • 推荐一款免费数据库监控诊断工具!AI智能诊断优化,20+数据库一站式支持
  • Spring Boot 3.5正式普及!Java虚拟线程+GraalVM原生镜像,启动仅0.3秒
  • 软件运营管理化的日常活动执行
  • 即兴喜剧AI测试:机器学习“现挂”的意外笑点
  • 读写锁基本概念
  • 【MinerU】技术深度解析:开源PDF文档智能提取的利器
  • Go JSON 序列化性能对比与优化
  • 救命神器! 全场景通用降AI率平台 千笔·降AIGC助手 VS PaperRed
  • 百度文库免vip下载文档_百度文库vip兑换码
  • Kubernetes StatefulSet 存储设计
  • Rust的Box堆分配与栈上大数组在递归数据结构中的选择标准
  • 深度拆解DeFi经典漏洞案例,Sonne Finance Exploit