Huber Loss 是用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性。
- 当预测偏差小于 δ 时,它采用平方误差,
- 当预测偏差大于 δ 时,采用的线性误差。
具体定义如下:
其中 a 表示误差,即
y
−
y
^
y-\hat{y}
y−y^ 或者
y
−
f
(
x
)
y-f(x)
y−f(x),因此上式可变为:
示例如下:
import numpy as np
import matplotlib.pyplot as plt
def huber_loss(a, d): # Definition
return (abs(a)<=d)*a**2/2 + (abs(a)>d)*d*(abs(a)-d/2)
plt.figure(figsize=(6, 4.5), facecolor='w', edgecolor='k')
x = np.arange(-30, 30)
plt.plot(x, x**2/2, lw=2,label='Squared loss', color='g')
for d in (10, 6, 3, 1):
plt.plot(x, huber_loss(x, d), label=r'Huber loss: $\delta$={}'.format(d), lw=2)
plt.legend(loc='best', frameon=False)
plt.xlabel('standard deviation')
plt.ylabel('loss')
plt.show()
δ 是 HuberLoss 的参数,y 是真实值,f(x) 是模型的预测值, 横坐标 x 则是误差值。
Reference: