深度学习剖根问底:各种Loss大总结

1. 指数损失函数(Adaboost)

学过Adaboost算法的人都知道,它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。在Adaboost中,经过m此迭代之后,可以得到fm(x):

深度学习剖根问底:各种Loss大总结

Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数α和G:

深度学习剖根问底:各种Loss大总结

而指数损失函数(exp-loss)的标准形式如下

深度学习剖根问底:各种Loss大总结

可以看出,Adaboost的目标式子就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为:

深度学习剖根问底:各种Loss大总结

几种损失函数的可视化图像

 

深度学习剖根问底:各种Loss大总结

参数越多,模型越复杂,而越复杂的模型越容易过拟合。过拟合就是说模型在训练数据上的效果远远好于在测试集上的性能。此时可以考虑正则化,通过设置正则项前面的hyper parameter,来权衡损失函数和正则项,减小参数规模,达到模型简化的目的,从而使模型具有更好的泛化能力。

2. log对数损失函数(逻辑回归)

有些人可能觉得逻辑回归的损失函数就是平方损失,其实并不是。平方损失函数可以通过线性回归在假设样本是高斯分布的条件下推导得到,而逻辑回归得到的并不是平方损失。在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即max F(y, f(x)) —-> min -F(y, f(x)))。从损失函数的视角来看,它就成了log损失函数了。

log损失函数的标准形式:

深度学习剖根问底:各种Loss大总结

刚刚说到,取对数是为了方便计算极大似然估计,因为在MLE中,直接求导比较困难,所以通常都是先取对数再求导找极值点。损失函数L(Y, P(Y|X))表达的是样本X在分类Y的情况下,使概率P(Y|X)达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为log函数是单调递增的,所以logP(Y|X)也会达到最大值,因此在前面加上负号之后,最大化P(Y|X)就等价于最小化L了。
逻辑回归的P(Y=y|x)表达式如下(为了将类别标签y统一为1和0,下面将表达式分开表示):

深度学习剖根问底:各种Loss大总结

将它带入到上式,通过推导可以得到logistic的损失函数表达式,如下:

 

深度学习剖根问底:各种Loss大总结

逻辑回归最后得到的目标式子如下:

 

深度学习剖根问底:各种Loss大总结

上面是针对二分类而言的。这里需要解释一下:之所以有人认为逻辑回归是平方损失,是因为在使用梯度下降来求最优解的时候,它的迭代式子与平方损失求导后的式子非常相似,从而给人一种直观上的错觉。
 

3. 二分类交叉熵损失sigmoid_cross_entropy:

深度学习剖根问底:各种Loss大总结

 

4. 二分类平衡交叉熵损失balanced_sigmoid_cross_entropy:

该损失也是用于2分类的任务,相比于sigmoid_cross_entrop的优势在于引入了平衡参数 ,可以进行正负样本的平衡,得到比sigmoid_cross_entrop更好的效果。

深度学习剖根问底:各种Loss大总结

5. 多分类交叉熵损失softmax_cross_entropy

深度学习剖根问底:各种Loss大总结

6. Focal loss:

focal loss为凯明大神的大作,主要用于解决多分类任务中样本不平衡的现象,可以获得比softmax_cross_entropy更好的分类效果。

深度学习剖根问底:各种Loss大总结

论文中α=0.25,γ=2效果最好。

深度学习剖根问底:各种Loss大总结

 

7. 合页损失hinge_loss:

也叫铰链损失,是svm中使用的损失函数。

由于合页损失优化到满足小于一定gap距离就会停止优化,而交叉熵损失却是一直在优化,所以,通常情况下,交叉熵损失效果优于合页损失。

深度学习剖根问底:各种Loss大总结

8. KL散度:

KL散度( Kullback–Leibler divergence),也叫相对熵,是描述两个概率分布P和Q差异的一种方法。它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。

深度学习剖根问底:各种Loss大总结

9. 最大间隔损失large margin softmax loss:

用于拉大类间距离的损失函数,可以训练得到比传统softmax loss更好的分类效果。

深度学习剖根问底:各种Loss大总结

最大间隔损失主要引入了夹角cos值进行距离的度量。假设bias为0的情况下,就可以得出如上的公式。

其中fai(seita)需要满足下面的条件。

深度学习剖根问底:各种Loss大总结

 

为了进行距离的度量,在cos夹角中引入了参数m。该m为一个正整数,可以起到控制类间间隔的作用。M越大,类间间隔越大。当m=1时,等价于传统交叉熵损失。基本原理如下面公式

深度学习剖根问底:各种Loss大总结

 

论文中提供的满足该条件的公式如下

深度学习剖根问底:各种Loss大总结

 

10. 中心损失center loss:

中心损失主要主要用于减少类内距离,虽然只是减少了累内距离,效果上却可以表现出累内距离小了,类间距离就可以增大的效果。该损失不可以直接使用,需要配合传统的softmax loss一起使用。可以起到比单纯softmax loss更好的分类效果。

深度学习剖根问底:各种Loss大总结


11. 回归任务loss:

均方误差mean squareerror(MSE)和L2范数:

MSE表示了预测值与目标值之间差值的平方和然后求平均

深度学习剖根问底:各种Loss大总结

L2损失表示了预测值与目标值之间差值的平方和然后开更方,L2表示的是欧几里得距离。

深度学习剖根问底:各种Loss大总结

MSE和L2的曲线走势都一样。区别在于一个是求的平均np.mean(),一个是求的更方np.sqrt()

深度学习剖根问底:各种Loss大总结

12. 平均绝对误差meanabsolute error(MAE )和L1范数:

MAE表示了预测值与目标值之间差值的绝对值然后求平均
 

深度学习剖根问底:各种Loss大总结

L1表示了预测值与目标值之间差值的绝对值,L1也叫做曼哈顿距离

深度学习剖根问底:各种Loss大总结

MAE和L1的区别在于一个求了均值np.mean(),一个没有求np.sum()。2者的曲线走势也是完全一致的。

深度学习剖根问底:各种Loss大总结

MSE,MAE对比:

深度学习剖根问底:各种Loss大总结

MAE损失对于局外点更鲁棒,但它的导数不连续使得寻找最优解的过程低效;MSE损失对于局外点敏感,但在优化过程中更为稳定和准确。

13. Huber Loss和smooth L1:

Huber loss具备了MAE和MSE各自的优点,当δ趋向于0时它就退化成了MAE,而当δ趋向于无穷时则退化为了MSE。
 

深度学习剖根问底:各种Loss大总结

Smooth L1 loss也具备了L1 loss和L2 loss各自的优点,本质就是L1和L2的组合。

深度学习剖根问底:各种Loss大总结

Huber loss和Smooth L1 loss具有相同的曲线走势,当Huber loss中的δ等于1时,Huber loss等价于Smooth L1 loss。

深度学习剖根问底:各种Loss大总结

对于Huber损失来说,δ的选择十分重要,它决定了模型处理局外点的行为。当残差大于δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。

Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对局外点具有更好的鲁棒性。

但Huber损失函数的良好表现得益于精心训练的超参数δ。

对数双曲余弦logcosh:

深度学习剖根问底:各种Loss大总结

深度学习剖根问底:各种Loss大总结

其优点在于对于很小的误差来说log(cosh(x))与(x**2)/2很相近,而对于很大的误差则与abs(x)-log2很相近。这意味着logcosh损失函数可以在拥有MSE优点的同时也不会受到局外点的太多影响。它拥有Huber的所有优点,并且在每一个点都是二次可导的。