点击蓝字关注我们

AI研习图书馆,发现不一样的精彩世界

学习
笔记

常见损失函数总结-图像分类下篇

一、前言

在深度学习中,损失函数扮演着至关重要的角色。通过最小化损失函数,使模型达到收敛状态,减少模型预测值的误差。因此,不同的损失函数,对模型的影响是十分重大的。

接下来,重点总结一下在实习工作实践中经常用到的损失函数:

  • 图像分类:softmax,weighted softmax loss,focal loss,soft softmax loss,L-softmax Loss,Hinge,Exponential loss与Logistic loss

  • 目标检测:Focal loss,L1/L2损失,IOU Loss,GIOU ,DIOU,CIOU

  • 图像识别:Triplet Loss,Center Loss,Sphereface,Cosface,Arcface

什么是损失函数?

深度学习中的损失函数(loss function)是用来评估模型的预测值-f(x)与真实值-y的不一致程度,损失函数越小,代表模型的鲁棒性越好,损失函数能指导模型学习。 

二、常见图像分类损失函数-下篇

2.3、softmax loss及其变种

假如log loss中的f(x)的表现形式是softmax概率的形式,那么交叉熵loss就是熟知的softmax with cross-entropy loss,简称softmax loss,所以说softmax loss只是交叉熵的一个特例。

softmax loss被广泛用于分类分割等任务,且发展出了很多的变种,有针对不平衡样本问题的weighted softmax loss,focal loss,针对蒸馏学习的soft softmax loss,促进类内更加紧凑的L-softmax Loss等一系列的改进。

2.3.1、softmax loss

softmax loss实际上是由softmax和cross-entropy loss组合而成,两者放一起数值计算更加稳定。推导过程如下:

令z是softmax层的输入,f(z)是softmax的输出,则

单个像素i的softmax loss等于cross-entropy error如下:

展开上式:

在caffe实现中,z即bottom blob,l(y,z)是top blob,反向传播时,就是要根据top blob diff得到bottom blob diff,所以要得到

下面求loss对z的第k个节点的梯度

可见,传给groundtruth label节点和非groundtruth label节点的梯度是不一样的。

原始的softmax loss非常优雅,简洁,被广泛用于分类问题。它的特点就是优化类间的距离非常棒,但是优化类内距离时比较弱。

2.3.2、weighted softmax loss

假如一个二分类问题,两类的样本数目差距非常之大。如边缘检测问题,边缘像素的重要性明显比非边缘像素大的重要性要大,此时可以针对性的对样本进行加权。

wc就是这个权重, c=0代表边缘像素,c=1代表非边缘像素,则可以令w0=1,w1=0.001,即加大边缘像素的权重。这个权重,还可以动态地计算让其自适应。

2.3.3、soft softmax loss

当T=1时,就是softmax的定义,当T>1,就称之为soft softmax,T越大,因为Zk产生的概率差异就会越小。作者提出这个是为了迁移学习,生成软标签,然后将软标签和硬标签同时用于新网络的学习。

为什么这么用,当训练好一个模型之后,模型为所有的误标签都分配了很小的概率;然而实际上对于不同的错误标签,其被分配的概率仍然可能存在数个量级的悬殊差距。这个差距,在softmax中直接就被忽略了,但这其实是一部分有用的信息。

作者先利用softmax loss训练获得一个大模型,然后基于大模型的softmax输出结果获取每一类的概率,将这个概率,作为小模型训练时soft target的label。

2.3.4、Large-Margin Softmax Loss / L-Softmax loss

上图显示的是不同softmax loss和L-Softmax loss学习到的cnn特征分布。第一列就是softmax,第2列是L-Softmax loss在参数m取不同值时的分布。通过可视化特征,可知学习到的类间的特征是比较明显的,但是类内比较散。而large-margin softmax loss则类内更加紧凑,怎么做到的呢?

loss的定义形式:

由于 zk 是全连接层的输出,所以可以写成形式如下:

将内积更具体的表现出来,就是:

对于二分类的情况,对于属于第1类的样本,希望:

