深度学习之常用的损失函数——MSE, MAE 和 Smooth L

1. 概念

损失函数,也叫代价函数。它是用来衡量机器学习的预测值与数据集的真实值之间的误差的函数。机器学习的过程就是想办法减小这个误差,来求得模型参数的最优解。
由于损失函数代表预测值和真实值之间的误差,所以它的值域是非负的。

2. 常用的损失函数

假设数据集有m个样本,其预测值表示为

y^=(y^(1),y^(2)...y^(m))\mathbf{\hat{y}}=(\hat{y}^{(1)}, \hat{y}^{(2)}...\hat{y}^{(m)})

真实值表示为

y=(y(1),y(2)...y(m))\mathbf{y}=(y^{(1)}, y^{(2)}...y^{(m)})

损失函数表示为

J(y^,y)J(\mathbf{\hat{y}}, \textbf{y})

均方误差(MSE)损失函数——L2L^2 损失函数

平方损失函数得到的是目标值与预测值之间差的平方的绝对值,其数学表达式如下

J(y^,y)=1mi=1m(y^(i)y(i))2J(\mathbf{\hat{y}}, \textbf{y}) = \frac{1}{m} \sum_{i=1}^{m} \left ( \hat{y}^{(i)} - y^{(i)} \right )^2

其函数图像为

  • 优点
    • MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法。
    • 随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。
  • 缺点
    • 当真实值y和预测值f(x)的差值大于1时,平方计算会放大误差,而当差值小于1时,平方计算则会缩小误差。MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。也就是说,对离群点(奇异值)比较敏感,受其影响较大

平均绝对误差(MAE)损失函数——L1L^1 损失函数

也叫绝对值损失函数,它是目标值与预测值之差的绝对值的平均值。其数学表示如下

J(y^,y)=1mi=1my^(i)y(i)J(\mathbf{\hat{y}}, \textbf{y}) = \frac{1}{m} \sum_{i=1}^{m} \left | \hat{y}^{(i)} - y^{(i)} \right |

其函数图像为

  • 优点
    • 相比于MSE,MAE有个优点就是,对于离群点不那么敏感。因为MAE计算的是误差(y-f(x))的绝对值,对于任意大小的差值,其惩罚都是固定的。无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解
  • 缺点
    • MAE曲线连续,但是在 y^(i)y(i)=0\hat{y}^{(i)} - y^{(i)} = 0 处不可导。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习

比较 MAE 和 MSE

  • 从梯度的求解以及收敛上,MSE是优于MAE的。MSE处处可导,而且梯度值也是动态变化的,能够快速的收敛;而MAE在0点处不可导,且其梯度保持不变。对于很小的损失值其梯度也很大,在深度学习中,就需要使用变化的学习率,在损失值很小时降低学习率。
  • 对离群(异常)值得处理上,MAE要明显好于MSE

如果离群点(异常值)需要被检测出来,则可以选择MSE作为损失函数;如果离群点只是当做受损的数据处理,则可以选择MAE作为损失函数。

Smooth L1 损失函数

Smooth L1L^1 损失函数结合了 L1L^1 损失函数和L2L^2损失函数。在误差接近0的区域使用L2L^2损失函数,以解决L1L^1 损失函数在0点不可导的问题。在误差远离0的区域使用L1L^1损失函数, 以解决奇异值对损失计算影响过大的问题。其数学表示如下

J(y^,y)=1mi=1mz(i)J(\mathbf{\hat{y}}, \textbf{y}) = \frac{1}{m} \sum_{i=1}^{m} z^{(i)}

其中,

z(i)={y^(i)y(i)  0.5  beta,otherwise[0.5  (y^(i)y(i))2] / beta,y^(i)y(i) < betaz^{(i)} = \left \{ ^ { [0.5 \ * \ (\hat{y}^{(i)} - y^{(i)})^2] \ /\ beta, \quad \left | \hat{y}^{(i)} - y{(i)} \right | \ < \ beta } _{\left | \hat{y}^{(i)} - y^{(i)} \right | \ - \ 0.5 \ * \ beta , \quad otherwise } \right.

按照我的理解 betabeta是对离群值的一个定义,当误差大于beta时使用L1L^1损失函数来解决L2L^2损失函数受离群点影响过大的问题。 当beta取不同值时图像对比如下

特殊地,当 beta = 1 时,

z(i)={y^(i)y(i)  0.5 ,otherwise0.5  (y^(i)y(i))2 ,y^(i)y(i) < 1z^{(i)} = \left \{ ^ {0.5 \ * \ (\hat{y}^{(i)} - y^{(i)})^2 \ , \quad \left | \hat{y}^{(i)} - y{(i)} \right | \ < \ 1 } _{\left | \hat{y}^{(i)} - y^{(i)} \right | \ - \ 0.5\ , \quad otherwise } \right.

当beta = 1时,L1, L2,Smooth L1L^1, \ L^2, Smooth \ L^1的图像比较如下

阅读(132)
评论(0)
updated@2021-05-15
评论区
目录