【深度学习】Huber Loss详解

打印 上一主题 下一主题

主题 1016|帖子 1016|积分 3048

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. Huber Loss 原理详解

   Huber Loss 是一种联合了 MSE(均方毛病)与 MAE (平均绝对毛病)的损失函数,旨在降服两者的缺点。对于小毛病利用 MSE,对于大毛病利用 MAE,因此在处理回归问题时,既可以大概平滑训练过程,有能减少非常值的影响
  Huber Loss 函数的数学公式定义如下:
                                                    L                               δ                                      (                            y                            ,                                       y                               ^                                      )                            =                                       {                                                                                                                      1                                                 2                                                              (                                              y                                              −                                                               y                                                 ^                                                                               )                                                 2                                                              ,                                                                                                                            if                                               ∣                                              y                                              −                                                               y                                                 ^                                                              ∣                                              ≤                                              δ                                                                                                                                                  δ                                              ∣                                              y                                              −                                                               y                                                 ^                                                              ∣                                              −                                                               1                                                 2                                                                               δ                                                 2                                                              ,                                                                                                            otherwise                                                                                              L_{\delta}(y, \hat{y}) = \begin{cases} \frac{1}{2} (y - \hat{y})^2, & \text{if } |y - \hat{y}| \leq \delta \\ \delta |y - \hat{y}| - \frac{1}{2} \delta^2, & \text{otherwise} \end{cases}                     Lδ​(y,y^​)={21​(y−y^​)2,δ∣y−y^​∣−21​δ2,​if ∣y−y^​∣≤δotherwise​


  •                                         y                                  y                     y 为真实值
  •                                                    y                               ^                                            \hat y                     y^​ 为预测值
  •                                         δ                                  \delta                     δ 是一个阈值,控制毛病大小的界限,当毛病小于                                         δ                                  \delta                     δ 时利用                                         M                            S                            E                                  MSE                     MSE,当毛病大于                                         δ                                  \delta                     δ 时利用                                         M                            A                            E                                  MAE                     MAE
Huber Loss 的特点:


  • 平滑性:当毛病小于                                         δ                                  \delta                     δ ,Huber Loss 与 MSE Loss一样,平方毛病让梯度变平滑,有助于快速收敛
  • 对非常值的鲁棒性:当毛病大于                                         δ                                  \delta                     δ 时,利用 MAE 来减小非常值对模子的影响,使得 Huber Loss 对大的毛病不那么敏感
  • 可调性:                                        δ                                  \delta                     δ 是一个超参数,可以根据需求调整,均衡 MSE 和 MAE 效果
2. Pytorch 代码详解

torch.nn.HuberLoss 官方文档: https://pytorch.org/docs/stable/generated/torch.nn.HuberLoss.html
Huber Loss 函数定义:
  1. class torch.nn.HuberLoss(reduction='mean', delta=1.0)
复制代码
创建一个尺度,假如逐元素毛病的绝对值低于 delta,则利用平方项,否则利用 delta 缩放的 L1 项。此损失联合了 L1Loss 和 MSELoss 的优点。delta 缩放的 L1 区域使损失对非常值的敏感度低于 MSELoss,而 L2 区域在 L1Loss 附近提供了平滑度。
对于大小为 N 的批次,未经约简的损失可以形貌为:
                                         l                            (                            x                            ,                            y                            )                            =                            L                            =                            {                                       l                               1                                      ,                            .                            .                            .                            ,                                       l                               N                                                 }                               T                                            l(x,y) = L=\{ l_1,...,l_N\}^T                     l(x,y)=L={l1​,...,lN​}T
其中:
                                                    l                               n                                      =                                       {                                                                                                     0.5                                              (                                                               x                                                 n                                                              −                                                               y                                                 n                                                                               )                                                 2                                                              ,                                              假如                                              ∣                                                               x                                                 n                                                              −                                                               y                                                 n                                                              ∣                                              <                                              d                                              e                                              l                                              t                                              a                                                                                                                                                  d                                              e                                              l                                              t                                              a                                              (                                              ∣                                                               x                                                 n                                                              −                                                               y                                                 n                                                              ∣                                              −                                              0.5                                              ∗                                              d                                              e                                              l                                              t                                              a                                              )                                              ,否则                                                                                                             l_n = \begin{cases} 0.5(x_n - y_n)^2 , 假如 |x_n-y_n| < delta \\ delta(|x_n-y_n|-0.5*delta), 否则 \end{cases}                     ln​={0.5(xn​−yn​)2,假如∣xn​−yn​∣<deltadelta(∣xn​−yn​∣−0.5∗delta),否则​
假如reduction不为 none 则:
                                         l                            (                            x                            ,                            y                            )                            =                                       {                                                                                                     m                                              e                                              a                                              n                                              (                                              L                                              )                                              ,                                              假如                                              r                                              e                                              d                                              u                                              c                                              t                                              i                                              o                                              n                                              =                                              m                                              e                                              a                                              n                                              ;                                                                                                                                                  s                                              u                                              m                                              (                                              L                                              )                                              ,                                              假如                                              r                                              e                                              d                                              u                                              c                                              t                                              i                                              o                                              n                                              =                                              s                                              u                                              m                                              ;                                                                                                             l(x,y) = \begin{cases} mean(L), 假如reduction = mean; \\ sum(L), 假如 reduction = sum; \end{cases}                     l(x,y)={mean(L),假如reduction=mean;sum(L),假如reduction=sum;​
留意:
当 delta 设置为 1 时,此损失等效于 SmoothL1Loss,一般来说,此损失与 SmoothL1Loss 相差 delta 系数(在 Smooth L1 中也称为 beta)
参数:


  • reduction (str, 可选) - 指定要应用于输出的归约:‘none’ | ‘mean’ | ‘sum’。 ‘none’:不应用任何归约,‘mean’:输出的总和将除以输出中的元素数目,‘sum’:输出将求和。默认值:‘mean’
  • delta (float, 可选) – 指定在 delta 缩放的 L1 和 L2 损失之间切换的阈值。该值必须为正数。默认值:1.0
3.与 MSELoss、MAELoss 区别及各自优缺点

3.1 MSELoss 均方毛病损失

MSE损失盘算的是真实值与预测值之间差异的平方,实用于毛病分布较为均匀且没有非常值的数据。
公式:
                                         M                            S                            E                            =                                       1                               N                                                 ∑                                           i                                  =                                  1                                          N                                      (                                       y                               i                                      −                                                   y                                  ^                                          i                                                 )                               2                                            MSE = \frac {1}{N} \sum_{i=1}^N(y_i - \hat y_i)^2                     MSE=N1​i=1∑N​(yi​−y^​i​)2
优点:


  • 对毛病小的样本非常敏感,实用于毛病分布均匀的环境
  • 优化平滑,梯度较好,有助于模子快速收敛
缺点:


  • 对非常值非常敏感。因为平方操作,非常值可能导致损失过大,影响训练过程,导致模子不稳固。
3.2 MAELoss 平均绝对毛病损失

MAE损失盘算的是真实值和预测值之间的绝对差异,实用于数据中可能存在非常值的环境。
公式:
                                         M                            A                            E                            =                                       1                               N                                                 ∑                                           i                                  =                                  1                                          N                                      ∣                                       y                               i                                      −                                                   y                                  ^                                          i                                      ∣                                  MAE = \frac {1}{N} \sum_{i=1}^N|y_i-\hat y_i|                     MAE=N1​i=1∑N​∣yi​−y^​i​∣
优点:


  • 对非常值更为鲁棒,非常值不会像 MSE 那样放大其影响
  • 对于中等毛病,MAE 提供了更好的稳固性
缺点:


  • 梯度不连续:因为MAE是绝对差,导致在毛病较大的时候梯度较小,训练过程可能收敛慢
  • 在某些环境下可能无法收敛到最优解
3.3 Huber Loss

Huber Loss 联合了 MSE 和 MAE 的优点,实用于大多数回归问题。它在小毛病时利用 MSE(平滑),在大毛病时利用 MAE(鲁棒)
优点:


  • 兼具 MSE 和 MAE 的优点,对非常值不敏感,又能平滑优化
  • 可以自定义                                         δ                                  \delta                     δ 值,控制从 MSE 到 MAE 的转换点,机动性较高
  • 实用于大多数实际回归问题,具有较好性能
缺点:


  • 超参                                         δ                                  \delta                     δ 的选择需要调优,可能会影响训练结果
4. 总结

4.1 优化平滑



  • 平滑是指损失函数在参数空间内厘革的平稳程度。在损失函数的图像中,假如它是光滑的,表示它的值不会出现剧烈的波动。平滑的损失函数对于优化过程有利,因为它减少了优化过程中由于损失函数剧烈波动而导致的难以收敛的环境。
  • 在优化中,平滑的损失函数可以大概帮助优化算法(如梯度下降)稳固地找到全局或局部最小值,而不会被局部的“尖峰”或“坑”困住。
  • Huber损失就是一个平滑的损失函数,它在小毛病时利用平方损失,避免了大毛病的过大处罚;而在大毛病时切换到线性损失,使得对于非常值的影响不至于过大。它联合了均方毛病(MSE)和绝对毛病(MAE)的优点,使得训练过程更加稳固。
4.2 梯度较好



  • 梯度较好意味着损失函数的导数(梯度)在训练过程中厘革平滑,且不存在突变或无法盘算的环境。好的梯度有助于优化算法(如梯度下降)准确地更新模子参数。
  • 欠好的梯度可能包罗梯度爆炸或梯度消失,导致模子训练变得非常缓慢大概无法举行有效更新。梯度较好的损失函数可以确保每次更新都是有效的,从而加速训练过程。
  • Huber损失在毛病较小的环境下,梯度是平方的(类似于均方毛病),而在毛病较大的环境下,梯度是线性的(类似于绝对毛病)。这种平滑的梯度厘革使得优化过程既不会因剧烈波动而不稳固,也不会在大毛病环境下过于处罚,从而能保持稳固的收敛速率。
4.3 为什么说 MSE 是平滑的



  • 连续性:MSE是一个连续的函数,也就是说,它的值随着输入的厘革是平滑厘革的,不会出现跳跃或断裂。这意味着在模子训练过程中,毛病会随着模子预测值的调整而平滑厘革,不会突变,避免了不稳固的训练过程。
  • 可导性:均方毛病的导数是连续且平滑的。对于MSE来说,损失函数的导数是关于模子预测值的线性函数。连续且可导的损失函数可以大概提供平滑的梯度,帮助优化算法(如梯度下降)顺遂地更新模子参数。
MSE损失函数是:
                                         M                            S                            E                            =                                       1                               N                                                 ∑                                           i                                  =                                  1                                          N                                      (                                       y                               i                                      −                                                   y                                  ^                                          i                                                 )                               2                                            MSE = \frac {1}{N} \sum_{i=1}^N(y_i - \hat y_i)^2                     MSE=N1​i=1∑N​(yi​−y^​i​)2
对于每个样本毛病                                    a                         =                         y                         −                                   y                            ^                                       a=y-\hat y                  a=y−y^​,毛病的导数是:
                                                    d                                           d                                  a                                                 (                                       a                               2                                      )                            =                            2                            a                                  \frac {d}{da}(a^2) = 2a                     dad​(a2)=2a
这个导数是线性的,而且在每个点都有定义。梯度的线性厘革意味着,模子在调整参数时,毛病随着预测的改进是平滑减少的。这个特性使得梯度下降在优化过程中可以平稳地更新模子权重,而不会遭遇急剧的厘革或不连续的环境。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表