平均绝对误差(MAE loss)—鲁棒的回归损失

平均绝对误差损失(MAE loss)—鲁棒的回归损失

什么是平均绝对误差损失?

假设我们有真实值:

y _ true = y = [ y 1 y 2 y 3 ] y\_\text{true}=y=\begin{bmatrix}y_1\\y_2\\y_3\end{bmatrix} y_true=y= y1y2y3

和预测值:

y _ pred = y ^ = [ y 1 ^ y 2 ^ y 3 ^ ] y\_\text{pred}=\widehat{y}=\begin{bmatrix}\widehat{y_1}\\\widehat{y_2}\\\widehat{y_3}\end{bmatrix} y_pred=y = y1 y2 y3

平均绝对误差(Mean Absolute Error)损失可以写为:

M A E = 1 N ∑ i = 1 i = N ∣ y _ true i − y _ pred i ∣ M A E = 1 N ∑ i = 1 i = N ∣ y i − y i ^ ∣    ⟹    M A E = 1 3 [ ∣ y 1 − y 1 ^ ∣ + ∣ y 2 − y 2 ^ ∣ + ∣ y 3 − y 3 ^ ∣ ] \begin{aligned}MAE&=\frac{1}{N}\sum_{i=1}^{i=N}|y\_\text{true}_i-y\_\text{pred}_i|\\\\MAE&=\frac{1}{N}\sum_{i=1}^{i=N}|y_i-\widehat{y_i}|\\\\\implies MAE&=\frac{1}{3}[|y_1-\widehat{y_1}|+|y_2-\widehat{y_2}|+|y_3-\widehat{y_3}|]\end{aligned} MAEMAEMAE=N1i=1i=Ny_trueiy_predi=N1i=1i=Nyiyi =31[y1y1 +y2y2 +y3y3 ]

其中,‘3’代表 y _ true y\_\text{true} y_true y _ pred y\_\text{pred} y_pred中标量元素的个数。

Python中,利用Numpy,平均绝对误差损失可以写为:

import numpy as np
np.random.seed(2001716)

# defining MAE
def mae(y_true, y_pred):
    return np.mean(abs(y_true - y_pred))

如何计算MAE的梯度?

真实值 y _ true y\_\text{true} y_true固定,MAE的值与 y _ pred y\_\text{pred} y_pred有关,也即与 ( y 1 ^ , y 2 ^ , y 3 ^ ) (\widehat{y_1},\widehat{y_2},\widehat{y_3}) (y1 ,y2 ,y3 )有关。

M A E = f ( y 1 ^ , y 2 ^ , y 3 ^ ) MAE = f(\widehat{y_1},\widehat{y_2},\widehat{y_3}) MAE=f(y1 ,y2 ,y3 )

MAEJacobian矩阵(函数的一阶偏导数以一定方式排列而成的矩阵)为:

J = ∂ ( M A E ) ( y 1 ^ , y 2 ^ , y 3 ^ ) = [ ∂ ( M A E ) ∂ ( y 1 ^ ) ∂ ( M A E ) ∂ ( y 2 ^ ) ∂ ( M A E ) ∂ ( y 3 ^ ) ] J=\frac{\partial(MAE)}{(\widehat{y_1},\widehat{y_2},\widehat{y_3})}=\begin{bmatrix}\frac{\partial(MAE)}{\partial(\widehat{y_1})}\\\\\frac{\partial(MAE)}{\partial(\widehat{y_2})}\\\\\frac{\partial(MAE)}{\partial(\widehat{y_3})}\end{bmatrix} J=(y1 ,y2 ,y3 )(MAE)= (y1 )(MAE)(y2 )(MAE)(y3 )(MAE)

分别计算Jacobian矩阵中的每一个元素得到:

   ⟹    J = [ − ( y 1 − y 1 ^ ) 3 ∣ y 1 − y 1 ^ ∣ − ( y 2 − y 2 ^ ) 3 ∣ y 2 − y 2 ^ ∣ − ( y 3 − y 3 ^ ) 3 ∣ y 3 − y 3 ^ ∣ ] ⟹ J = − 1 3 ( [ y 1 − y 1 ^ y 2 − y 2 ^ y 3 − y 3 ^ ] / [ ∣ y 1 − y 1 ^ ∣ ∣ y 2 − y 2 ^ ∣ ∣ y 3 − y 3 ^ ∣ ] ) ⟹ J = − 1 3 y _ t r u e − y _ p r e d ∣ y _ t r u e − y _ p r e d ∣ \begin{aligned} \implies J&=\begin{bmatrix}\frac{-(y_1-\widehat{y_1})}{3|y_1-\widehat{y_1}|}\\\\\frac{-(y_2-\widehat{y_2})}{3|y_2-\widehat{y_2}|}\\\\\frac{-(y_3-\widehat{y_3})}{3|y_3-\widehat{y_3}|}\end{bmatrix} \\ \Longrightarrow J&=-\frac13(\begin{bmatrix}y_1-\widehat{y_1}\\\\y_2-\widehat{y_2}\\\\y_3-\widehat{y_3}\end{bmatrix}/\begin{bmatrix}|y_1-\widehat{y_1}|\\\\|y_2-\widehat{y_2}|\\\\|y_3-\widehat{y_3}|\end{bmatrix}) \\ \Longrightarrow J&=-\frac13\frac{y\_true-y\_pred}{|y\_true-y\_pred|} \end{aligned} JJJ= 3∣y1y1 (y1y1 )3∣y2y2 (y2y2 )3∣y3y3 (y3y3 ) =31( y1y1 y2y2 y3y3 / y1y1 y2y2 y3y3 )=31y_truey_predy_truey_pred

其中,‘3’代表 y _ true y\_\text{true} y_true y _ pred y\_\text{pred} y_pred中标量元素的个数。

Python中,利用Numpy,平均绝对误差损失的Jacobian矩阵可以写为:

# defining MAE gradients

def mae_grad(y_true, y_pred):                
    N = y_true.shape[0]
    return -((y_true - y_pred) / (abs(y_true - y_pred) + 10**-100)) / N

MAE的优缺点

ru30sc.png

😀优点:由于MAE计算的是绝对误差,无论是 ( y _ true i − y _ pred i ) > 1 (y\_\text{true}_{i}-y\_\text{pred}_{i})>1 (y_trueiy_predi)>1还是 ( y _ true i − y _ pred i ) < 1 (y\_\text{true}_{i}-y\_\text{pred}_{i})<1 (y_trueiy_predi)<1,没有平方项的作用,它们产生的惩罚力度相同,也不会被过度放大,因此MAE无论对于什么样的输入值,都能产生稳定的梯度, 不会导致梯度爆炸,能得到较为稳健的解,同时对离群点不过分敏感,其鲁棒性更好

☹️缺点:在我们需要关注模型对某些局外点的预测时不太适用。MAE在训练中产生的梯度始终很大,且在0点连续但不可导,这意味着即使对于小的MAE损失值,其产生的梯度也是大的。这不利于函数的收敛,模型学习速度慢,同时也会导致在使用梯度下降训练模型时,在结束时可能会遗漏全局最小值

MAE loss over.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值