Crossentropy loss与Hinge loss

本文深入探讨了两种常见的损失函数——交叉熵损失(Categorical Crossentropy)和Hinge损失。交叉熵损失常用于多分类问题,克服了sigmoid激活函数在梯度消失上的问题,能更快地更新权重。Hinge损失则常见于最大间隔分类任务,如SVM。通过实例说明了两种损失函数的计算过程及其在实际应用中的特性。

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

参考  Crossentropy loss与Hinge loss - 云+社区 - 腾讯云

损失函数

在之前写期望风险的时候其实已经提过这个概念了,再补充一下

损失函数
定义:损失函数就一个具体的样本而言,模型预测的值与真实值之间的差距。
对于一个样本(xi,yi)其中yi为真实值,而f(xi)为我们的预测值。使用损失函数L(f(xi),yi)来表示真实值和预测值之间的差距。两者差距越小越好,最理想的情况是预测值刚好等于真实值。

进入正题~

categorical_crossentropy loss(交叉熵损失函数)

讲交叉熵损失函数,我想先从均方差损失函数讲起

均方差损失函数
简单来说,均方误差(MSE)的含义是求一个batch中n个样本的n个输出与期望输出的差的平方的平均值。比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为
(其中y是我们期望的输出,a为神经元的实际输出【 a=σ(z), where z=wx+b 】。):

在训练神经网络过程中,我们通过梯度下降算法来更新w和b,因此需要计算损失函数对w和b的导数:

然后更新w、b:
w <—— w - η* ∂C/∂w = w - η * a σ′(z)
b <—— b - η
∂C/∂b = b - η * a * σ′(z)
因为sigmoid函数的性质,导致σ′(z)在z取大部分值时会很小,这样会使得w和b更新非常慢(因为η * a * σ′(z)这一项接近于0)。

为了克服这个不足,引入了categorical_crossentropy(交叉熵损失函数)

categorical_crossentropy(交叉熵损失函数)

交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况。
它刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。

公式如下:
(其中y为期望的输出,a为神经元实际输出)
【a=σ(z), where z=∑Wj * Xj+b】


同样进行求导:

从上图可以看到, 导数中没有σ′(z)这一项,权重的更新是受σ(z)−y这一项影响,即受误差的影响,所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢

性质
a.非负性。(所以我们的目标就是最小化代价函数)
b.当真实输出a与期望输出y接近的时候,代价函数接近于0.(比如y=0,a~0;y=1,a~1时,代价函数都接近0)。

这边举一个简单的二分类例子:
预测为猫的p=Pr(y=1)概率是0.8,真实标签y=1;预测不是猫的1-p=Pr(y=0)概率是0.2,真实标签为0。

那么 loss=−(1∗log(0.8)+0∗log(0.2))=−log(0.8)

详细解释--KL散度与交叉熵区别与联系

其余可参考深度学习(3)损失函数-交叉熵(CrossEntropy)
如何通俗的解释交叉熵与相对熵?

Hinge loss

在网上也有人把hinge loss称为铰链损失函数,它可用于“最大间隔(max-margin)”分类,其最著名的应用是作为SVM的损失函数。


二分类情况下


多分类
扩展到多分类问题上就需要多加一个边界值,然后叠加起来。公式如下:


举例:
栗子① △为1
假设有3个类cat、car、frog:

image.png

第一列表示样本真实类别为cat,分类器判断样本为cat的分数为3.2,判断为car的分数为5.1,判断为frog的分数为 -1.7。
hinge loss:


栗子②△取10

除了`nn.CrossEntropyLoss()`(交叉熵损失)外,还有一些常见的分类损失函数: 1. **Focal Loss**:适用于类别不平衡的数据集,着重于减少容易分类的样本对总损失的贡献。它通过调整不同类别样本的损失权重来改进性能。公式上,Focal Loss引入了一个聚焦因子α动态衰减因子γ。 ```python from pytorch_metric_learning.distances import CosineSimilarity criterion = FocalLoss(gamma=2, alpha=tensor([.25, .25, .25, .25])) # 如果有4个类别 ``` 2. **Dice Loss(或Jaccard Loss)**:常用于二分类多分类问题,特别是在图像分割任务中,因为它关注的是像素级别的精确匹配。它是IoU(Intersection over Union)的倒数形式。 ```python criterion = nn.DiceLoss() ``` 3. **Hinge Loss**:主要用于支持向量机(SVM)深度神经网络,它鼓励样本尽可能地远离决策边界,对于线性不可分的情况比较有效。 ```python criterion = nn.HingeEmbeddingLoss(margin=1) ``` 4. **KL Divergence Loss**:用于衡量两个概率分布之间的差异,适合连续型输出的概率预测模型,比如Softmax回归的推广。 ```python criterion = nn.KLDivLoss(reduction='batchmean') ``` 5. **BCEWithLogitsLoss(Binary Cross Entropy with logits)**:用于二分类问题,类似于`CrossEntropyLoss`,但它接受的是logits而不是softmax结果,计算效率更高。 ```python criterion = nn.BCEWithLogitsLoss() ``` 每种损失函数都有其特定的应用场景优势,选择哪种取决于你的数据特性、模型结构任务需求。记得在实验中尝试并调整,找到最适合你的那一种。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wanderer001

ROIAlign原理

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

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

打赏作者

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

抵扣说明:

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

余额充值