Softmax函数求导与梯度计算
字数 1734 2025-11-02 13:21:23

Softmax函数求导与梯度计算

题目描述
Softmax函数是深度学习和机器学习中用于多分类任务的核心激活函数,它将一个K维实值向量转换为概率分布。面试常要求推导Softmax函数对输入变量的偏导数,并解释其在反向传播中的应用。理解这一过程对掌握神经网络训练至关重要。

1. Softmax函数定义
对于K类分类问题,给定输入向量z = [z₁, z₂, ..., zₖ]ᵀ,Softmax函数计算第i类的概率为:

\[p_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \]

其中分母是所有指数值的和,确保∑pᵢ = 1且pᵢ ∈ (0,1)。例如,若z = [2, 1, 0.1],则分母为e² + e¹ + e⁰·¹ ≈ 7.39 + 2.72 + 1.11 = 11.22,对应概率p = [0.63, 0.23, 0.10]。

2. 求导场景分析
我们需要求∂pᵢ/∂zⱼ,即第i个输出对第j个输入的偏导。分两种情况:

  • 当i = j时:求pᵢ对自身输入zᵢ的偏导
  • 当i ≠ j时:求pᵢ对其他输入zⱼ的偏导

3. i = j 时的求导过程
将pᵢ视为分子e^{zᵢ}与分母S = ∑e^{zₖ}的商:

\[\frac{\partial p_i}{\partial z_i} = \frac{e^{z_i} \cdot S - e^{z_i} \cdot e^{z_i}}{S^2} \]

提取公因式e^{zᵢ}:

\[= \frac{e^{z_i}(S - e^{z_i})}{S^2} = \frac{e^{z_i}}{S} \cdot \frac{S - e^{z_i}}{S} \]

代入pᵢ = e^{zᵢ}/S:

\[= p_i \cdot (1 - p_i) \]

4. i ≠ j 时的求导过程
此时分子e^{zᵢ}与zⱼ无关,仅分母S包含e^{zⱼ}。使用商法则:

\[\frac{\partial p_i}{\partial z_j} = \frac{0 \cdot S - e^{z_i} \cdot e^{z_j}}{S^2} \]

简化得:

\[= -\frac{e^{z_i} e^{z_j}}{S^2} = -\frac{e^{z_i}}{S} \cdot \frac{e^{z_j}}{S} \]

代入pᵢ和pⱼ的定义:

\[= -p_i p_j \]

5. 统一梯度公式
综合两种情况,引入Kronecker delta函数δᵢⱼ(当i=j时为1,否则为0):

\[\frac{\partial p_i}{\partial z_j} = p_i (\delta_{ij} - p_j) \]

例如对z = [2, 1, 0.1]的Softmax输出p,∂p₁/∂z₂ = -0.63×0.23 ≈ -0.145,表示z₂增大时p₁会减小。

6. 在交叉熵损失中的反向传播
设真实标签y为one-hot向量,交叉熵损失L = -∑yₖ log pₖ。反向传播时需计算∂L/∂zⱼ:

\[\frac{\partial L}{\partial z_j} = -\sum_{k=1}^K y_k \frac{\partial \log p_k}{\partial z_j} \]

代入∂log pₖ/∂zⱼ = (1/pₖ)·∂pₖ/∂zⱼ,利用Softmax导数公式得:

\[= -\sum_k y_k (\delta_{kj} - p_j) = p_j \sum_k y_k - y_j \]

由于∑yₖ = 1,最终得到关键结论:

\[\frac{\partial L}{\partial z_j} = p_j - y_j \]

此梯度直接表示预测概率与真实标签的差值,用于高效参数更新。

总结
Softmax求导的核心在于分情况讨论,最终结果p_i(δᵢⱼ - pⱼ)体现了概率间的竞争关系。在交叉熵损失中,这一推导使得梯度计算异常简洁,这是Softmax成为多分类首选的重要原因。

