LESSON 14 · 卷II 神经网络

Softmax:从得分到概率

先读懂原始得分,再把它变成概率分布;温度改变集中程度,不保证答案正确。

第 1 站

分类器的最后一层输出什么?

回到那台猜水果的机器。它最后一层给每种水果配了一个神经元——这一课先用苹果、香蕉、西瓜三种举例。 经过若干层 Wx + b 和 ReLU 之后,假设三个神经元的输出是:

[🍎 苹果: 2.1, 🍌 香蕉: −0.5, 🍉 西瓜: 1.8]

这三个数叫 logits(原始分数)。它们的大小可以比较——2.1 > 1.8 > −0.5, 说明网络认为「苹果」的可能性最高。但有两个问题:

  • 「苹果」的概率是多少?2.1 这个数字本身没有概率意义。
  • 三个数加起来等于 3.4,不等于 1。概率必须加起来等于 1。

我们需要把互斥类别的得分转换成概率。下一课从这组概率衡量预测代价;实际框架的交叉熵接口常直接接收 logits,内部完成稳定的转换。

最简单的想法:把三个数都除以它们的总和,这样不就加起来等于 1 了?试试看,有什么问题?
第 2 站

修补负数:先变成正数再归一化

直接除以总和不能把任意实数变成概率:总和可能为零,有正有负时可能得到负概率。即使偶然得到非负数,也不保证保留得分的排序和差距。

2.1 + 0.5 = 2.6
−0.5 + 0.5 = 0
1.8 + 0.5 = 2.3
总和 = 4.9
概率 = [2.6/4.9, 0/4.9, 2.3/4.9] ≈ [0.53, 0, 0.47]
⚠️ 遇到的拦路虎 · 方案局限

「加上 0.5」是因为最小值是 −0.5,我们选择了把它平移到 0。 但为什么必须是 0?如果把最小值平移到 1,结果就完全不同了: [3.1/6.9, 1/6.9, 2.8/6.9] ≈ [0.45, 0.14, 0.41]。概率的分布随着任意选择的平移量而改变——这不合理。 我们需要一种不依赖「平移量」的转换方法。

指数后归一化既保持排序,也取决于得分之间的差值;所有得分同时加上同一个常数,概率不变,并不意味着只保留名次。

第 3 站

指数函数:天然无负数

有一个函数对所有实数输出都是正数,而且不需要知道其他项是多少——就是指数函数 。 先看它长什么样:

香蕉 −0.5 → 0.61西瓜 1.8 → 6.05苹果 2.1 → 8.17−2−10120246810
y = eˣlogit xeˣ负数也落在 0 以上
图 14-1指数函数 :不管输入是正、是负、还是零,输出永远在 0 以上(曲线始终不碰横轴)。而且输入越大、输出涨得越快——这两条性质正是 Softmax 看中它的原因。

把三个 logit(苹果 2.1、香蕉 −0.5、西瓜 1.8)分别代进去,负数也变成了正数:

全部除以总和:

🍎 苹果:
🍌 香蕉:
🍉 西瓜:
三者之和 = 1.000 ✓

这就是 Softmax:对每个 logit 取 e 的指数,再整体归一化。 (第 09 课认识概率分布后,我们留下了一个问题——「把任意一组实数变成概率分布,正是 Softmax 的工作」。这一课就是来兑现承诺的。)

Logits(原始分数)苹果2.1香蕉−0.5西瓜1.8→Softmax概率分布苹果0.551香蕉0.041西瓜0.408Σ=1 ✓
图 14-2Softmax 把 logits 变成概率:所有值非负,和为 1。指数放大了原本的差距——苹果 2.1 比西瓜 1.8 只大一点,但概率大了 35%。

这正是第 11 课见过的那台机器的输出层——当时只说「softmax 把分数挤成概率」,现在你知道它在里面具体做了什么了。 下面把那台四种水果的机器再搬出来:转旋钮改变四个神经元的分数,看 softmax 如何把它们实时换算成一组加起来 = 100% 的概率:

