资讯动态

从Logits到决策:理解Softmax与Argmax在模型输出中的核心作用

发布时间:2026/8/15 12:44:40 来源:尧图企业网站定制
1. 从“可能性”到“答案”一个模型从业者的认知重塑“我从来只给可能性答案是你们翻译的。”这句话如果从一个AI模型的口中说出听起来有点哲学甚至有点傲慢。但如果你像我一样在图像分类、自然语言处理这些领域里跟ImageNet、ResNet、AlexNet、Softmax、Logits这些老朋友打了十几年交道你会对这句话有完全不同的感受。这不是模型的傲慢而是对模型工作本质最精炼的总结也是很多初学者甚至一些有经验的从业者最容易产生误解的地方。我们总以为模型在“识别”在“判断”在“给出答案”。但真相是模型只是在做一道极其复杂的数学题然后交出一份满是数字的“可能性”答卷。而我们作为模型的构建者和使用者才是那个拿着这份答卷根据我们设定的规则比如argmax去“翻译”出最终答案的人。最近行业里很热闹从DeepSeek模型单日处理8万亿token的新闻到各种开源模型如Claude Code的质变讨论再到每个人都在琢磨怎么用Ollama、LM Studio把模型部署到本地或是如何从零训练一个超分辨率模型。热度背后我发现一个核心的认知偏差始终存在我们过于关注模型的“输出结果”而忽略了模型产生这个结果的“中间过程”——也就是从Logits到最终决策的那段“翻译”之旅。这段旅程恰恰是理解模型行为、进行模型调试、甚至实现模型创新的关键。所以这篇内容我想彻底抛开那些“手把手调包”的教程我们回到最根本的地方。就以经典的ImageNet图像分类任务为舞台以Softmax和argmax这对黄金搭档为解剖对象聊聊模型究竟给出了什么而我们又“翻译”出了什么。无论你是正在困惑于“我的模型为什么总把猫认成狗”的新手还是想要更精细控制模型输出比如获取Top-3结果而不仅仅是Top-1的老兵理解这个过程都至关重要。你会发现很多高级技巧比如模型校准、集成学习、不确定性估计其根源都埋在这里。2. 舞台中央ImageNet与分类任务的经典范式在我们深入“可能性”与“答案”的转换之前必须先把舞台搭好。这个舞台在过去十多年里定义了计算机视觉的竞赛规则也深刻影响了后续所有基于深度学习的分类模型它就是ImageNet。2.1 ImageNet不止是一个数据集更是一个“考题”标准提到ImageNet很多人的第一反应是那个包含1400多万张图片、2万多个类别的庞大数据集。但这只是表象。ImageNet更核心的价值在于它确立了一个清晰、统一、极具挑战性的“考题”给定一张图片从1000个固定的类别中选出最正确的一个。这个“考题”的设计隐含了几个关键约束这些约束直接决定了模型输出层的设计互斥性一张图片属于且仅属于1000个类别中的一个。这意味着模型输出的“可能性”总和必须为1因为图片不可能同时是“虎斑猫”和“吉娃娃”。完备性任何输入图片都必然落在这1000个类别之中即使很牵强。这要求模型必须为每一个类别都分配一个“可能性”分数哪怕分数极低。确定性输出竞赛规则要求提交一个且仅一个类别标签作为答案。这催生了“赢家通吃”的决策规则——我们只需要可能性最高的那一个。正是这些约束让Softmax函数从众多选择中脱颖而出成为处理这类多类别单标签分类任务输出层的“标准答案”。它完美地将模型原始的、无界的、可正可负的“证据分数”Logits映射成一个符合概率公理和为1每个值在0到1之间的“可能性分布”。2.2 模型的“内心戏”从像素到Logits的漫长旅程现在让我们跟随一张图片进入模型。以经典的AlexNet或ResNet为例输入一张224x224的RGB图片模型首先看到的是一堆数字像素值。经过层层卷积、激活、池化操作空间信息被逐步抽象语义特征被逐渐提取。在网络的最后通常会有一个全连接层比如ResNet-50最后的那个1000维的fc层。这一层的作用可以理解为为每个类别计算一个“原始得分”。这个“原始得分”就是Logits。它是一个向量长度等于类别数ImageNet是1000。每个数值的大小表示模型认为输入图片属于对应类别的“证据”强弱。注意Logits值没有范围限制可以是很大的正数也可以是负数。一个很大的正Logit意味着模型找到了非常支持该类别的特征一个负的Logits则意味着模型找到了反对该类别的证据。这里有一个至关重要的理解到此为止模型并没有说“这是猫”。它只是给出了1000个数字告诉你它认为图片像“非洲象”、“遥控器”、“虎斑猫”……的“证据强度”分别是多少。这就是模型提供的“可能性”的原始形态——一份未经标准化的、粗糙的“证据清单”。注意很多人容易把最后一个全连接层的输出直接当作“概率”这是错误的。在引入Softmax之前这些输出值Logits之间没有可比性它们的绝对大小没有概率意义。3. Softmax将“证据”翻译成“可能性”的标准化官Logits是模型最直接的“心声”但这心声过于粗糙无法直接用于决策和比较。我们需要一个翻译官把这份“证据清单”翻译成一份大家都能看懂的、标准化的“可能性报告”。这个翻译官就是Softmax函数。3.1 Softmax的数学仪式一场温和的“优胜劣汰”Softmax函数的公式对于每个类别i的预测概率P(i)是P(i) exp(Logits_i) / Σ(exp(Logits_j)) 其中求和j遍历所有类别。这个公式干了三件关键事指数化exp这是最关键的一步。它对所有Logits取指数。指数函数的特性是对正数放大对负数压缩使其接近0但大于0。这确保了所有输入经过exp后都变成正数为后续的概率化做准备。更重要的是它放大了大数和小数之间的差距。假设两个Logits分别是2.0和1.0相差1。经过exp后变成约7.39和2.72比值约为2.7倍差距被拉大了。求和Σ将所有指数化后的值加起来得到一个归一化分母。归一化除法每个指数化后的值除以总和得到的结果就是一个介于0到1之间的数且所有类别的结果之和为1。这就是我们最终看到的“概率”更准确地说是模型给出的“可能性”分数。为什么是Softmax而不是别的你可以把它想象成一场投票。每个类别候选人都有自己的支持者Logits。直接数支持者人数用Logits值不行因为支持者的“嗓门”大小不一样数值范围无界。Softmax的做法是先让每个支持者都用扩音器exp喊话嗓门大的声音会变得巨大嗓门小的声音也不会被完全淹没因为exp(x)永远大于0。然后统计整个会场的总音量求和最后看每个候选人的支持者制造的音量占总音量的比例。这个比例就是Softmax输出的“可能性”。这种“温和”的特性所有输出为正且和为1使其非常适合表示一个概率分布。与之相对的是“Hardmax”即argmax的直接应用那是一种非此即彼的粗暴选择。3.2 一个具体的计算例子猫、狗与汽车假设我们有一个3分类任务类别0猫 类别1狗 类别2汽车模型最后一层输出的Logits向量为[2.0, 1.0, -1.0]。模型给出的“证据”模型认为图片像猫的证据最强2.0像狗的证据次之1.0像汽车的证据是负的-1.0意味着模型认为有特征反对它是汽车。Softmax翻译过程exp(2.0) ≈ 7.389exp(1.0) ≈ 2.718exp(-1.0) ≈ 0.368总和 7.389 2.718 0.368 10.475P(猫) 7.389 / 10.475 ≈ 0.705P(狗) 2.718 / 10.475 ≈ 0.260P(汽车) 0.368 / 10.475 ≈ 0.035翻译后的“可能性”报告模型给出了一份正式报告——该图片有70.5%的可能性是猫26.0%的可能性是狗3.5%的可能性是汽车。注意模型仍然没有说“这是猫”。它只是提供了一份量化的可能性评估。实操心得在训练模型时我们计算损失如交叉熵损失使用的是Softmax之后的概率分布而不是原始的Logits。这是因为损失函数需要概率输入。但在模型推理Inference时出于效率考虑我们经常直接使用Logits因为Softmax是一个单调函数取完Softmax再找最大值和直接找Logits的最大值得到的类别索引argmax的结果是一样的。这节省了计算exp和归一化的开销。很多部署框架默认输出Logits原因就在于此。4. Argmax从“可能性报告”到“最终答案”的裁决者模型通过Softmax给出了一份完美的“可能性报告”但我们的任务比如ImageNet竞赛要求一个确定的答案。这时候就需要一个裁决者来拍板。这个裁决者就是argmax。4.1 Argmax的简单与绝对Argmax的操作简单到极致它接收一个向量比如Softmax输出的概率向量然后返回这个向量中值最大的那个元素所在的索引位置。沿用上面的例子 Softmax输出概率向量[0.705, 0.260, 0.035]。 Argmax操作找到最大值0.705它的索引是0。 最终答案类别0即“猫”。裁决完成。模型提供的70.5%的可能性被我们“翻译”成了100%肯定的答案“猫”。另外26%的“狗”可能性和3.5%的“汽车”可能性在这个决策规则下被完全忽略了。4.2 “翻译”过程中的信息丢失与风险这就是标题“答案是你们翻译的”所指向的核心。当我们使用argmax时我们进行了一次信息的有损压缩丢失了不确定性信息模型明明告诉我们它对于“猫”的判断也只有70.5%的把握还有近30%的可能性是别的。但argmax给出的答案看起来是100%确定。丢失了备选信息“狗”以26%的概率位居第二这是一个很强的备选。但在很多简单应用场景下这个信息被丢弃了。放大了模型的错误如果正确的标签是“狗”而模型给出的概率是[0.49, 0.51, 0.00]argmax会错误地选择“猫”0.49 vs 0.51非常接近。模型其实表达了很强的混淆和不确定性两者几乎五五开但argmax的裁决让它犯了一个“看似明确”的错误。这种信息丢失在实际应用中会带来很多问题盲目信任用户看到系统输出“猫”会认为系统非常肯定从而在关键应用如医疗诊断、自动驾驶中过度依赖而忽略了系统其实信心不足。调试困难当模型出错时如果你只看到最终标签你无法知道它是“毫无头绪地瞎猜”还是“在两个相似选项中纠结”。后者提示你可能需要更多区分这两类的训练数据。无法实现高级功能像“显示Top-3预测结果”、“当最高概率低于阈值时拒绝回答”、“根据概率分布计算预测置信度”等功能都需要完整的概率分布信息而非仅仅一个argmax索引。5. 超越Argmax更聪明的“翻译”策略理解了“可能性”与“答案”的区别我们就不再是argmax的奴隶。我们可以根据实际应用场景设计更智能的“翻译”策略充分利用模型提供的丰富信息。5.1 策略一Top-K预测与阈值拒绝这是最简单直接的改进。Top-K预测不只看第一名argmax而是看概率最高的前K个类别及其概率值。这在搜索引擎、推荐系统、交互式系统中非常有用。例如一个植物识别APP可以显示“最可能是玫瑰85%也可能是月季12%”用户体验会好很多。实现对Softmax输出概率向量进行排序取前K个。阈值拒绝设定一个置信度阈值比如0.8。当最高概率低于这个阈值时系统不给出确定答案而是返回“不确定”或“需要人工复核”。这在风控、内容审核等高风险场景至关重要。实现if max(probabilities) threshold: return UNCERTAIN else: return argmax(probabilities)5.2 策略二校准与不确定性量化模型输出的“概率”并不总是真实的置信度。一个输出0.9概率的模型可能在100次类似情况中只对了80次这就是未校准的。我们可以使用温度缩放Temperature Scaling等后处理技术来校准模型。原理在Softmax函数中引入一个温度参数TP(i) exp(Logits_i / T) / Σ(exp(Logits_j / T))。T1就是标准Softmax。T1概率分布变得更“平缓”不确定性增加。T1概率分布变得更“尖锐”模型显得更自信。通过在验证集上优化T使得模型的预测概率与其实际正确率相匹配例如所有被预测为0.9的样本其真实准确率也应在0.9左右。5.3 策略三利用概率分布进行集成与决策在更复杂的系统中模型的概率输出可以作为下游决策的输入。模型集成多个模型对同一输入进行预测得到多个概率分布。我们可以对这些分布进行平均软投票得到更稳健、更校准的集成概率然后再用argmax或其他规则决策。这比直接对硬标签argmax结果进行投票硬投票通常效果更好。风险敏感决策在不同的错误成本不同的场景下可以根据概率分布进行决策。例如在垃圾邮件分类中将正常邮件误判为垃圾邮件误杀的成本远高于将垃圾邮件误判为正常邮件漏杀。我们可以在决策时不仅仅看P(垃圾邮件)是否最大而是看P(垃圾邮件)是否大于一个经过成本调整的阈值。6. 从理论到实践在真实项目中操控“可能性”概念讲完了我们来看看在具体的模型训练、评估和部署中如何体现这种认知。6.1 训练阶段损失函数在优化什么我们最常用的分类损失函数是交叉熵损失。它的输入是模型的预测概率分布Softmax输出和真实标签的one-hot编码分布。Loss - Σ (真实标签_i * log(预测概率_i))由于真实标签是one-hot的正确类别为1其余为0公式简化为Loss -log(预测概率_正确类别)。它的本质是惩罚模型对正确类别的“可能性”估计过低。如果正确类别的预测概率是1.0损失为0-log(1)0。如果预测概率是0.5损失约为0.69。如果预测概率很低比如0.1损失会很大2.3。所以整个训练过程就是通过调整模型参数那些卷积核的权重使得模型对于训练图片能输出一个概率分布其中正确类别的概率尽可能接近1。模型在学习如何将“证据”Logits更清晰地偏向正确的方向。6.2 评估阶段除了准确率我们还看什么准确率Accuracy就是argmax的准确率。但作为一个资深从业者不能只看它。混淆矩阵Confusion Matrix查看模型具体在哪些类别之间容易混淆。这能直接反映Softmax概率分布中“第二名”常犯的错误。精确率Precision、召回率Recall与F1分数特别是对于类别不均衡的数据集模型可能会给多数类分配很高的概率即使Logits不高但经过Softmax相对比较后也可能最高导致准确率虚高。这些指标能更好地衡量模型对每个类的识别能力。ROC曲线与AUC通过调整分类阈值即不直接用argmax而是看P(正类) threshold绘制出的曲线能综合评价模型在不同阈值下的表现这完全依赖于模型输出的概率值。6.3 部署与推理阶段输出什么如何优化这是分歧最大的地方。输出Logits还是Probabilities输出Logits更灵活后续可以应用自定义的温度缩放、不同的Softmax变体或者直接用于一些需要原始分数的损失计算。计算效率也稍高。这是更推荐的做法尤其是在提供API服务时。输出Probabilities对终端用户更友好直观。但失去了灵活性且如果用户需要Logits进行二次处理就需要重新推理。优化技巧如前所述在只需要Top-1标签的推理中可以省去Softmax步骤直接在Logits上做argmax。在需要Top-K概率的场景也可以在Logits上通过topk操作找到前K大的Logits索引和值然后只对这K个值进行Softmax归一化这比全量Softmax更高效。7. 避坑指南那些年我们“翻译”错的答案在我多年的项目经验里因为误解“可能性”和“答案”而踩的坑不计其数。这里分享几个典型案例坑1将验证集准确率等同于模型置信度。曾经在一个工业缺陷检测项目里模型在验证集上达到了99.5%的准确率。我们兴高采烈地部署上线结果在实际流水线上误检率很高。排查后发现验证集和实际数据分布有细微差异光照、背景。模型在实际数据上输出的概率分布变得非常平缓最高概率常常只有0.6左右但我们后端的决策逻辑依然是简单的argmax。教训上线前一定要在实际数据流上监控模型预测概率的分布情况如平均最高概率、熵值而不仅仅是看最终分类结果的对错。坑2忽略“第二选择”导致的产品逻辑缺陷。做一个动物识别APP初期只返回argmax的结果。用户拍了一张“狼”的照片模型因为训练数据中“狼”的样本少将其识别为“哈士奇”概率0.48和“狼”概率0.45。系统只返回了“哈士奇”。用户是动物专家一看就认为APP太不专业直接卸载。改进我们加入了Top-2显示功能并当第一、第二概率相差小于0.1时提示“可能是A或B”。用户体验和口碑立刻提升。坑3在模型集成时对硬标签进行投票。早期做比赛时训了5个不同的模型每个模型对测试图片输出一个标签然后5个模型投票决定最终标签。效果有提升但不如预期。后来改为软投票每个模型输出概率分布对5个概率分布求平均再对平均后的分布取argmax。效果显著提升。因为软投票考虑了每个模型的“不确定性”一个模型虽然选了A但如果它给A的概率只有0.51给B的概率是0.49那么它在软投票中对A的“贡献”就只有0.51而不是硬投票中的“完整一票”。坑4未校准的概率误导了风险评估。在一个金融风控模型中我们使用模型输出的“欺诈概率”作为风险评分。直接使用Softmax输出的概率发现很多明显是欺诈的案例模型给出的概率也只有0.7左右导致风险阈值难以设定。我们使用了温度缩放在保留的验证集上进行校准。校准后模型输出的概率值变得更加“诚实”高风险样本的概率集中到了0.9以上低风险样本的概率则降到0.1以下使得基于阈值的决策变得非常清晰可靠。理解模型只提供“可能性”而答案需要我们去“翻译”这不仅仅是技术细节更是一种思维方式。它让我们对模型保持一种健康的审视态度不再将其视为黑箱神谕而是看作一个提供不确定性证据的合作伙伴。这种认知能帮助我们在数据准备、模型训练、评估调试、产品设计和风险控制的每一个环节做出更明智的决策。下一次当你调用model.predict()时不妨多想一步我拿到的是经过翻译的“答案”还是原始的“可能性”我是否需要更丰富的信息来做更负责的决策这才是与模型共事的正确姿势。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价