Huber损失函数
- classtorch.nn.HuberLoss(reduction='mean', delta=1.0)[源代码]
-
创建一个标准:如果元素级别的绝对误差低于 delta,则使用平方项;否则,使用缩放的 L1 项。此损失函数结合了
L1Loss
和MSELoss
的优点;缩放的 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
是'none'
,那么结果会是 $(*)$,其形状与输入相同。
-