1 loss的作用

在南溪看来,loss函数是对目标target和预测prediction之间的一种距离度量的公式;

2 loss函数的设计原则

此设计原则参考了距离的定义,(注意:距离跟范数是两个概念,范数表达的是“长度”的抽象);

2.1 特质性(非负性、同一性):必要条件

自身不变性指的是:

  • 当prediction=target\text{prediction} = \text{target}prediction=target时,loss函数的值为0;
  • 当prediction≠target\text{prediction} \neq \text{target}prediction​=target时,loss函数的值非负;

在数学上,我们可以认为是映射LLL的LLL函数矩阵为对称矩阵;
(这一点是从蔡老师对“SVM核函数有效性的证明”的论述中学习到的)

2.2 对称性:非必要条件

对称性的定义如下:d(X,Y)=d(Y,X)d(\mathcal{X},\mathcal{Y}) = d(\mathcal{Y},\mathcal{X})d(X,Y)=d(Y,X)

2.3 直递性:非必要条件

直递性有点像“三角定理:两边之和大于第三边”;
直递性实际上就是凸函数的特性;
凸性其实对于函数是一个很好的性质,会更加利于优化,下面我们来看看保凸法则:我们可以利用保凸法则来更加方便地构造具有凸性的loss函数;

2.3.1 保凸法则(Convexity-Preserving Operations)

一般凸优化中的凸函数指的是上凸函数,不过下凹函数可以通过加上负号变成上凸函数
在深度学习的优化过程中,对于梯度下降方法,下凹函数上凸函数的优化过程几乎是一样的,只是梯度反向了而已,所以函数如果具有下凸性也是可以直接运用的,不用一定转换为上凸函数;

2.3.1.1 正数求和

f(x)=∑i=1nci⋅fi(x)f(\boldsymbol{x})= \sum_{i=1}^{n}c_i\cdot f_i(\boldsymbol{x}) f(x)=i=1∑n​ci​⋅fi​(x)

2.3.1.2 仿射复合

f(x)=g(Ax+b)f(\boldsymbol{x})=g(\boldsymbol{Ax}+\boldsymbol{b}) f(x)=g(Ax+b)
仿射复合定理:设 g:R→(−∞,+∞]g: \mathbb{R} \rightarrow \left(-\infty, +\infty\right]g:R→(−∞,+∞]是凸函数,A∈Rn×m\boldsymbol{A}\in\mathbb{R}^{n\times m}A∈Rn×m且b∈Rm\boldsymbol{b}\in\mathbb{R}^{m}b∈Rm;则定义f:R→(−∞,+∞]f: \mathbb{R} \rightarrow \left(-\infty, +\infty\right]f:R→(−∞,+∞]
f(x)=g(Ax+b)f(\boldsymbol{x})=g(\boldsymbol{Ax}+\boldsymbol{b}) f(x)=g(Ax+b)
为凸函数,其中domf={x∈Rm:Ax+b∈dom g}\text{dom}f=\{\boldsymbol{x} \in \mathbb{R}^m: \boldsymbol{Ax}+\boldsymbol{b} \in \text{dom}~g\}domf={x∈Rm:Ax+b∈dom g}
例子:f(x)=∣∣Ax−y∣∣f(\boldsymbol{x}) = ||\boldsymbol{Ax}-\boldsymbol{y}||f(x)=∣∣Ax−y∣∣

凸/凹函数复合

f(x)=h(g1(x),g2(x),⋯,gn(x))f(\boldsymbol{x})=h(g_1(\boldsymbol{x}),g_2(\boldsymbol{x}),\cdots,g_n(\boldsymbol{x})) f(x)=h(g1​(x),g2​(x),⋯,gn​(x))

逐点取最大值(maximum/supremum)

f(x)=sup⁡i∈Ifi(x)f(\boldsymbol{x})=\sup_{i\in I}f_i(\boldsymbol{x}) f(x)=i∈Isup​fi​(x)

Partial Minimization

f(x)=inf⁡y∈Cfi(x,y)f(\boldsymbol{x})=\inf_{y\in C}f_i(\boldsymbol{x},\boldsymbol{y}) f(x)=y∈Cinf​fi​(x,y)

3 分类loss函数

3.1 Cross Entropy loss交叉熵损失