🎛 四个旋钮 = 四个输入特征
尺寸大小0.50
小大
颜色0.50
偏绿偏红
酸甜度0.50
酸甜
水分0.50
干多汁
尺寸大小0.50颜色0.50酸甜度0.50水分0.50🍎2.4🍌2.2🍉1.4🍋2.1softmax分数→概率每个神经元给一种水果打分
机器觉得最像:🍎 苹果
🍎 苹果36%
🍌 香蕉27%
🍉 西瓜13%
🍋 柠檬24%
四个神经元各给一种水果打分(圆圈旁的数字),softmax 把四个分数挤成一组加起来 = 100% 的概率。试试把旋钮调到「大 + 多汁」,看西瓜怎么后来居上。
互动 14-Asoftmax 在四个水果神经元上的现场演算:每个分数先取 (消除负数),再整体归一化。把旋钮调到「大 + 多汁」,看西瓜的分数和概率一起被推高。
第 4 站

一个意外的发现:温度参数

指数函数有一个有趣的副效应:它放大了 logits 之间的差距。 2.1 比 1.8 大 17%,但 ——差距被扩大了 35%。 差距越大,最大值的概率越接近 1,其他值越接近 0。

这个「放大程度」是可以调节的——引入一个温度参数 ,把 logits 先除以 ,再做 Softmax:

苹果香蕉西瓜00.20.40.60.81
T=0.5 低温·果断T=1 标准T=2 高温·随机概率
图 14-3同一组 logits,三种温度下的概率分布。 时模型极度自信(几乎全押苹果); 时分布趋于均匀(更多随机性)。这就是 ChatGPT 里 temperature 参数的数学来源。

温度作用于 softmax(z/T):T 必须大于 0。降低温度让分布更集中,提高温度让它更平缓;T→0⁺ 时在最大得分上集中,T→∞ 时趋近均匀。生成内容还取决于采样策略,温度不能保证正确性或创造力。

数值不稳定

当某个 logit 是 1000 时, 超出浮点数上限(上溢出)。 解法:先把所有 logit 减去最大值再取指数——数学上等价(分子分母同乘 抵消),但数值上稳定。 这叫 log-sum-exp 技巧,PyTorch 的 F.cross_entropy 已经内置,直接传 logits 即可。

这里的「更自信」只指输出分布更集中。降低温度不会自动让事实更可靠,提高温度也不是创造力或幻觉的直接度量;它改变的是同一组得分对应的抽样分布。

第 5 站

输出方式取决于任务,不是所有答案都用 Softmax

隐藏层负责构造表示,输出层负责把表示变成任务需要的答案。它们不必使用同一种函数。水果四选一需要一组互斥类别概率;房价需要一个数;一张图片却可能同时有多个标签。

常见任务的输出与损失搭配
任务输出常见损失
回归:预测房价一个或多个连续数值,通常不接 SoftmaxMSE 等
二分类:是不是苹果一个 logit → Sigmoid二元交叉熵
多分类:水果四选一四个 logits → Softmax多类交叉熵
多标签:图片同时包含多个对象每个标签独立 logit → Sigmoid逐标签二元交叉熵
把边界说清楚

Softmax 让互斥类别竞争,总和为 1。独立标签并不互斥,不应强制所有标签概率加起来等于 1。实际训练常直接把 logits 交给数值稳定的交叉熵实现,不需要先手动求概率再取对数。

照片里可以同时有杯子和书,为什么四选一的输出方式不适合它?
第 6 站

总结

💡 章节速记 · 本课核心

Softmax 对得分取指数并归一化,得到正数且总和为 1 的分布。温度调节得分差异带来的集中程度,而不是事实可靠程度。

💡 用大白话梳理:这一课的核心直觉

  • Logits:分类网络最后一层的原始分数,有正有负,不是概率。
  • 直接归一化的问题:有负数时会出现负概率;平移量任意导致结果不稳定。
  • Softmax:eᶻⁱ / Σeᶻʲ,先取指数消除负数,再归一化;差距被放大。
  • 温度参数 T:Softmax(z/T);T 越小越果断,T 越大越随机。
小测验

学习小测验

动动脑筋:核心直觉小测验(选出你的答案后点击「提交」,即可查看生动通俗的详细解析)

Q1Softmax 要解决的核心问题是:把一组任意实数的 logits 变成概率。它分两步,正确的是?
Q2关于温度参数 T,哪种描述准确?