机器学习的所有算法都需要最大化或者最小化目标函数,在最小化场景下,目标函数又称损失函数。
实际应用中,选取损失函数需要从多个角度考虑,如是否有异常值、算法、求导难度、预测值的置信度等等。
损失函数可分为两大类,分类问题的损失函数和回归问题的损失函数,
本文将对比分析回归问题中最常用的5个损失函数。
1、均方误差(又称MSE、L2损失)
回归问题中最常见的损失函数。如果对所有样本点只给出一个预测值,那么这个值就是所有目标值的平均值。
优点:
- 计算方便,逻辑清晰,衡量误差较准确
- 梯度随着误差增大或减小,收敛效果好
缺点:
- 对异常点会赋予较大的权重,如果异常点不属于考虑范围,是由于某种错误导致的,则此函数指导方向将出现偏差
2、平均绝对值误差(又称MAE,L1损失)
如果对所有样本点只给出一个预测值,那么这个值就是所有目标值的中位数。
优点:
- 对异常值具有较好鲁棒性
缺点:
- 梯度不变是个严重问题,即使对于很小的损失,梯度也很大,不利于模型收敛,常使用变化的学习率解决
3、Huber损失,平滑的平均绝对误差
当误差在[0-δ,0+δ]之间时,等价为MSE,而在[-∞,δ]和[δ,+∞]时为MAE
优点:
- 对异常值更加鲁棒
- 在最优点附近由于调整为MSE,梯度更新会随着误差减小而减小,有利于收敛
缺点:
- 引入额外的超参,需要调试
- 临界点delta处不可导
4、Log-Cosh损失
比MSE更加平滑的损失函数。
优点:
- 具有huber损失具备的所有优点
- 二阶处处可微
许多机器学习算法采用牛顿法逼近最优点,比如鼎鼎大名的XGBoost算法,而牛顿法要求损失函数二阶可微。
缺点:
- 误差很大情况下,一阶梯度和Hessian会变成定值,导致XGBoost出现缺少分裂点的情况。
5、分位数损失
预测的是目标的取值范围而不是值
γ是所需的分位数,其值介于0和1之间,γ等于0.5时,相当于MAE。
设置多个γ值,得到多个预测模型,然后绘制成图表,即可知道预测范围及对应概率(两个γ值相减)。