Softmax 与交叉熵:数学原理与梯度推导

248 阅读2分钟

引言

在深度学习的分类任务中,Softmax函数与交叉熵损失(Cross-Entropy Loss)的组合堪称经典组合。这对黄金搭档不仅具有数学上的优雅性,更能显著提升模型训练效率。本文将通过直观解释、数学推导和实践意义三个维度,揭示它们的协同工作原理。

一、Softmax函数:概率分布函数

1.1 功能定义

对于神经网络的原始输出值 z=[z1,z2,...,zn]z = [z_1, z_2, ..., z_n]Softmax函数通过指数归一化将其转化为概率分布:

si=ezij=1nezjs_i = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}}
  • 输出满足 0<si<10 < s_i < 1si=1\sum s_i = 1
  • 指数运算放大差异:原始输出的微小差距会被指数函数显著放大

1.2 直观示例

假设神经网络输出为 [2.0,1.0,0.1][2.0, 1.0, 0.1],经过Softmax处理:

s1=e2.0e2.0+e1.0+e0.10.659s2=e1.0e2.0+e1.0+e0.10.242s3=e0.1e2.0+e1.0+e0.10.099\begin{align*} s_1 &= \frac{e^{2.0}}{e^{2.0}+e^{1.0}+e^{0.1}} \approx 0.659\\ s_2 &= \frac{e^{1.0}}{e^{2.0}+e^{1.0}+e^{0.1}} \approx 0.242 \\ s_3 &= \frac{e^{0.1}}{e^{2.0}+e^{1.0}+e^{0.1}} \approx 0.099 \end{align*}

1.3 Softmax求导过程

第一种情况:i=ji=j

  • 分子导数zj=ezi,因为i=j\frac{\partial}{\partial z_j} = e^{z_i},因为i = j
  • 分母导数zjk=1nezk=ezj=ezi\frac{\partial}{\partial z_j}\sum_{k=1}^n e^{z_k} = e^{z_j}= e^{z_i}

推导过程

softmax(zi)zj=ezikezkeziezj(kezk)2=ezikezkkezkezjkezk=softmax(zi)(1softmax(zi))\begin{aligned} \frac{\partial \text{softmax}(z_i)}{\partial z_j} &= \frac{e^{z_i} \cdot \sum_{k} e^{z_k} - e^{z_i} \cdot e^{z_j}}{\left( \sum_{k} e^{z_k} \right)^2} \\ &= \frac{e^{z_i}}{\sum_{k} e^{z_k}} \cdot \frac{\sum_{k} e^{z_k} - e^{z_j}}{\sum_{k} e^{z_k}} \\ &= \text{softmax}(z_i) \cdot (1 - \text{softmax}(z_i)) \end{aligned}

第二种情况:iji \neq j

  • 分子导数zj=0\frac{\partial}{\partial z_j} =0
  • 分母导数zjk=1nezk=ezj\frac{\partial}{\partial z_j}\sum_{k=1}^n e^{z_k} = e^{z_j}

推导过程:

softmax(zi)zj=0kezkeziezj(kezk)2=eziezj(kezk)2=softmax(zi)softmax(zj)\begin{aligned} \frac{\partial \text{softmax}(z_i)}{\partial z_j} &= \frac{0 \cdot \sum_{k} e^{z_k} - e^{z_i} \cdot e^{z_j}}{\left( \sum_{k} e^{z_k} \right)^2} \\ &= -\frac{e^{z_i} e^{z_j}}{\left( \sum_{k} e^{z_k} \right)^2} \\ &= -\text{softmax}(z_i) \cdot \text{softmax}(z_j) \end{aligned}

二交叉熵(Cross-Entropy)的数学原理

2.1. 交叉熵的定义

交叉熵(Cross-Entropy)是衡量两个概率分布之间差异的度量,常用于机器学习和信息论,特别是在分类任务中衡量预测分布与真实分布的匹配程度。

对于两个概率分布 p(x)p(x)q(x)q(x),交叉熵定义为:

H(p,q)=ip(xi)lnq(xi)H(p, q) = - \sum_{i} p(x_i) \ln q(x_i)

其中:

  • p(x)p(x) 表示真实分布(ground truth label),通常是独热编码(one-hot encoding)。
  • q(x)q(x) 表示预测分布(模型输出的概率分布)。

三 Softmax与交叉熵组合的数学原理及梯度推导

1.基于链式法则,交叉熵损失函数对 Softmax 函数第 j 维输入 zjz_j的导数形式为:

Losszj=Losssoftmax(z)softmax(z)zj\frac{\partial \text{Loss}}{\partial z_j} = \frac{\partial \text{Loss}}{\partial \text{softmax}(z)} \cdot \frac{\partial \text{softmax}(z)}{\partial z_j}

2.在多分类问题中,真实值y采用 one-hot编码,其中只有一个维度是1,其他维度都是0。所以我们可以假设第k纬是1,即yky_k = 1,那么交叉熵损失函数可以简化为:

Loss=iyiln(softmax(z)i)=ykln(softmax(z)k)=ln(softmax(z)k)\text{Loss} = -\sum_i y_i \ln(\text{softmax}(z)_i) = -y_k \cdot \ln(\text{softmax}(z)_k) = -\ln(\text{softmax}(z)_k)
  • 其中yiy_i是第i个分类的真实标签值,softmax(z)isoftmax(z)_isoftmax函数对第i个分类的预测概率

3.因此,梯度可以表示为:

Losszj=(ln(softmax(z)k))softmax(z)ksoftmax(z)kzj=1softmax(z)ksoftmax(z)kzj\frac{\partial \text{Loss}}{\partial z_j} = \frac{\partial (-\ln(\text{softmax}(z)_k))}{\partial \text{softmax}(z)_k} \cdot \frac{\partial \text{softmax}(z)_k}{\partial z_j} = -\frac{1}{\text{softmax}(z)_k} \cdot \frac{\partial \text{softmax}(z)_k}{\partial z_j}

4.根据 Softmax 函数的导数,我们有:

(softmax(x)i)xj={softmax(x)i(1softmax(x)j),i=jsoftmax(x)isoftmax(x)j,ij\begin{aligned} \frac{\partial(softmax(x)_i)}{\partial x_j} = \begin{cases} softmax(x)_i(1 - softmax(x)_j),i = j\\ -softmax(x)_i \cdot softmax(x)_j, i \neq j \end{cases} \end{aligned}

最终代入得到

Losszj={softmax(zj)1,if j=ksoftmax(zj),if jk\frac{\partial \text{Loss}}{\partial z_j} = \begin{cases} \text{softmax}(z_j) - 1, & \text{if } j = k \\ \text{softmax}(z_j), & \text{if } j \neq k \end{cases}

可以看到,Softmax 函数与交叉熵的结合不仅在数学上完美统一,而且在梯度计算上也非常简洁。基于上述梯度形式,通过反向传播方法可以高效地完成整个神经网络权重的更新。

总结

Softmax 函数和交叉熵损失函数的组合在多分类任务中非常高效。Softmax 函数将神经网络的输出转化为概率分布,而交叉熵损失函数则衡量预测分布与真实分布之间的差异。这种组合不仅能够有效衡量模型的预测性能,还能在反向传播过程中提供简洁且稳定的梯度更新。希望本文能够帮助你更好地理解 Softmax 和交叉熵的数学原理及其在深度学习中的应用。

Reference

王喆 《深度学习推荐系统》