无约束优化问题常用求解方法
1.前情提要
上一章说了线搜索下降算法的几个关键问题,确定步长和下降方向,前一章的线搜索方法主要是确定步长。这一章确定下降方向。
2. 坐标轴下降法
3. 最速下降法
4.牛顿法
5. 修正牛顿法
6. 拟牛顿法
7. 共轭梯度法
(1) 共轭方向
定义: 设A为 n × n n \times n n×n阶实对称矩阵,如果有两个n维向量 d 0 , d 1 d^{0},d^1 d0,d1,满足 ( d 0 ) T A d 1 = 0 {(d^{0})}^TA d^1=0 (d0)TAd1=0,则向量 d 0 , d 1 d^{0},d^1 d0,d1是关于A共轭的向量。
几何解释:
对于二次函数: f ( x ) = 1 / 2 X T A X + B T X + C f(x)=1/2X^TAX+B^TX+C f(x)=1/2XTAX+BTX+C,有以下等值线。
假设有初始点 X 0 X^0 X0,和方向 d 0 d^0 d0,可以得到必有一等值线与方向 d 0 d^0 d0相切。设走 α 0 d 0 \alpha^0d^0 α0d0可以到达 X 1 X^1 X1,再假设 d 1 d^1 d1为指向最优解方向,走 α 1 d 1 \alpha^1d^1 α1d1。
公式化上述过程 :
X
0
→
α
0
d
0
d
1
→
α
1
d
1
X
∗
X^0\stackrel{\alpha^0d^0}\rightarrow d^1\stackrel{\alpha^1d^1}\rightarrow X^*
X0→α0d0d1→α1d1X∗
探究:此时
d
0
和
d
1
d^0和d^1
d0和d1有什么关系呢?
因为
X
∗
X^*
X∗是最优解,所以对
f
(
X
)
f(X)
f(X)求一阶导时:
∇
f
(
X
∗
)
=
A
X
∗
+
B
=
0
\nabla f(X^*)=AX^*+B=0
∇f(X∗)=AX∗+B=0
因为:
X
∗
=
X
1
+
α
1
d
1
X^*=X^1+\alpha^1d^1
X∗=X1+α1d1
所以:
∇
f
(
X
∗
)
=
A
(
X
1
+
α
1
d
1
)
+
B
=
0
\nabla f(X^*)=A(X^1+\alpha^1d^1)+B=0
∇f(X∗)=A(X1+α1d1)+B=0
∇
f
(
X
∗
)
=
(
A
X
1
+
B
)
+
α
1
A
d
1
=
0
\nabla f(X^*)=(AX^1+B)+\alpha^1Ad^1=0
∇f(X∗)=(AX1+B)+α1Ad1=0
这里注意到:
∇
f
(
X
1
)
=
(
A
X
1
+
B
)
\nabla f(X^1)=(AX^1+B)
∇f(X1)=(AX1+B)
两边同时乘以
d
0
d^0
d0:
(
d
0
)
T
∇
f
(
X
1
)
+
α
1
(
d
0
)
T
A
d
1
=
0
(d^0)^T\nabla f(X^1)+\alpha^1(d^0)^TAd^1=0
(d0)T∇f(X1)+α1(d0)TAd1=0
因为
d
0
和
∇
f
(
X
1
)
d^0和\nabla f(X^1)
d0和∇f(X1)正交,又因为
α
1
≠
0
\alpha^1\neq0
α1=0,所以:
(
d
0
)
T
A
d
1
=
0
(d^0)^TAd^1=0
(d0)TAd1=0
A的特例是Hessian矩阵
共轭向量几个特性
- 若 A = I , ( d 0 ) T I d 1 = ( d 0 ) T d 1 = 0 A=I,(d^0)^TId^1=(d^0)^Td^1=0 A=I,(d0)TId1=(d0)Td1=0,所以 d 0 , d 1 正 交 d^0,d^1正交 d0,d1正交
- 若
A
≠
I
,
d
1
经
过
矩
阵
A
的
变
换
,
设
[
(
d
1
)
′
]
=
A
d
1
A\neq I,d^1经过矩阵A的变换,设[(d^1)']=Ad^1
A=I,d1经过矩阵A的变换,设[(d1)′]=Ad1,与
d
0
d^0
d0正交。
(因为 ( d 0 ) T A T A d 1 = ( A d 0 ) T A d 1 (d^0)^TA^TAd^1=(Ad^0)^TAd^1 (d0)TATAd1=(Ad0)TAd1) - 共轭向量线形无关
正交是共轭的特例,共轭是正交的推广!
(2)共轭方向的形成
以二维正定的二次函数为例,第
K
K
K轮迭代。连线
X
0
,
X
2
X^0,X^2
X0,X2构成的向量即为共轭向量
d
d
d。即:
d
=
X
2
−
X
0
d=X^2-X^0
d=X2−X0
证明:
d
与
d
2
d与d^2
d与d2共轭
f
(
X
)
=
1
2
X
T
A
X
+
B
T
X
+
C
f(X)=\frac{1}{2}X^TAX+B^TX+C
f(X)=21XTAX+BTX+C,
∇
f
(
X
)
=
A
X
+
B
\nabla f(X)=AX+B
∇f(X)=AX+B
X 2 点 X^2点 X2点: ∇ f ( X 2 ) = A X 2 + B \nabla f(X^2)=AX^2+B ∇f(X2)=AX2+B; X 0 点 X^0点 X0点: ∇ f ( X 0 ) = A X 0 + B \nabla f(X^0)=AX^0+B ∇f(X0)=AX0+B
左乘 d 2 d^2 d2:
{ ( d 2 ) T ∇ f ( X 0 ) = ( d 2 ) T A X 0 + ( d 2 ) T B = 0 ( d 2 ) T ∇ f ( X 2 ) = ( d 2 ) T A X 2 + ( d 2 ) T B = 0 \begin{cases} (d^2)^T\nabla f(X^0)=(d^2)^TAX^0+(d^2)^TB=0\\ (d^2)^T\nabla f(X^2)=(d^2)^TAX^2+(d^2)^TB=0 \end{cases} {(d2)T∇f(X0)=(d2)TAX0+(d2)TB=0(d2)T∇f(X2)=(d2)TAX2+(d2)TB=0
因为: d 2 与 f ( X 2 ) 正 交 d^2与f(X^2)正交 d2与f(X2)正交
两个式子相减:
(
d
2
)
T
A
(
X
2
−
X
0
)
=
(
d
2
)
T
A
d
=
0
(d^2)^TA(X^2-X^0)=(d^2)^TAd = 0
(d2)TA(X2−X0)=(d2)TAd=0
得证。
(3)线形共轭梯度法——求解二次函数
思想: 将共轭性和梯度下降法相结合,利已知点处的梯度构造一组共轭方向。并沿着这组方向进行搜索,求出目标函数的极小值。
目标函数: m i n f ( X ) = 1 2 X T A X + B X + C min f(X)=\frac{1}{2}X^TAX+BX+C minf(X)=21XTAX+BX+C
步骤:
- 任意给定一个初始点 X 1 X^1 X1,计算该点的梯度 g 1 = ∇ f ( X 1 ) g_1=\nabla f(X^1) g1=∇f(X1),若 ∣ ∣ g 1 ∣ ∣ = 0 , 则 停 止 计 算 ; 否 则 , 令 d 1 = − ∇ f ( X 1 ) = − g 1 ||g_1||=0,则停止计算;否则,令d^1=-\nabla f(X^1)=-g_1 ∣∣g1∣∣=0,则停止计算;否则,令d1=−∇f(X1)=−g1。沿 d 1 d^1 d1方向走 α 1 \alpha_1 α1到达 X 2 X^2 X2,计算该点梯度 g 2 = ∇ f ( X 2 ) g_2=\nabla f(X^2) g2=∇f(X2),如果 ∣ ∣ g 2 ∣ ∣ ≠ 0 ||g_2||\neq0 ∣∣g2∣∣=0,则利用 − g 2 -g_2 −g2和 d 1 d^1 d1构造第2个搜索方向 d 2 d^2 d2,再沿着 d 2 d^2 d2走, 以此类推…
推广到一般情况:
推广到 X K X^K XK:已知方向 d K d^K dK,则从 X k X^k Xk出发,沿 d k d^k dk搜索,得到 X k + 1 = X k + α K d k X^{k+1}=X^k+\alpha_Kd^k Xk+1=Xk+αKdk
- 其中步长 α K \alpha_K αK满足: α k = a r g m i n f ( X k + α k d k ) \alpha_k=argminf(X^k+\alpha_kd^k) αk=argminf(Xk+αkdk), α k = − ∇ f ( X k ) T d k ( d k ) T A d k \alpha_k=-\frac{\nabla f(X^k)^Td^k}{(d^k)^TAd^k} αk=−(dk)TAdk∇f(Xk)Tdk.
然后计算
f
(
X
f(X
f(X)在
X
k
+
1
X^{k+1}
Xk+1处的梯度
∇
f
(
X
k
+
1
)
\nabla f(X^{k+1})
∇f(Xk+1),若
∣
∣
∇
f
(
X
k
+
1
)
∣
∣
=
0
||\nabla f(X^{k+1})||=0
∣∣∇f(Xk+1)∣∣=0,则停止计算;否则,用
−
∇
f
(
X
k
+
1
)
-\nabla f(X^{k+1})
−∇f(Xk+1)和
d
k
d^k
dk构造下一个搜索方向
d
k
+
1
d^{k+1}
dk+1,并使
d
k
+
1
d^{k+1}
dk+1与
d
k
d^k
dk关于
A
A
A共轭,按此设想,令:
d
k
+
1
=
−
∇
f
(
X
k
+
1
)
+
β
k
d
k
d^{k+1}=-\nabla f(X^{k+1})+\beta_kd^k
dk+1=−∇f(Xk+1)+βkdk
上式两端左乘
(
d
K
)
T
A
(d^K)^TA
(dK)TA,得:
(
d
K
)
T
A
d
k
+
1
=
−
(
d
K
)
T
A
∇
f
(
X
k
+
1
)
+
β
k
(
d
K
)
T
A
d
k
(d^K)^TAd^{k+1}=-(d^K)^TA\nabla f(X^{k+1})+\beta_k(d^K)^TAd^k
(dK)TAdk+1=−(dK)TA∇f(Xk+1)+βk(dK)TAdk
使其等于0,得:
β
k
=
∇
f
(
X
k
+
1
)
A
d
k
(
d
k
)
T
A
d
k
\beta_k=\frac{\nabla f(X^{k+1})Ad^k}{(d^k)^TAd^k}
βk=(dk)TAdk∇f(Xk+1)Adk
再从
X
k
+
1
X^{k+1}
Xk+1出发,沿方向
d
k
+
1
d^{k+1}
dk+1搜索。
共轭方向法是一类方法,共轭梯度法就是其中一个方法。
公式简化:
目的:让表达式与梯度之间构建起联系
(1) 共轭梯度法的步长公式:
α
k
=
−
∇
f
(
X
k
)
T
d
k
(
d
k
)
T
A
d
k
\alpha_k=-\frac{\nabla f(X^k)^Td^k}{(d^k)^TAd^k}
αk=−(dk)TAdk∇f(Xk)Tdk
因为:
d
k
=
−
∇
f
(
X
k
)
+
β
k
−
1
d
k
−
1
d^k=-\nabla f(X^k)+\beta_{k-1}d^{k-1}
dk=−∇f(Xk)+βk−1dk−1
所以分子变成:
−
∇
f
(
X
k
)
T
(
∇
f
(
X
k
)
+
β
k
−
1
d
k
−
1
)
-\nabla f(X^k)^T(\nabla f(X^k)+\beta_{k-1}d^{k-1})
−∇f(Xk)T(∇f(Xk)+βk−1dk−1)
即:
−
∇
f
(
X
k
)
T
∇
f
(
X
k
)
+
β
k
−
1
∇
f
(
X
k
)
T
d
k
−
1
-\nabla f(X^k)^T\nabla f(X^k)+\beta_{k-1}\nabla f(X^k)^Td^{k-1}
−∇f(Xk)T∇f(Xk)+βk−1∇f(Xk)Tdk−1
因为: ∇ f ( X k ) d k − 1 = 0 \nabla f(X^k)d^{k-1}=0 ∇f(Xk)dk−1=0
所以,可简化为:
α
k
=
−
∇
f
(
X
k
)
T
∇
f
(
X
k
)
(
d
k
)
T
A
d
k
\alpha_k=-\frac{\nabla f(X^k)^T\nabla f(X^k)}{(d^k)^TAd^k}
αk=−(dk)TAdk∇f(Xk)T∇f(Xk)
(2)共轭梯度法步长公式中的系数
β k = ∇ f ( X k + 1 ) A d k ( d k ) T A d k \beta_k=\frac{\nabla f(X^{k+1})Ad^k}{(d^k)^TAd^k} βk=(dk)TAdk∇f(Xk+1)Adk
分子 ∇ f ( X k + 1 ) A d k = ∇ f ( X k + 1 ) ( ∇ f ( X k + 1 ) − ∇ f ( X k ) ) 1 α k \nabla f(X^{k+1})Ad^k=\nabla f(X^{k+1})(\nabla f(X^{k+1})-\nabla f(X^k))\frac{1}{\alpha_k} ∇f(Xk+1)Adk=∇f(Xk+1)(∇f(Xk+1)−∇f(Xk))αk1
所以:
β k = ∇ f ( X k + 1 ) ( ∇ f ( X k + 1 ) − ∇ f ( X k ) ) 1 α k ( d k ) T A d k \beta_k=\frac{\nabla f(X^{k+1})(\nabla f(X^{k+1})-\nabla f(X^k))\frac{1}{\alpha_k}}{(d^k)^TAd^k} βk=(dk)TAdk∇f(Xk+1)(∇f(Xk+1)−∇f(Xk))αk1
β k = 1 α k ∇ f ( X k + 1 ) ( ∇ f ( X k + 1 ) − ∇ f ( X k ) ) 1 α k ( d k ) T A d k \beta_k=\frac{1}{\alpha_k}\frac{\nabla f(X^{k+1})(\nabla f(X^{k+1})-\nabla f(X^k))\frac{1}{\alpha_k}}{(d^k)^TAd^k} βk=αk1(dk)TAdk∇f(Xk+1)(∇f(Xk+1)−∇f(Xk))αk1
β k = ∇ f ( X k + 1 ) T ∇ f ( X k + 1 ) T ∇ f ( X k ) T ∇ f ( X k ) \beta_k=\frac{\nabla f(X^{k+1})^T\nabla f(X^{k+1})^T}{\nabla f(X^k)^T\nabla f(X^k)} βk=∇f(Xk)T∇f(Xk)∇f(Xk+1)T∇f(Xk+1)T
简化是为了推广到非线性共轭梯度法。没有出现二次目标函数的A,方便计算
(4)非线性共轭梯度法——求解一般性函数
FR、PRP方法
步骤:
-
step0: 给定初始点 X 0 X^0 X0,记 d 0 = − ∇ f ( x 0 ) , ϵ > 0 , k = 0 d^0=-\nabla f(x^0),\epsilon>0,k=0 d0=−∇f(x0),ϵ>0,k=0
-
step1: 判断 ∣ ∣ ∇ f ( X k ) ∣ ∣ ≤ ϵ ||\nabla f(X^k)||\leq\epsilon ∣∣∇f(Xk)∣∣≤ϵ是否成立;是,则终止了;
-
step2: 利用线形搜索计算步长 α k \alpha_k αk
-
step3: 令 X k + 1 = X k + α k d k X^{k+1}=X^k+\alpha_kd^k Xk+1=Xk+αkdk,并计算方向:
d k + 1 = − ∇ f ( X k + 1 + β k d k ) d^{k+1}=-\nabla f(X^{k+1}+\beta_kd^k) dk+1=−∇f(Xk+1+βkdk)
其中: β k = − ∇ f ( X k + 1 ) T ( ∇ f ( X k + 1 ) − ∇ f ( X k ) ) ∇ f ( X k ) T ∇ f ( X k ) \beta_k=-\frac{\nabla f(X^{k+1})^T(\nabla f(X^{k+1})-\nabla f(X^k))}{\nabla f(X^k)^T\nabla f(X^k)} βk=−∇f(Xk)T∇f(Xk)∇f(Xk+1)T(∇f(Xk+1)−∇f(Xk)) (PRP法)或者: β k = − ∇ f ( X k + 1 ) T ∇ f ( X k + 1 ) ∇ f ( X k ) T ∇ f ( X k ) \beta_k=-\frac{\nabla f(X^{k+1})^T\nabla f(X^{k+1})}{\nabla f(X^k)^T\nabla f(X^k)} βk=−∇f(Xk)T∇f(Xk)∇f(Xk+1)T∇f(Xk+1) (FR法)
令 K = K + 1 K=K+1 K=K+1,转向step 1
注意:
- 实践中,为了保证每次产生的方向为下降方向,可能会对 β k \beta_k βk进行调整
- 具有二次终止性
- 实现过程中常采用n步重启策略,可达到二阶收敛(有n个共轭方向后,重新取初始点)
优点:
- 与最速下降法相比,速度快
- 与牛顿法比,存储量小,适用于n大时
references
[1] 最优化理论与方法-第七讲-无约束优化问题(三)https://www.bilibili.com/video/BV1pk4y1R7WS/?spm_id_from=333.788.recommend_more_video.-1
[2] 陈宝林 最优化理论与算法(第2版)
[3] https://www.xuetangx.com/learn/ecust13051002148/ecust13051002148/5883504/video/9207474