若对它提出更高的要求?由于cos函数在0~PI区间是递减函数,将其改为:

其中m>=1,

在这个条件下,原始的softmax条件仍然得到满足。

下图,如果W1=W2,那么满足条件2,显然需要θ1与θ2之间的差距变得更大,原来的softmax的decision boundary只有一个,而现在类别1和类别2的decision boundary不相同,这样类间的距离进一步增加,类内更加紧凑。

更具体的定义如下:

L-Softmax loss中,m是一个控制距离的变量,它越大训练会变得越困难,因为类内不可能无限紧凑。作者是通过一个LargeMargin全连接层+softmax loss来共同实现。

2.3.5、L2-constrained softmax loss

将学习的特征x归一化。观测到好的正面的脸,特征的L2-norm大,而特征不明显的脸,其对应的特征L2-norm小,因此,作者提出这样的约束来增强特征的区分度:

上面式就是将其归一化到固定值α。实际训练的时候都不需要修改代码,只需要添加L2-norm层与scale层,如下图:

为什么要加这个scale层?NormFace指出了直接归一化权重和特征,会导致loss不能下降。因为就算是极端情况下,多类样本,令正样本|wx|=1取最大值,负样本|wx|=-1取最小值,这时候分类概率也是

当类别数n=10,p=0.45;n=1000,p=0.007。当类别数增加到1000类时,正样本最大的概率还不足0.01,而反向求导的时候,梯度=1-p,会导致一直传回去很大的loss。所以,有必要在后面加上scale层。

2.4、KL散度

Kullback和Leibler定义了KL散度用于估计两个分布的相似性,定义如下;

Dkl是非负的,只有当p与q处处相等时,才会等于0。上式也等价于

其中l(p,p)是分布p的熵,而l(p,q)就是p和q的交叉熵。假如p是一个已知的分布,则熵是一个常数,此时Dkl(p|q)与l(p,q)只有一个常数的差异,两者是等价的。但是,KL散度并不是一个对称的loss,即Dkl (p|q) != Dkl (q|p),KL散度常被用于生成式的模型。

2.5、Hinge loss

Hinge loss主要用于支持向量机中,它的称呼来源于损失的形式,定义如下:

如果分类正确,loss=0,如果错误则为1-f(x),所以它是一个分段不光滑的曲线。Hinge loss被用来解SVM问题中的间距最大化问题。

2.6、Exponential loss与Logistic loss

Exponential loss是一个指数形式的loss,特点是梯度比较大,主要用于Adaboost集成学习算法中,定义如下:

logistic loss取了Exponential loss的对数形式,它的定义如下:

logistic loss 梯度相对变化更加平缓。

此外,还有sigmoid cross_entropy_loss,可以被用于多标签分类任务或者不需要创建类间竞争机制的分类任务,在Mask RCNN中就使用了sigmoid cross_entropy_loss。

小结

综上所述,以上内容涵盖了大部分常用的分类任务损失,大部分都是对数的形式,这是由信息熵的定义和参数似然估计的本质决定的。

图像分类中的常见损失函数分享暂告一段落,后期会总结图像识别目标检测等领域的常见损失函数,有兴趣的同学可以关注一下~

关注AI研习图书馆,发现不一样的精彩世界

