神经网络之激活函数Softmax - 教程

一、设计动机:Softmax 为什么存在?

Softmax 的设计核心思想是:

将任意实数向量映射为一个概率分布,使得所有元素都为正,并总和为 1。

背后的需求:

在多分类任务中,神经网络输出一个向量(logits),每个分量表示模型对某个类别的“评分”或“偏好”。
但我们希望模型输出的是每个类别的概率,因此得一个转换机制:

从打分→概率 \text{从打分} \rightarrow \text{概率}从打分概率

这个“打分转概率”的函数。就是Softmax 就


二、数学定义与形式

设输出层的未归一化向量为:

z=[z1,z2,...,zK] \mathbf{z} = [z_1, z_2, ..., z_K]z=[z1,z2,...,zK]

Softmax 输出:

softmax(zi)=ezi∑j=1Kezjfor i=1,...,K \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} \quad \text{for } i = 1, ..., Ksoftmax(zi)=j=1Kezjezifor i=1,...,K

✅ 特性总结:

特性描述
非负性所有输出 ∈(0,1)\in (0, 1)(0,1)
归一性所有输出总和为 1,构成有效的概率分布
可导性对每个输入 ziz_izi都可微,有封闭形式的导数

三、Softmax 的概率解释

Softmax 实际上来源于统计物理中的Boltzmann分布,在信息论中可解释为:

给定一组能量值ziz_izi,我们希望获得每个状态被“选中”的概率。能量越低的状态越可能被选中。

在机器学习中:

  • ziz_izi可以看作是某个类别的“置信评分”;
  • Softmax 将这些评分转化为概率,使得高评分的类别对应更高概率。

它是**最大熵原理(Maximum Entropy Principle)**在多类输出障碍中的自然选择:
在满足均值约束下,Softmax 是熵最大的概率分布。


四、Softmax 的导数与梯度结构

训练中的核心之一。就是反向传播中,Softmax 的梯度结构

设:

si=softmax(zi) s_i = \text{softmax}(z_i)si=softmax(zi)

Softmax 的偏导数:

$$
\frac{\partial s_i}{\partial z_j} =
\begin{cases}
s_i (1 - s_i), & \text{if } i = j \

  • s_i s_j, & \text{if } i \ne j
    \end{cases}
    $$

这构成一个 Jacobian 矩阵J∈RK×K\mathbf{J} \in \mathbb{R}^{K \times K}JRK×K,其结构具有特殊性:

  • 对角线为正(表示每个输出对自身的敏感性);
  • 非对角线为负(类别之间具有竞争关系)。

此种“竞争机制”使得 Softmax 能捕捉类别之间的相对关系。


五、Softmax 与交叉熵的联合优化

通常,我们不单独使用 Softmax,而是配合交叉熵损失函数(Cross-Entropy Loss)一起应用。这有数学上的简洁性和数值稳定性的优势。

给定:

  • 模型输出(logits):z\mathbf{z}z
  • Softmax 输出概率分布:p=softmax(z)\mathbf{p} = \text{softmax}(\mathbf{z})p=softmax(z)
  • 真实标签 one-hot 向量:y\mathbf{y}y

交叉熵损失为:

L=−∑i=1Kyilog⁡(pi) \mathcal{L} = - \sum_{i=1}^K y_i \log(p_i)L=i=1Kyilog(pi)

由于 yiy_iyi是 one-hot 的,这简化为:

L=−log⁡(pc)(真实类别索引为 c) \mathcal{L} = -\log(p_{c}) \quad \text{(真实类别索引为 } c \text{)}L=log(pc)(真实类别索引为c

联合梯度优势:

将 Softmax 和交叉熵一起考虑,其组合的梯度很简洁:

∂L∂zi=pi−yi \frac{\partial \mathcal{L}}{\partial z_i} = p_i - y_iziL=piyi

这意味着我们不必显式计算 Softmax 和 log 的导数 —— 框架如 PyTorch、TensorFlow 都进行了内建优化(nn.CrossEntropyLoss() 直接接收 logits)。


六、数值稳定性与实现技巧

由于 ezie^{z_i}ezi的快速增长,Softmax 在实践中容易出现 overflow,导致 NaN 或 Inf。
为了处理这个挑战,常用如下数值稳定技巧:

✅ 稳定 Softmax:

softmax(zi)=ezi−max⁡(z)∑jezj−max⁡(z) \text{softmax}(z_i) = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_j e^{z_j - \max(\mathbf{z})}}softmax(zi)=jezjmax(z)ezimax(z)

比值),但能显著减小数值范围,提高稳定性。就是减去最大值不会改变输出结果(因为


七、为什么不用 Sigmoid?

Softmax 和 Sigmoid 有一定相似性,都是将输出映射为概率,但用途不同:

属性SoftmaxSigmoid
输出总和是否为 1✅ 是❌ 否
类别是否互斥✅ 是(多类选一)❌ 否(可多标签)
应用层多分类输出层二分类输出,或中间层

当任务是 “从多个类中选一个”(如图像分类),启用 Softmax;
当任务是 “每个类都可能属于或不属于”(如多标签任务),使用 Sigmoid。


八、进阶应用:温度 Softmax(Softmax with Temperature)

引入一个温度参数T>0T > 0T>0

softmaxT(zi)=ezi/T∑jezj/T \text{softmax}_T(z_i) = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}}softmaxT(zi)=jezj/Tezi/T

  • T→0T \to 0T0:输出趋近于 one-hot(更确定);
  • T→∞T \to \inftyT:输出变得平滑(接近均匀分布);
  • 用于控制输出的“确定性”与“探索性”之间的权衡。

在**模型蒸馏(knowledge distillation)**中,常使用T>1T > 1T>1来提取教师模型的“软标签”。


九、Softmax 的局限性

虽然强大,但 Softmax 并非完美:

  1. 对类别关系不建模:无法表达“类别之间相似性”;
  2. 输出非稀疏:即使概率接近 0,也不会真正为 0;
  3. 对异常值敏感:logits 受极端输入影响较大;
  4. 类别数多时计算成本高(如词汇量大的语言模型);

替代方案示例:

  • Sparsemax:产生稀疏概率,部分类别概率为 0
  • Gumbel-Softmax:可微的 one-hot 近似,用于强化学习或离散选择
  • Hierarchical Softmax:减少大量类别下的计算复杂度

✅ 十、一句话总结

Softmax 是将向量“打分”转化为概率分布的函数,它以指数放大差异、总和归一为原则,在多类互斥分类任务中供应了可训练、可解释、可优化的输出机制。

posted on 2025-10-22 13:18  slgkaifa  阅读(9)  评论(0)    收藏  举报

导航