梯度下降法的基本形式:
一、算法
1、选择initial
x
x
x
(
0
)
(0)
(0)
2、选择梯度下降方向以及下降步长
3、判断停止准则
4、继续更新 x x x ( k ) (k) (k): x x x ( k + 1 ) (k+1) (k+1) = = = x x x ( k ) (k) (k) − α k d -\alpha_kd −αkd(k)
5、返回第2步
注:一般而言,对于一个下降法,主要是对其下降方向以及下降步长的把握。对于梯度gradient,切线方向 ∇ f ( x ) \nabla f(x) ∇f(x)是下降最快的方向,证明可参考最优化理论一书。所以接下来对步长进行考虑
(一)、固定步长下降法
令
α
k
=
c
o
n
s
t
a
n
t
\alpha_k=constant
αk=constant,
即:
S1:
d
k
=
−
∇
f
d_k=-\nabla f
dk=−∇f(x
(
k
)
(k)
(k))
S2:
α
k
=
c
o
n
s
t
a
n
t
\alpha_k=constant
αk=constant
S3:
x
x
x
(
k
+
1
)
(k+1)
(k+1)
=
=
=
x
x
x
(
k
)
(k)
(k)
−
α
k
d
k
-\alpha_kd_k
−αkdk
(二)、最速梯度下降法:
改变下降步长:
α
k
=
\alpha_k=
αk=
a
r
g
m
i
n
argmin
argmin
α
>
0
\alpha>0
α>0
f
f
f(
x
x
x
(
k
)
(k)
(k)-
α
k
\alpha_k
αk
∇
f
\nabla f
∇f(
x
x
x
(
k
)
(k)
(k))从上图中可看出最速梯度下降法的原理:每次出发依从负梯度方向直到寻找到满足停机准则的最小
x
x
x
(
k
+
1
)
(k+1)
(k+1)。对于最速而言,是由于在每个点下降时都是一个
m
i
n
min
min,但是也有缺陷,它可能无限次接近最优点,所以一个好的停机准则或迭代次数是必须的。
(三)、牛顿下降法
根据泰勒展开:
f
(
x
)
≈
f
f(x)≈f
f(x)≈f(x
(
k
)
(k)
(k))
+
+
+(
x
−
x
x-x
x−x(k))
g
g
g(k)
+
1
2
+\frac{1}{2}
+21(
x
−
x
x-x
x−x(k))
F
F
F
(
x
(x
(x(k))(
x
−
x
x-x
x−x(k)),两边求导得到牛顿下降法的迭代公式:
x
x
x
(
k
+
1
)
(k+1)
(k+1)
=
=
=
x
x
x
(
k
)
(k)
(k)
−
-
−
F
F
F
(
x
(x
(x(k))-1
g
g
g(k)
当初始点接近于最优点的时候,牛顿法的收敛速度更快,但是若初始点选的不好会出现不能收敛到最优点的情况。特别的是,该方法可能不是下降算法,缺陷比较大,需要正确情况正确选择。
(四)、共轭梯度法
Q
Q
Q
共
轭
D
定
义
:
共轭D定义:
共轭D定义:
d
1
Q
d
2
=
0
,
则
d
1
和
d
2
Q
共
轭
d_1Qd_2=0,则d_1和d_2Q共轭
d1Qd2=0,则d1和d2Q共轭
寻找一组正交基代表梯度下降方向,根据二次型矩阵Q的维数来决定基的个数。如何寻找:1、直接建立根据定义,先任意一个非0的向量,再根据定义法求得。2、Gram-Schmidt ,斯密斯正交变换。
基本算法:假设已寻找到一组共轭基
d
d
d(k),
k
=
0
,
1
,
2
,
.
.
.
,
n
−
1
k=0,1,2,...,n-1
k=0,1,2,...,n−1,
给定初始点
x
x
x
(
0
)
(0)
(0)
g
(
k
)
=
∇
f
(
x
(
k
)
)
=
Q
x
(
k
)
−
b
α
k
=
−
g
(
k
)
⊤
d
(
k
)
d
(
k
)
⊤
Q
d
(
k
)
x
(
k
+
1
)
=
x
(
k
)
+
α
k
d
(
k
)
\begin{aligned} \boldsymbol{g}^{(k)} &=\nabla f\left(\boldsymbol{x}^{(k)}\right)=\boldsymbol{Q} \boldsymbol{x}^{(k)}-\boldsymbol{b} \\ \alpha_{k} &=-\frac{\boldsymbol{g}^{(k) \top} \boldsymbol{d}^{(k)}}{\boldsymbol{d}^{(k) \top} \boldsymbol{Q} \boldsymbol{d}^{(k)}} \\ \boldsymbol{x}^{(k+1)} &=\boldsymbol{x}^{(k)}+\alpha_{k} \boldsymbol{d}^{(k)} \end{aligned}
g(k)αkx(k+1)=∇f(x(k))=Qx(k)−b=−d(k)⊤Qd(k)g(k)⊤d(k)=x(k)+αkd(k)
具体算法步骤:
- Set k : = 0 ; k:=0 ; k:=0; select the initial point x ( 0 ) \boldsymbol{x}^{(0)} x(0)
- g ( 0 ) = ∇ f ( x ( 0 ) ) . \boldsymbol{g}^{(0)}=\nabla f\left(\boldsymbol{x}^{(0)}\right) . g(0)=∇f(x(0)). If g ( 0 ) = 0 , \boldsymbol{g}^{(0)}=\mathbf{0}, g(0)=0, stop; else, set d ( 0 ) = − g ( 0 ) \boldsymbol{d}^{(0)}=-\boldsymbol{g}^{(0)} d(0)=−g(0)
- α k = − g ( k ) ⊤ d ( k ) d ( k ) ⊤ Q d ( k ) \alpha_{k}=-\frac{g^{(k) \top} d^{(k)}}{d^{(k) \top} Q d^{(k)}} αk=−d(k)⊤Qd(k)g(k)⊤d(k)
- x ( k + 1 ) = x ( k ) + α k d ( k ) \boldsymbol{x}^{(k+1)}=\boldsymbol{x}^{(k)}+\alpha_{k} \boldsymbol{d}^{(k)} x(k+1)=x(k)+αkd(k)
- g ( k + 1 ) = ∇ f ( x ( k + 1 ) ) . \boldsymbol{g}^{(k+1)}=\nabla f\left(\boldsymbol{x}^{(k+1)}\right) . g(k+1)=∇f(x(k+1)). If g ( k + 1 ) = 0 , \boldsymbol{g}^{(k+1)}=\mathbf{0}, g(k+1)=0, stop.
- β k = g ( k + 1 ) ⊤ Q d ( k ) d ( k ) ⊤ Q d ( k ) \beta_{k}=\frac{\boldsymbol{g}^{(k+1) \top} \boldsymbol{Q} \boldsymbol{d}^{(k)}}{\boldsymbol{d}^{(k) \top} \boldsymbol{Q} \boldsymbol{d}^{(k)}} βk=d(k)⊤Qd(k)g(k+1)⊤Qd(k)
- d ( k + 1 ) = − g ( k + 1 ) + β k d ( k ) \boldsymbol{d}^{(k+1)}=-\boldsymbol{g}^{(k+1)}+\beta_{k} \boldsymbol{d}^{(k)} d(k+1)=−g(k+1)+βkd(k)
- Set k : = k + 1 ; k:=k+1 ; k:=k+1; go to step 3
Three well-known modifications:
HS Formula:
β
k
=
g
(
k
+
1
)
⊤
Q
d
(
k
)
d
(
k
)
⊤
Q
d
(
k
)
\beta_{k}=\frac{\boldsymbol{g}^{(k+1) \top} \boldsymbol{Q} \boldsymbol{d}^{(k)}}{\boldsymbol{d}^{(k) \top} \boldsymbol{Q} \boldsymbol{d}^{(k)}}
βk=d(k)⊤Qd(k)g(k+1)⊤Qd(k)
PR Formula: β k = g ( k + 1 ) ⊤ g ( k + 1 ) − g ( k + 1 ) ⊤ g ( k ) g ( k ) ⊤ g ( k ) \beta_{k}=\frac{\boldsymbol{g}^{(k+1) \top} \boldsymbol{g}^{(k+1)}-\boldsymbol{g}^{(k+1) \top} \boldsymbol{g}^{(k)}}{\boldsymbol{g}^{(k) \top} \boldsymbol{g}^{(k)}} βk=g(k)⊤g(k)g(k+1)⊤g(k+1)−g(k+1)⊤g(k)
FR Formula: β k = g ( k + 1 ) ⊤ g ( k + 1 ) g ( k ) ⊤ g ( k ) \beta_{k}=\frac{\boldsymbol{g}^{(k+1) \top} \boldsymbol{g}^{(k+1)}}{\boldsymbol{g}^{(k) \top} \boldsymbol{g}^{(k)}} βk=g(k)⊤g(k)g(k+1)⊤g(k+1)