DL——Softmax求导

关键词:Softmax梯度,Softmax求导


softmax函数定义

  • 对于输入向量 \( x = [x_1, x_2, \dots, x_n] \),softmax函数将其映射为概率分布:
    $$
    \sigma(x)_i = \frac{e^{x_i} }{\sum_{j=1}^n e^{x_j} }
    $$
    • 其中 \( \sigma(x)_i \) 表示第 \( i \) 个元素的输出,满足 \( \sum_{i=1}^n \sigma(x)_i = 1 \)

求导推导(分情况讨论)

  • 设 \( s_i = \sigma(x)_i \),目标是计算 \( \frac{\partial s_i}{\partial x_j} \),分两种情况

情况1:\( i = j \)(自变量对自身求导)

  • 展开表达式:
    $$
    s_i = \frac{e^{x_i} }{\sum_{k=1}^n e^{x_k} } = \frac{e^{x_i} }{S}, \quad \text{其中 } S = \sum_{k=1}^n e^{x_k}
    $$
  • 利用商数法则求导:
    $$
    \frac{\partial s_i}{\partial x_i} = \frac{e^{x_i} \cdot S - e^{x_i} \cdot e^{x_i} }{S^2} = \frac{e^{x_i}(S - e^{x_i})}{S^2} = \frac{e^{x_i} }{S} \cdot \frac{S - e^{x_i} }{S} = s_i(1 - s_i)
    $$

情况2:\( i \neq j \)(自变量对其他元素求导)

  • 此时 \( x_j \) 出现在分母 \( S \) 中,分子与 \( x_j \) 无关:
    $$
    \frac{\partial s_i}{\partial x_j} = \frac{0 \cdot S - e^{x_i} \cdot e^{x_j} }{S^2} = -\frac{e^{x_i} e^{x_j} }{S^2} = -\frac{e^{x_i} }{S} \cdot \frac{e^{x_j} }{S} = -s_i s_j
    $$

矩阵形式(向量求导)

  • 若输入为向量 \( \mathbf{x} \),输出为向量 \( \mathbf{s} = \sigma(\mathbf{x}) \),则其雅可比矩阵为:
    $$
    \frac{\partial \mathbf{s} }{\partial \mathbf{x}^T} = \left[ \frac{\partial s_i}{\partial x_j} \right] = \mathbf{S} - \mathbf{s s}^T
    $$
    • \( \mathbf{S} \) 是对角矩阵,对角线元素为 \( s_i \);
    • \( \mathbf{s s}^T \) 是外积矩阵
  • 对角矩阵 \(\mathbf{S}\)
    $$
    \mathbf{S} = \begin{bmatrix}
    s_1 & 0 & \cdots & 0 \\
    0 & s_2 & \cdots & 0 \\
    \vdots & \vdots & \ddots & \vdots \\
    0 & 0 & \cdots & s_n
    \end{bmatrix}
    $$
  • 外积矩阵 \(\mathbf{s s}^T\)
    $$
    \mathbf{s s}^T =
    \begin{bmatrix}
    s_1 \\
    s_2 \\
    \vdots \\
    s_n
    \end{bmatrix}
    \begin{bmatrix}
    s_1 & s_2 & \cdots & s_n
    \end{bmatrix} =
    \begin{bmatrix}
    s_1 s_1 & s_1 s_2 & \cdots & s_1 s_n \\
    s_2 s_1 & s_2 s_2 & \cdots & s_2 s_n \\
    \vdots & \vdots & \ddots & \vdots \\
    s_n s_1 & s_n s_2 & \cdots & s_n s_n
    \end{bmatrix}
    $$
  • 最终梯度形式
    $$
    \frac{\partial \mathbf{s} }{\partial \mathbf{x}^T} = \mathbf{S} - \mathbf{s s}^T = \begin{bmatrix}
    s_1 & 0 & \cdots & 0 \\
    0 & s_2 & \cdots & 0 \\
    \vdots & \vdots & \ddots & \vdots \\
    0 & 0 & \cdots & s_n
    \end{bmatrix} -
    \begin{bmatrix}
    s_1 s_1 & s_1 s_2 & \cdots & s_1 s_n \\
    s_2 s_1 & s_2 s_2 & \cdots & s_2 s_n \\
    \vdots & \vdots & \ddots & \vdots \\
    s_n s_1 & s_n s_2 & \cdots & s_n s_n
    \end{bmatrix}
    $$

一些总结

  • softmax 函数的矩阵形式导数可表示为 对角矩阵与外积矩阵的差
    • 核心结论:“对角线元素为 \(s_i-s_i s_i\),非对角线元素为 \(-s_i s_j\)”的规律
  • 越接近 one-hot 的预估,其梯度越接近于 0