Softmax 函数全面而详细的解读,原理、图像、应用 - 详解
2025-11-15 20:18 tlnshuju 阅读(0) 评论(0) 收藏 举报1. 什么是 Softmax?—— 直观理解
想象一个场景:你训练了一个模型来识别图片中的动物,模型最终输出了三个原始分数(称为Logits),分别对应“猫”、“狗”和“兔子”,数值为 [3.0, 1.0, 0.2]。
猫吗?大家需要一种方法,将这些就是这些数字本身很难解释。它们代表可能性吗?3.0 是 0.2 的 15 倍,因而肯定任意实数的分数转化为一个概率分布。
概率分布需要满足两个条件:
- 每个概率值都在0 到 1 之间。
- 所有概率之和等于 1。
Softmax 正是搞定这个转换的数学函数。它接收一组任意实数值的向量,并将其压缩到 (0, 1) 区间内,同时保证所有输出值的和为 1。
对于上面的例子 [3.0, 1.0, 0.2],应用 Softmax 后,我们可能会得到 [0.84, 0.11, 0.05]。
这意味着:
- 图片是猫的概率为84%
- 图片是狗的概率为11%
- 图片是兔子的概率为5%
这个结果就非常直观且易于理解了。
2. 原理与数学公式
公式
给定一个输入向量z= [z₁, z₂, …, zₙ],其中 zᵢ 是第 i 个类别的 Logit 值,Softmax 的计算公式为:
σ(zi)=ezi∑j=1nezjfor i=1,2,…,n \sigma(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}} \quad \text{for } i = 1, 2, \dots, nσ(zi)=∑j=1nezjezifor i=1,2,…,n
其中:
- $\sigma(z_i) $是第 i 个类别的输出概率。
- ezie^{z_i}ezi是对第 i 个 Logit 取指数,确保结果为正数。
- ∑j=1nezj\sum_{j=1}^{n} e^{z_j}∑j=1nezj是所有类别指数值的总和,起到归一化的作用,确保所有概率之和为 1。
计算过程详解(以 [3.0, 1.0, 0.2] 为例)
计算指数(Exponentiate):对每个 Logit 计算 (e^{z_i})。
- e3.0≈20.0855e^{3.0} ≈ 20.0855e3.0≈20.0855
- e1.0≈2.7183e^{1.0} ≈ 2.7183e1.0≈2.7183
- e0.2≈1.2214e^{0.2} ≈ 1.2214e0.2≈1.2214
计算指数和(Sum):
- (总和 = 20.0855 + 2.7183 + 1.2214 ≈ 24.0252)
归一化(Normalize):将每个指数值除以总和,得到概率。
- P(猫)=20.0855/24.0252≈0.836P(猫) = 20.0855 / 24.0252 ≈ 0.836P(猫)=20.0855/24.0252≈0.836
- P(狗)=2.7183/24.0252≈0.113P(狗) = 2.7183 / 24.0252 ≈ 0.113P(狗)=2.7183/24.0252≈0.113
- P(兔子)=1.2214/24.0252≈0.051P(兔子) = 1.2214 / 24.0252 ≈ 0.051P(兔子)=1.2214/24.0252≈0.051
最终得到概率分布 [0.836, 0.113, 0.051]。
关键特性
- 放大差异:指数函数会放大高分值的效应。最高分(3.0)对应的概率(0.836)远高于其他,使其在概率上占据绝对主导地位。
- 平移不变性:如果给所有 Logits 都加上一个常数 C,Softmax 的输出结果不变。
- 证明: ezi+C∑ezj+C=ezi⋅eC(∑ezj)⋅eC=ezi∑ezj\frac{e^{z_i + C}}{\sum e^{z_j + C}} = \frac{e^{z_i} \cdot e^C}{(\sum e^{z_j}) \cdot e^C} = \frac{e^{z_i}}{\sum e^{z_j}}∑ezj+Cezi+C=(∑ezj)⋅eCezi⋅eC=∑ezjezi
- 这个性质在数值计算中极其有用。
“Softmax”?就是3. 为什么
这个名字来源于它与 “Hardmax” (或称 Argmax) 的对比。
Hardmax (Argmax): 它会将最大的分量置为 1,其余全部置为 0。
- 对于
[3.0, 1.0, 0.2],Hardmax 输出为[1, 0, 0]。 - 这是一个“非黑即白”的选择,没有提供任何关于其他可能性的信息。
- 对于
Softmax: 它提供了一个“软化”的版本。虽然它仍然偏向于最大值,但保留了其他类别的相对可能性信息,输出是一个平滑的概率分布。
- 对于
[3.0, 1.0, 0.2],Softmax 输出为[0.84, 0.11, 0.05]。 - 狗”。就是这不仅是“猫”,而且是“很有可能是猫,但有一点点可能
- 对于
这种“软化”的特性在模型训练中至关重要,因为它提供了梯度。Hardmax 在绝大多数地方梯度为0,无法进行梯度下降学习,而 Softmax 处处可微,非常适合与反向传播算法结合。
4. 应用场景
Softmax 几乎是现代深度学习中多分类问题 的标配。
图像分类
- 场景:识别图片中是猫、狗、汽车、飞机等。
- 流程:卷积神经网络 (CNN) 提取特征 → 全连接层输出 N 个 Logits (N=类别数) → Softmax 层将 Logits 转化为 N 个类别的概率。
自然语言处理 (NLP)
- 场景:文本分类(如情感分析、新闻主题分类)、语言模型预测下一个词。
- 流程:循环神经网络 (RNN) 或 Transformer 处理序列 → 最后输出层产生每个可能的词(在词汇表中)的 Logit → Softmax 计算出每个词的概率,选择概率最高的词作为下一个输出。
注意力机制
- 在 Transformer 和 ChatGPT 等模型中,注意力权重的计算本质上就是一个 Softmax 运行。它接收一组“得分”(Query 和 Key 的相似度),然后通过 Softmax 将其归一化为加和为 1 的权重,表示在生成当前词时应该“注意”输入序列中各个部分的程度。
5. 关键细节与常见问题
1. 数值稳定性
直接计算 (e^{z_i}) 可能会导致数值溢出(如果 (z_i) 很大)。为了解决这个问题,在实践中我们使用一个数值稳定的版本:
σ(zi)=ezi−max(z)∑j=1nezj−max(z) \sigma(z_i) = \frac{e^{z_i - \text{max}(z)}}{\sum_{j=1}^{n} e^{z_j - \text{max}(z)}}σ(zi)=∑j=1nezj−max(z)ezi−max(z)
通过减去向量中的最大值(记为 max(z)),指数函数的参数最大为 0,从而避免了上溢,并且根据平移不变性,计算结果与原始公式完全相同。
2. 与交叉熵损失函数的搭配
在训练分类模型时,Softmax 通常与交叉熵损失 配对使用。
- Softmax:将模型的原始输出转换为概率。
- 交叉熵损失:衡量模型预测的概率分布与真实的概率分布(通常是 one-hot 编码,如
[1, 0, 0])之间的“距离”。
这是一个“黄金组合”,因为当 Softmax 作为输出层,交叉熵作为损失函数时,计算梯度会变得异常简单和高效,这大大加速了模型的训练过程。
3. Softmax 不是激活函数
虽然常被放在最后一层,但 Softmax 的性质与 Sigmoid、ReLU 等激活函数不同。Sigmoid/ReLU 是按元素操作的,输出的每个元素独立于其他元素。而 Softmax 是跨元素操作的,它的每个输出值都依赖于所有输入值(因为要计算总和)。因此,它更多地被看作一个归一化层。
总结
| 方面 | 描述 |
|---|---|
| 核心功能 | 将一组任意实数值的向量归一化 为一个概率分布。 |
| 数学本质 | 对每个元素取指数,然后用指数和进行归一化。 |
| 输入 | 任意实数的向量(Logits)。 |
| 输出 | (0, 1) 区间内的向量,且所有元素之和为 1。 |
| 关键特性 | 放大高分值差异、平移不变性、处处可微。 |
| 主要应用 | 多分类模型的输出层、注意力机制中的权重计算。 |
| 黄金搭档 | 交叉熵损失函数。 |
浙公网安备 33010602011771号