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

引言

在深度学习的分类任务中,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 = 1si=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 = jzj=ezii=j
  • 分母导数∂∂zj∑k=1nezk=ezj=ezi\frac{\partial}{\partial z_j}\sum_{k=1}^n e^{z_k} = e^{z_j}= e^{z_i}zjk=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} zjsoftmax(zi)=(kezk)2ezikezkeziezj=kezkezikezkkezkezj=softmax(zi)(1softmax(zi))

第二种情况:i≠ji \neq ji=j

  • 分子导数∂∂zj=0\frac{\partial}{\partial z_j} =0zj=0
  • 分母导数∂∂zj∑k=1nezk=ezj\frac{\partial}{\partial z_j}\sum_{k=1}^n e^{z_k} = e^{z_j}zjk=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} zjsoftmax(zi)=(kezk)20kezkeziezj=(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)ln⁡q(xi) H(p, q) = - \sum_{i} p(x_i) \ln q(x_i) H(p,q)=ip(xi)lnq(xi)

其中:

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

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

  1. 基于链式法则,交叉熵损失函数对 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} zjLoss=softmax(z)Losszjsoftmax(z)

  2. 在多分类问题中,真实值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=iyiln(softmax(z)i)=ykln(softmax(z)k)=ln(softmax(z)k)
    其中yiy_iyi是第i个分类的真实标签值,softmax(z)isoftmax(z)_isoftmax(z)isoftmax函数对第i个分类的预测概率

  3. 因此,梯度可以表示为:
    ∂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} zjLoss=softmax(z)k(ln(softmax(z)k))zjsoftmax(z)k=softmax(z)k1zjsoftmax(z)k

  4. 根据 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(1softmax(x)j),i=jsoftmax(x)isoftmax(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} zjLoss={softmax(zj)1,softmax(zj),if j=kif j=k

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

总结

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

Reference

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mike@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值