之前一直就只知道朝着负梯度的方向走就能降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
Δxargmin?f(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
α,最终,上式变为: 也就是说,取梯度的负方向,再根据学习率调整步长,就能降低损失
|