0%

损失函数

损失函数

Loss的意义

一个模型可以看成一个带参数的函数:

其中 x 是输入,$\theta$ 是模型参数,$\hat{y}$是模型输出, $y$ 是标签也就是说我们希望模型给出的结果。训练的目的就是寻找一组更合适的参数 $\theta$ ,让y_hat更接近 y(argmin)。但模型自己不可能知道自己输出的合不合适,因此我们需要一个量来评价“这个输出到底有多差”。这个量就是Loss

简单来说,Loss是一个函数

它将输出和标签的关系压缩成一个标量。习惯上我们设定Loss越小输出结果越理想,同时一般Loss我们习惯设置非负。

要让输出尽可能接近标签,我们只能修改参数 θ,所以也就是说,Loss将任务目标统一成一个 数值目标,用于判断 参数 $\theta1$ 和 $\theta_2$ 谁更符合当前任何要求。但一个模型可能有很多输出维度和参数,如果没有一个统一标准,我们没有办法回答哪个参数更好。Loss将高维的输出压缩成一个数值,此时模型训练问题才能写成$$\theta^\star
=
\arg\min
\theta \mathcal L(\theta)$$。因此Loss的一个本质是:Loss是任务要求的标量化表示。它将不同输出映射为可以比较的标量从而建立(参数)优劣排序。

至于如何在可能的参数中,寻找Loss更小的参数,这属于后续的梯度下降部分。

从度量到Loss

前文中我们讨论了度量。度量首先描述的是关系。假设模型先把输入映射到特征空间,此时我们得到两个表示,并计算距离/相似度/核函数

但是,度量本身还不能够称为Loss,因为度量只能得到一个标量,而不能告诉我们这个结果是好还是坏。具体好坏取决于我们的任务目标。Loss在度量得到的结果中必须加一个判断:这种关系是否符合我们的目标。具体来说,我们可以通过以下五个过程将度量转换成Loss

层次 作用
表示 模型把输入映射到某个空间
度量或相似性 描述样本之间的关系
任务偏好 规定希望关系变大还是变小
违反程度 判断当前关系偏离目标多少
惩罚函数 将违反程度映射成 Loss

回归

假设真实值和预测值的距离是,这个时候我们可以直接将这个距离当作Loss(MAE),也可以进一步做平方(MSE)。

这里可以体现出,同一个距离,可以构造出不同的Loss。这里MAE和MSE使用的就是同一种基础误差,但惩罚曲线不同。MSE主要是线性惩罚,而MSE对于大误差会收到额外误差。

对比学习

简单来说,我们希望同类样本距离尽可能小,异类样本距离至少超过一个间隔,没有达到这个要求就需要惩罚

这里第一项是同类样本的距离,第二项是异类样本的惩罚。

这就体现了从距离 到 关系判断 再到 违反程度 最后到Loss。

Ranking Loss

此时从距离扩展到了评分。我们不直接比较两个样本之间的距离,而是比较模型给出的分数。

比如异常检测时,模型为每个样本输出风险分数,我们希望漏洞样本的风险高于正常样本

并要求进一步拉开间隔 m,于是当前违反程度可以写成

最终我们可以得到Ranking Loss

当然也可以用softplus。这里没有直接使用几何距离,但底层思想相同:先定义关系,再惩罚违反关系的程度。

为什么不能直接优化真实目标

平时我们评估输出好不好,通常依靠指标:Precision,F1,ACC等等。那为什么不直接用这个指标作为损失,而是构造一个代理损失

关于这个我觉得还是挺好想的。直观来说是:真实目标是决策结果,但训练需要的是可学习的局部信号。

不过度展开,简单来说,我们训练是一个逐步改进的过程,参数位于一个连续空间中,训练过程需要不断比较邻近参数,也就是说我们需要知道距离正确的程度。而如果仅仅靠真实目标,我们只有true和false的最终答案,无法找到参数最优的改变方向和步长。

这块具体需要最优化理论的相关知识

所以我们引入代理 Loss,构造一个更适合学习的地形,牺牲了只看最终结果的简洁性,换取了更丰富的局部信息

0-1 Loss到代理Loss

对于二分类任务,如果我们直接将目标作为损失函数,那么Loss如下

其中是模型输出的连续分数,然后通过阈值得到最终决策。我们直接目标是y_hat = y。

ys也就是margin,表示决策边界。

HInge Loss

不仅要求分类正确,还要距离决策边界足够远。这里具体可以参见 SVM

这里一系列我先略。总的来说,一个好的代理Loss要满足以下标准

  • 方向一致:Loss降低时,真实目标通常也改善
  • 局部可辨别:参数发生小变化时,Loss应能反映改善还是恶化
  • 结构匹配:单样本分类用单点Loss,相对排序用Pairwise Loss,分布对齐用分布级Loss

另外,还有一个我呢提就是一些指标比较复杂,比如F1分数,涉及到了整个数据集,这个时候往往需要涉及不同形式的多种代理目标

Loss的三种基本粒度