首先我们来看看 Cross Entropy loss的公式,(这里我们参考PyTorch中的公式):

好像有点不容易看懂,这里我把它归纳一下,
这里公式简单的理解等价于,
loss(x,class)=−logq(x)loss(x,class) = -logq(x)loss(x,class)=−logq(x)
这里的q(x)q(x)q(x)指的是真实类别输出的概率,真实的概率一般是“0和1”,来源于我们人类的标注信息;
**为什么说这里是概率呢?**为什么说这里是概率

3.2 BCE Loss——二元交叉熵(Binary Cross Entropy)

PyTorch函数:nn.BCELoss()
参数说明:
target: target张量需要是0或1的整数值,否则其计算操作将不满足自身不变性
BCE-Loss的公式如下(张量表示):
L=−[yi⋅log⁡xi+(1−yi)⋅log⁡(1−xi)]L=-\left [ y_i \cdot \log x_i + \left ( 1 - y_i \right ) \cdot \log\left ( 1-x_i \right ) \right ] L=−[yi​⋅logxi​+(1−yi​)⋅log(1−xi​)]

Sigmoid + BCE-Loss

​BCE loss需要搭配sigmoid函数一起使用,其中一个十分重要的原因是:sigmoid可以将input的范围规范化到(0,1)(0,1)(0,1)之间。

3.3 Focal loss——解决类别不平衡问题

在我看来,Focal loss是一种基于平均思想的在线难例挖掘;
为什么说是基于基于平均思想呢?因为 Focal loss出发点是要解决目标检测算法中正样本和负样本中数量占比不平衡的问题,在目标检测中,这是一个值得探究的问题,因为正样本和负样本是否平均还与使用的评价指标有关;
而在语义分割的多分类问题中,这确实是一种很好的思想,因为在语义分割中常常使用mIoU作为评价指标,
而在mIoU中,所有类别的IoU是取平均值,所以所有类别都是视作平等的;
我们来看看 Focal loss的公式,(公式来自于RetinaNet的原始论文):

3.4 Dice loss(语义分割)

我们先来看看 Dice loss的公式:
Dice=2∣A∩B∣∣A∣+∣B∣,DiceLoss=1−2∣A∩B∣∣A∣+∣B∣,Dice = \frac{2\left |A\cap B \right |}{\left | A\right |+\left | B\right |}, \quad DiceLoss = 1 - \frac{2\left |A\cap B \right |}{\left | A\right |+\left | B\right |}, Dice=∣A∣+∣B∣2∣A∩B∣​,DiceLoss=1−∣A∣+∣B∣2∣A∩B∣​,
不过这跟原始论文的公式看起来有点不一样,
原始论文的公式是这样写的,

其实不是很好理解,这里把 Dice loss的计算包含在了梯度的公式中,其实它是由文中的 Dice coefficient DDD引申出来的,其中D的公式为:

其中pip_ipi​是预测的概率值,qiq_iqi​是真实值;

3.4.1 Dice loss存在的问题

会使loss变得不稳定;

4 回归loss函数

4.1 L2 Loss

4.2 Kullback-Leibler Divergence Loss

Kullback-Leibler Divergence Loss是由KL散度衍生出来的,其PyTorch的接口为torch.nn.KLDivLoss
其函数的数学公式如下:
值得注意的是,这里跟一般KL散度的公式是不太一样的,(这里我们引用《神经网络与深度学习·邱锡鹏》中的公式),

可以知道这里的xnx_nxn​是对数域的,在计算loss之前,需要进行log变换;

编程笔记:

  • 在使用KLDivLoss时,注意Input需要取其对数域,即:Input.log()
  • 输入张量的范围为(0,1](0, 1](0,1],即张量中不能包含000值,可以包含111值,
  • 对于一维张量,要求tensor的和为1,否认会出现输出的loss值为负数,
import numpy as np
import torch
import torch.nn as nn
loss = nn.KLDivLoss()
output = torch.from_numpy(np.array([[0.1132, 0.5477, 0.3390]])).float()
target = torch.from_numpy(np.array([[0.1541, 0.0511, 0.0947]])).float()
loss(output.log(),target)
# tensor(-0.0648)
  • note

