损失函数,用来衡量预测值和真实值之间的区别。是机器学习里面一个非常重要的概念。
三个常用的损失函数 L2 loss、L1 loss、Huber’s Robust loss
均方损失 L2 Loss
l
(
y
,
y
′
)
=
1
2
(
y
−
y
′
)
2
l(y,y^{\prime})=\frac{1}{2}(y-y^{\prime})^{2}
l(y,y′)=21(y−y′)2
(除以
2
2
2的时候,
2
2
2和
1
2
\frac{1}{2}
21相互抵消。)
这里说的梯度,其实是经过了一次取绝对值。
绝对值损失函数 L1 Loss
l ( y , y ′ ) = | y − y ′ | l(y,y^{\prime})=|y-y^{\prime}| l(y,y′)=|y−y′|
① 相对L2 loss,L1 loss的梯度就是远离原点时,梯度也不是特别大,权重的更新也不是特别大。会带来很多稳定性的好处。不管离原点多远(预测值和真实值相差多大),梯度它总是以同样的粒度后撤。
② 它的缺点是在零点处不可导,并在零点处左右有±1的变化,这个不平滑性导致预测值与真实值靠的比较近的时候,优化到末期的时候,可能会不那么稳定。
Huber’s Robust loss
l
(
y
,
y
′
)
=
{
∣
y
−
y
′
∣
−
1
2
,
i
f
∣
y
−
y
′
∣
>
1
1
2
(
y
−
y
′
)
2
,
o
t
h
e
r
w
i
s
e
l(y,y^{\prime})= \begin{cases} |y-y^{\prime}|-\frac{1} {2 } ,\quad if \ |y-y^{\prime}|>1\\ \frac{1}{2}(y-y^{\prime})^{2}, \quad \ \ otherwise \end{cases}
l(y,y′)={∣y−y′∣−21,if ∣y−y′∣>121(y−y′)2, otherwise当真实值和预测值的差大于
1
1
1的时候,损失函数是一个绝对值误差;当真实值和预测值的差小于
1
1
1的时候,损失函数是一个均方误差。(绝对值误差减去二分之一,是为了把曲线连起来)
在
+
1
+1
+1和
−
1
-1
−1之间是一个二次函数,在之外是两条直线。
好处:
- 当预测值和真实值差的比较远的时候,不管怎样,它都会以一个比较均匀的梯度往回撤。
- 在预测值和真实值差的比较小的时候,可以保证梯度下降优化是比较平滑的。