文章目录
在没有任何限制条件下寻求目标函数的极小点:
min
x
∈
R
n
f
(
x
)
\displaystyle \min_{x \in R^n}f(x)
x∈Rnminf(x)
求解方法有多种,主要不同点在于如何构造搜索方向
最速下降法
基本思想
在每次迭代中,沿最速下降方向(负梯度方向)进行搜索,每一步沿负梯度方向取最优步长。
- 只以一阶梯度的信息确定下一步的方向,收敛速度慢;越接近极值点,收敛越慢
- 一般用于最优化开始的几步搜索
分析
由泰勒公式:
f
(
x
+
λ
p
)
=
f
(
x
)
+
λ
Λ
T
(
x
)
p
+
o
(
λ
∣
∣
p
∣
∣
)
(
λ
>
0
)
\bf{f(x + \lambda p) = f(x) + \lambda \Lambda^T(x)p + o(\lambda ||p||)}(\lambda>0)
f(x+λp)=f(x)+λΛT(x)p+o(λ∣∣p∣∣)(λ>0)
由于
Λ
T
(
x
)
p
=
−
∣
∣
Λ
T
(
x
)
∣
∣
∣
∣
p
∣
∣
c
o
s
θ
\bf{\Lambda^T(x)p = - ||\Lambda^T(x)||||p||cos\theta}
ΛT(x)p=−∣∣ΛT(x)∣∣∣∣p∣∣cosθ,
θ
\theta
θ为
p
\bf{p}
p与
−
Λ
(
x
)
\bf{-\Lambda(x)}
−Λ(x)的夹角,当
λ
\lambda
λ和
∣
∣
p
∣
∣
||p||
∣∣p∣∣固定时,取
c
o
s
θ
=
1
cos\theta = 1
cosθ=1可使
Λ
T
(
x
)
p
\Lambda^T(x)p
ΛT(x)p取最小值,
f
(
x
)
f(x)
f(x)下降最多。即当
θ
=
0
\theta = 0
θ=0时,
f
(
x
)
f(x)
f(x)下降最快,此时有
p
=
−
∇
f
(
x
)
\bf{p = - \nabla f(x)}
p=−∇f(x)。
从而算法的搜索方向
p
(
k
)
p^{(k)}
p(k)为负梯度方向
−
∇
f
(
x
)
- \nabla f(x)
−∇f(x)。故算法的迭代式为;
x
(
k
+
1
)
=
x
(
k
)
−
λ
k
∇
f
(
x
(
k
)
)
x^{(k+1)} = x^{(k)} - \lambda_k \nabla f(x^{(k)})
x(k+1)=x(k)−λk∇f(x(k))
算法步骤
(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0
(2) 计算目标函数在 x ( k ) x^{(k)} x(k)处的负梯度$ - \nabla (x^{(k)})$
(3) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon ∣∣∇(x(k))∣∣≤ε,则 x ∗ = x ( k ) x^* = x^{(k)} x∗=x(k),计算终止,否则继续
(4) 确定搜索方向
负梯度方向的单位向量: p ( k ) = − ∇ ( x ( k ) ) ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ p^{(k)} = \frac{- \nabla (x^{(k)})}{||\nabla (x^{(k)})||} p(k)=∣∣∇(x(k))∣∣−∇(x(k))
(5) 一维搜索
以
x
(
k
)
x^{(k)}
x(k)为起点,沿负梯度方向
p
(
k
)
p^{(k)}
p(k)进行一维搜索,求得最优步长
λ
k
\lambda_k
λk。使得:
f
(
x
(
k
)
+
λ
k
p
(
k
)
)
=
min
λ
>
0
f
(
x
(
k
)
+
λ
p
(
k
)
)
f(x^{(k)} + \lambda_k p^{(k)}) = \displaystyle \min_{\lambda >0} f(x^{(k)} + \lambda p^{(k)})
f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
下一个迭代点为:
x
(
k
+
1
)
=
x
(
k
)
−
λ
k
p
(
k
)
x^{(k+1)} = x^{(k)} - \lambda_k p^{(k)}
x(k+1)=x(k)−λkp(k)
(6)
k
=
k
+
1
k = k + 1
k=k+1,转(2)。
特点
- 有很好的全局收敛性,任意初始点开始迭代,所产生的点列均收敛。
- 收敛速度比较慢。所谓“最速方向”,仅仅反映函数 f ( x ) f(x) f(x)在点 x ( k ) x^{(k)} x(k)的局部性质,对整体来说,不一定就是下降最快的方向
- 由最优步长 λ k \lambda _k λk的意义知: ( p ( k ) ) T ∇ f ( x ( k + 1 ) ) = 0 (p^{(k)})^T \nabla f(x^{(k+1)}) = 0 (p(k))T∇f(x(k+1))=0,所以在相邻两次迭代中,搜索方向是相互正交的。
牛顿法
基本思想
每次迭代时,用适当的二次函数近似目标函数,并用迭代点指向近似二次函数极小点的方向来构造搜索方向。
分析
f
f
f有二阶连续偏导数,
x
(
k
)
x^{(k)}
x(k)是
f
f
f的极小点的第
k
k
k次近似,
f
f
f在近似点
x
(
k
)
x^{(k)}
x(k)处泰勒展开,二阶近似:
f
(
x
)
≈
φ
(
x
)
=
f
(
x
(
k
)
)
+
∇
(
x
(
k
)
)
T
(
x
−
x
(
k
)
)
+
1
2
(
x
−
x
(
k
)
)
T
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
f(x) \approx \varphi(x) = f(x^{(k)}) + \nabla (x^{(k)})^T (x - x^{(k)}) + \frac{1}{2} (x - x^{(k)})^T H(x^{(k)})(x - x^{(k)})
f(x)≈φ(x)=f(x(k))+∇(x(k))T(x−x(k))+21(x−x(k))TH(x(k))(x−x(k))
易见
φ
(
x
)
\varphi(x)
φ(x)是二次函数,求它的极小值:令
∇
φ
(
x
)
=
∇
(
x
(
k
)
)
+
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
=
0
\nabla \varphi (x) = \nabla (x^{(k)}) + H(x^{(k)})(x - x^{(k)}) = 0
∇φ(x)=∇(x(k))+H(x(k))(x−x(k))=0
若Hessian矩阵
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))正定,则
φ
(
x
)
\varphi(x)
φ(x)的驻点就是
φ
(
x
)
\varphi(x)
φ(x)的极小点。以它作为
f
f
f的极小点的第
k
+
1
k+1
k+1次近似,记为
x
(
k
+
1
)
x^{(k+1)}
x(k+1),即:
x
(
k
+
1
)
=
x
(
k
)
+
H
−
1
(
x
(
k
)
)
∇
(
x
(
k
)
)
x^{(k+1)} = x^{(k)} + H^{-1}(x^{(k)})\nabla (x^{(k)})
x(k+1)=x(k)+H−1(x(k))∇(x(k))
此式即为牛顿法迭代公式。
算法步骤
(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0
(2) 计算目标函数在 x ( k ) x^{(k)} x(k)处的梯度 ∇ ( x ( k ) ) \nabla (x^{(k)}) ∇(x(k))
(3) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon ∣∣∇(x(k))∣∣≤ε,则 x ∗ = x ( k ) x^* = x^{(k)} x∗=x(k),计算终止,否则继续
(4) 构造牛顿方向: p ( k ) = H − 1 ( x ( k ) ) ∇ ( x ( k ) ) p^{(k)} = H^{-1}(x^{(k)})\nabla (x^{(k)}) p(k)=H−1(x(k))∇(x(k))
(5) 更新点列: x ( k + 1 ) = x ( k ) + p ( k ) x^{(k+1)} = x^{(k)} + p^{(k)} x(k+1)=x(k)+p(k)
(6) k = k + 1 k = k + 1 k=k+1,转(2)。
特点
- 要求 f ( x ) f(x) f(x)是二阶可微函数,有时计算hessian矩阵的逆矩阵十分困难
- 初始点与极小点的距离不宜太短,较远的话hessian矩阵奇异,此时牛顿方向可能不存在,迭代可能不收敛,甚至下降性也不能保证。
拟牛顿法
就是用梯度差分或者一个近似矩阵 H k H_k Hk去代替 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H−1(x(k)),以克服牛顿法中需要计算 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H−1(x(k))的缺点。
不同构造 H k H_k Hk的方法,产生不同的拟牛顿法。
特点
- 仅需要一阶导数
- 保持正定,使方法具有下降性质
- 每次迭代需要 o ( n 2 ) o(n^2) o(n2)次乘法运算,牛顿法需要 o ( n 4 ) o(n^4) o(n4)
- 搜索方向相互共轭,具有二次终止性
阻尼牛顿法
基本思想
选择较优目标值的初始点是困难的,需要对牛顿法进行修正。
牛顿法中,假设 λ k = 1 \lambda _ k = 1 λk=1,但在阻尼牛顿法中,每一次的迭代需要计算搜索因子 λ k \lambda _ k λk,进行一次一维搜索,以保证算法的收敛或者加快收敛速度。
分析
首先确定搜索方向:
p
(
k
)
=
−
∇
2
f
(
x
(
k
)
)
−
1
∇
(
f
(
x
(
k
)
)
)
p^{(k)} = - \nabla ^ 2 f(x^{(k)})^{-1} \nabla (f(x^{(k)}))
p(k)=−∇2f(x(k))−1∇(f(x(k)))
然后求解一元函数寻优问题:
f
(
x
(
k
)
+
λ
k
p
(
k
)
)
=
min
λ
>
0
f
(
x
(
k
)
+
λ
p
(
k
)
)
f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)})
f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
得到阻尼牛顿法新的迭代点公式:
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
p
(
k
)
x^{(k+1)} = x^{(k)} + \lambda _ k p^{(k)}
x(k+1)=x(k)+λkp(k)
算法步骤
(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0
(2) 计算目标函数在 x ( k ) x^{(k)} x(k)处的梯度 ∇ ( x ( k ) ) \nabla (x^{(k)}) ∇(x(k))
(3) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon ∣∣∇(x(k))∣∣≤ε,则 x ∗ = x ( k ) x^* = x^{(k)} x∗=x(k),计算终止,否则继续
(4) 构造牛顿方向: p ( k ) = H − 1 ( x ( k ) ) ∇ ( x ( k ) ) p^{(k)} = H^{-1}(x^{(k)})\nabla (x^{(k)}) p(k)=H−1(x(k))∇(x(k))
沿着
p
(
k
)
p^{(k)}
p(k)进行一维搜索求得最优搜索因子
λ
k
\lambda _ k
λk:
f
(
x
(
k
)
+
λ
k
p
(
k
)
)
=
min
λ
>
0
f
(
x
(
k
)
+
λ
p
(
k
)
)
f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)})
f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
(5) 更新点列:
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
p
(
k
)
x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)}
x(k+1)=x(k)+λkp(k)
(6) k = k + 1 k = k + 1 k=k+1,转(2)。
特点
-
保持了牛顿法收敛速度快的特点,降低了对初始点的选择要求
-
由此得到的点列 { x ( k ) } \{x^{(k)}\} {x(k)}有如下性质;
(1) { f ( x ( k ) ) } \{ f(x^{(k)}) \} {f(x(k))}为严格单调下降数列
(2) { x ( k ) } \{x^{(k)}\} {x(k)}的任一极限点 x ^ \hat{x} x^必为 f ( x ) f(x) f(x)的极小点
共轭方向法
基本思想
牛顿法收敛速度快,但是计算困难,梯度法计算简便,但是收敛速度较慢。
结合优点,就有了共轭方向法。
原理就是利用矩阵A的共轭向量组作为搜索方向。
分析
背景知识;
p i p_i pi是A-共轭向量系是指:
对于对称矩阵A, p i ( i = 1 , 2 , . . . , m ; m < n ) p_i (i = 1, 2, ..., m; m<n) pi(i=1,2,...,m;m<n)为m维列向量组,满足 ( p i , p j ) A = p i T A p j = 0 ( i ≠ j ) (p_i, p_j) _A = p_i ^T A p_j =0 (i \ne j) (pi,pj)A=piTApj=0(i=j)。
n阶正定阵A, p i ≠ 0 , ( i = 0 , 1 , . . . , n − 1 ) p_i \ne 0,(i = 0, 1, ..., n - 1) pi=0,(i=0,1,...,n−1)为A的共轭向量系,对于 ∀ v ∈ R n \forall v \in R^n ∀v∈Rn,有 v = ∑ i = 0 n − 1 p i T A v p i T A p i p i v=\sum_{i=0}^{n-1} \frac{p_i^T Av}{p_i^T A p_i} p_i v=∑i=0n−1piTApipiTAvpi。
n阶正定阵A, p i ≠ 0 , ( i = 0 , 1 , . . . , n − 1 ) p_i \ne 0,(i = 0, 1, ..., n - 1) pi=0,(i=0,1,...,n−1)为A的共轭向量系,且二次函数式从n维欧式空间的任何初始点 x ( 0 ) x^{(0)} x(0)开始,顺次沿着 p i p_i pi方向作m次搜索得到 x ( m ) x^{(m)} x(m),则;
- p i T ∇ ( x ( m ) ) = 0 , ( i = 0 , 1 , . . . , m − 1 ) p_i ^ T \nabla (x^{(m)}) = 0,(i = 0, 1, ..., m-1) piT∇(x(m))=0,(i=0,1,...,m−1)
- 若 m = n m = n m=n,则 x ( n ) x^{(n)} x(n)就是 f ( x ) f(x) f(x)的极小值点
对任意选取的初始值 x ( 0 ) x^{(0)} x(0),至多迭代n步就可以收敛到 f ( x ) f(x) f(x)的全局极小点 x ∗ x^* x∗。
对于任何一组线性无关的向量
v
i
(
i
=
0
,
1
,
.
.
.
,
n
−
1
)
v_i(i = 0, 1, ..., n-1)
vi(i=0,1,...,n−1),求取矩阵A的一组共轭向量的算法为:
p
0
=
v
0
,
p
i
=
v
i
−
∑
j
=
0
i
−
1
p
j
T
A
v
i
p
j
A
p
j
p
j
(
j
=
1
,
2
,
.
.
.
,
n
−
1
)
p_0 = v_0,p_i = v_i - \sum_{j= 0}^{i -1} \frac{p_j^T A v_i}{p_j A p_j} p_j \qquad (j = 1, 2, ..., n-1)
p0=v0,pi=vi−j=0∑i−1pjApjpjTAvipj(j=1,2,...,n−1)
算法执行过程中,为简便计算,可取
v
i
v_i
vi 为单位阵中的列向量。
得到共轭向量组 p i ( i = 0 , 1 , . . . , n − 1 ) p_i(i = 0, 1, ..., n-1) pi(i=0,1,...,n−1),然后令下降方向为: p ( k ) = p k ( k = 0 , 1 , . . . , n − 1 ) p^{(k)} = p_k (k = 0, 1, ..., n-1) p(k)=pk(k=0,1,...,n−1),并且 λ k \lambda _k λk由一维搜索确定。
note: 算法中函数 f ( x ) f(x) f(x)是用二阶泰勒展开式近似的,所以得到的最优解可能还不是极小点,因此可将该最优解作为初始值在进行一轮迭代,一般要重复多次,逐步达到极小点。
算法步骤
(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0
(2) 令 p ( 0 ) = p 0 = v 0 p^{(0)} = p_0 = v_0 p(0)=p0=v0,计算 ∇ ( x ( 0 ) ) \nabla (x^{(0)}) ∇(x(0))
(3) 沿着
p
(
k
)
p^{(k)}
p(k)进行一维搜索求得最优搜索因子
λ
k
\lambda _ k
λk:
f
(
x
(
k
)
+
λ
k
p
(
k
)
)
=
min
λ
>
0
f
(
x
(
k
)
+
λ
p
(
k
)
)
f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)})
f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
计算得到下一个迭代点:
x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)
(4) k = k + 1 k = k + 1 k=k+1,计算 ∇ ( x ( k ) ) \nabla (x^{(k)}) ∇(x(k))
(5) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon ∣∣∇(x(k))∣∣≤ε,则 x ∗ = x ( k ) x^* = x^{(k)} x∗=x(k),计算终止,否则继续
(6) 循环变量检查:若 k = n k = n k=n,则转(8),否则继续
(7) 计算 p ( k ) = p k = v k − ∑ j = 0 k − 1 p j T A v k p j A p j p j p^{(k)} = p_k = v_k - \sum_{j= 0}^{k -1} \frac{p_j^T A v_k}{p_j A p_j} p_j p(k)=pk=vk−j=0∑k−1pjApjpjTAvkpj,转(3)
(8) 开始下一轮迭代:令 x ( 0 ) = x ( n ) , p ( 0 ) = p 0 = v 0 , ∇ ( x ( 0 ) ) = ∇ ( x ( n ) ) x^{(0)} = x^{(n)},p^{(0)} = p_0 = v_0, \nabla (x^{(0)}) = \nabla (x^{(n)}) x(0)=x(n),p(0)=p0=v0,∇(x(0))=∇(x(n)),转(3)
共轭梯度法
基本思想
在共轭方向法中,选取不同的初始线性无关向量组 v i v_i vi ,可以得到不同的A-共轭向量组。
共轭梯度法,试讲目标函数在各点的负梯度 − ∇ ( x ( i ) ) , ( i = 0 , 1 , . . . . , n − 1 ) - \nabla (x{(i)}),(i = 0, 1, ...., n-1) −∇(x(i)),(i=0,1,....,n−1)作为共轭方法中的线性无关向量组 v i ( i = 0 , 1 , . . . . , n − 1 ) v_i (i = 0, 1, ...., n-1) vi(i=0,1,....,n−1),从而构成A的共轭向量组 p i ( i = 0 , 1 , . . . . , n − 1 ) p_i (i = 0, 1, ...., n-1) pi(i=0,1,....,n−1)。
算法步骤
(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0
(2) 计算 ∇ ( x ( 0 ) ) \nabla (x^{(0)}) ∇(x(0)),令 p ( 0 ) = − ∇ ( x ( 0 ) ) p^{(0)} = -\nabla (x^{(0)}) p(0)=−∇(x(0))
(3) 一维搜索求得最优搜索因子
λ
k
\lambda _ k
λk:
f
(
x
(
k
)
+
λ
k
p
(
k
)
)
=
min
λ
>
0
f
(
x
(
k
)
+
λ
p
(
k
)
)
f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)})
f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
计算得到下一个迭代点:
x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)
(4) k = k + 1 k = k + 1 k=k+1,计算 ∇ ( x ( k ) ) \nabla (x^{(k)}) ∇(x(k))
(5) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon ∣∣∇(x(k))∣∣≤ε,则 x ∗ = x ( k ) x^* = x^{(k)} x∗=x(k),计算终止,否则继续
(6) 循环变量检查:若 k = n k = n k=n,则转(8),否则继续
(7) 计算 p ( k ) = − ∇ ( x ( k ) ) + ( ∇ ( x ( k ) ) ) T A p ( k − 1 ) ( p ( k − 1 ) ) T A p ( k − 1 ) p ( k − 1 ) p^{(k)} = - \nabla (x^{(k)}) + \frac{(\nabla(x^{(k)})) ^T A p^{(k - 1)}}{(p^{(k-1)})^T A p^{(k-1)}} p^{(k-1)} p(k)=−∇(x(k))+(p(k−1))TAp(k−1)(∇(x(k)))TAp(k−1)p(k−1)
转(3)
(8) 开始下一轮迭代:令 x ( 0 ) = x ( n ) , p ( 0 ) = − ∇ ( x ( 0 ) ) x^{(0)} = x^{(n)},p^{(0)}= -\nabla (x^{(0)}) x(0)=x(n),p(0)=−∇(x(0)),转(3)
note
(7)中使用矩阵A,对于二次型函数,A已经存在,非二次型函数,可以用 H ( x ( k ) ) H(x^{(k)}) H(x(k))代替矩阵A,这样一来计算量很大。
用FR公式避免Hessian矩阵的计算,(7)中公式改写为: p ( k ) = − ∇ ( x ( k ) ) + β k − 1 p ( k − 1 ) p^{(k)} = - \nabla (x^{(k)}) + \beta _ {k-1} p^{(k-1)} p(k)=−∇(x(k))+βk−1p(k−1).
经过推导,得到FR公式为:
β
k
−
1
=
(
∇
(
x
(
k
)
)
)
T
∇
(
x
(
k
)
)
(
∇
(
x
(
k
−
1
)
)
)
T
∇
(
x
(
k
−
1
)
)
=
∣
∣
∇
(
x
(
k
)
)
∣
∣
2
∣
∣
∇
(
x
(
k
−
1
)
)
∣
∣
2
\beta _{k-1} = \frac{(\nabla(x^{(k)})) ^T \nabla (x^{(k)})}{(\nabla(x^{(k-1)})) ^T \nabla (x^{(k-1)})} = \frac{||\nabla (x^{(k)})||^2}{||\nabla (x^{(k-1)})|| ^ 2}
βk−1=(∇(x(k−1)))T∇(x(k−1))(∇(x(k)))T∇(x(k))=∣∣∇(x(k−1))∣∣2∣∣∇(x(k))∣∣2
步骤(7) 改写为:
计算 β k − 1 , p ( k ) = − ∇ ( x ( k ) ) + β k − 1 p ( k − 1 ) \beta _{k-1},p^{(k)} = - \nabla (x^{(k)}) + \beta _ {k-1} p^{(k-1)} βk−1,p(k)=−∇(x(k))+βk−1p(k−1),转(3)
此外还有PRF与DM公式。
变尺度法(DFP)
拟牛顿法的一种,变尺度法是求解无约束极值问题的一种有效方法。为克服梯度法收敛慢和Newton法计算工作量大的缺点而提出来的一种算法
基本思想
梯度法中,沿最速下降方向搜索,有局部特征,产生拉锯现象,收敛较慢,沿牛顿方向收敛快,但是计算Hessian矩阵困难。
因此,构造矩阵
H
k
H_k
Hk按照:
p
(
k
)
=
−
H
k
∇
(
x
(
k
)
)
p^{(k)} = - H_k \nabla (x^{(k)})
p(k)=−Hk∇(x(k))
选择搜索方向。
为保证下降方向且计算简便,要求 H k H_k Hk;
- 正定
- 递推关系 H k + 1 = H k + Δ H k H_{k+1} = H_k + \Delta H_k Hk+1=Hk+ΔHk
DFP算法
Δ H k = Δ x ( k ) ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k − H k q k q k T H k q k T H k q k \Delta H_k = \frac{\Delta x^{(k)} (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} - \frac{H_k q_k q_k^T H_k}{q_k^T H_k q_k} ΔHk=(Δx(k))TqkΔx(k)(Δx(k))T−qkTHkqkHkqkqkTHk
BFGS 算法
Δ H k = q k T H k q k Δ x ( k ) ( Δ x ( k ) ) T ( ( Δ x ( k ) ) T q k ) 2 − Δ x ( k ) q k T H k ( Δ x ( k ) ) T q k − H k q k ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k + Δ x ( k ) ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k = ( I − Δ x ( k ) q k T ( Δ x ( k ) ) T q k ) H k ( I − Δ x ( k ) q k T ( Δ x ( k ) ) T q k ) + Δ x ( k ) ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k \Delta H_k = \frac{q_k^T H_k q_k \Delta x^{(k)} (\Delta x^{(k)}) ^T}{((\Delta x^{(k)}) ^T q_k)^2} - \frac{\Delta x^{(k)} q_k^T H_k}{(\Delta x^{(k)}) ^T q_k} - \frac{H_k q_k (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} + \frac{\Delta x^{(k)} (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} \\ = (I - \frac{\Delta x^{(k)} q_k^T}{(\Delta x^{(k)}) ^T q_k}) H_k (I - \frac{\Delta x^{(k)} q_k^T}{(\Delta x^{(k)}) ^T q_k}) + \frac{\Delta x^{(k)} (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} ΔHk=((Δx(k))Tqk)2qkTHkqkΔx(k)(Δx(k))T−(Δx(k))TqkΔx(k)qkTHk−(Δx(k))TqkHkqk(Δx(k))T+(Δx(k))TqkΔx(k)(Δx(k))T=(I−(Δx(k))TqkΔx(k)qkT)Hk(I−(Δx(k))TqkΔx(k)qkT)+(Δx(k))TqkΔx(k)(Δx(k))T
q k = ∇ ( x ( k + 1 ) ) − ∇ ( x ( k ) ) q_k = \nabla (x^{(k+1)}) - \nabla (x^{(k)}) qk=∇(x(k+1))−∇(x(k))
算法流程
(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,选取初始矩阵 H 0 = I H_0 =I H0=I
(2) 计算 f 0 = f ( x ( 0 ) ) , ∇ 0 = ∇ ( x ( 0 ) ) f_0 = f(x^{(0)}),\nabla_0 = \nabla (x^{(0)}) f0=f(x(0)),∇0=∇(x(0)),令 p ( 0 ) = − ∇ 0 , k = 0 p^{(0)} = - \nabla _0,k = 0 p(0)=−∇0,k=0
(3) 检查收敛性,若 ∣ ∣ ∇ 0 ∣ ∣ ≤ ε ||\nabla _0|| \leq \varepsilon ∣∣∇0∣∣≤ε,则 x ∗ = x ( 0 ) x^* = x^{(0)} x∗=x(0),计算终止,否则继续
(4) 一维搜索求得最优步长
λ
k
\lambda _ k
λk:
f
(
x
(
k
)
+
λ
k
p
(
k
)
)
=
min
λ
>
0
f
(
x
(
k
)
+
λ
p
(
k
)
)
f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)})
f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
计算得到下一个迭代点:
x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)
之后计算 f k + 1 = f ( x ( k + 1 ) ) , ∇ k + 1 = ∇ ( x ( k + 1 ) ) f_{k+1} = f(x^{(k+1)}), \nabla _{k+1} = \nabla (x^{(k+1)}) fk+1=f(x(k+1)),∇k+1=∇(x(k+1))
(5) 检查收敛性,若 ∣ ∣ ∇ k + 1 ∣ ∣ ≤ ε ||\nabla _{k+1} || \leq \varepsilon ∣∣∇k+1∣∣≤ε,则 x ∗ = x ( k + 1 ) x^* = x^{(k+1)} x∗=x(k+1),计算终止,否则继续
(6) 正定检查,即检查函数值是否下降,若 f k + 1 ≥ f k f_{k+1} \geq f_k fk+1≥fk,则令 x ( 0 ) = x ( k ) , f 0 = f k , ∇ 0 = ∇ k , H 0 = I , k = 0 x^{(0)} = x^(k),f_0 = f_k, \nabla _0 = \nabla _k , H_0 = I, k =0 x(0)=x(k),f0=fk,∇0=∇k,H0=I,k=0,转(4),否则继续
(7) 检查迭代次数:
若 k = n − 1 k = n -1 k=n−1,则转(9),否则继续
(8) 计算 q k = ∇ ( x ( k + 1 ) ) − ∇ ( x ( k ) ) q_k = \nabla (x^{(k+1)}) - \nabla (x^{(k)}) qk=∇(x(k+1))−∇(x(k)),使用DFP算法或者BFGS算法计算 H k + 1 H_{k+1} Hk+1,确定搜索方向 p ( k + 1 ) = − H k + 1 ∇ ( x ( k + 1 ) ) p^{(k+1)} = - H_{k+1} \nabla (x^{(k+1)}) p(k+1)=−Hk+1∇(x(k+1)),令 k = k + 1 k = k+1 k=k+1,转(3)
(9) 令 x ( 0 ) = x ( n ) , f 0 = f n , ∇ 0 = ∇ n , H 0 = I , k = 0 x^{(0)} = x^(n),f_0 = f_n, \nabla_0 = \nabla _n, H_0 = I , k=0 x(0)=x(n),f0=fn,∇0=∇n,H0=I,k=0,转(4)
特点
- 避免二阶导数矩阵及其求逆计算
- 比梯度法收敛速度快
编程数值计算多元函数的梯度和海因矩阵。
小结
多维无约束优化算法,其中变尺度法迭代中选取的搜索方向是共轭的,故将变尺度法和共轭梯度法归结为一类算法。