1. 从“原始分数”到“概率”:logits到底是什么?
如果你刚开始接触深度学习做分类任务,可能会被一个词搞懵:logits。模型训练的时候,各种指标看着都挺好,一到实际预测,输出的东西怎么是一堆看起来毫无规律的、正负都有的数字?这玩意儿怎么就成了“猫”或者“狗”的预测结果?别急,这堆数字就是logits,理解它是你真正搞懂模型如何“思考”和“决策”的第一步。
简单来说,你可以把logits想象成一场考试后,老师给每个学生打的“原始卷面分”。这个分数没有经过任何处理,可能因为题目难度不同,有的学生得了150分,有的可能才30分,分数之间没有可比性,更不能直接说“150分的学生有100%的概率是优秀”。在神经网络里,尤其是分类任务的最后一层(通常是全连接层),模型会为每一个可能的类别(比如猫、狗、兔子)计算出一个这样的“原始分数”,这就是logits。它代表了模型对输入样本属于某个类别的“原始信心度”,分数越高,信心越强,但这个信心还没有被标准化,不能直接当作概率来用。
我刚开始用PyTorch做图像分类时,就踩过这个坑。当时我训练了一个10分类的模型,在验证集上准确率有92%,高兴坏了。然后我兴冲冲地打印出模型对一张猫图片的最终输出,看到的却是类似 [2.1, -1.3, 0.4, 5.8, ...] 这样的数组。我当时就愣住了,心想:“这5.8是啥?概率吗?可它比1大啊!这模型到底想说什么?” 后来才明白,我需要一个“转换器”,把这些原始的信心分数,变成我们人类能理解的、所有选项加起来等于100%的概率形式。这个关键的“转换器”,最常用的就是 softmax函数。
所以,logits是模型最“诚实”的原始输出,它尚未经过任何美化或归一化。理解logits到概率的转换,不仅仅是调用一个API那么简单,它关系到你如何解读模型的置信度、如何设计损失函数(比如直接使用logits的交叉熵损失),以及如何在生产环境中处理那些“模棱两可”的预测案例。接下来,我们就一层层剥开这个过程。
2. Softmax:将信心“标准化”为概率的神奇转换
现在我们知道logits是原始分了,那怎么把它变成我们熟悉的概率呢?这就轮到softmax函数登场了。你可以把它看作一个“标准化部门”或者“投票计票系统”,它的核心工作就两条:第一,确保所有类别的输出值都在0到1之间;第二,确保所有类别的输出值加起来等于1。这样一来,每个值就自然成了一个可以被解释为“概率”的数值了。
它的公式看起来可能有点唬人:softmax(z_i) = e^{z_i} / sum(e^{z_j})。别怕,我们拆开看。这里的 z_i 就是第i个类别的logits值。e^{z_i} 是对这个logits取指数,这个操作非常关键,因为它能把所有负数变成正数(因为指数结果永远大于0),并且会放大较大值之间的差距。分母 sum(e^{z_j}) 是对所有类别的指数结果求和,相当于一个“总信心值”。最后,每个类别的指数结果除以这个总和,就得到了它的“概率”。
我举个例子你就明白了。假设我们做一个三分类(苹果、香蕉、橘子),模型对某张图片输出的logits是 [2.0, 1.0, 0.1]。
- 第一步,取指数:
e^2.0 ≈ 7.39,e^1.0 ≈ 2.72,e^0.1 ≈ 1


2万+

被折叠的 条评论
为什么被折叠?