Loss的粒度回答的是一次计算Loss时,我们约束的对象是什么层次的

单点Loss

单点Loss用于判断一个样本是否符合目标,如,它只关心当前样本本身,不需要参考其他样本。

常见例子如下:

任务 单点 Loss
回归 MSE、MAE、Huber Loss
分类 Cross Entropy、BCE
图像重建 像素级 L1、L2 Loss

直观上来说,每一个样本都有一个相对明确的答案。模型只需要逐个样本对照答案,修正自己的输出。

单点Loss能够回答这个样本预测的正确程度,但不能回答样本之间的相对结构是否合理。例如,模型可以把猫狗样本分类正确,并在特征空间中放得很远;也可以把猫狗样本放得很近,只在分类头的最后一层勉强将其分开。也就是说,如果我们关系特征空间的结构,仅仅靠单点Loss还不够。

CE的设计就很好解释了上述为什么目标不能作为Loss的原因。这里补充几个不得不说的,就是一些基于CE的魔改,比如说Focal Loss,让模型减少在已经掌握的简单样本上重复花费精力,将更多注意力转向困难样本,本质是动态样本加权,权重设计是:

关系级Loss

有些任务的核心并不是单个样本的绝对输出是多少,而是两个样本之间应该满足什么关系。比如说同类样本更接近,异类样本更远,A类样本的评分分数应该大于B类,查询图片应该比无关图片更接近正确图片。

此时,Loss的输入不再只是一个样本,而是多个样本

Pairwise

直观上来说,正样本(同类样本)我们希望它们的距离尽量近,而负样本的距离能够拉开(大于等于margin)。这也是对比学习的思想

Triplet

在上述思想上进一步比较三个样本

  • Anchor:基准样本
  • Positive:正样本(与基准相似的样本
  • Negative:负样本(与基准不同的样本

我们希望:

这对应的就是Triplet Loss

它不要求两个样本的距离必须等于多少,而是要求正样本应当比负样本更接近。是一种相对约束

Ranking Loss

有时候不关心特征距离而是评分顺序。比如说异常样本的评分应该高于正常样本。也就是对于评分函数 s,设计Loss

相对于分类Loss来说,Ranking loss更关心预测得分的相对关系。也就是说,我们不关心具体的特征值是多少,我们只需要关心样本之间的距离是否足够接近或者足够远离

Ranking Loss的目的是去预测样本之间的相对距离,这个任务也常常被称为度量学习

其实吧,我认为其实没有分得这么开。Ranking Loss常常用于图像检索,而我认为对于细粒度图像分类来说,其实比起分类更像是检索问题。

分布级Loss

假设我们有一组生成图像,我们不能要求每张AIGC图像都能找到原型真实图像与之对应。我们真正希望的是生成样本整体上应当落在真实数据分布附近。

这点可以结合最近兴起的流形假说来扩展思考。

常见例子有KL上散度、MMD、Wasserstein Distance。这里在度量里都讲过了,不过多叙述

经典Loss推导

额不想推,主要讲讲对比学习类的。

对比学习思想是

正样本相对近,负样本相对远,负样本的违反程度是 ,如果满足我们的最小距离 margin 就不再惩罚,因此使用hinge:

最终合并得到Contrastive Loss

Triplet Loss

公式不必多说,也就是多加了一个基准样本。从我的直觉上来说的话,上面的Pair-wise比起传统分类多了一种相对排序的思想,即正负样本需要保持相对距离;而Triplane多了一种检索的意味,不过同样也是排序的思想。

infoNCE

一个batch中有多个负样本,而上述Loss都只能选一个负样本。infoNCE将问题改写成一次候选识别任务,让正样本和bactch中所有样本同时比较。

我们给定Anchor:,以及一组候选样本:,假设其中只有一个候选样本是正样本:

我们先计算每个候选者与 的相似度:

我们的目标是:正样本的相似度应当高于所有负样本

从排序改写成分类

我们将相似度放入Softmax,得到

这个函数可以理解成,在所有候选样本中,模型认为第 k 个样本是正样本的概率。对于这个概率,我们计算负对数似然,得到:

此时要想降低Loss有两条途径。一是提高正样本的相似度,二是降低负样本的相似度。同时需要注意到,负样本的影响并不是相同的

我们设,那么对于一个负样本,其梯度权重大致与

成正比,那么和很不相似的容易负样本,影响接近于0,而于很相似的困难负样本,会自动获得更大权重。

SupCon

infoNCE充分利用所有负样本,那么SupCon就利用所有正样本。当然前提是我们事先知道batch内所有样本的标签。

对于每一个正样本,我们都可以计算一次infoNCE:

然后对所有正样本取平均

注意标准的Supcon在对数外面取平均,因为这样每一个同类正样本都应该获得较高相似度,更有利于形成紧致的类内结构。如果将求平均放到对数内部的话,如下所示:

此时只要求分配给全部Positive的总概率足够大,可能导致模型走捷径,将很高概率分配给一个容易的正样本,而忽略其他困难样本。

Loss的组合使用