Huber损失函数

classtorch.nn.HuberLoss(reduction='mean', delta=1.0)[源代码]

创建一个标准:如果元素级别的绝对误差低于 delta,则使用平方项;否则,使用缩放的 L1 项。此损失函数结合了 L1LossMSELoss 的优点;缩放的 L1 区域使损失对异常值不那么敏感,而 L2 区域在接近 0 时比 L1Loss 更平滑。有关更多信息,请参见Huber 损失

对于大小为$N$的小批量数据,未归一化的损失可以描述为:

$\ell(x, y) = L = \{l_1, ..., l_N\}^T$

使用

$l_n = \begin{cases} 0.5 (x_n - y_n)^2, & \text{if } |x_n - y_n| < delta \\ delta * (|x_n - y_n| - 0.5 * delta), & \text{otherwise } \end{cases}$

如果 reduction 不是 none,则:

$\ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{`mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{`sum'.} \end{cases}$

注意

当 delta 设置为 1 时,此损失函数等同于SmoothL1Loss。通常情况下,此损失与 SmoothL1Loss 仅相差一个 delta 因子(即 Smooth L1 中的 beta)。关于这两种损失函数行为差异的进一步讨论,请参见SmoothL1Loss

参数
  • reduction (str, 可选) – 指定要应用于输出的缩减方式:'none' | 'mean' | 'sum''none': 不进行任何缩减,'mean': 输出总和除以元素数量,'sum': 对输出求和。默认值:'mean'

  • delta (float, 可选) – 指定在 L1 和 L2 损失之间切换的阈值。该值必须为正数,默认值为 1.0。

形状:
  • 输入: $(*)$,其中$*$表示任意数量的维度。

  • 目标: $(*)$,形状与输入相同。

  • 输出:标量。如果 reduction'none',那么结果会是 $(*)$,其形状与输入相同。

本页目录