交叉熵损失(Cross Entropy Loss)计算过程

本文深入讲解了交叉熵损失的概念及应用,特别是在机器学习中的多分类任务。通过具体实例,展示了如何计算交叉熵损失,并对比了其与均方误差的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在机器学习中(特别是分类模型),模型训练时,通常都是使用交叉熵(Cross-Entropy)作为损失进行最小化:

C E ( p , q ) = − ∑ i = 1 C p i l o g ( q i ) CE(p,q)=- \sum_{i=1}^{C} p_i log(q_i) CE(p,q)=i=1Cpilog(qi)
其中 C C C代表类别数。 p i p_i pi为真实, q i q_i qi为预测。

我们以MNIST多分类为例,通常Label会编码为One-Hot,最后一层输出会使用Softmax函数进行概率化输出,如下表所示:

SampleTruePredicted
这里写图片描述[0, 1, 0, 0, 0, 0, 0, 0, 0, 0][0.1, 0.6, 0.3, 0, 0, 0, 0, 0, 0, 0]
这里写图片描述[0, 0, 0, 0, 1, 0, 0, 0, 0, 0][0, 0.3, 0.2, 0, 0.5, 0, 0, 0, 0, 0]
这里写图片描述[0, 0, 0, 0, 0, 1, 0, 0, 0, 0][0.6, 0.3, 0, 0, 0, 0.1, 0, 0, 0, 0]

对于第一个样本,交叉熵损失为:
− l n ( 0.6 ) ≈ 0.51 -ln(0.6) \approx 0.51 ln(0.6)0.51

对于第二个样本,交叉熵损失为:
− l n ( 0.5 ) ≈ 0.69 -ln(0.5) \approx 0.69 ln(0.5)0.69

对于第三个样本,交叉熵损失为:
− l n ( 0.1 ) ≈ 2.30 -ln(0.1) \approx 2.30 ln(0.1)2.30

平均交叉熵损失为:
− ( l n ( 0.6 ) + l n ( 0.5 ) + l n ( 0.1 ) ) 3 ≈ 1.17 -\frac{(ln(0.6)+ln(0.5)+ln(0.1))}{3} \approx 1.17 3(ln(0.6)+ln(0.5)+ln(0.1))1.17

从上面的计算可以知道,预测越准,损失越小。

Scikit-learn中提供了交叉熵损失的计算方法:

from sklearn.metrics import log_loss

true = ['1', '4', '5']
pred=[[0.1, 0.6, 0.3, 0, 0, 0, 0, 0, 0, 0],
      [0, 0.3, 0.2, 0, 0.5, 0, 0, 0, 0, 0],
      [0.6, 0.3, 0, 0, 0, 0.1, 0, 0, 0, 0]]
labels=['0','1','2','3','4','5','6','7','8','9']

log_loss(true, pred, labels)

Out:
1.1688526324400008

为什么训练时采取交叉熵损失,而不用均方误差(Mean Squared Error, MSE)呢?

Why You Should Use Cross-Entropy Error Instead Of Classification Error Or Mean Squared Error For Neural Network Classifier Training -> 翻译版

### 交叉熵损失概述 #### 定义 交叉熵损失是一种广泛应用于分类问题中的损失函数,在机器学习尤其是深度学习领域非常常见。该损失函数衡量的是模型预测的概率分布与真实标签之间的差异程度。 #### 公式推导 对于二元分类问题,使用的具体形式称为二元交叉熵损失(Binary Cross Entropy Loss, BCELoss),其表达式可以写作: \[ \text{BCE}(y,\hat y)=-(y\log(\hat y)+(1-y)\log(1-\hat y)) \] 这里 \(y\) 表示真实的类别标签(0 或者 1),而 \(\hat y\) 则代表由模型给出的对应类别的概率估计值[^1]。 当扩展到多分类情况时,则采用一般的交叉熵损失(CrossEntropyLoss): \[ H(p,q)=-\sum_{i} p(x_i)\cdot\log(q(x_i)) \] 其中\(p(x_i)\) 是实际发生的事件的真实分布;\(q(x_i)\) 是模型所预测出来的分布[^3]。 #### 计算方法 在实现上,比如 PyTorch 中 `nn.CrossEntropyLoss()` 实际内部集成了两个操作:先执行 LogSoftmax 来获得对数似然比,再应用 NLLLoss(Negative Log Likelihood Loss)来完成最终的损失计算过程。 ```python import torch.nn as nn criterion = nn.CrossEntropyLoss() output = model(input_data) loss = criterion(output, target_labels) ``` 这段代码展示了如何创建一个交叉熵损失实例并用于训练过程中评估模型输出与目标标签间的差距。 #### 应用场景 - **图像识别**:无论是简单的手写数字辨识还是复杂的物体检测任务都可以见到它的身影; - **自然语言处理**:文本分类、情感分析等NLP子域也大量依赖此类损失函数来进行监督学习; - **医疗诊断辅助系统**:帮助提高疾病早期筛查准确性等方面发挥重要作用[^2]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

手撕机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值