Huber Loss 相当于平方误差的推广,通过设置delta的值,使损失函数鲁棒性更强,从而减弱离群点(outliers)对模型的影响。当delta为无穷大时,Huber Loss 退化为Squared Loss.
解释:
Huber Loss对平方损失进行了分段,分为平方损失和线性损失。当偏差小于δ时,为平方损失,当偏差大于δ时,为线性损失。由于离群点往往具有很大的偏差,因此会落到线性损失(小于原来的均方损失)的区间,从而降低了对离群点的惩罚程度,减弱离群点对模型的影响。
tensorflow实现:
def huber_loss(labels, predictions, delta=1.0):
residual = tf.abs(predictions - labels)
condition = tf.less(residual, delta)
small_res = 0.5 * tf.square(residual)
large_res = delta * residual - 0.5 * tf.square(delta)
return tf.select(condition, small_res, large_res)
参考:Stanford CS20SI tensorflow