对损失函数的总结(持续更新)

面试中被boss问到我了解的损失函数有哪些???瞬间懵逼。。

现在总结几种常见的损失函数:

(1)0-1损失:L = L(Y, f(x)) = 1 if ( Y != f(x)) else 0

01损失感觉实际使用的地方很少,只是判断函数值是否为GT,而且这个损失函数是非凸的,可以统计有多少样本预测出错。

勘误:01损失在SVM中出现,只是由于01误差非凸,不连续的数学性质不好,导致目标函数不易求解,所以一般使用Hingeloss来代替, 称为代替损失,一般代替损失是凸的连续函数且是01损失的上届(画图证明)


(2)平方损失 也就是均方误差MSE:

L(Y, f(x)) = (Y - f(x)) ^ 2 

这个函数最普遍使用。存在一些问题在于:当预测的值偏差很大的时候损失会很大(损失>1时进行平方就很大,反之在损失<1时平方就会很小),而且每个样本的权重是一样的(均等化)。但是在我们自己项目中需要这样属性(就是针对不同部位的偏差,得到不同量级的损失-》基于Hip的中心点偏差,手臂和腿活动范围较大,所以会导致最后预测位置的损失较大,那么网络会更关注在手腿部位,而头、脊椎活动范围较小而且离hip较近则损失较小,反向传播时梯度也不大,这样就和手腿进行差别化学习)。

(3)绝对损失函数:

L(Y,f(x) ) = |Y - f(x)|

这种损失函数也使用的比较少,然鹅在RPN网络得到最后的损失是Smooth l1 loss. 也就是在|x| < 1部分 损失函数为1/2 |x|^2, 在|x| > 1部分 损失函数为|x| , 这样画出来的函数图像据说是对离群点更鲁棒(我个人理解就是对L1loss求导 得到的梯度就是(+/- )f'(x), 而对L2损失求导得到梯度为(Y- f(x)) * f'(x)), 即当f(x)非常诡异的时候L1loss梯度更新时只跟f'(x)相关,和最终预测值无关。当出现异常值时L2loss求得到导数容易爆炸。可以说L1损失能避免离群点导致的梯度爆炸。

(4)对数损失 或者称为对数似然损失函数

L(Y , P(Y|X)) = -log P(Y|X)

这种损失函数就是LR中目标函数。



最后来个装逼的Multi-task loss:

在物体检测任务中出现最多,例如Yolo中最终损失为包括标签预测的评分损失,还有IOU损失,还有BB的h、w损失。我个人理解的多任务损失就是多种损失利用一些超参来联系到一起去。这样存在一些道理就是在最后对优化的参数求导时,无关项直接舍去。

猜你喜欢

转载自blog.csdn.net/poilkj110/article/details/80077477
今日推荐