损失函数

1 损失函数的理解与区分

如何理解并区分误差(error)/损失(loss)/成本(cost)/目标(objective)函数?

  • 误差函数描述的是预测值与真实值的偏差:$y_{pred}-y_{true}$
  • 损失函数是对预测误差的负面影响的量化,比如平方误差损失认为3个单位的误差会导致9个单位的负面影响;损失函数通常是针对单个样本的描述
  • 损失函数是成本函数的一部分,成本函数通常是针对训练集的描述,既包含所有样本的损失,也包含针对模型复杂度的惩罚(正则项)
  • 成本函数是目标函数的一种,但不是所有目标函数都是成本函数,比如最大似然估计中的目标函数是最大化生成概率。成本函数和损失函数一般追求最小化,而目标函数是追求最优(可能是最大化,也可能是最小化)

补充1:还有一个叫法是风险(risk)函数,而风险函数可以分为经验风险和结构风险。其中经验风险可以看作损失函数的期望值,而结构风险=经验风险+正则项=成本函数

补充2:在遗传算法中,还有一个概念叫适应度(fitness)函数,也称为评价函数。适应度函数是任何评估个体/解决方案质量的函数。在监督学习问题中,可以看作误差函数的同义词。在处理强化学习问题,可以看作奖励函数的同义词。

补充3:效用(utility)函数通常与误差/损失函数相反,一般追求效用函数的最大化,常见于经济学领域

2 常见损失函数

0-1 损失函数:求导麻烦,不常用 $$L=\begin{equation} \left\{ \begin{gathered} 1,Y\neq f(X) \ \\ 0,Y=f(X) \end{gathered} \right. \end{equation}$$ 绝对值损失函数:求导麻烦,不常用 $$L=|Y-f(X)|$$ 对数损失函数:常用于分类任务 $$L=-logP(Y|X)$$ 均方损失函数:常用于回归任务 $$L=\frac{1}{n}\Sigma_{i=1}^n(y_i-f(x_i))^2$$ 指数损失函数:Adaboost 算法常用 $$L=\frac{1}{n}\Sigma_{i=1}^ne^{-y_if(x_i)}$$ Hinge 损失函数: SVM 算法常用 $$ L(y) = \max{(0, 1-yf(x))} $$

3 交叉熵

设目标分布为$p$,预测分布为$q$,则两个分布的交叉熵(Cross entropy): $$L=-\Sigma_{i=1}^np_ilog(q_i)$$

扩展阅读:交叉熵 VS KL散度

对于二分类任务,此时目标分布$P$转为真实标签$y$,每个样本的交叉熵: $$L_{CE}= \begin{equation} \left\{ \begin{gathered} -log(q),\ if\ \ y=1 \ \\ -log(1-q),\ if\ \ y=0 \end{gathered} \right. \end{equation}$$ 最终的二分类交叉熵损失函数可表示如下: $$L=-\frac{1}{n}\Sigma_{i=1}^n[ylog(q)]$$

对于多分类问题,真实标签$y$扩展为one-hot向量,预测概率$p$也变为向量,其他不变

交叉熵作为损失函数的特点:1. 非负性 2. 当预测输出接近真实值时交叉熵趋近于0

针对不平衡任务,交叉熵损失可改进为 Focal loss

4 Center Loss

内聚外斥:判别模型在学习了一种低类内距离(Intra-class Distance)与高类间距离(Inter-class Distance)的特征。Center Loss 就是基于此类想法,可以高效的计算出这种具判别性的特征: $$L_{C} = \frac{1}{2}\sum^{m}_{i=1}||x_{i}-c_{y_{i}}||^{2}_{2}$$

  • 其中$x_{i}$表示FCN(全连接层)之前的特征,$c_{y_i}$表示第$y_{i}$个类别的特征中心, $m$表示 batch size
  • $L_{C}$的目标是最小化每个特征与其特征中心的方差, 即最小化类内距离

Center Loss 的不足之处:

  • 其特征中心为存储在网络模型之外的额外参数, 不能与模型参数一同优化
  • 当类别数量较大时, mini-batch 可能无法提供足够的样本进行特征中心的估计

Center Loss 可以结合Softmax 搭配使用

$$\begin{eqnarray}L & = & L_{S} + \lambda L_{C} \ &=& -\sum^{m}_{i=1}log\frac{e^{W_{y}^{T}x_{i}+b_{y_{i}}}}{\sum^{m}_{i=1}e^{W^{T}_{j}x_{i}+b_{j}}} + \frac{\lambda}{2}\sum^{m}_{i=1}||x_{i}-c_{y_{i}}||^{2}_{2}\ \end{eqnarray}$$

  • 平衡两种监督信号: 在Softmax拉开类间距离的同时, 利用Center Loss最小化类内距离
  • Center Loss 平衡两种监督损失的过程中还需要搜索平衡超参数,计算成本较高

5 Ranking Loss

Ranking Loss 的目的是去预测输入样本之间的相对距离。这类任务经常也被称之为度量学习 (metric learning)。Ranking Loss 常见的两种类型:

  1. Pairwise Ranking Loss:比较训练数据样本对表示之间的距离

$$ \left.L= \left\{\begin{array}{ccc}{d(r_{a},r_{p})}&{if}&{PositivePair} \\{max(0,m-d(r_{a},r_{n}))}&{if}&{NegativePair}\end{array}\right.\right. $$

  • 其中 $d$ 表示距离函数,$r$ 表示样本,$m$ 表示距离的边际值
  • $r_a$ 为锚点样本表示,$r_p$ 为正样本表示,$r_n$ 为负样本表示
  • 当两个对元素的表示之间的距离大于边距 $m$ 时,损失将为 0
  • 上式追求负样本对距离大于边距 $m$ ,正样本对距离尽可能小
  1. Triplet Ranking Loss:比较训练数据样本三元组表示之间的距离

$$ L(r_{a},r_{p},r_{n})=max(0,m+d(r_{a},r_{p})-d(r_{a},r_{n})) $$

  • Easy Triplets:$d(r_a,r_n)>d(r_a,r_p)+m$,负样本距离锚点样本足够远,损失为 0
  • Hard Triplets:$d(r_a,r_n)<d(r_a,r_p)$,负样本比正样本更接近锚点,损失大于 $m$
  • Semi-Hard Triplets:$d(r_a,r_p)<d(r_a,r_n)<d(r_a,r_p)+m$,负样本比正样本更接近锚点,但是距离差小于 $m$ ,所以损失仍然是正的(并且小于 $m$ )

由于 Ranking Loss 常用于很多领域,所以有很多别名:

  • Ranking loss:常用于信息检索领域,希望模型以特定顺序对项目进行排名
  • Margin Loss:常用于使用边际来比较样本表示距离的场景
  • Contrastive Loss:常用于对比学习,一般为 Pairwise Ranking Loss
  • Triplet Loss:常用于三元组训练时,即 Triplet Ranking Loss
  • Hinge loss:也叫max-margin objective,是 SVM 的分类损失函数

参考

What is the difference between a loss function and an error function?
Objective function, cost function, loss function: are they the same thing?
What are the major differences between cost, loss, error, fitness, utility, objective, criterion functions?
Understanding Ranking Loss, Contrastive Loss, Margin Loss, Triplet Loss, Hinge Loss and all those confusing names

往年同期文章