梯度下降
梯度下降法是最常用的一阶优化方法,用于求解无约束优化问题。
考虑无约束优化问题
m
i
n
x
f
(
x
)
min_{\boldsymbol{x}}f(\pmb{x})
minxf(xxx),其中
f
(
x
)
f(\pmb{x})
f(xxx)为连续可微函数,若能构造一个序列
x
0
,
x
1
,
x
2
\pmb{x}_0,\pmb{x}_1,\pmb{x}_2
xxx0,xxx1,xxx2…满足
f
(
x
t
+
1
)
<
f
(
x
t
)
t
=
0
,
1
,
2...
f(\pmb{x}_{t+1})<f(\pmb{x}_t) \quad t=0,1,2...
f(xxxt+1)<f(xxxt)t=0,1,2...
则不断执行该过程即可收敛到局部极小点,根据泰勒公式,函数
f
(
x
+
Δ
x
)
f(\pmb{x}+\Delta \pmb{x})
f(xxx+Δxxx)在
x
\pmb{x}
xxx处的泰勒展开为:
(1)
f
(
x
+
Δ
x
)
≈
f
(
x
)
+
∇
f
(
x
)
T
Δ
x
f(\pmb{x}+ \Delta \pmb{x}) \approx f(\pmb{x})+\nabla f(\pmb{x})^T\Delta \pmb{x} \tag{1}
f(xxx+Δxxx)≈f(xxx)+∇f(xxx)TΔxxx(1)
其中
f
(
x
)
f(\pmb{x})
f(xxx)已知,要满足
f
(
x
+
Δ
x
)
<
f
(
x
)
f(\pmb{x}+ \Delta \pmb{x}) < f(\pmb{x})
f(xxx+Δxxx)<f(xxx),只需令
∇
f
(
x
)
T
Δ
x
<
0
\nabla f(\pmb{x})^T\Delta \pmb{x}<0
∇f(xxx)TΔxxx<0,同时为了更快的收敛到局部极小点,
f
(
x
+
Δ
x
)
f(\pmb{x}+ \Delta \pmb{x})
f(xxx+Δxxx)应尽量小,注意到式(1)的右边第二项是
∇
f
(
x
)
\nabla f(\pmb{x})
∇f(xxx)与
Δ
x
\Delta \pmb{x}
Δxxx的内积,那么只需令
Δ
x
\Delta \pmb{x}
Δxxx与
∇
f
(
x
)
\nabla f(\pmb{x})
∇f(xxx)的方向相反,
f
(
x
)
f(\pmb{x})
f(xxx)将以最快的速度下降(反之则以最快的速度上升,这就是为什么梯度的方向是函数值增长最快的方向),现实中通常取
Δ
x
=
−
γ
∇
f
(
x
)
γ
>
0
\Delta \pmb{x}=-\gamma \nabla f(\pmb{x})\quad \gamma>0
Δxxx=−γ∇f(xxx)γ>0
其中
γ
\gamma
γ是步长,步长的设置需合理,若过小可能收敛速度慢,若过大可能会在局部极小点附近振荡无法收敛。
下面以
f
(
x
)
=
x
2
f(x)=x^2
f(x)=x2为例,看一下收敛过程。
当
γ
=
0.2
\gamma=0.2
γ=0.2时,整个梯度下降的收敛路径如下所示。
不妨减小步长,令
γ
=
0.05
\gamma=0.05
γ=0.05,此时路径如下所示。
再看看增大步长,令
γ
=
0.9
\gamma=0.9
γ=0.9。
能够明显的看到在极值点附近振荡。为保证一定能收敛
γ
\gamma
γ可以适当小一点,在实际使用时
γ
\gamma
γ通常取
0.05
∼
0.1
0.05\sim0.1
0.05∼0.1