参数设置
重置
正确类别固定为 c = 1("类别 1")。one-hot 标签为 y = (1, 0, 0)。
概率分布与温度的影响
上半=当前 T 下 P(class i)(绿=正确类别,蓝=其他)/下半=T=0.5, 1, 2, 5 下 P 的对比/右下=损失与预测类别
理论与主要公式
Softmax 将实数向量 z 变为概率分布 p;交叉熵衡量该预测与 one-hot 标签 y 之间的距离。
带温度 T 的 Softmax。先将每个对数几率除以 T,再取指数并按和归一化:
$$p_i = \frac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}$$
交叉熵损失。y 为 one-hot 标签(仅正确类别 c 为 1):
$$L = -\sum_{i} y_i \log(p_i) = -\log(p_c)$$
数值稳定化(log-sum-exp)。Softmax 对常数平移不变,因此先减去最大值再求 exp:
$$p_i = \frac{\exp((z_i - z_{\max}) / T)}{\sum_{j} \exp((z_j - z_{\max}) / T)}$$
T 越小分布越锐(集中于 argmax),T 越大越接近均匀分布。这正是知识蒸馏中所利用的关键性质。
Softmax 与交叉熵损失模拟器是什么
🙋
听说分类模型最后都要过一层"Softmax",它到底在做什么?
🎓
简单说,Softmax 把"分数(logits)"变成"概率"。在上面这个模拟器里,z_1=2, z_2=1, z_3=0 对应的概率正好是 0.665, 0.245, 0.090,加起来恰好为 1。做法就是对每个分数取指数让它变正,再除以总和归一化。妙处在于,指数会把分数之间的差异以指数方式放大。
🎓
它衡量预测概率与"真实标签"之间的差距。设正确类别为 c,损失就是 L = -log(p_c)。现在正确类别是 C1、p_1 = 0.665,所以 L ≈ 0.408。p_c 接近 1 时 L→0;自信地预测错误,p_c=0.01 时 L→4.6——它特别"狠地"惩罚那种自信地犯错的情况。
🙋
拖动温度 T 滑块时,所有概率都一起在变。T=5 时它们都接近 0.3 左右。
🎓
观察得很敏锐。T 是在送入 Softmax 之前用来除以每个对数几率的参数。T 大时分量之间的差异缩小,趋向均匀分布;T 小时差异被放大,概率集中到最大分量上。下面这张图把 T=0.5, 1, 2, 5 并排画出来——可以对比着看。在实际工程里,"知识蒸馏"就是用较大的 T,让学生模型学到教师分布的"形状"。
🎓
问得很到位。当 z=1000 时 exp(1000) 会溢出到无穷大。所以实现上的标准做法是"先从所有对数几率中减去最大值再做 exp"。Softmax 对常数平移不变,因此结果不变,而最大分量变成 exp(0)=1,绝不会溢出。这就是 log-sum-exp 技巧。这个模拟器内部也是这样做的,所以即使把 z 调到 5(上界)也不会崩。可以把滑块拉到两端试试。
常见问题
温度 T 趋于零时概率会如何?
在 T→0 的极限下,概率几乎全部集中到对数几率最大的类别上,其他趋于零(hard 分布)。在 z_1=2, z_2=1, z_3=0、T=0.1 下,p_1 基本上等于 1。反之,T→∞ 时所有类别的概率趋于相等;三分类时即 1/3 ≈ 0.333(soft 分布)。可以说 T 是直接调节"分布锐度"的旋钮。
在知识蒸馏中如何使用温度?
Hinton 等人提出的知识蒸馏中,教师与学生都使用较大的 T(例如 T=4 到 10)输出 Softmax,让学生匹配教师分布的"形状"。T=1 时几乎所有质量都集中在最优类别上,信息量贫乏;T 大时次大类别的概率等"教师学到的类别之间的相似度"才会显现。推理时把 T 复位为 1。
什么是标签平滑(label smoothing)?
一种正则化方法:将"仅正确类别为 1.0 的 one-hot 标签"改为,例如正确类别为 0.9、其余 0.1 在其他类别间均匀分配。通过在 L = -Σ y_i log(p_i) 中平滑 y,可以避免模型变得过度自信。一般会改善泛化与校准性,是图像分类、语音识别等的标准技巧。
为何 log-sum-exp 数值稳定化如此重要?
对数几率过大时 exp(z) 在双精度下会溢出(z≈709 时变为 +Inf),过小时下溢为 0。实现中改用 p_i = exp(z_i − max(z)) / Σ exp(z_j − max(z))。由于 Softmax 对常数平移不变,结果一致,且最大分量变为 exp(0)=1,数值稳定。PyTorch 与 TensorFlow 的 log_softmax 内部正是这样实现的。
实际应用
图像分类与目标检测: ResNet、ViT 等图像分类模型的最后一层输出 Softmax 概率,并以交叉熵损失训练。在 ImageNet(1000 类)上,z 是 1000 维向量,输出为每个类别的概率。目标检测(YOLO、Faster R-CNN)中,对每个候选框的类别预测也使用同样的框架。
语言模型与机器翻译: GPT、BERT 等大语言模型在每个位置输出"词表大小维度的对数几率",再用 Softmax 得到下一个 token 的分布。训练时以正确 token 的 -log p_c 为损失,推理时用温度 T 控制"采样的多样性"(T 大则多样,T 小则更确定)。ChatGPT 的 "temperature" 设置正是这个 T。
知识蒸馏(模型压缩): 让小型学生模型模仿大型教师模型在高温下的 Softmax 分布。BERT → DistilBERT、图像分类的量化模型等,蒸馏在面向边缘部署的模型轻量化中被广泛使用。关键在于"提高温度":T=1 时信息会丢失。
强化学习与策略网络: 策略梯度方法(REINFORCE、PPO)通过 Softmax 输出动作选择概率。温度大偏向探索,小偏向利用,有些实现会在训练中调度 T。AlphaGo 的 MCTS 也采用了类似的软选择规则。
常见误解与注意事项
最常见的误解是"无条件地把 Softmax 输出当作真实的概率" 。深度模型的 Softmax 输出虽然满足概率的数学性质(非负、求和为 1),但并不一定"校准良好"。尤其是现代深度神经网络容易"过度自信"——即使预测 p=0.99,实际正确率可能只有 80% 左右。在医疗诊断、自动驾驶等对安全性要求高的场景中,会用 temperature scaling 等事后校准方法来修正。
其次常见的是"以为交叉熵损失可以像 MSE(均方误差)一样使用" 。交叉熵以概率分布为前提,必须输入"已归一化的概率"才有意义。把未经 Softmax 的原始对数几率直接代入 -y log z,会得到 NaN 或负值而崩溃。PyTorch 的 nn.CrossEntropyLoss 接受原始对数几率(内部计算 log_softmax),nn.NLLLoss 则需要 log 概率——一定要先弄清楚每个函数的输入约定。
最后,"以为温度 T 是能提高模型精度的魔法参数" 同样危险。训练时改变 T 只会改变损失函数的形状,推理时以 T=1 评估的精度本质上不会改变。T 真正发挥作用的场景是"在蒸馏中传递教师分布"、"在生成模型中控制采样多样性"、"对分类不确定性进行校准"等需要利用概率分布"形状"本身的任务。请在模拟器上拖动 T,观察什么在变、什么不变——理解这个区分才是关键。