《深度学习笔记》——loss函数的学习笔记相关推荐

  1. 深度学习——loss函数的学习笔记(legacy)

    3 备注 3.1 使用torch.log()前,需要进行clamp 在写作loss函数时,经常会使用torch.log()函数,例如计算交叉熵时: 在PyTorch中,在使用torch.log()前, ...

  2. 深度学习中的损失函数总结以及Center Loss函数笔记

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  3. 【动手学深度学习v2李沐】学习笔记07:权重衰退、正则化

    前文回顾:模型选择.欠拟合和过拟合 文章目录 一.权重衰退 1.1 硬性限制 1.2 柔性限制(正则化) 1.3 参数更新法则 1.4 总结 二.代码实现 2.1 从零开始实现 2.1.1 人工数据集 ...

  4. 《神经网络与深度学习》邱希鹏 学习笔记 (1)

    <神经网络与深度学习>邱希鹏 学习笔记 (1) 完成进度 第一章 绪论 深度学习与神经网络 人工智能 图灵测试 达特茅斯 *(Dartmouth)* 会议 人工智能的研究领域 人工智能发展 ...

  5. 《神经网络与深度学习》邱希鹏 学习笔记(3)

    <神经网络与深度学习>邱希鹏 学习笔记(3) 完成进度 第二章 机器学习概述 线性回归 参数学习 偏差-方差分解 自我理解 概率 似然 先验 后验 参考文献 完成进度 - 第二章 (1) ...

  6. 《神经网络与深度学习》邱希鹏 学习笔记(4)

    <神经网络与深度学习>邱希鹏 学习笔记(4) 完成进度 第二章 机器学习概述 机器学习算法的类型 数据的特征表示 传统的特征学习 特征选择 特征抽取 深度学习方法 评价指标 理论和定理 P ...

  7. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  8. C++学习笔记5[函数]

    C++学习目录链接: C++学习笔记目录链接(持续更新中) 文章目录 一.函数概述 1.函数的定义 2.函数的声明 二.函数参数及其返回值 1.返回值 2.空函数 3.形参和实参 4.默认参数 5.可 ...

  9. ES6基础(var let const 箭头函数)-学习笔记

    文章目录 ES6基础(var let const 箭头函数)- 学习笔记 定义:var let const 箭头函数 数据结构 set map ES6基础(var let const 箭头函数)- 学 ...

最新文章

  1. [GDAL]写入shp
  2. 计算机it岗考试试题,计算机IT职称考试试题及其答案.doc
  3. 20200428:186周周赛下(leetcode1425)
  4. c语言实验交换字母,C语言实验内容.doc
  5. oracle 操作 卡,oracle 12c 数据库上编写SQL语句时卡顿的问题解决
  6. 2018/11/22工作日志
  7. 机器学习理论与实战:逻辑回归
  8. 美国在线教育的启示:教育领域正在革命
  9. 通用权限系统快速开发框架
  10. c语言编程ppt免费下载,概述C语言编程.ppt
  11. python列表冒泡排序方法_python列表去重 冒泡排序 插序排序
  12. 5款免费又好用的甘特图软件,总有一款适合你
  13. 车辆跟踪 matlab,车辆跟踪matlab
  14. [Swift]集成京东联盟SDK
  15. 9.STC15W408AS单片机EEPROM
  16. Linux驱动笔记--主机驱动与外设驱动概念以及分离思想
  17. png图片怎么缩小kb?压缩png图片怎么弄?
  18. 2019我依旧满腔热血,追寻爱与梦想
  19. 趣味ACM题 圣骑士的斩杀
  20. 国培计算机网络技术培训心得,2017国培学习心得体会及感受

热门文章

  1. java9 javascript_JS(JavaScript)的j进一步了解9(更新中···)
  2. 夯实Java基础(二十)——JAVA正则表达式
  3. 【8.12测试】辉夜的见面礼
  4. 有鱼上钩!卖鱼!卖鱼!
  5. 【CSAPP笔记】4. 汇编语言——基础知识
  6. ORACLE异常(整理网上资料)
  7. 关于钩子(Hook)的使用
  8. 解决访问被拒绝:Microsoft.Web.UI.WebControls的问题
  9. 《设计模式详解》手写简单的 Spring 框架
  10. 【Java从0到架构师】Spring - 注解