在机器学习或者深度学习中,都需要根据具体的模型和应用场景选择不同的损失函数。本文总结了几种不同的损失函数的定义和应用场景,并对比了不同损失函数的优缺点。
一、基础知识
损失函数(loss function):用来估量模型预测值f(x)与真实值y的偏离程度,以下是选择损失函数的基本要求和高级要求:
- 基本要求:用来衡量模型输出分布和样本标签分部之间的接近程度
- 高级要求:在样本分布不均匀的情况下,精确地描述模型输出分布和样本标签之间的接近程度。
模型训练:训练的过程实质是最小化损失函数,让f(x)和y尽量接近。实际上是模型参数拟合过程(比如使用最小二乘法、梯度下降法求解回归模型中的参数),也可以理解为模型求解的过程(比如使用最大期望法求解概率模型中的参数),
二、常用的损失函数
(一)均方误差(MSE)
MSE曲线的特点是光滑连续、可导,便于使用梯度下降法。平方误差有个特性就是当实际值与预测值的差大于1时,平方项会增加误差,反之则减小误差。也就是说,MSE会对误差较大的情况给予更大的惩罚,对误差较小的情况给予更小的惩罚。
- 优点:收敛速度快。MSE随着误差的减少,梯度也在减少,这有利于函数的收敛,因为梯度会变化所以预测结果更加稳定。
- 缺点:容易受到离群点的影响,忽略较小的点的作用,无法避免离群点可能导致的梯度爆炸问题。如果样本中存在离群点,MSE可能会对这个点赋予较大的权重导致牺牲其他正常数据点的预测效果,因此会降低模型整体性能。
(二)绝对平均误差(MAE)
MAE的曲线呈V字型,连续但在0值出不可导,计算机求导比较难。且MAE大部分情况下梯度相等,这意味着及时对于小的损失值,其梯度也是很大的,不利于函数的收敛和学习。
- 优点:由于MAE计算的是绝对误差,不论预测差额大于1还是小于1,没有平方项的作用,惩罚力度相同,因此MAE相比于MSE对离群点敏感度更低,拟合直线能够较好表征正常数据分布,鲁棒性较好。
- 缺点:MAE训练过程中梯度始终很大,且在0点连续但不可导,这意味着模型学习速度慢,同时会导致使用梯度下降训练模型是,在结束时可能会遗漏全局最小值。
(三)平滑绝对误差(Huber损失函数)
总而言之,处理异常点时,MAE损失函数更稳定,但它的导数不连续,因此求解效率较低。MSE损失函数对异常点更敏感,但通过令其导数为0,可以得到更稳定的封闭解。Huber损失函数是对MAE和MSE二者的综合,其中函数值为0时也可微,Huber损失对数据中的异常点没有平方误差损失那么敏感。其包含了一个超参数,它决定了Huber侧重于MSE还是MAE。本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为二次误差由超参数δ(delta)来控制。
当时,梯度一致近似为,能够保证模型以一个比较快的速度更新参数,解决 MSE可能导致的离群点梯度爆炸的问题。当时,梯度逐渐减小,能够保证模型更精确地得到全局最优解,解决 MAE的不光滑问题。
- 优点:同时具备了MSE和MAE的优点,既弱化了离群点的过度敏感,又实现了处处可导,收敛速度也快于MAE。
注意点:超参数需要在训练中选择,常使用交叉验证法选择合适的超参数,超参数的选择直接影响模型的好坏。
(四)对数损失函数
对数损失函数是逻辑回归模型的损失函数,在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即max F(y, f(x)) —-> min -F(y, f(x)))。从损失函数的视角来看,它就成了log损失函数了。
取对数是为了方便计算极大似然估计,因为在 MLE 中,直接求导比较困难,所以通常都是先取对数再求导找极值点。
(五)指数损失函数
AdaBoos的损失函数即为指数损失函数