title: 常见损失函数
subtitle: About loss and loss functions
date: 2021-12-12
author: NSX
catalog: true
tags: Loss


  • Loss functions
    • Loss functions for regression
      • Mean Absolute Error (L1 Loss)
      • Mean Squared Error
      • Mean Absolute Percentage Error
      • Root Mean Squared Error (L2 Loss)
      • Logcosh
      • Huber loss
    • Loss functions for classification
      • Hinge
      • Squared hinge
      • Categorical / multiclass hinge
      • Binary crossentropy
      • Categorical crossentropy
      • Sparse categorical crossentropy
      • Kullback-Leibler divergence

先思考一个问题。损失函数、代价函数和目标函数是一回事吗? 三者之间的关系大概是这样的。

2021-12-12-损失函数(分类/回归) - 图1

损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异。深度学习训练模型的时候就是通过计算损失函数,更新模型参数,从而减小优化误差,直到损失函数值下降到目标值 或者 达到了训练次数。

Loss functions for regression

1.1 Mean Absolute Error (L1 Loss)

平均绝对误差:Mean Absolute Error (MAE):MAE表示了预测值与目标值之间差值的绝对值然后求平均

2021-12-12-损失函数(分类/回归) - 图2
L1 损失具有稀疏性,为了惩罚较大的值,因此常常将其作为正则项添加到其他损失函数中作为约束,L1 损失的最大问题在于梯度在零点不平滑,会导致跳过极小值。

1.2 Mean Squared Error

均方误差 Mean Squared Error (MSE):MSE表示了预测值与目标值之间差值的平方和然后求平均

2021-12-12-损失函数(分类/回归) - 图3

简单直观,易于求导,当预测值与目标值差异很大时,梯度容易爆炸,通常用于回归任务。

但其背后也是有深刻的数学原理的。

2021-12-12-损失函数(分类/回归) - 图4

推导过程从最大似然出发,并且在误差服从正太分布的假设下,得出极大化最大似然等价于最小化残差平方和的结论。不过稍微了解下就可以了。

MSE,MAE对比:

2021-12-12-损失函数(分类/回归) - 图5

2021-12-12-损失函数(分类/回归) - 图6

1.3 Root Mean Squared Error (L2 Loss)

均方根误差 Root Mean Squared Error (RMSE)

2021-12-12-损失函数(分类/回归) - 图7

1.4 Huber loss

Huber Loss是一种用于回归问题有参损失函数,其结合了MSE(处处可导)MAE(对异常值不敏感)的优点。当预测偏差小于delta时,采用平方误差;当预测偏差大于delta时,采用线性误差。其中delta是需要确定的超参数。Huber Loss定义如下:(目标 t 和预测 p 之间的差异)

2021-12-12-损失函数(分类/回归) - 图8

当 𝛿 ~ 0 时 Huber 损失接近 MAE,当𝛿 ~ ∞ 时接近 MSE

Loss functions for classification

2.1 Hinge Loss

铰链损失 Hinge 主要用于支持向量机中,用来解决SVM中的间距最大化问题。它的称呼来源于损失的形状,定义为:

2021-12-12-损失函数(分类/回归) - 图9%3D%5Cmax%20(0%2C1-y%20%5Chat%7By%7D)%0A#card=math&code=l%28%5Chat%7By%7D%2C%20y%29%3D%5Cmax%20%280%2C1-y%20%5Chat%7By%7D%29%0A&id=vtyul)

其中 y 的标签为1或-1,2021-12-12-损失函数(分类/回归) - 图10是分类器输出的预测值. 如果分类正确,loss为0,否则为 2021-12-12-损失函数(分类/回归) - 图11。其含义为,当 Y 和 2021-12-12-损失函数(分类/回归) - 图12#card=math&code=f%28x%29&id=is2Jx) 的符号相同时(表示 2021-12-12-损失函数(分类/回归) - 图13#card=math&code=f%28x%29&id=RQJCf) 预测正确)并且| 2021-12-12-损失函数(分类/回归) - 图14#card=math&code=f%28x%29&id=jsDSe) |≥1时,hinge loss为0;当 Y 和 2021-12-12-损失函数(分类/回归) - 图15#card=math&code=f%28x%29&id=UJWdr) 的符号相反时,hinge loss随着 2021-12-12-损失函数(分类/回归) - 图16#card=math&code=f%28x%29&id=ZgEtA) 的增大线性增大。也即是,hinge损失不仅会惩罚错误的预测,也会惩罚那些正确预测但是置信度低的样本.

2.2 Categorical / multiclass hinge

hinge loss 仅适用于实际目标值为 +1 或 -1 的二元分类问题,但还有许多其他问题无法以二元方式解决。所以多类 hinge Loss 被提出,其公式如下:

2021-12-12-损失函数(分类/回归) - 图17%3D%5Csum%7By%20%5Cneq%20t%7D%20%5Cmax%20%5Cleft(0%2C1%2B%5Cmathbf%7Bw%7D%7By%7D%20%5Cmathbf%7Bx%7D-%5Cmathbf%7Bw%7D%7Bt%7D%20%5Cmathbf%7Bx%7D%5Cright)%0A#card=math&code=%5Cell%28y%29%3D%5Csum%7By%20%5Cneq%20t%7D%20%5Cmax%20%5Cleft%280%2C1%2B%5Cmathbf%7Bw%7D%7By%7D%20%5Cmathbf%7Bx%7D-%5Cmathbf%7Bw%7D%7Bt%7D%20%5Cmathbf%7Bx%7D%5Cright%29%0A&id=q3Y7v)

2.3 Binary crossentropy

