首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
logits是什么?从模型原始打分到概率的完整链路解析
📅 2026/10/30 18:56:00
✍️ 爱科研究院
👁 阅读 3,247
1. 为什么一个“logits”值得单独写一篇搞AI的人大概都有过这种体验翻论文、看源码、读API文档冷不丁蹦出来一个词——logits。你盯着它看了三秒感觉每个字母都认识连在一起却说不清它到底指什么。更麻烦的是它经常和softmax、交叉熵、概率、置信度这些词混在一起出现新手很容易把它们搅成一锅粥。我自己刚开始接触模型输出那会儿就踩过这个坑。当时拿到一组模型返回的数值第一反应是“这不就是概率吗”直接拿去当置信度用了。结果发现这些数有正有负加起来也不等于1有的甚至能到十几、几十。后来才明白那根本不是概率而是logits——模型在softmax之前吐出来的原始打分。这篇东西就是想把logits这个词彻底讲透。它是什么、从哪来、为什么要有它、和概率到底是什么关系、实际用的时候有哪些坑。不管你是刚入门想搞懂基础概念还是已经写过一些模型代码但一直没深究过这层我都尽量用大白话加实际例子给你捋清楚。核心关键词就一个logits但围绕它能牵出一整条从模型内部到最终输出的链路这条链路搞明白了很多看似玄乎的问题会一下子变得很直观。我写这篇的出发点很简单网上讲logits的内容要么太学术、公式一堆要么太浅、只说“就是没归一化的分数”然后没了。我想补上中间那层——为什么设计成这样、工程上怎么用、哪些地方容易翻车。下面按我习惯的顺序来先讲整体逻辑再抠细节最后给实操和排错。2. 先把概念钉死logits到底是个什么东西2.1 一句话定义与生活化类比如果只能用一句话说清楚logits是模型在做出最终分类决定之前对每个候选类别给出的原始打分它可以是任意实数没有范围限制也没有归一化。打个生活化的比方。你去参加一个盲品测评面前摆了五杯茶评委给每杯茶打分。这个打分可以是8分、-3分、15分、0.5分、2分——评委想给多少给多少没有“必须加起来等于100”的规矩甚至可以是负数表示“这杯明显不对”。这个原始打分就非常接近logits的概念。而最后要公布“哪杯最可能是龙井”时才会把这些分数换算成百分比形式的可能性那个换算后的东西才是概率。所以logits的本质是未归一化的得分向量。模型内部经过一堆矩阵乘法和激活函数之后最后一层线性变换输出的那组数就是logits。它承载的是模型对各个类别的“倾向程度”数值越大表示模型越倾向于那个类别但数值本身的大小并不直接等于概率。这里有个容易混淆的点我得提前说清楚logits不是“错误的值”或者“中间垃圾”它是模型最原始、信息最完整的输出形态。恰恰是因为它没被压缩到0到1之间才保留了类别之间相对差距的细节。后面你会看到很多工程上的精细操作恰恰要绕开概率、直接对logits下手。2.2 logits、softmax、概率三者的关系链要真正理解logits绕不开softmax。它们俩的关系可以用一句话概括softmax是logits到概率的翻译官。模型输出logits向量比如三个类别得到[2.0, 1.0, 0.1]。这三个数没法直接用因为不满足概率的定义非负、和为1。softmax做的事情分两步先对每个数取指数e的多少次方把负数变正、把差距放大再把取完指数的结果除以它们的总和强行归一化成和为1。拿上面这组数算一下。取指数e^2.0≈7.39e^1.0≈2.72e^0.1≈1.11。总和≈11.22。归一化后得到约[0.659, 0.242, 0.099]。这三个数就是概率加起来正好是1第一个类别约66%的可能性。从这个计算过程能看出几个关键信息。第一softmax是保序的——logits大的类别softmax之后概率也大排序不会变。第二softmax会放大差距原本2.0和1.0差1概率上变成66%对24%差距被拉得很开。第三logits可以是任意实数但经过指数运算后一定是正数这就解决了非负的问题。我习惯把这条链路记成模型最后一层 → logits原始打分→ softmax → 概率 → 取argmax或采样 → 最终结果。理解这条链后面所有的实操讨论都有了落脚点。很多新手把logits和概率混用本质就是没分清这条链上两个不同的站点。2.3 为什么模型不直接输出概率有人可能会问既然最终要的是概率模型干嘛不一步到位直接输出概率非要中间搞个logits这个问题问得好答案藏在训练机制里。模型训练时用的损失函数最常见的是交叉熵在数学上跟softmax是配套设计的。交叉熵配合softmax梯度形式非常干净——预测概率和真实标签的差直接就是梯度的一部分。这种简洁的梯度让训练稳定、收敛快。如果模型直接输出概率就得额外加约束保证输出合法非负、和为1反而把优化问题搞复杂了。另一个原因是数值稳定性。概率被限制在0到1之间在浮点数表示下非常小的概率比如1e-10和0之间的区分度会变差梯度也容易消失。而logits没有这个限制可以取很大的值也可以取很小的值数值空间更宽裕计算时不容易丢精度。工程上很多实现会在softmax内部做“减最大值”的技巧后面会讲这个技巧正是作用在logits上的。所以logits不是多此一举的中间产物而是训练和数值计算双重考虑下的自然设计。理解了这一点你就不会觉得它是个可以随便忽略的细节了。3. 拆开看logits在不同场景下的真实面目3.1 分类任务里的logits维度就是类别数在最常见的多分类场景里logits是一个长度等于类别数的向量。比如一个十分类的手写数字识别模型最后一层输出10个数这10个数就是10个类别的logits。每个位置对应一个类别数值大小代表模型对该类别的倾向。这里有个实操细节值得说logits的绝对大小没有意义有意义的是相对大小和差距。假设两个样本的logits分别是[5.0, 1.0]和[0.5, -3.5]虽然第一组的绝对数值大很多但两组里第一个类别相对第二个类别的领先幅度都是差4.0是一样的softmax之后的概率分布也完全一样。所以看logits不要盯着单个数字要看它和其他类别之间的相对关系。另外类别数决定了logits向量的长度这个长度在模型结构里是固定的。如果你拿到一组logits第一件事应该是确认它的长度对不对——长度错了说明模型输出层配置有问题或者数据预处理时标签映射搞乱了。我见过有人把二分类的2维logits当成多分类用结果怎么调都不对最后发现是模型最后一层神经元数量配错了。3.2 二分类的特殊情况一个数还是两个数二分类是个容易让人犯迷糊的地方。理论上二分类可以输出两个logits对应两个类别也可以只输出一个logits对应“正类”的得分负类得分默认为0。这两种表示在数学上是等价的。输出两个数[a, b]做softmax和输出一个数a-b做sigmoid得到的正类概率是一样的。工程实现里两种都常见有的框架二分类输出层就一个神经元配sigmoid有的则老老实实输出两个配softmax。实操中要注意的是别把两种表示搞混。如果你拿到的模型输出是单值logits却按双值去解析或者反过来结果会完全错乱。判断方法很简单看输出维度。维度是1或标量就是单值表示维度是2就是双值表示。这个检查在对接第三方模型或迁移旧代码时特别重要我吃过一次亏一个老模型的输出被新代码按双值解析概率算出来全是反的排查了半天才发现是维度理解错了。3.3 生成式模型里的logits词表有多大向量就有多长到了语言模型这类生成式场景logits的形态会变得很壮观。模型每一步预测下一个词时输出的logits向量长度等于整个词表的大小。词表几万、十几万都很正常所以每一步的logits是一个超长向量每个位置对应词表里一个词元的得分。这时候logits的解读方式和分类任务本质一样——哪个位置的数值大模型就越倾向于生成那个词。但因为候选太多直接看logits几乎没法人工解读必须借助softmax转成概率再配合采样策略贪心、top-k、top-p、温度调节等来决定最终选哪个词。这里有个关键点温度参数是直接作用在logits上的。所谓温度调节就是把logits先除以一个温度值T再做softmax。T小于1会让分布更尖锐更保守、更确定T大于1会让分布更平缓更随机、更多样。这个操作的妙处在于它改的是logits而不是概率因为概率已经被归一化了直接改概率很难控制效果而改logits再重新归一化逻辑清晰、效果可控。这也是理解logits价值的一个绝佳例子——它是那个可以被自由调节的“原始旋钮”。3.4 多标签场景每个类别独立算logits多分类是“从多个里选一个”多标签是“每个类别各自判断有没有”。这两种场景下logits的用法不同。多标签任务里每个类别独立过一个sigmoid各自把自己的logit转成0到1之间的独立概率彼此不竞争、不归一化。所以多标签场景下logits向量里每个位置是独立打分的不存在“加起来等于1”的约束。这时候如果你错误地对整组logits做了softmax就会强行让它们互相竞争把本来可以同时成立的多个标签压成互斥的结果全错。这个坑我在处理一个内容打标任务时踩过当时模型明明能同时识别多个标签但输出概率总和是1明显不对回头一查是把多标签当多分类做了softmax。4. 工程实操拿到logits之后该怎么正确处理4.1 数值稳定性减最大值这个动作不能省直接对logits做softmax在数值上是有风险的。如果logits里有很大的值比如1000取指数e^1000会直接溢出成无穷大计算就崩了。这不是理论担忧实际中模型输出偶尔飙出大值并不罕见。标准解法是先减去这组logits里的最大值再做指数和归一化。数学上可以证明softmax对输入整体平移是不变的——所有logits同减一个常数softmax结果完全一样。所以减去最大值不改变结果却能把最大的指数项变成e^01彻底避免溢出。import numpy as np def stable_softmax(logits): logits np.asarray(logits, dtypenp.float64) shifted logits - np.max(logits) # 关键减最大值防溢出 exp_vals np.exp(shifted) return exp_vals / np.sum(exp_vals)这段代码里shifted logits - np.max(logits)就是那个不能省的动作。我见过一些手写的简易实现漏了这一步在小数值测试时一切正常一上真实模型就偶尔报溢出警告或者返回nan排查起来很费劲。所以不管你用框架自带的softmax还是自己写这个稳定性处理都要心里有数。主流框架的softmax实现内部都做了这个处理但你如果手动操作logits比如自己算损失、自己做采样就得自己保证。4.2 从logits到最终决策argmax、采样与阈值拿到logits之后最终要落成一个决策常见有三条路。第一条是argmax直接取logits最大的那个位置作为结果。这条路最简单不需要softmax因为softmax保序logits最大的位置softmax后概率也最大。分类任务里追求确定性输出时常用这招省去归一化计算。第二条是按概率采样。先softmax得到概率分布再按概率随机抽一个。生成式模型里这是标配配合温度、top-k、top-p等策略控制随机性。采样能带来多样性但也意味着同样的输入可能得到不同输出。第三条是阈值判断。多标签或需要“拒识”的场景里把logits转成概率后设一个阈值超过才算命中。这里要注意阈值应该设在概率上而不是logits上因为logits没有统一尺度不同模型、不同样本的logits分布差异很大拿logits定阈值几乎没法跨场景复用。选择哪条路取决于任务需求。我一般的判断标准是要唯一确定答案就用argmax要多样性或创意输出就用采样要控制误报率就用概率加阈值。三条路都建立在正确理解logits的基础上。4.3 损失函数视角交叉熵为什么直接吃logits训练时最常见的交叉熵损失很多框架的实现是直接接收logits而不是概率的。比如某些框架里的交叉熵函数内部会自己做log-softmax你传进去的应该是原始logits。为什么这么设计因为把softmax和取对数合并成一个log-softmax运算数值上更稳定也避免了“先softmax再取log”可能带来的精度损失。如果你手动先把logits转成概率再传给交叉熵等于多做了一步还可能引入误差甚至因为概率里有0导致log(0)出问题。所以训练代码里有个常见约定模型输出logits损失函数接收logits中间不要手动插softmax。这个约定新手很容易违反看到模型输出一堆奇怪的数就忍不住先转成概率结果训练效果反而变差。记住这条训练阶段让logits原样流进损失函数推理阶段再按需转概率。4.4 保存与传输logits比概率更适合存档做模型服务或结果存档时我倾向于保存logits而不是概率。原因有几个logits信息更完整后续想做温度调节、重新归一化、换阈值策略都还有操作空间而一旦存成概率归一化的信息就固化了想反推回logits虽然理论上可以取对数但会丢精度且多此一举。当然存logits的代价是数值范围大、可能占更多存储或传输带宽但在大多数场景下这个代价可以接受。如果确实要压缩也可以只存top-k的logits和对应索引其余视为极小值这在生成式场景里很常见。这个取舍没有标准答案但知道logits保留了更多可能性做架构决策时就多了一个维度。5. 常见问题与排查logits相关的那些坑5.1 症状对照表从现象反推问题实际工作中遇到和logits相关的问题往往表现为一些看似不相关的症状。我整理了一张对照表方便快速定位。现象可能原因排查方向概率全是nan或infsoftmax前未减最大值指数溢出检查softmax实现是否做平移概率总和明显不等于1误把logits当概率直接用确认是否漏了softmax多标签结果互斥对多标签logits错误做了softmax改用逐类别sigmoid二分类概率全反单值/双值logits表示理解错核对输出维度和解析逻辑训练loss不降手动softmax后又传给交叉熵让logits直接进损失函数同样输入输出飘忽采样策略随机性非bug确认是否用了采样而非argmax换模型后阈值失效阈值设在logits上而非概率上统一在概率空间设阈值这张表里的每一条我都或多或少遇到过或见别人踩过。最典型的是第一条和第二条本质都是对logits和概率的边界没分清。第三条在多标签任务里高频出现值得单独强调。5.2 三个高频误区的深度拆解误区一把logits当置信度。有人看到logits里某个值很大就认为“模型很有把握”。这不对。logits的绝对大小受模型尺度、初始化、训练过程影响不同模型之间不可比。真正的置信度要看softmax后的概率而且即便是概率也可能存在过度自信的问题模型给99%但实际错了。所以判断可靠性不能只看logits数值。误区二以为softmax改变了排序。前面说过softmax保序所以如果你只关心“哪个类别最可能”完全可以直接对logits取argmax跳过softmax。有人多此一举先softmax再argmax结果一样但多算了。理解保序性还能帮你优化性能——推理时如果只要类别不要概率直接argmax最省。误区三温度调节改的是概率。温度是作用在logits上的不是概率上。正确顺序是logits除以温度、再softmax。如果先softmax再对概率做某种缩放逻辑就错了结果也不可控。这个顺序问题在自定义采样逻辑时特别容易搞反。5.3 我的排错习惯先看形状再看数值遇到logits相关问题我的排查顺序固定是先看形状再看数值范围最后看归一化。看形状是确认维度对不对——分类任务的logits长度该等于类别数生成任务该等于词表大小二分类该是1或2。形状错了后面全白搭。看数值范围是判断有没有异常大值导致溢出风险顺便确认是不是真的logits概率应该在0到1且和为1如果看到负数或大于1的数那基本就是logits没跑了。最后看归一化确认该做softmax的地方做了、不该做的地方没做。这个顺序能覆盖绝大多数问题。我建议把它固化成习惯比东一榔头西一棒子地猜要高效得多。尤其是对接不熟悉的模型或接手别人的代码时这三步走一遍心里就有底了。6. 把logits用出价值几个进阶思路6.1 用logits差距做不确定性估计概率经过softmax压缩后有时候会掩盖类别之间的真实差距。而logits保留了原始差距可以用来做更细的不确定性判断。比如top-1和top-2的logits差距很小说明模型在两个类别间犹豫即便softmax后top-1概率看起来还行实际可靠性也存疑。反过来差距很大说明模型倾向明确。这个思路在需要“拒识”或“转人工”的场景很有用设定一个logits差距阈值差距太小就不自动决策。相比直接用概率阈值logits差距对分布形状更敏感能捕捉到概率归一化后丢失的信息。当然阈值要针对具体模型调没有通用值。6.2 集成与融合时在logits层面操作做模型集成时把多个模型的logits取平均再softmax通常比把各自概率取平均效果更稳。原因是概率已经过非线性压缩直接平均会扭曲原始倾向而logits是线性空间的打分平均更符合“综合各方意见”的直觉。这个技巧在竞赛和实际融合里都常用算是一个理解logits价值后自然能想到的用法。6.3 蒸馏与迁移中的logits传递知识蒸馏里学生模型学习的不只是硬标签还有教师模型的softmax输出软标签。而软标签的“软”程度由温度控制温度又作用在logits上。所以整个蒸馏过程本质是在logits空间做信息传递。理解这一点调温度、设计损失时就不会盲目试参数而是知道自己在调节什么。这也是logits概念在进阶场景里的直接延伸。我个人在实际操作中的体会是logits这个词之所以值得单独拎出来讲不是因为它多难而是因为它是连接模型内部和外部决策的那道关口。把这道关口守好——该归一化时归一化、该保留原始值时保留、该在logits空间操作时别提前转概率——很多看似玄学的问题会变得有迹可循。下次再看到文档里冒出logits你大概能会心一笑哦就是那个还没被翻译成概率的原始打分。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/30 18:16:25
自考论文写作工具对比:千笔与WPS AI功能解析
2026/10/30 17:39:56
基于ThinkPHP的学生宿舍管理系统:从能跑起来到敢交出去的完整落地路径
2026/10/30 17:21:10
impeccable:轻量级开发前合规断言工具
2026/10/30 19:38:45
【亲测可用】中国铁路网 SHP 矢量数据使用指南:从下载到落图的完整流程
2026/10/30 19:28:45
LeIsaac × Cosmos video2action 数据管线:如何用 1 条演示扩出大规模合成机器人视频动作
2026/10/30 19:28:45
【免费开源】开镜跟枪差半拍?PUBG罗技鼠标宏免费开放,3步导入
2026/10/30 19:23:44
2025年最新AI编程软件权威评测:新手入门必看,从0到1轻松学编程(TaoToken统一Key接入篇)
2026/10/30 19:23:44
Node构建JSON清单如何做最长连续失败段:用本地脚本建立可复核指标
2026/10/30 19:23:44
Node构建JSON清单如何做重复步骤执行计数:用本地脚本建立可复核指标
2026/10/30 0:03:44
OpenShell 完全定制指南:从安装到深度配置,打造高效 Windows 开始菜单
2026/10/30 0:03:44
Superpowers技能体系全解析:从Skills引入到安装的完整指南
2026/10/30 0:03:44
TensorFlow实现Weibull生存模型预测债券违约概率
2026/10/29 21:03:42
全国计算机二级C语言真题PDF高效刷题指南
2026/10/29 21:03:35
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/29 21:03:28
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/30 3:44:27
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/30 3:44:25
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/30 3:44:29
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)