一文读懂深度学习模型中损失函数(均方误差,log loss和交叉熵)

定义

损失函数(误差函数)是关于模型输出和样本标签值之差的函数,通过对误差函数求导来调节权重参数。
本质:选取恰当的函数来衡量模型输出分布和样本标签分布之间的接近程度。
注:损失函数的基本要求是用来衡量模型输出分布和样本标签分布之间的接近程度,高级需求是在样本分布不均匀地情况下,精确地描述模型输出分布和样本标签之间的接近程度。

功能

调节权重参数

与BP算法,激活函数的关系

误差函数的选择,不仅与要解决的问题有关,而且也和激活函数有关,然后通过对误差函数求导,利用BP调节模型中的所有参数。

误差函数的特点

  1. 必须是一个凸函数,然后才能用于找到最小值。
  2. 必须没一点都可导,可导才能通过BP算法完成对权重参数的调节。
  3. BP算法的目的,就是求能够使误差函数取得最小值对应的权重参数,因此,误差函数求导以后,极值点对应的权重参数就是最优解,极值点的导数为0,参数不再更新,找到了最优解。这也是梯度下降法寻找最优解的原理。

常见误差函数

均方误差函数

公式

回归问题最常用的损失函数是均方误差MSE,定义如下
在这里插入图片描述
上式中,yi为一个batch中第 i 个数据的正确答案,而为神经网络给出的预测值。
MSE是求一个batch(一批的数据)的平均误差的函数。

应用场景

主要用于回归问题。
交叉熵的损失函数只和分类正确的预测结果有关系,而MSE的损失函数还和错误的分类有关系,该分类函数除了让正确的分类尽量变大,还会让错误的分类变得平均,但实际在分类问题中这个调整是没有必要的。但是对于回归问题来说,这样的考虑就显得很重要了。所以,回归问题熵使用交叉上并不合适。

pytorch实现代码

loss_fn = torch.nn.MSELoss(reduce=False, size_average=False)
loss = loss_fn(input.float(), target.float())

注:均方误差函数只能用于回归问题,不能用于分类问题。

log loss(二分类交叉熵)

意义

  1. 多分类交叉熵的一种特殊情况。

公式

H(y,p)=1Ni=1n(yilogpi+(1yi)log(1pi))H(y,p) =-\frac{1}{N}\sum_{i=1}^{n}(y_{i}logp_{i}+(1-y_{i})log(1-p_{i}))
yiy_{i}为样本标签,pip_{i}为预测标签,对所有样本的对数损失表示对每个样本的对数损失的平均值, 对于完美的分类器, 对数损失为 0。
假设样本标签为1 ,则只保留第一项,后一项为0。概率pip_{i}越大,损失函数越小。
假设样本标签为0,则只保留后一项,前一项为0。 概率pip_{i}越小,损失函数越小。
该公式完美地诠释了为何选用Log作为损失函数,而且与实际情况相符。
注:多分类问题是log loss问题的一般化,对样本标签采取独热编码,其原理与该公式完全一致,都是通过信息熵来衡量样本标签分布和深度学习模型预测分布的接近程度

缺点

此loss function每一次梯度的回传对每一个类别具有相同的关注度!所以极易受到类别不平衡的影响,在图像分割领域尤其如此。
注:类别不平衡,是训练样本经常出现的情况,所以log loss一般不单独作为损失函数。

**举例:**目标在整幅图像当中占比也就仅仅千分之一,那么在一副图像中,正样本(像素点)与父样本的比例约为1~1000,如果训练图像中还包含大量的背景图,即图像当中不包含任何的疾病像素,那么不平衡的比例将扩大到>10000,那么训练的后果将会是,网络倾向于什么也不预测!生成的mask几乎没有病灶像素区域!

交叉熵

意义

  1. 本身是用来衡量两个概率分布的接近程度。
  2. 对后续损失函数的影响:交叉熵是后续其它优化损失函数的基础,要理解交叉熵,必须要理解信息量信息熵的概念。

公式

H(p,q)=i=1np(x)logq(x)H(p,q) = -\sum_{i=1}^{n}p(x)logq(x)
注:交叉熵的意义是衡量两个分布之间的距离。即样本标签值p(x)和模型输出值之间的距离。

应用场景

主要用于分类问题,也可以用于图像分割。

pytorch实现代码

loss_func = torch.nn.CrossEntropyLoss()
loss = loss_func(output, labels)  # 样本标签值必须是一维向量

损失函数的选取方法

  1. 损失函数的选择,和需要解决的问题类型样本类别的均衡性都有关系,一般地,如果是回归问题,选用均方误差函数,而分类问题,选用交叉熵损失函数。

参考链接:
https://blog.csdn.net/tsyccnh/article/details/79163834
https://blog.csdn.net/geter_CS/article/details/84857220
https://blog.csdn.net/hao5335156/article/details/81029791
https://blog.csdn.net/weixin_41417982/article/details/81388416?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/qiu931110/article/details/82111201?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/qiu931110/article/details/82111201?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/qq_30129009/article/details/100999086
https://blog.csdn.net/yhily2008/article/details/80261953?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/m0_37477175/article/details/83004746#Dice_loss_70

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章