Softmax Function/zh

    From Marovi AI
    Revision as of 22:04, 27 April 2026 by DeployBot (talk | contribs) (Batch translate Softmax Function unit 14 → zh)
    Other languages:
    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 $

    输出满足使其成为有效概率分布的两个性质:

    1. 对所有 $ k $$ \sigma(\mathbf{z})_k > 0 $(因为指数函数始终为正)。
    2. $ \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 与其他 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)中被广泛使用,其中来自教师模型的"软"分布比硬标签提供更丰富的训练信号。它也用于控制语言模型在文本生成中的随机性。

    数值稳定性

    softmax 的朴素实现当 logits 较大时可能会溢出(例如,$ 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 $,这在计算上高效且在数值上稳定。

    在分类中的应用

    在典型的分类流水线中:

    1. 神经网络从其最后的线性层产生原始 logits $ \mathbf{z} $
    2. Softmax 将 logits 转换为概率:$ \hat{\mathbf{y}} = \sigma(\mathbf{z}) $
    3. 预测的类别为 $ \hat{c} = \arg\max_k \hat{y}_k $
    4. 训练使用应用于预测分布和真实标签的 Cross-Entropy Loss

    在实践中,为了数值稳定性,softmax 和交叉熵会联合计算(log-softmax 公式),并且在推理时 argmax 可以直接应用于 logits,而无需计算 softmax。

    超越分类

    Softmax 在输出层之外的许多场景中也会出现:

    • 注意力机制:Softmax 在 Transformer 架构中将对齐分数归一化为注意力权重。
    • 强化学习:对动作值估计进行 Softmax 产生随机策略(玻尔兹曼探索)。
    • 混合模型:Softmax 在 mixture-of-experts 架构中参数化混合系数。

    参见

    参考文献

    • 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