之前一直就只知道朝着负梯度的方向走就能降Loss,却不知道是为什么,今天看了人工智能的课才明白了。
首先假设损失函数 f ( x ) f(x) f(x),下一步 x x x的移动方向与距离 Δ x \Delta{x} Δx,则有移动后的损失 f ( x + Δ x ) f(x+\Delta{x}) f(x+Δx),我们来思考怎样能让损失降低,也就是使得 f ( x + Δ x ) < f ( x ) f(x+\Delta{x})<f(x) f(x+Δx)<f(x)
首先对
f
(
x
+
Δ
x
)
f(x+\Delta{x})
f(x+Δx)泰勒展开:
将
f
(
x
)
f(x)
f(x)移到左边可得:
其中,
∇
f
(
x
)
\nabla{f(x)}
∇f(x)为
f
(
x
)
f(x)
f(x)的一阶导数
其中,左边也就是移动前后的损失差值
目标是使得差值为负,且尽可能小,也就是损失下降得越多越好
也即希望右边
<
0
<0
<0,且越小越好
我们看右边:
两个向量相乘=模相乘*
c
o
s
θ
cos\theta
cosθ
所以
arg
min
Δ
x
f
(
x
+
Δ
x
)
−
f
(
x
)
=
arg
min
Δ
x
∥
∇
f
(
x
)
∥
∥
Δ
x
∥
c
o
s
θ
\mathop{\arg\min}\limits_{\Delta{x}}f(x+\Delta{x})-f(x)=\mathop{\arg\min}\limits_{\Delta{x}}\left \| \nabla{f(x)} \right \|\left \| \Delta{x} \right \|cos\theta
Δxargminf(x+Δx)−f(x)=Δxargmin∥∇f(x)∥∥Δx∥cosθ
其中,模必
>
=
0
>=0
>=0,因此,为了使其为负且最小化,
c
o
s
θ
cos\theta
cosθ为负且最小,而
c
o
s
θ
cos\theta
cosθ就是参数变化的方向(
Δ
x
\Delta{x}
Δx和梯度
∇
f
(
x
)
\nabla{f(x)}
∇f(x)方向的夹角)。
要使得 c o s θ cos\theta cosθ为负且最小,即当 θ = π \theta=\pi θ=π时,取最小值 c o s π = − 1 cos\pi=-1 cosπ=−1
即当 Δ x \Delta{x} Δx与 ∇ f ( x ) \nabla{f(x)} ∇f(x)的夹角为 π \pi π,即取负梯度方向时,右边能取到最小值。
最终,
∥
Δ
x
∥
\left \| \Delta{x} \right \|
∥Δx∥是一个标量,x移动的大小,我们可以看成学习率
α
\alpha
α,最终,上式变为:
也就是说,取梯度的负方向,再根据学习率调整步长,就能降低损失