多分类svm的hinge loss公式推导_损失函数—深度学习常见损失函数总结【图像分类|下】...相关推荐

  1. display函数怎么使用_损失函数—深度学习常见损失函数总结【图像分类|上】

    点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 学习 笔记 常见损失函数总结-图像分类篇[上] 一.前言在深度学习中,损失函数扮演着至关重要的角色.通过最小化损失函数,使模型达到收敛状态,减少 ...

  2. 深度学习模型建立过程_所有深度学习都是统计模型的建立

    深度学习模型建立过程 Deep learning is often used to make predictions for data driven analysis. But what are th ...

  3. 深度学习:在图像上找到手势_使用深度学习的人类情绪和手势检测器:第1部分

    深度学习:在图像上找到手势 情感手势检测 (Emotion Gesture Detection) Has anyone ever wondered looking at someone and tri ...

  4. 深度学习将灰度图着色_通过深度学习为视频着色

    深度学习将灰度图着色 零本地设置/ DeOldify / Colab笔记本 (Zero Local Setup / DeOldify / Colab Notebook) "Haal Kais ...

  5. 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结

    0. 前言: 激光雷达作为自动驾驶不可或缺的传感器,随着价格不断下降,各种基于深度学习的模型也层出不穷(坐等马斯克打脸); 激光雷达物体识别的任务: 输入: 激光点云(x, y, z, intensi ...

  6. 【机器学习】SVM支持向量机在手写体数据集上进行二分类、采⽤ hinge loss 和 cross-entropy loss 的线性分类模型分析和对比、网格搜索

    2022Fall 机器学习 1. 实验要求 考虑两种不同的核函数:i) 线性核函数; ii) ⾼斯核函数 可以直接调⽤现成 SVM 软件包来实现 ⼿动实现采⽤ hinge loss 和 cross-e ...

  7. pytorch卷积神经网络_【深度学习】卷积神经网络图片分类案例(pytorch实现)

    文 | 菊子皮 (转载请注明出处)B站:科皮子菊 前言 前文已经介绍过卷积神经网络的基本概念[深度学习]卷积神经网络-CNN简单理论介绍[1].下面开始动手实践吧.本文任务描述如下:从公开数据集CIF ...

  8. 扫描二维码读取文档_使用深度学习读取和分类扫描的文档

    扫描二维码读取文档 To many people's dismay, there is still a giant wealth of paper documents floating out the ...

  9. pytorch 三维点分类_基于深度学习的三维重建——MVSNet系列论文解读

    欢迎关注微信公众号"3D视觉学习笔记",分享博士期间3D视觉学习收获 MVSNet:香港科技大学的权龙教授团队的MVSNet(2018年ECCV)开启了用深度做多视图三维重建的先河 ...

最新文章

  1. NEO从源码分析看NEOVM
  2. java常用类总结_java——常用类的总结
  3. 安卓APP_ 布局(2) —— RelativeLayout相对布局
  4. vector和list容器有哪些区别
  5. C# 中 Struct 与 Class 的区别,以及两者的适用场合
  6. 运动会成绩管理系统python_基于Eclipse+Mysql+Tomcat+MVC开发得大学运动会管理系统
  7. y53拆机视频教程_vivoY53L拆机图赏
  8. 20190528论文笔记
  9. SHELL中如何获得指定字符的位置及正确的截取动作
  10. 数仓 调度_【数仓开发-数仓概念篇】3.3 报表vs数据可视化vs ETL
  11. 启明星数据库批量备份与还原工具
  12. pe_xscan作了3点更新 1
  13. oracle数据库导出rtf,Delphi中对Oracle存取RTF文档
  14. android定义圆角layout,Android布局切圆角
  15. python坦克大战游戏_python实现简单坦克大战
  16. 〖Python 数据库开发实战 - Python与MySQL交互篇⑪〗- 项目实战- 完善新闻管理系统中轮询的交互判断
  17. 方差、标准差、均方误差的总结
  18. 被“现实”打败的3D打印
  19. MySQL Binlog温故知新
  20. 笔记本电脑下wifi网卡的启动

热门文章

  1. 项目整合管理ITO图
  2. 3550m2 重新linux系统,kgdb+Qemu-KVM调试环境建立方法和所需的相关文件
  3. html的slider怎么在图片下面,javascript – HTML5滑块.如何使用’noUiSlider’
  4. 动画开发 之 Lottie
  5. uniapp-h5+获取通知栏权限
  6. 电磁兼容测试(EMC)的简单理解(一)
  7. [WARNING] The requested profile pom.xml could not be activated because it does not exist.
  8. 使用MAX30205传感器制作Arduino数字体温计
  9. python财务案例分析考试答案_《财务案例分析》作业及答案(三次).
  10. 【区块链108将】对话星河互联王磊:关于区块链 传统VC不怕投错怕踏空