我们知道信息熵的定义公式为 2021-12-12-损失函数(分类/回归) - 图18。假设有两个概率分布 2021-12-12-损失函数(分类/回归) - 图19#card=math&code=p%28x%29&id=qspEz) 和 2021-12-12-损失函数(分类/回归) - 图20#card=math&code=q%28x%29&id=fve01),其中 2021-12-12-损失函数(分类/回归) - 图21 是已知的分布(ground truth),2021-12-12-损失函数(分类/回归) - 图22 是未知的分布(预测分布),交叉熵函数则是两个分布的互信息,可以反应两分布的相关程度:2021-12-12-损失函数(分类/回归) - 图23

二元交叉熵的公式表达如下:

2021-12-12-损失函数(分类/回归) - 图24%3D-%5Cleft(y%7Bi%7D%20%5Clog%20%5Chat%7By%7D%7Bi%7D%2B%5Cleft(1-y%7Bi%7D%5Cright)%20%5Clog%20%5Cleft(1-%5Chat%7By%7D%7Bi%7D%5Cright)%5Cright)%0A#card=math&code=BCE%5Cleft%28y%7Bi%7D%2C%20%5Chat%7By%7D%7Bi%7D%5Cright%29%3D-%5Cleft%28y%7Bi%7D%20%5Clog%20%5Chat%7By%7D%7Bi%7D%2B%5Cleft%281-y%7Bi%7D%5Cright%29%20%5Clog%20%5Cleft%281-%5Chat%7By%7D%7Bi%7D%5Cright%29%5Cright%29%0A&id=oyCz8)

Loss的推导过程如下:(从极大似然出发得出二分类交叉熵损失形式)

2021-12-12-损失函数(分类/回归) - 图25

2.4 Categorical crossentropy

2021-12-12-损失函数(分类/回归) - 图26

categorical crossentropy (CE) 损失如下:

2021-12-12-损失函数(分类/回归) - 图27%3D-%5Csum%7Bi%3D1%7D%5E%7BM%7D%20y%7Bi%7D%20%5Clog%20%5Chat%7By%7D%7Bi%7D%0A#card=math&code=CCE%5Cleft%28y%7Bi%7D%2C%20%5Chat%7By%7D%7Bi%7D%5Cright%29%3D-%5Csum%7Bi%3D1%7D%5E%7BM%7D%20y%7Bi%7D%20%5Clog%20%5Chat%7By%7D%7Bi%7D%0A&id=peTbc)

2021-12-12-损失函数(分类/回归) - 图28

原始的 softmax 函数非常优雅、简洁,广泛应用于分类问题。**它的特点就是优化类间的距离非常棒,但是优化类内距离时比较弱。Softmax Loss 在 TensorFlow 中的实现可以如下:

  1. # 得到句子表示 e
  2. e = tf.reshape(newe_final.stack(), [-1, self.n_hidden])
  3. # 将句子表示转换为一个 T 维向量(T 为类别数)
  4. self.predict = tf.matmul(e, weights['softmax']) + biases['softmax']
  5. # 计算总损失
  6. self.total_loss = tf.nn.softmax_cross_entropy_with_logits(logits = self.predict, labels = self.labels))
  7. # 计算平均损失
  8. self.loss = tf.reduce_mean(self.total_loss)

2.5 Sparse categorical crossentropy

当 label 是整数目标而非分类格式时,可使用Sparse categorical crossentropy!它的执行方式与常规分类交叉熵损失非常相似,但允许您使用整数目标!

2.6 Kullback-Leibler divergence

KL散度用来衡量两个分布之间的相似性,定义公式为:

2021-12-12-损失函数(分类/回归) - 图29%3D%5Csum%7Bi%7D%20p%7Bi%7D%20%5Clog%20%5Cleft(%5Cfrac%7Bp%7Bi%7D%7D%7Bq%7Bi%7D%7D%5Cright)%0A#card=math&code=K%20L%28p%20%5Cmid%20q%29%3D%5Csum%7Bi%7D%20p%7Bi%7D%20%5Clog%20%5Cleft%28%5Cfrac%7Bp%7Bi%7D%7D%7Bq%7Bi%7D%7D%5Cright%29%0A&id=v9toV)

KL 散度是非负的,只有当 p 与 q 处处相等时,才会等于0。KL 散度也可以写成:

2021-12-12-损失函数(分类/回归) - 图30%3D%5Csum%7Bi%7D%20p%7Bi%7D%20%5Clog%20p%7Bi%7D-p%7Bi%7D%20%5Clog%20q%7Bi%7D%3D-l(p%2C%20p)%2Bl(p%2C%20q)%0A#card=math&code=K%20L%28p%20%5Cmid%20q%29%3D%5Csum%7Bi%7D%20p%7Bi%7D%20%5Clog%20p%7Bi%7D-p%7Bi%7D%20%5Clog%20q%7Bi%7D%3D-l%28p%2C%20p%29%2Bl%28p%2C%20q%29%0A&id=zaCBK)

因此 2021-12-12-损失函数(分类/回归) - 图31#card=math&code=KL%28p%7Cq%29&id=nlAEf)的散度也可以说是p与q的交叉熵和p信息熵的和。同时需要注意的时,KL散度对p、q是非对称的。

参考

*如何用深度学习来做检索:度量学习中关于排序损失函数的综述

【深度度量学习系列】Triplet-loss原理与应用

Retrieval with Deep Learning: A Ranking loss Survey Part 1

Retrieval with Deep Learning: A Ranking-Losses Survey Part 2

深度度量学习中的损失函数

*策略算法工程师之路-损失函数设计

基于GRU和am-softmax的句子相似度模型

一文弄懂各种loss function

深度学习笔记(五)常见损失函数

*人脸识别中Softmax-based Loss的演化史

Additive Margin Softmax Loss (AM-Softmax)