引言
在深度学习的分类任务中,Softmax函数与交叉熵损失(Cross-Entropy Loss)的组合堪称经典组合。这对黄金搭档不仅具有数学上的优雅性,更能显著提升模型训练效率。本文将通过直观解释、数学推导和实践意义三个维度,揭示它们的协同工作原理。
一、Softmax函数:概率分布函数
1.1 功能定义
对于神经网络的原始输出值 z=[z1,z2,...,zn]z = [z_1, z_2, ..., z_n]z=[z1,z2,...,zn],Softmax函数通过指数归一化将其转化为概率分布:
si=ezi∑j=1nezj s_i = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} si=∑j=1nezjezi
- 输出满足 0<si<10 < s_i < 10<si<1 且 ∑si=1\sum s_i = 1∑si=1
- 指数运算放大差异:原始输出的微小差距会被指数函数显著放大
1.2 直观示例
假设神经网络输出为 [2.0,1.0,0.1][2.0, 1.0, 0.1][2.0,1.0,0.1],经过Softmax处理:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ s_1 &= \frac{e…
1.3 Softmax求导过程
第一种情况:i=ji=ji=j
- 分子导数∂∂zj=ezi,因为i=j\frac{\partial}{\partial z_j} = e^{z_i},因为i = j∂zj∂=ezi,因为i=j
- 分母导数∂∂zj∑k=1nezk=ezj=ezi\frac{\partial}{\partial z_j}\sum_{k=1}^n e^{z_k} = e^{z_j}= e^{z_i}∂zj∂∑k=1nezk=ezj=ezi
推导过程:∂softmax(zi)∂zj=ezi⋅∑kezk−ezi⋅ezj(∑kezk)2=ezi∑kezk⋅∑kezk−ezj∑kezk=softmax(zi)⋅(1−softmax(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} ∂zj∂softmax(zi)=(∑kezk)2ezi⋅∑kezk−ezi⋅ezj=∑kezkezi⋅∑kezk∑kezk−ezj=softmax(zi)⋅(1−softmax(zi))
第二种情况:i≠ji \neq ji=j
- 分子导数∂∂zj=0\frac{\partial}{\partial z_j} =0∂zj∂=0
- 分母导数∂∂zj∑k=1nezk=ezj\frac{\partial}{\partial z_j}\sum_{k=1}^n e^{z_k} = e^{z_j}∂zj∂∑k=1nezk=ezj
推导过程:
∂softmax(zi)∂zj=0⋅∑kezk−ezi⋅ezj(∑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}
∂zj∂softmax(zi)=(∑kezk)20⋅∑kezk−ezi⋅ezj=−(∑kezk)2eziezj=−softmax(zi)⋅softmax(zj)
交叉熵(Cross-Entropy)的数学原理
2.1. 交叉熵的定义
交叉熵(Cross-Entropy)是衡量两个概率分布之间差异的度量,常用于机器学习和信息论,特别是在分类任务中衡量预测分布与真实分布的匹配程度。
对于两个概率分布 p(x)p(x)p(x) 和 q(x)q(x)q(x),交叉熵定义为:
H(p,q)=−∑ip(xi)lnq(xi)
H(p, q) = - \sum_{i} p(x_i) \ln q(x_i)
H(p,q)=−i∑p(xi)lnq(xi)
其中:
- p(x)p(x)p(x) 表示真实分布(ground truth label),通常是独热编码(one-hot encoding)。
- q(x)q(x)q(x) 表示预测分布(模型输出的概率分布)。
三 Softmax与交叉熵组合的数学原理及梯度推导
-
基于链式法则,交叉熵损失函数对 Softmax 函数第 j 维输入 zjz_jzj的导数形式为:
∂Loss∂zj=∂Loss∂softmax(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} ∂zj∂Loss=∂softmax(z)∂Loss⋅∂zj∂softmax(z) -
在多分类问题中,真实值y采用 one-hot编码,其中只有一个维度是1,其他维度都是0。所以我们可以假设第k纬是1,即yky_kyk = 1,那么交叉熵损失函数可以简化为:Loss=−∑iyiln(softmax(z)i)=−yk⋅ln(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) Loss=−i∑yiln(softmax(z)i)=−yk⋅ln(softmax(z)k)=−ln(softmax(z)k)
其中yiy_iyi是第i个分类的真实标签值,softmax(z)isoftmax(z)_isoftmax(z)isoftmax函数对第i个分类的预测概率 -
因此,梯度可以表示为:
∂Loss∂zj=∂(−ln(softmax(z)k))∂softmax(z)k⋅∂softmax(z)k∂zj=−1softmax(z)k⋅∂softmax(z)k∂zj \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} ∂zj∂Loss=∂softmax(z)k∂(−ln(softmax(z)k))⋅∂zj∂softmax(z)k=−softmax(z)k1⋅∂zj∂softmax(z)k -
根据 Softmax 函数的导数,我们有:
∂(softmax(x)i)∂xj={softmax(x)i(1−softmax(x)j),i=j−softmax(x)i⋅softmax(x)j,i≠j \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} ∂xj∂(softmax(x)i)={softmax(x)i(1−softmax(x)j),i=j−softmax(x)i⋅softmax(x)j,i=j
最终代入得到:
∂Loss∂zj={softmax(zj)−1,if j=ksoftmax(zj),if j≠k
\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}
∂zj∂Loss={softmax(zj)−1,softmax(zj),if j=kif j=k
可以看到,Softmax 函数与交叉熵的结合不仅在数学上完美统一,而且在梯度计算上也非常简洁。基于上述梯度形式,通过反向传播方法可以高效地完成整个神经网络权重的更新。
总结
Softmax 函数和交叉熵损失函数的组合在多分类任务中非常高效。Softmax 函数将神经网络的输出转化为概率分布,而交叉熵损失函数则衡量预测分布与真实分布之间的差异。这种组合不仅能够有效衡量模型的预测性能,还能在反向传播过程中提供简洁且稳定的梯度更新。希望本文能够帮助你更好地理解 Softmax 和交叉熵的数学原理及其在深度学习中的应用。
Reference
王喆 《深度学习推荐系统》