神经网络之激活函数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, ..., K softmax(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}J∈RK×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=1∑Kyilog(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_i ∂zi∂L=pi−yi

这意味着我们不必显式计算 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)=∑jezj−max(z)ezi−max(z)

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


🧠 七、为什么不用 Sigmoid?

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

属性 Softmax Sigmoid
输出总和是否为 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 0T→0:输出趋近于 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 是将向量"打分"转化为概率分布的函数,它以指数放大差异、总和归一为原则,在多类互斥分类任务中提供了可训练、可解释、可优化的输出机制。

相关推荐
无风听海2 小时前
神经网络之理解温度对Softmax的影响
人工智能·深度学习
关关长语2 小时前
(三) Dotnet为AI控制台对话添加依赖注入等集成
人工智能·ai·ai dotnet
格林威3 小时前
不同光谱的工业相机有哪些?能做什么?
图像处理·人工智能·深度学习·数码相机·计算机视觉·视觉检测
CiLerLinux3 小时前
第三十八章 ESP32S3 SPIFFS 实验
图像处理·人工智能·单片机·嵌入式硬件
苏苏susuus3 小时前
NLP:迁移学习基础讲解
人工智能·自然语言处理·迁移学习
SEO-狼术3 小时前
Oxygen AI Positron Assistant Enterprise
人工智能·.net
dog2503 小时前
时延抖动的物理本质
人工智能·算法·机器学习
cpuimage3 小时前
深度学习优化器算法巧思速览
深度学习·优化器·adam
文火冰糖的硅基工坊4 小时前
[人工智能-综述-18]:AI重构千行百业的技术架构
大数据·人工智能·重构·架构·系统架构·制造·产业链