一直搞不清楚损失函数和优化函数的区别,现在我们对它们俩进行分析。

1. 损失函数

在机器学习中,损失函数是代价函数的一部分,而代价函数则是目标函数的一种类型。

  • Loss function,即损失函数:用于定义单个训练样本与真实值之间的误差;
  • Cost function,即代价函数:用于定义单个批次/整个训练集样本与真实值之间的误差;
  • Objective function,即目标函数:泛指任意可以被优化的函数

损失函数是用于衡量模型所作出的预测离真实值(Ground Truth)之间的偏离程度。 通常,我们都会最小化目标函数,最常用的算法便是“梯度下降法”(Gradient Descent)。

俗话说,任何事情必然有它的两面性,因此,并没有一种万能的损失函数能够适用于所有的机器学习任务,所以在这里我们需要知道每一种损失函数的优点和局限性,才能更好的利用它们去解决实际的问题。损失函数大致可分为两种:

  1. 回归损失(针对连续型变量
  2. 分类损失(针对离散型变量

1.1 回归损失(Regression Loss)

1.1.1 L1 Loss

L1 Loss也称为Mean Absolute Error,即平均绝对误差(MAE),它衡量的是预测值与真实值之间距离的平均误差幅度,作用范围为 [ 0 , + ∞ ] [0, +\infty] [0,+∞]。

L 1 = ∑ i = 1 n ∣ y i − f ( x i ) ∣ L_1= \sum^n_{i=1}|y_i-f(x_i)| L1​=i=1∑n​∣yi​−f(xi​)∣

d L 1 ( x ) d x = { 1 , x ≥ 0 − 1 , o t h e r w i s e \frac{\mathrm{d}L_1(x)}{\mathrm{d}x}= \begin{cases} 1, & x\ge0 \\ -1, & \mathrm{otherwise} \end{cases} dxdL1​(x)​={1,−1,​x≥0otherwise​

优点: 对离群点(Outliers)或者异常值更具有鲁棒性。

缺点: 由图可知其在0点处的导数不连续,使得求解效率低下,导致收敛速度慢;而对于较小的损失值,其梯度也同其他区间损失值的梯度一样大,所以不利于网络的学习。

1.1.2 L2 Loss

L2 Loss也称为Mean Squred Error,即均方差(MSE),它衡量的是预测值与真实值之间距离的平方和,作用范围同为 [ 0 , + ∞ ] [0, +\infty] [0,+∞] 。
L 2 = ∑ i = 1 n ( y i − f ( x i ) ) 2 L_2 = \sum^n_{i=1}(y_i-f(x_i))^2 L2​=i=1∑n​(yi​−f(xi​))2
d L 2 ( x ) d x = 2 x \frac{\mathrm{d}L_2(x)}{\mathrm{d}x}= 2x dxdL2​(x)​=2x
优点: 收敛速度快,能够对梯度给予合适的惩罚权重,而不是“一视同仁”,使梯度更新的方向可以更加精确。

缺点: 对异常值十分敏感,梯度更新的方向很容易受离群点所主导,不具备鲁棒性。

对于L1范数和L2范数,如果异常值对于实际业务非常重要,我们可以使用MSE作为我们的损失函数;另一方面,如果异常值仅仅表示损坏的数据,那我们应该选择MAE作为损失函数。此外,考虑到收敛速度,在大多数的卷积神经网络中(CNN)中,我们通常会选择L2损失
因为这个差异要被平方放大,所以就会表现出越小的距离( − 1 ≤ x ≤ 1 -1\le x\le1 −1≤x≤1 ),对于大的平方后就会放大。

1.1.3 Smooth L1 Loss

Smooth L1 Loss即为平滑的L1损失(SLL),出自Fast RCNN。SLL通过综合L1和L2损失的优点,在0点处附近采用了L2损失中的平方函数,解决了L1损失在0点处梯度不可导的问题,使其更加平滑易于收敛。此外,在 ∣ x ∣ > 1 |x|>1 ∣x∣>1 的区间上,它又采用了L1损失中的线性函数,使得梯度能够快速下降
s m o o t h L 1 ( x ) = { 0.5 x 2 , ∣ x ∣ < 1 ∣ x ∣ − 0.5 , o t h e r w i s e \mathrm{smooth_{L_1}}(x)= \begin{cases} 0.5x^2,&|x|<1 \\ |x|-0.5,&\mathrm{otherwise} \end{cases} smoothL1​​(x)={0.5x2,∣x∣−0.5,​∣x∣<1otherwise​
d s m o o t h L 1 d x = { x , ∣ x ∣ < 1 ± 1 , o t h e r w i s e \frac{\mathrm{d \ smooth_{L_1}}}{\mathrm{d}x} = \begin{cases} x, & |x|<1 \\ ±1, & \mathrm{otherwise} \end{cases} dxd smoothL1​​​={x,±1,​∣x∣<1otherwise​

通过对这三个损失函数进行求导可以发现,L1损失的导数为常数,如果不及时调整学习率,那么当值过小时,会导致模型很难收敛到一个较高的精度,而是趋向于一个固定值附近波动。反过来,对于L2损失来说,由于在训练初期值较大时,其导数值也会相应较大,导致训练不稳定。最后,可以发现Smooth L1在训练初期输入数值较大时能够较为稳定在某一个数值,而在后期趋向于收敛时也能够加速梯度的回传,很好的解决了前面两者所存在的问题。

  • L1:趋向于一个固定值附近波动
  • L2:训练不稳定
  • Smooth L1:很好的解决了前面两者所存在的问题

1.2 分类损失

1.2.1 Entropy —— 熵的概念

Entropy即为“”,熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。但更常见的,在信息论里面, 熵是用于描述对不确定性的度量。所以,这个概念可以延伸到深度神经网络中,比如我们的模型在做分类时,其实也是在做一个判断一个物体到底是不是属于某个类别。因此,在正式介绍分类损失函数时,我们必须先了解熵的概念

数字化时代,信息都是由bit(0和1)组成的。在通信时,有些位是有用(useful)的信息,有些位则是冗余(redundant)的信息,有些位甚至是错误(error)的信息,等等。当我们传达信息时,我们希望尽可能多地向接收者传递有用的信息

传输1比特的信息意味着将接收者的不确定性降低2倍。 —— 香农


如何理解香农的这句话,1bit意味着只有两种情况。对于一件事情发的概率,加入只有两种情况:

  1. 发生了
  2. 没有发生

那么我们的猜对的概率就是50%,也就是不确定性有50%

这时如果传输过来1bit的数据,那么这意味着这件事情的概率我们是已知的,即事情的不确定性从50%降低为了0%,确定性从原来的50%上升到100%,100% / 50%=2,即我们的确定性上升了2倍,也就意味着不确定性降低了2倍。

下面以一个天气预报的例子为例,形象化的讲解熵到底尤为何物?假设一个地方的天气是随机的,每天有50%的机会是晴天或雨天。

现在,如果气象站告诉您明天将要下雨,那么这个消息将不确定性降低了2倍

这里和香农的那句话是一个道理

起初,有两种同样可能的可能性,但是在收到气象站的更新信息后,我们只有一种 。 在这里,气象站向我们发送了一点有用的信息,无论他们如何编码这些信息,这都是事实。即使发送的消息是雨天的,每个字符占一个字节,消息的总大小为40位,但它们仍然只通信1位的有用信息

现在,我们假设天气有8种可能状态,且都是等可能的。

那么,当气象站为您提供第二天的天气时,它们会将您的不确定性降低了8倍(告诉了我们明天会下雨,所以下雨成了一个确定性的概率1)。由于每个事件的发生几率为1/8,因此降低因子为8。

但如果这些可能性不是等概率的呢?比如,75%的机会是晴天,25%的机会是雨天。


现在,如果气象台说第二天会下雨,那么你的不确定性就降低了4倍,也就是2比特的信息。

不确定性的减少就是事件概率的倒数(因为一个事件发生的概率被确定为1,那么不发生的概率就确定为0)。

在这种情况下,25%的倒数是4, log ⁡ 2 4 = 2 \log_24=2 log2​4=2 。因此,我们得到了2bit有用的信息。

这个有用信息是一个固定公式计算得到的,这里不用纠结。

如果气象站说第二天是晴天,那么不确定性就降低了 1 0.75 \frac{1}{0.75} 0.751​,那么我们得到 log ⁡ 2 1 0.75 = 0.4150 \log_2\frac{1}{0.75}=0.4150 log2​0.751​=0.4150 bit的有用信息。

那么,我们平均能从气象站得到多少信息呢?明天是晴天的概率是75%这就给了你0.41比特的信息而明天是雨天的概率是25%这就给了你2比特的信息,这就对应我们平均每天从气象站得到0.81比特的信息,计算如下图:

我们刚刚所计算出来的就叫做熵(Entropy),它可以很好地描述事件的不确定性。它是由以下公式给出:
E n t r o p y , H ( p ) = − ∑ p ( i ) ∗ log ⁡ ( p ( i ) ) \mathrm{Entropy}, H(p) = - \sum p(i) * \log(p(i)) Entropy,H(p)=−∑p(i)∗log(p(i))

它衡量的是你每天了解天气情况时所得到的平均信息量。一般来说,它给出了给定概率分布 p p p中样本值的平均信息量,并且它还会告诉我们概率分布有多不可预测

如果我们住在沙漠中央,那里每天都是阳光灿烂的,平均来说,我们不会每天从气象站得到很多信息,熵会接近于零。另一方面,如果天气变化很大,熵就会大得多

意思就是说,如果一个事件可预测性很低,那么给这个事件一个确定性,则这个确定性会携带大量的信息量。
就好比,1+1=2,这件事情所包含的信息量是0,因为它对于每个人来说,1+1就是等于2,你杠你说的对

优化函数和损失函数的区别与联系相关推荐

  1. 目标函数和损失函数的区别

    损失函数(loss function)或代价函数(cost function)说人话就是:损失函数是用来表示预测值与真实值间的差异的函数. 目标函数f(x)说人话:目标函数是优化问题中的一个概念,在机 ...

  2. Unet项目解析(7): 模型编译-优化函数、损失函数、指标列表

    项目GitHub主页:https://github.com/orobix/retina-unet 参考论文:Retina blood vessel segmentation with a convol ...

  3. 交叉熵损失函数分类_BCE和CE交叉熵损失函数的区别

    首先需要说明的是PyTorch里面的BCELoss和CrossEntropyLoss都是交叉熵,数学本质上是没有区别的,区别在于应用中的细节. BCE适用于0/1二分类,计算公式就是 " - ...

  4. 实操教程|Pytorch常用损失函数拆解

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 小新 来源 | https://lhyxx.top 编辑 ...

  5. PyTorch的损失函数和优化器

    文章目录 PyTorch的损失函数和优化器 损失函数 优化器 总结 PyTorch的损失函数和优化器 损失函数 一般来说,PyTorch的损失函数有两种形式:函数形式和模块形式.前者调用的是torch ...

  6. L1、L2、smooth L1三类损失函数

    一.常见的MSE.MAE损失函数 1.1 均方误差.平方损失 均方误差(MSE)是回归损失函数中最常用的误差,它是预测值与目标值之间差值的平方和,其公式如下所示: 下图是均方根误差值的曲线分布,其中最 ...

  7. 对抗生成网络(GAN)中的损失函数

    目录 GAN的训练过程: L1和L2损失函数的区别 基础概念 相同点 差异 GAN的训练过程: 1.先定义一个标签:real = 1,fake = 0.当然这两个值的维度是按照数据的输出来看的.再定义 ...

  8. 损失函数——机器学习

    目录 一.实验内容 二.实验过程 1.算法思想 2.算法原理 3.算法分析 三.源程序代码 四.运行结果分析 五.实验总结 一.实验内容 理解损失函数的基本概念: 理解并掌握均方差损失函数的原理,算法 ...

  9. CTR 预测理论(九):Boosting 集成算法中 Adaboost, GBDT 与 XGBoost 的区别

    https://blog.csdn.net/Dby_freedom/article/details/81975255 最近总结树模型,尝试将主流 Boosting 实现方式做一个分析汇总,文中部分内容 ...

最新文章

  1. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?
  2. Linux之chattr命令详解
  3. pyhton 反转单词顺序
  4. 智商负250,我可能玩了一个假的大冒险
  5. shell在手分析服务器日志不愁
  6. java 关键字volatile的作用
  7. python观察内存和修改内存
  8. 三层架构之初识庐山真面目
  9. 用shell写的ftp工具
  10. 本特利3500_3500系统轴振信号异常波动问题浅析及建议
  11. mysql基础之忘掉密码解决办法及恢复root最高权限办法
  12. 垃圾文件粉碎机 防止恢复保安全
  13. 将Matlab程序打包成.exe独立可执行程序
  14. android 模拟器 评测,安卓模拟器哪个更好?四款主流安卓模拟器测评
  15. “一流的科研成果一定是自己研制的仪器做出来的” – 中国科大LB膜实验室的日子...
  16. 《SolidCAM+SolidWorks 2014中文版数控加工从入门到精通》——第1章 SolidCAM基础 1.1 CAD/CAM基础...
  17. 循环视图——RecycleView
  18. 《花开半夏》--4 生死之间的吻(1)
  19. c语言程序0xc0000005解决方案,应用程序无法正常启动0xc0000005如何解决
  20. AAC文件格式与解码流程(未完待续)

热门文章

  1. Linux搭建Steam饥荒服务器教程 — SteamCMD方式
  2. VUE + Element-UI 表单校验input框数据已存在
  3. 毕设 JAVA JSP工资管理系统的设计与实现论文
  4. Springboot集成rabbitMQ之mandatory和备份交换机
  5. 第四篇 bonus:js代码实现网页导航二级菜单
  6. 五个男人30年在同一位置拍摄相同合影,岁月不饶人啊
  7. 百度地图开发之——百度地图鹰眼轨迹管理台DEMO-v3部署到服务器上
  8. MPEG4 笔记(FTYP,MOOV,MVHD)
  9. nav 计算机网络_计算机网络课件谢希仁
  10. 数据结构与算法-单链表的常见面试题(单链表的长度,单链表倒数第k个数据)