【MindSpore易点通】网络实战之计算回归模型类Loss函数
【MindSpore易点通】网络实战之计算回归模型类Loss函数
简介
本篇内容给大家分享下计算回归模型的loss函数,这是loss系列的第三篇,之前两篇的传送门如下,欢迎浏览~
【MindSpore易点通】网络实战之计算相似度类Loss函数
MAE loss、MSELoss和RMSE loss
**L1 loss:平均绝对误差(MAE)是一种用于回归模型的损失函数。**MAE是真实值和预测值之间的绝对差值之和。所以它衡量的是一组预测值中的平均误差大小,不去考虑它们的方向。范围为0到∞。

优点:MAE有个优点就是,对于离群点(异常值)不那么敏感。因为MAE计算的是误差|f(x)-y|,是一个绝对值,所以无论对于什么样的输入值,都有着稳定的梯度,稳定的梯度让其惩罚都是固定的。不会导致梯度爆炸问题,所以在求最优解的过程中也会比较稳定。
缺点:MAE曲线连续,但是在|f(x)-y|=0处不可导。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。
**L2 loss:均方误差(MSE)是回归损失函数中最常用的误差。**它是预测值f(x)与目标值y之间差值平方和的均值,其公式如下所示:

下图是均方误差值的曲线分布,其中最小值为预测值为目标值的位置。我们可以看到随着误差的增加损失函数增加的更为迅猛。

也因此引出来了RMSELoss:均方根误差
RMSELoss用来测量x和y元素之间的均方根误差,其中x是输入Tensor,y是目标值,它可以让损失函数值的变化不再那么迅猛。
假设x和y为一维Tensor,长度为N,x和y的loss为:

从表达式很明显可以对比出来是MAE开方得到的,重点在于开方的意义,这将输出和目标值同等单位的值,更方便使用,MSE和RMSE的内核还是一致的。
优点:对比与MAE,MSE的函数曲线是连续,处处可导的,便于使用梯度下降算法,是一种常用的损失函数。而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。
缺点:当真实值y和预测值f(x)的差值大于1时,会放大误差;而当差值小于1时,则会缩小误差,这是平方运算决定的。MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。这样就会对异常值比较敏感,受其影响较大。
对比MAE和MSE受异常值的影响,MSE会给离群点更高的权重,这就会影响其它正常点数据的预测效果,最终降低整体的模型性能。针对上面带有离群点的数据,MAE的效果要好于MSE。如下图:

如果从梯度求解以及收敛方面选择,MSE是优于MAE。MSE梯度值也是动态变化的,并且可导,能够快速的收敛;而MAE在0点处不可导,且其梯度保持不变。对于很小的损失值其梯度也很大,在深度学习中,就需要使用变化的学习率,在损失值很小时降低学习率。
那么有没有方法能够避开MAE的不可导以及MSE的对异常值敏感的问题呢,那么它们来啦,就是Huber Loss和SmoothL1Loss。
Huber Loss和SmoothL1Loss
Huber Loss是一个用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性。
·当预测偏差小于δ时,它采用平方误差,
·当预测偏差大于δ时,采用的线性误差。
相比于最小二乘的线性回归,HuberLoss降低了对离群点的惩罚程度,所以 HuberLoss 是一种常用的鲁棒的回归损失函数。
Huber Loss 定义如下

参数a通常表示residuals,写作y−f(x),当a = y−f(x)时,Huber loss的表达式以及函数形状为:

SmoothL1损失函数,如果预测值和目标值的逐个元素绝对误差小于设定阈值beta则用平方项,否则用绝对误差项。给定两个输入x,y,其中β代表阈值beta。SmoothL1Loss定义如下:

当 reduction 不是设定为 none 时,计算如下:

整体的计算逻辑和Huber Loss是一致的,都是采用设置阈值的方法,控制loss的计算方式,保证模型的鲁棒性。
总结
本篇内容首先分析了MAE和MSE损失函数的计算以及优缺点,因为MAE的不可导以及MSE的对异常值敏感,我们继续分析了它们的组合体Huber Loss和SmoothL1Loss,通过阈值分段式的组合,缓解了MAE和MSE的缺点。
谢谢浏览,如有不正确的地方欢迎留言指正~