深度学习笔记(五)

常见损失函数

Posted by Pelhans on April 15, 2019

眼睛看过只是别人的,整理出来并反复学习才是自己的。

概览

损失函数用来估计模型的预测值与真实值之间的不一致程度。模型通过预定的损失函数进行学习并更新参数,同时它也是一种评估模型好坏的方法。根据机器学习任务的不同,损失函数可分为分类和回归两大类,下面我们对常见的损失函数做一个总结。该文章将保持更新。

分类

0-1 损失

0-1 损失函数的形式是最简单的,它的公式为:

其中 $y_{i}$ 是真实值,$\hat{y}_{i}$ 是模型预测值。$\delta$为克罗内克符。上式含义为为当预测标签与真实标签一致时,损失为0,否则为1。

该损失函数因为不包含 x,因此无法用于反向传播。

交叉熵损失函数

我们知道信息熵的定义公式为 $-p\log p$。假设有两个概率分布 p(x) 和 q(x),其中 p 是已知的分布(ground truth),q 是未知的分布(预测分布),则交叉熵函数是两个分布的互信息,可以反应两分布的相关程度:

其中 M 表示类别总数。交叉熵损失函数在 logistic 回归中是权重 w 的凸函数,但在神经网络中不是凸的。更直观一些,上式可以用另一种方式表达:

当真实标签 $y_{i}$为 1时,函数后半部分消失,当真实标签为0时,后半部分消失。当预测值 $\hat{y}_{i}$和真实值相同时,损失函数为0.

Softmax 损失函数

Softmax 损失函数的全程是 softmax with cross-entropy,其实就是 softmax 和交叉熵组合而成。损失函数公式如下:

把相关公式先整理一下,首先假设输入x经由线性层得到输出z:

而后 z 通过softmax 转换为概率:

结合 ground truth 计算损失函数:

现在我们想求与之相关的各项导数:, , , , ,

上式有一个特别的说法,在其他博文里看到了,大体是说会存在 的情况,此时上式第三步分步求导那就变了,因为 $e^{z_{j}}$对 $z_{i}$求导为0,所以分步求导第一项就消失了。虽然从公式上理解,但 ground truth 只有1个值为1,这种 j 对 i求导的情况是否真的有必要还是不太理解。这里取他们的说法。因此:

原始的 softmax 损失函数非常优雅、简洁,广泛应用于分类问题。它的特点就是优化类间的距离非常棒,但是优化类内距离时比较弱。

Softmax 损失函数的改进

Focal loss

二分类问题中,交叉熵损失函数为:

而 Focal loss 的公式如下所示:

首先在原基础上加了一个因子,其中 r>0 使得减少易分类样本的损失,使总损失函数更加专注于困难的、错分类的样本。此外,加入平衡因子 $\alpha$,用来平衡正负样本本身的比例不均。

Large-Margin Softmax Loss

Softmax loss 擅长学习类间的信息,因为它采用类间的竞争机制,只关心对于正确标签预测概率的准确性,忽略了其他非正确标签的差异,导致学习到的特征比较散。关于从最优化角度看 Softmax loss,可以看 王峰的这篇文章。那么怎么减小类内方差呢?下面给出 L-softmax loss的定义:

其中 m 是整数,它决定类内的聚拢程度。m值越大则分类边缘越大,同时学习目标就越难。从下图可以看出m的效果。其中 第一列是m为1,也就是原始损失函数的时候,可以看到此时类间的距离还可以,但类内间距比较大。第二幅图是 m=2时,可以看到类内间距明显小了很多,而越往后随着m的增大类内间距越小。

那么为什么会有这种效果呢?个人理解,以前分类的类内角度搜索范围是 $\theta\in [0,\pi]$,在加了 m以后,它的范围缩小到 $\frac{\theta}{m}\in [0, \frac{\pi}{m}]$。因此类内间距就变小了。但带来的坏处也很明显,随着m的增大,搜索空间越来越小,学习难度也就越来越高。

KL 散度

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

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

因此 $KL(p|q)$ 的散度也可以说是p与q的交叉熵和p信息熵的和。同时需要注意的时,KL散度对p、q是非对称的。

Hinge 损失

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

其中 y 的标签为1或-1. 如果分类正确,loss为0,否则为 $1-\hat{y}$。

指数损失

用于Adaboost集成学习算法中,特点是梯度比较大,定义为:

logistic 损失

logistic 取了 指数损失的对数形式,它的梯度变化相比于指数损失更加平缓:

回归问题

均方误差 MSE /L2损失

MSE,mean squared error的缩写,在 逻辑回归问题中用到过,公式定义为:

L2 损失也常常作为正则项出现。当预测值与目标值差异很大时,梯度容易爆炸。

平均误差 MAE / L1 损失

Mean absolute loss(MAE)也被称为L1 Loss,是以绝对误差作为距离:

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

距离损失

知乎专栏中,一位博主总结了大量的距离损失Tensorflow中的损失函数,很值得参考。包含:

  • 欧氏距离
  • 曼哈顿距离
  • 切比雪夫距离
  • 闵式距离
  • 标准化欧氏距离
  • 夹角余弦
  • 皮尔逊相关系数
  • 汉明距离
  • JS散度
  • Hellinger distance
  • 巴氏距离
  • MMD距离(Maximum mean discrepancy)
  • Wasserstein distance

参考

从最优化的角度看待Softmax损失函数
Tensorflow中的损失函数
【AI初识境】深度学习中常用的损失函数有哪些(覆盖分类,回归,风格化,GAN等任务)?
【技术综述】一文道尽softmax loss及其变种
损失函数改进之Large-Margin Softmax Loss