• 机器学习中的损失函数(二) 回归问题的损失函数


    参考链接:http://baijiahao.baidu.com/s?id=1603857666277651546&wfr=spider&for=pc

    1. 平方损失函数:MSE- L2 Loss

    $$MSE = sum_{i = 1}^n (y_i - hat{y_i})^2 ag1$$

    平方损失函数是光滑函数,能够用梯度下降法进行优化。然而,预测值距离真实值越远,平方损失的惩罚力度越大,因此,它对异常点比较敏感。为了解决该问题,可以采用绝对损失函数。

    2. 绝对值损失函数:MAE - L1 Loss

    $$MAE = sum_{i = 1}^n |y_i - hat{y_i}| ag2$$

    MAE相比MSE的优点:

    MAE相当于在做中值回归,相比做均值回归的MSE,MAE对异常点的鲁棒性更好。(中值回归与均值回归的介绍详见“补充信息”)

    MAE的不足:

    1. MAE在 $y = hat y$ 处无法求导数。针对这种情况,平衡MSE的可导性和MAE的鲁棒性,可以采用Huber损失函数(在第3部分介绍)。

    2. MAE更新的梯度始终相同,那么在接近最优值处可能仍维持着较大的梯度而错过最优值。

    针对这种情况,可以使用变化的学习率,在接近最优值时降低学习率。

    而MSE在这种情况下表现较好,即使使用固定的的学习率也可以有效收敛。MSE损失的梯度随损失增大而增大,在损失趋于0时则减小,这使得在训练结束时,MSE模型的结果往往会更精确。 

    那么什么时候用MSE,什么时候用MAE呢?

    MSE:如果异常点代表在商业中很重要的异常情况,并且需要被检测出来,则应选用MSE损失函数。

    MAE:相反,如果只把异常值当作受损数据,则应选用MAE损失函数。

    总而言之,处理异常点时,MAE更稳定,但它的导数不连续,因此求解效率较低。

    MSE对异常点更敏感,但通过令其导数为0,可以得到更稳定的封闭解。 

    MSE与MAE都不能很好解决的问题:

    二者兼有的问题是:在某些情况下,上述两种损失函数都不能满足需求。例如,若数据中90%的样本对应的目标值为150,剩下10%在0到30之间。那么使用MAE作为损失函数的模型可能会忽视10%的异常点,而对所有样本的预测值都为150。 

    这是因为模型会按中位数来预测。而使用MSE的模型则会给出很多介于0到30的预测值,因为模型会向异常点偏移。上述两种结果在许多商业场景中都是不可取的。

    这些情况下应该怎么办呢?最简单的办法是对目标变量进行变换。而另一种办法则是换一个损失函数,这就引出了下面要讲的第三种损失函数,即Huber损失函数。

    补充信息:

    1. 中值回归就是我们优化的目标是使目标值趋于样本点值的中位数,直观理解就是大于 与 小于 目标值的样本点数尽量相等。

    2. 均值回归的目标则是使目标值趋于样本点值的均值。

    3. 为什么MSE是均值回归,而MAE是中值回归呢?

    我在StackExchange找到一条很好的解释。

    3. Huber损失函数

        (3)

    Huber损失函数在|y - f(x)|较小时为平方损失,在 |y - f(x)| 较大时为线性损失。并且处处可导。

    这里超参数$delta$的选择非常重要,因为这决定了你对与异常点的定义。当残差大于$delta$,应当采用L1(对较大的异常值不那么敏感)来最小化,而残差小于超参数,则用L2来最小化。

    由上图可知,$delta$ 越大,对异常点越敏感。

    为什么使用Huber?

    在离最优值较远时,Huber损失相当于MAE,对异常点有更好的鲁棒性;

    当离最优值较近时,Huber损失相当于MSE,随着损失的减小梯度也在逐渐减小,可以更好的逼近最优值,可以避免MAE中始终维持大梯度而错过最优值的问题。

    使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。

    在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数delta。

  • 相关阅读:
    大数据时代-散记
    MongoDB命令行操作
    easyui获取日期datebox中的值
    linux文件系统学习
    Linux中部署JAVA程序
    百度Clouda的初步探索
    global.asax?app.config?webconfig??
    Android adb install INSTALL_FAILED_DEXOPT
    Android SharedPreferences 权限设置
    vim 支持 markdown 语法
  • 原文地址:https://www.cnblogs.com/shiyublog/p/10554915.html
Copyright © 2020-2023  润新知