Softmax函数求导与梯度计算 题目描述 Softmax函数是深度学习和机器学习中用于多分类任务的核心激活函数,它将一个K维实值向量转换为概率分布。面试常要求推导Softmax函数对输入变量的偏导数,并解释其在反向传播中的应用。理解这一过程对掌握神经网络训练至关重要。 1. Softmax函数定义 对于K类分类问题,给定输入向量z = [ z₁, z₂, ..., zₖ ]ᵀ,Softmax函数计算第i类的概率为: $$p_ i = \frac{e^{z_ i}}{\sum_ {j=1}^{K} e^{z_ j}}$$ 其中分母是所有指数值的和,确保∑pᵢ = 1且pᵢ ∈ (0,1)。例如,若z = [ 2, 1, 0.1],则分母为e² + e¹ + e⁰·¹ ≈ 7.39 + 2.72 + 1.11 = 11.22,对应概率p = [ 0.63, 0.23, 0.10 ]。 2. 求导场景分析 我们需要求∂pᵢ/∂zⱼ,即第i个输出对第j个输入的偏导。分两种情况: 当i = j时:求pᵢ对自身输入zᵢ的偏导 当i ≠ j时:求pᵢ对其他输入zⱼ的偏导 3. i = j 时的求导过程 将pᵢ视为分子e^{zᵢ}与分母S = ∑e^{zₖ}的商: $$\frac{\partial p_ i}{\partial z_ i} = \frac{e^{z_ i} \cdot S - e^{z_ i} \cdot e^{z_ i}}{S^2}$$ 提取公因式e^{zᵢ}: $$= \frac{e^{z_ i}(S - e^{z_ i})}{S^2} = \frac{e^{z_ i}}{S} \cdot \frac{S - e^{z_ i}}{S}$$ 代入pᵢ = e^{zᵢ}/S: $$= p_ i \cdot (1 - p_ i)$$ 4. i ≠ j 时的求导过程 此时分子e^{zᵢ}与zⱼ无关,仅分母S包含e^{zⱼ}。使用商法则: $$\frac{\partial p_ i}{\partial z_ j} = \frac{0 \cdot S - e^{z_ i} \cdot e^{z_ j}}{S^2}$$ 简化得: $$= -\frac{e^{z_ i} e^{z_ j}}{S^2} = -\frac{e^{z_ i}}{S} \cdot \frac{e^{z_ j}}{S}$$ 代入pᵢ和pⱼ的定义: $$= -p_ i p_ j$$ 5. 统一梯度公式 综合两种情况,引入Kronecker delta函数δᵢⱼ(当i=j时为1,否则为0): $$\frac{\partial p_ i}{\partial z_ j} = p_ i (\delta_ {ij} - p_ j)$$ 例如对z = [ 2, 1, 0.1 ]的Softmax输出p,∂p₁/∂z₂ = -0.63×0.23 ≈ -0.145,表示z₂增大时p₁会减小。 6. 在交叉熵损失中的反向传播 设真实标签y为one-hot向量,交叉熵损失L = -∑yₖ log pₖ。反向传播时需计算∂L/∂zⱼ: $$\frac{\partial L}{\partial z_ j} = -\sum_ {k=1}^K y_ k \frac{\partial \log p_ k}{\partial z_ j}$$ 代入∂log pₖ/∂zⱼ = (1/pₖ)·∂pₖ/∂zⱼ,利用Softmax导数公式得: $$= -\sum_ k y_ k (\delta_ {kj} - p_ j) = p_ j \sum_ k y_ k - y_ j$$ 由于∑yₖ = 1,最终得到关键结论: $$\frac{\partial L}{\partial z_ j} = p_ j - y_ j$$ 此梯度直接表示预测概率与真实标签的差值,用于高效参数更新。 总结 Softmax求导的核心在于分情况讨论,最终结果p_ i(δᵢⱼ - pⱼ)体现了概率间的竞争关系。在交叉熵损失中,这一推导使得梯度计算异常简洁,这是Softmax成为多分类首选的重要原因。