Softmax Function/zh: Difference between revisions
(Batch translate Softmax Function unit 14 → zh) |
(Batch translate Softmax Function unit 3 → zh) |
||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 3: | Line 3: | ||
{{ContentMeta | generated_by = claude-opus | model_used = claude-opus-4-6 | generated_date = 2026-03-13}} | {{ContentMeta | generated_by = claude-opus | model_used = claude-opus-4-6 | generated_date = 2026-03-13}} | ||
'''softmax 函数'''(也称为'''归一化指数函数''')是一种将实数向量('''logits''' | '''softmax 函数'''(也称为'''归一化指数函数''')是一种将实数向量('''{{Term|logits}}''')转换为概率分布的数学函数。它是神经网络中多类分类的标准输出{{Term|activation function|激活函数}},在从{{Term|logistic regression|逻辑回归}}到大语言模型的各种模型中扮演核心角色。 | ||
== 定义 == | == 定义 == | ||
给定 <math>K</math> 个类别的 logits 向量 <math>\mathbf{z} = (z_1, z_2, \dots, z_K)</math>,softmax 函数产生: | 给定 <math>K</math> 个类别的 {{Term|logits}} 向量 <math>\mathbf{z} = (z_1, z_2, \dots, z_K)</math>,softmax 函数产生: | ||
:<math>\sigma(\mathbf{z})_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}, \qquad k = 1, \dots, K</math> | :<math>\sigma(\mathbf{z})_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}, \qquad k = 1, \dots, K</math> | ||
| Line 18: | Line 18: | ||
== 直观理解 == | == 直观理解 == | ||
softmax 函数会放大 logits | softmax 函数会放大 {{Term|logits}} 之间的差异。大于其他值的 {{Term|logits|logit}} 由于指数函数呈超线性增长而获得不成比例的概率质量份额。例如: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! {{Term|logits}} !! Softmax 输出 | ||
|- | |- | ||
| <math>(2.0,\; 1.0,\; 0.1)</math> || <math>(0.659,\; 0.242,\; 0.099)</math> | | <math>(2.0,\; 1.0,\; 0.1)</math> || <math>(0.659,\; 0.242,\; 0.099)</math> | ||
| Line 29: | Line 29: | ||
|} | |} | ||
随着最大 logit | 随着最大 {{Term|logits|logit}} 与其他值之间差距的增大,输出趋近于 {{Term|one-hot encoding|one-hot}} 向量。这种「赢家通吃」的行为使 softmax 非常适合单一类别应占主导地位的分类任务。 | ||
== 温度参数 == | == 温度参数 == | ||
| Line 37: | Line 37: | ||
:<math>\sigma(\mathbf{z}; T)_k = \frac{e^{z_k / T}}{\sum_{j=1}^{K} e^{z_j / T}}</math> | :<math>\sigma(\mathbf{z}; T)_k = \frac{e^{z_k / T}}{\sum_{j=1}^{K} e^{z_j / T}}</math> | ||
* <math>T \to 0</math>:分布坍缩为选择 argmax 的 one-hot | * <math>T \to 0</math>:分布坍缩为选择 argmax 的 {{Term|one-hot encoding|one-hot}} 向量——相当于硬决策。 | ||
* <math>T = 1</math>:标准 softmax。 | * <math>T = 1</math>:标准 softmax。 | ||
* <math>T \to \infty</math> | * <math>T \to \infty</math>:分布趋于均匀——所有类别变得等概率。 | ||
温度缩放在知识蒸馏(Hinton 等,2015)中被广泛使用,其中来自教师模型的"软"分布比硬标签提供更丰富的训练信号。它也用于控制语言模型在文本生成中的随机性。 | 温度缩放在知识蒸馏(Hinton 等,2015)中被广泛使用,其中来自教师模型的"软"分布比硬标签提供更丰富的训练信号。它也用于控制语言模型在文本生成中的随机性。 | ||
| Line 45: | Line 45: | ||
== 数值稳定性 == | == 数值稳定性 == | ||
当 {{Term|logits}} 较大时,softmax 的朴素实现可能溢出(例如,<math>e^{1000}</math> 在浮点数中为无穷大)。标准的修正是减去最大的 {{Term|logits|logit}}: | |||
:<math>\sigma(\mathbf{z})_k = \frac{e^{z_k - m}}{\sum_{j=1}^{K} e^{z_j - m}}, \qquad m = \max_j z_j</math> | :<math>\sigma(\mathbf{z})_k = \frac{e^{z_k - m}}{\sum_{j=1}^{K} e^{z_j - m}}, \qquad m = \max_j z_j</math> | ||
这在数学上是等价的(常数项相消),但确保了最大的指数为 <math>e^0 = 1</math>,从而防止溢出。所有主流的{{Term|deep learning|深度学习}}框架都会自动实现这个稳定化版本。 | |||
== 与 Sigmoid 的关系 == | == 与 Sigmoid 的关系 == | ||
| Line 57: | Line 57: | ||
:<math>\sigma(\mathbf{z})_1 = \frac{e^{z_1}}{e^{z_1} + e^{z_2}} = \frac{1}{1 + e^{-z}} = \sigma_{\mathrm{sigmoid}}(z)</math> | :<math>\sigma(\mathbf{z})_1 = \frac{e^{z_1}}{e^{z_1} + e^{z_2}} = \frac{1}{1 + e^{-z}} = \sigma_{\mathrm{sigmoid}}(z)</math> | ||
这就是为什么二分类器通常使用带有 sigmoid {{Term|activation function|激活函数}}的单个输出神经元,而不是使用 softmax 的两个神经元——它们在数学上是等价的。 | |||
这就是为什么二分类器通常使用带有 sigmoid | |||
== 梯度 == | == 梯度 == | ||
| Line 73: | Line 71: | ||
在典型的分类流水线中: | 在典型的分类流水线中: | ||
# 神经网络通过其最后的线性层产生原始的 {{Term|logits}} <math>\mathbf{z}</math>。 | |||
# | # Softmax 将 {{Term|logits}} 转换为概率:<math>\hat{\mathbf{y}} = \sigma(\mathbf{z})</math>。 | ||
# Softmax 将 logits 转换为概率:<math>\hat{\mathbf{y}} = \sigma(\mathbf{z})</math>。 | |||
# 预测的类别为 <math>\hat{c} = \arg\max_k \hat{y}_k</math>。 | # 预测的类别为 <math>\hat{c} = \arg\max_k \hat{y}_k</math>。 | ||
# | # 训练使用应用于预测分布与真实标签的 [[Cross-Entropy Loss]]。 | ||
在实践中,为了数值稳定性,softmax 和{{Term|categorical cross-entropy|交叉熵}}会联合计算(即 '''log-softmax''' 公式),而推理时的 argmax 可以直接应用于 {{Term|logits}},根本无需计算 softmax。 | |||
== 超越分类 == | == 超越分类 == | ||
| Line 88: | Line 82: | ||
Softmax 在输出层之外的许多场景中也会出现: | Softmax 在输出层之外的许多场景中也会出现: | ||
* '''{{Term|attention|注意力}}机制''':Softmax 在 [[Attention Mechanisms|Transformer]] 架构中将对齐分数归一化为 {{Term|attention|注意力}}权重。 | |||
* ''' | * '''强化学习''':对动作值估计进行 softmax 会产生随机策略(玻尔兹曼探索)。 | ||
* '''强化学习''':对动作值估计进行 | * '''混合模型''':Softmax 在 {{Term|mixture of experts|混合专家}}架构中参数化混合系数。 | ||
* '''混合模型''':Softmax 在 mixture | |||
== 参见 == | == 参见 == | ||
Latest revision as of 23:41, 27 April 2026
| Article | |
|---|---|
| Topic area | Machine Learning |
| Difficulty | Introductory |
softmax 函数(也称为归一化指数函数)是一种将实数向量(logits)转换为概率分布的数学函数。它是神经网络中多类分类的标准输出激活函数,在从逻辑回归到大语言模型的各种模型中扮演核心角色。
定义
给定 $ K $ 个类别的 logits 向量 $ \mathbf{z} = (z_1, z_2, \dots, z_K) $,softmax 函数产生:
- $ \sigma(\mathbf{z})_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}, \qquad k = 1, \dots, K $
输出满足使其成为有效概率分布的两个性质:
- 对所有 $ k $,$ \sigma(\mathbf{z})_k > 0 $(因为指数函数始终为正)。
- $ \sum_{k=1}^{K} \sigma(\mathbf{z})_k = 1 $(按构造)。
直观理解
softmax 函数会放大 logits 之间的差异。大于其他值的 logit 由于指数函数呈超线性增长而获得不成比例的概率质量份额。例如:
| logits | Softmax 输出 |
|---|---|
| $ (2.0,\; 1.0,\; 0.1) $ | $ (0.659,\; 0.242,\; 0.099) $ |
| $ (5.0,\; 1.0,\; 0.1) $ | $ (0.993,\; 0.005,\; 0.002) $ |
随着最大 logit 与其他值之间差距的增大,输出趋近于 one-hot 向量。这种「赢家通吃」的行为使 softmax 非常适合单一类别应占主导地位的分类任务。
温度参数
温度参数 $ T > 0 $ 控制分布的尖锐程度:
- $ \sigma(\mathbf{z}; T)_k = \frac{e^{z_k / T}}{\sum_{j=1}^{K} e^{z_j / T}} $
- $ T \to 0 $:分布坍缩为选择 argmax 的 one-hot 向量——相当于硬决策。
- $ T = 1 $:标准 softmax。
- $ T \to \infty $:分布趋于均匀——所有类别变得等概率。
温度缩放在知识蒸馏(Hinton 等,2015)中被广泛使用,其中来自教师模型的"软"分布比硬标签提供更丰富的训练信号。它也用于控制语言模型在文本生成中的随机性。
数值稳定性
当 logits 较大时,softmax 的朴素实现可能溢出(例如,$ e^{1000} $ 在浮点数中为无穷大)。标准的修正是减去最大的 logit:
- $ \sigma(\mathbf{z})_k = \frac{e^{z_k - m}}{\sum_{j=1}^{K} e^{z_j - m}}, \qquad m = \max_j z_j $
这在数学上是等价的(常数项相消),但确保了最大的指数为 $ e^0 = 1 $,从而防止溢出。所有主流的深度学习框架都会自动实现这个稳定化版本。
与 Sigmoid 的关系
对于 $ K = 2 $ 类的特殊情况,softmax 函数归约为 sigmoid(逻辑)函数。如果定义 $ z = z_1 - z_2 $,则:
- $ \sigma(\mathbf{z})_1 = \frac{e^{z_1}}{e^{z_1} + e^{z_2}} = \frac{1}{1 + e^{-z}} = \sigma_{\mathrm{sigmoid}}(z) $
这就是为什么二分类器通常使用带有 sigmoid 激活函数的单个输出神经元,而不是使用 softmax 的两个神经元——它们在数学上是等价的。
梯度
softmax 函数关于其输入的雅可比矩阵为:
- $ \frac{\partial \sigma_k}{\partial z_j} = \sigma_k (\delta_{kj} - \sigma_j) $
其中 $ \delta_{kj} $ 是 Kronecker delta。当与 Cross-Entropy Loss 结合时,梯度简化为 $ \hat{y}_k - y_k $,这在计算上高效且在数值上稳定。
在分类中的应用
在典型的分类流水线中:
- 神经网络通过其最后的线性层产生原始的 logits $ \mathbf{z} $。
- Softmax 将 logits 转换为概率:$ \hat{\mathbf{y}} = \sigma(\mathbf{z}) $。
- 预测的类别为 $ \hat{c} = \arg\max_k \hat{y}_k $。
- 训练使用应用于预测分布与真实标签的 Cross-Entropy Loss。
在实践中,为了数值稳定性,softmax 和交叉熵会联合计算(即 log-softmax 公式),而推理时的 argmax 可以直接应用于 logits,根本无需计算 softmax。
超越分类
Softmax 在输出层之外的许多场景中也会出现:
- 注意力机制:Softmax 在 Transformer 架构中将对齐分数归一化为 注意力权重。
- 强化学习:对动作值估计进行 softmax 会产生随机策略(玻尔兹曼探索)。
- 混合模型:Softmax 在 混合专家架构中参数化混合系数。
参见
参考文献
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer,第 4.3.4 节。
- Goodfellow, I., Bengio, Y. 与 Courville, A. (2016). Deep Learning. MIT Press,第 6.2.2.3 节。
- Hinton, G., Vinyals, O. 与 Dean, J. (2015). "Distilling the Knowledge in a Neural Network". arXiv:1503.02531。
- Bridle, J. S. (1990). "Probabilistic Interpretation of Feedforward Classification Network Outputs". Neurocomputing。