非线性最小二乘问题的求解方法(一)

非线性最小二乘问题的求解方法(一)

  • 1.非线性最小二乘问题
  • 2.下降方法
    • 2.1 梯度法
    • 2.2 牛顿法
    • 2.3 线性搜索
    • 2.4 信赖域和阻尼算法
  • 附录
    • Cholesky's method

本文仅仅根据《Methods For Non-Linear Least Squares Problems》文章做了整理,主要讨论求解函数极小值的各种方法,文章中多次引用了Frandsen于2004出版的书籍,有兴趣的读者可以查阅。本文借鉴了知乎文章https://zhuanlan.zhihu.com/p/93344177,并根据自己的理解做了部分补充和摘要,以备需要时查阅笔记,也欢迎网友们批评指正。

1.非线性最小二乘问题

最小二乘问题(Non-linear least squares problems)可以归结为以下的数学形式:

1.1 最小二乘问题
求解使得F(x)取得极小值的x
F(x)= 1 2 ∑ i = 1 m f i ( x ) 2 \frac {1}{2}\sum_{i=1}^{m}{f_i(x)^{2}} 21i=1mfi(x)2
其中: f i f_i fi: R n R^n Rn → \rightarrow R, i=1,2,⋯,m是给定的函数,并且m>=n

例1.1 最小二乘问题的典型来源之一就是数据拟合。如下图所示,考虑用曲线对图中的点进行拟合:
非线性最小二乘问题的求解方法(一)_第1张图片
假设对点( t i t_i ti, y i y_i yi)进行拟合的曲线M的形式为:
M ( x , t ) = x 3 e x 1 t + x 4 e x 2 t M(x,t)=x_3e^{x_1t}+x_4e^{x_2t} M(x,t)=x3ex1t+x4ex2t
这个拟合模型的依赖参数为x= [ x 1 , x 2 , x 3 , x 4 ] T [x_1,x_2,x_3,x_4]^T [x1,x2,x3,x4]T。我们假设存在 x ∗ x^* x使得下式成立:
y i = M ( x ∗ , t i ) + ϵ i y_i=M(x^*,t_i)+\epsilon_i yi=M(x,ti)+ϵi
其中 ϵ i \epsilon_i ϵi为数据源的(测量)误差,类似于白噪音。对于任意的x,存在残差:
f i ( x ) = y i − M ( x , t i ) = y i − x 3 e x 1 t i − x 4 e x 2 t i , i = 1 , 2 , ⋯ , m f_i(x)=y_i-M(x,t_i)=y_i-x_3e^{x_1t_i}-x_4e^{x_2t_i},i=1,2,⋯,m fi(x)=yiM(x,ti)=yix3ex1tix4ex2ti,i=1,2,,m
最小二乘拟合方法需要求解使得残差的平方和最小的参数x取值。

最小二乘问题可以认为是求解这个问题的变体:存在函数F: R n R^n Rn → \rightarrow R,求解使得该函数取得最小值(通常是目标函数(object function)或代价函数(cost function))的参数。

1.2 全局最小值
给定F(x): R n R^n Rn → \rightarrow R,求解 x ∗ = a r g m i n x x^*=argmin_x x=argminx{F(x)}

事实上这个问题的求解非常困难,这里只讨论简化后的问题,求解F的局部最小值,这里定义列向量x和无穷小量 δ \delta δ,求解局部最小值的问题定义如下:

1.3 局部最小值
给定F(x): R n R^n Rn → \rightarrow R,求解 x ∗ x^* x使得
F ( x ∗ ) < = F ( x ) , 其 中 ∣ ∣ x − x ∗ ∣ ∣ < δ F(x^*)<=F(x), 其中||x-x^*||<\delta F(x)<=F(x),xx<δ

我们假设函数F是连续可微函数,那么根据泰勒展开式有:
F ( x + h ) = F ( x ) + h T g + 1 2 h T H h + O ( ∣ ∣ h ∣ ∣ 3 ) F(x+h)=F(x)+h^Tg+\frac {1}{2}h^THh+O(||h||^3) F(x+h)=F(x)+hTg+21hTHh+O(h3)
其中: g ≡ F ′ ( x ) = [ ∂ F ( x ) ∂ x 1 , ∂ F ( x ) ∂ x 2 , ⋯ , ∂ F ( x ) ∂ x n ] T g\equiv F'(x)=[\frac{\partial F(x)}{\partial x_1},\frac{\partial F(x)}{\partial x_2},⋯,\frac{\partial F(x)}{\partial x_n}]^T gF(x)=[x1F(x),x2F(x),,xnF(x)]T
H ≡ F ′ ′ ( x ) = [ ∂ 2 F ( x ) ∂ x i ∂ x j ] H\equiv F''(x)=[\frac{\partial ^2F(x)}{\partial x_i\partial x_j}] HF(x)=[xixj2F(x)]
如无特殊说明,||h||为二范数, ∣ ∣ h ∣ ∣ = h 1 2 + h 2 2 + ⋯ + h n ||h||=\sqrt {h_1^2+h_2^2+⋯+h_n} h=h12+h22++hn
如果 x ∗ x^* x是局部极小点,那么对于任意列向量h均无法使得 F ( x ∗ + h ) F(x^*+h) F(x+h)取得更小值(相较于 F ( x ) F(x) F(x)),综合连续可微的条件,可得 x ∗ x^* x为函数的局部极小点的必要条件: g ∗ ≡ F ′ ( x ) = 0 g^*\equiv F'(x)=0 gF(x)=0.满足该条件的 x ∗ x^* x称为驻点。
函数的驻点并不一定是函数的局部极小点或局部最大点,不满足局部最大点或局部最小点的驻点称为鞍点,对于驻点 x s x_s xs,有:
F ( x s + h ) = F ( x s ) + 1 2 h T H s h + O ( ∣ ∣ h ∣ ∣ 3 ) F(x_s+h)=F(x_s)+\frac {1}{2}h^TH_sh+O(||h||^3) F(xs+h)=F(xs)+21hTHsh+O(h3), H = F ′ ′ ( x ) H=F''(x) H=F(x)
如果 H s H_s Hs为正定矩阵,则 x s x_s xs为局部最小值;如果 H s H_s Hs为负定矩阵,则 x s x_s xs为局部最大值;否则, x s x_s xs为鞍点。

2.下降方法

非线性优化问题的求解思路大多相似:从初始点 x 0 x_0 x0经过一系列的迭代: x 1 , x 2 , ⋯ x_1, x_2, ⋯ x1,x2,最终(可能)收敛于 x ∗ x^* x,即函数的极小点。需要注意的是,函数可能有很多局部极小点,迭代最终得到的局部极小点与选取的初始点具有密切联系。在迭代初始阶段,我们并不能知道最终的迭代结果,因为局部极小值并不一定接近初始值。迭代的过程明显分为两个阶段:当初始值离局部极小点较远时,除了最初的几步迭代,我们期待迭代过程中误差逐渐减小(原文中这里是不增大): ∣ ∣ e k + 1 < e k ∣ ∣ , k > K . ||e_{k+1}K. ek+1<ek,k>K.其中 e k = x k − x ∗ e_k=x_k-x^* ek=xkx;当迭代值 x k x_k xk距离 x ∗ x^* x较近时,即最后阶段,我们需要较快的收敛速度,如:
线性收敛, ∣ ∣ e k + 1 ∣ ∣ < a ∣ ∣ e k ∣ ∣ , 其 中 ∣ ∣ e k ∣ ∣ 为 较 小 值 且 0 < a < 1 ||e_{k+1}||ek+1<aek,ek0<a<1
平方收敛, ∣ ∣ e k + 1 ∣ ∣ = O ( ∣ ∣ e k ∣ ∣ 2 ) , 其 中 ∣ ∣ e k ∣ ∣ 为 较 小 值 ||e_{k+1}||=O(||e_k||^2),其中||e_k||为较小值 ek+1=O(ek2),ek
超线性收敛, ∣ ∣ e k + 1 ∣ ∣ / ∣ ∣ e k ∣ ∣ → 0 , ||e_{k+1}||/||e_k||\rightarrow0, ek+1/ek0, k → ∞ k\rightarrow\infty k
本文讨论的迭代过程需满足以下条件: F ( x k + 1 ) < F ( x k ) F(x_{k+1})F(xk+1)<F(xk),迭代中的两个关键因素为下降方向和步长。过程如下:

b e g i n begin begin
k : = 0 ; x : = x 0 ; f o u n d : = f a l s e k:=0;x:=x_0;found:=false k:=0;x:=x0;found:=false ( S T A R T I N G P O I N T ) \textcolor{red}{(STARTING\quad POINT)} (STARTINGPOINT)
w h i l e ( n o t f o u n d ) a n d ( k < k m a x ) while(not found) and (kwhile(notfound)and(k<kmax)
{
h d : = s e a r c h d i r e c t i o n ( x ) h_d:=searchdirection(x) hd:=searchdirection(x) ( F R O M x A N D D O W N H I L L ) \textcolor{red}{ (FROM\quad x \quad AND\quad DOWNHILL)} (FROMxANDDOWNHILL)
i f if if(no such h exists)
{
\quad f o u n d : = t r u e found:=true found:=true ( x I S S T A T I O N A R Y ) \textcolor{red}{(x\quad IS\quad STATIONARY)} (xISSTATIONARY)
}
else
\quad {
\quad α : = s t e p l e n g t h ( x , h d ) \alpha:=steplength(x,h_d) α:=steplength(x,hd) ( F R O M x I N D I R E C T I O N h d ) \textcolor{red}{(FROM\quad x\quad IN\quad DIRECTION\quad h_d)} (FROMxINDIRECTIONhd)
\quad x : = x + α h d ; k : = k + 1 x:=x+\alpha h_d;k:=k+1 x:=x+αhd;k:=k+1 ( N E X T I T E R A T E ) \textcolor{red}{(NEXT\quad ITERATE)} (NEXTITERATE)
\quad }
}
e n d end end

考虑 F F F的值在 x x x处沿着 h h h方向变化,当 α \alpha α足够小时,根据泰勒展开式,有:

F ( x + α h ) = F ( x ) + α h T F ′ ( x ) + O ( ∣ ∣ h ∣ ∣ 2 ) F(x+\alpha h)=F(x)+\alpha h^TF'(x)+O(||h||^2) F(x+αh)=F(x)+αhTF(x)+O(h2) ≈ \approx F ( x ) + α h T F ′ ( x ) F(x)+\alpha h^TF'(x) F(x)+αhTF(x)

如果 F ( x + α h ) F(x+\alpha h) F(x+αh) α \alpha α α = 0 \alpha=0 α=0处的减函数, h h h即为下降方向,因此,有如下定义:

h h h为函数 F F F x x x处的下降方向时,有 α h T F ′ ( x ) < 0 \alpha h^TF'(x)<0 αhTF(x)<0

如果这样的下降方向 h h h不存在时,那么 F ′ ( x ) = 0 F'(x)=0 F(x)=0,表明此时 x x x为驻点。否则,我们需要在给定下降方向 h d h_d hd的条件下求解 α \alpha α和,从而使得目标函数下降。其中的一种近似求解方法是求解 α e \alpha_e αe= a r g m i n α > 0 argmin_{\alpha>0} argminα>0{F(x+ α \alpha αh)},这种方法叫线性搜索。这里将先介绍求解下降方向的两种方法——梯度法和牛顿法。

2.1 梯度法

梯度法即使得 F ( x ) F(x) F(x)沿着(局部)下降最快的方法下降,配合线性搜索方法,往往在迭代计算的初期能够有相当好的效果,但是在迭代的后期往往接近线性收敛并且十分缓慢,而且还可能取不到全局最小值。梯度法的介绍如下:
如果我们选择步长 α \alpha α h h h,当 α > 0 \alpha>0 α>0时,函数相对变化满足:

l i m a − > 0 lim_{a->0} lima>0 F ( x ) − F ( x + α h ) α ∣ ∣ h ∣ ∣ \frac{F(x)-F(x+\alpha h)}{\alpha||h|| } αhF(x)F(x+αh)=- 1 ∣ ∣ h ∣ ∣ h T F ′ ( x ) = − ∣ ∣ F ′ ( x ) ∣ ∣ c o s θ \frac{1}{||h|| }h^TF'(x)=-||F'(x)||cos\theta h1hTF(x)=F(x)cosθ

其中 θ \theta θ是向量 h h h F ′ ( x ) F'(x) F(x)之间的夹角,这表明当 θ = π \theta=\pi θ=π时,如果我们选择下降最快的方向,即梯度 h s d = − F ′ ( x ) h_{sd}=-F'(x) hsd=F(x)时,可以使得F(x)的减小量取得最大值。

2.2 牛顿法

根据之前所提到的,当 F ′ ( x ∗ ) = 0 F'(x^*)=0 F(x)=0时, x ∗ x^* x为函数 F ( x ) F(x) F(x)的驻点。对于非线性系统,根据泰勒公式,有:

F ′ ( x + α h ) = F ′ ( x ) + α h T F ′ ′ ( x ) + O ( ∣ ∣ h ∣ ∣ 2 ) F'(x+\alpha h)=F'(x)+\alpha h^TF''(x)+O(||h||^2) F(x+αh)=F(x)+αhTF(x)+O(h2) ≈ \approx F ′ ( x ) + F ′ ′ ( x ) h F'(x)+F''(x)h F(x)+F(x)h

牛顿法在迭代的最终阶段表现较好,即 x x x接近 x ∗ x^* x时,接近平方收敛。牛顿法求解 h h h的方法为求解方程

H h n = − F ′ ( x ) Hh_n=-F'(x) Hhn=F(x) ,其中 H = F ′ ′ ( x ) H=F''(x) H=F(x)

并且计算下一步迭代: x : = x + h n x:=x+h_n x:=x+hn
如果 H H H是正定矩阵,那么该矩阵为非奇异矩阵,并且对于任意非零向量 u u u,满足 u T H u > 0 u^THu>0 uTHu>0,因此有: 0 < h n T H h n = − h n T F ′ ( x ) 00<hnTHhn=hnTF(x),这表明 h n h_n hn为下降方向。
F ′ ′ ( x ) F''(x) F(x)为正定矩阵时,牛顿迭代法可以保证 F ′ ( x ) F'(x) F(x)收敛到局部极小值,因此这里定义混合算法如下:

if( F ′ ′ ( x ) F''(x) F(x)为正定矩阵)
{
h : = h n h:=h_n h:=hn
}
else
{
h : = h s d h:=h_sd h:=hsd
}
x : = x + α h x:=x+\alpha h x:=x+αh

以上介绍了求解下降方向 h h h的两种方法,这两种方法需要配合线性搜索法求解 α \alpha α,从而实现求解函数的局部极小值。判断矩阵是否正定的方法可以用 C h o l e s k y ′ s m e t h o d Cholesky's method Choleskysmethod(见附录)。在2.4节中将会给出同时计算下降方法和步长的方法。这种混合方法可能效率很高,但是却往往较少使用,因为它们需要计算 F ′ ′ ( x ) F''(x) F(x),这对于有些复杂应用问题可能无法实现,替代方法为柯西-牛顿法,这种方法基于一系列逐渐接近 H ∗ = F ′ ′ ( x ) H^*=F''(x) H=F(x)的矩阵,在后续章节中将进行介绍。

2.3 线性搜索

对于给定的 x x x和某下降方法 h h h,下一步迭代过程中 x x x将会沿着方向 h h h变化,为了确定迭代步长(即 x x x移动的距离),我们观察函数值 F ( x ) F(x) F(x) x x x处沿着方向 h h h时的变化:

ϕ ( α ) = F ( x + α h ) \phi(\alpha)=F(x+\alpha h) ϕ(α)=F(x+αh),其中 x x x h h h为给定值,并且 α > 0 \alpha>0 α>0

非线性最小二乘问题的求解方法(一)_第2张图片

对于不同 α \alpha α,可能有以下三种情况:

1 o 1^o 1o α \alpha α过小,导致 ϕ ( α ) \phi(\alpha) ϕ(α)的变化特别小,此时 α \alpha α应当增大
2 o 2^o 2o α \alpha α过大,导致 ϕ ( α ) > ϕ ( 0 ) \phi(\alpha)> \phi(0) ϕ(α)>ϕ(0),此时 α \alpha α应当减小从而使得满足迭代过程中 F ( x ) F(x) F(x)的下降要求
3 o 3^o 3o α \alpha α接近 ϕ ( α ) \phi(\alpha) ϕ(α)的局部极小值(或者局部最小值,如果局部极小值不止一个),此时接受 α \alpha α

精确的线性搜索需要经过一系列迭代 α 1 \alpha_1 α1, α 2 \alpha_2 α2,⋯最终找到真正的局部最小点 α e \alpha_e αe,并且迭代算法在 α s \alpha_s αs满足 ∣ ϕ ′ ( α s ) ∣ < = τ ∣ ϕ ′ ( 0 ) ∣ |\phi'(\alpha_s)|<=\tau|\phi'(0)| ϕ(αs)<=τϕ(0)时停止迭代,其中 τ \tau τ为较小的正数。在迭代过程中,我们可以通过以下方法近似求解 ϕ ( α ) \phi(\alpha) ϕ(α)的变化值:

ϕ ( α k ) = F ( x + α k h ) \phi(\alpha_k)=F(x+\alpha_kh) ϕ(αk)=F(x+αkh),其中 ϕ ′ ( α k ) = h T F ′ ( x + α k h ) \phi'(\alpha_k)=h^TF'(x+\alpha_kh) ϕ(αk)=hTF(x+αkh)

但是精确的线性搜索可能耗费较多计算时间,特别是当 x x x距离 x ∗ x^* x较远时,下降方向 h h h可能距离方向 x ∗ − x x^*-x xx较远,精确的求解 ϕ \phi ϕ的最小值其实并无必要。这就是软线性搜索方法(sofe line search)产生的背景,只要 α \alpha α不落在上述 1 o 1^o 1o 2 o 2^o 2o范围内,我们就接受 α \alpha α的值。我们定义稍微严格的下降条件:

ϕ ( α s ) < = ϕ ( 0 ) + γ 1 ϕ ′ ( 0 ) α \phi(\alpha_s)<=\phi(0)+\gamma_1\phi'(0)\alpha ϕ(αs)<=ϕ(0)+γ1ϕ(0)α,其中 0 < γ 1 < 1 0<\gamma_1<1 0<γ1<1

这就保证我们不会落在 2 o 2^o 2o范围内, 1 o 1^o 1o是因为 α \alpha α过于靠近初值,补充以下条件:

ϕ ( α s ) > = γ 2 ϕ ′ ( 0 ) \phi(\alpha_s)>=\gamma_2\phi'(0) ϕ(αs)>=γ2ϕ(0),其中 γ 1 < γ 2 < 1 \gamma_1<\gamma_2<1 γ1<γ2<1

如果 α \alpha α的初始估值满足这些条件,我们就接受它作为下一步迭代步长 α s \alpha_s αs,否则我们需要按照上文所述进行准确的线性搜索。

2.4 信赖域和阻尼算法

假设在当前迭代值 x x x的领域附近,存在一个模型 L L L可以描述函数 F F F的变化(也可以是其他形式的表达式):

F ( x + h ) ≈ L ( h ) ≡ F ( x ) + h T c + 1 2 h T B h F(x+h)\approx L(h)\equiv F(x)+h^Tc+\frac{1}{2}h^TBh F(x+h)L(h)F(x)+hTc+21hTBh,其中 c ∈ R n c\in R^n cRn,并且 B ∈ R n × n B\in R^{n\times n} BRn×n为对称矩阵

L ( h ) L(h) L(h)是函数 F ( x + h ) F(x+h) F(x+h)的泰勒展开式或近似形式,仅当 h h h足够小时,该模型的优良性才能得到保证。在这里,将会介绍确定迭代量 h h h的两种方法,一种是作为下降方向,一种可以在 α = 1 \alpha=1 α=1时使用(这里翻译不太地道,但不影响理解)。
信赖域方法中,假设模型在 x x x的半径为 Δ \Delta Δ的领域(即以 x x x为球心, Δ \Delta Δ为半径的球)内足够精确,并且定义迭代量为:

h = h t r ≡ a r g m i n ∣ ∣ h ∣ ∣ < Δ h=h_{tr}\equiv argmin_{||h||<\Delta} h=htrargminh<Δ{ L ( h ) L(h) L(h)}

在阻尼算法中,迭代量的定义为:

h = h d m ≡ a r g m i n h h=h_{dm}\equiv argmin_h h=hdmargminh{ L ( h ) + 1 2 μ h T h L(h)+\frac{1}{2}\mu h^Th L(h)+21μhTh},其中阻尼系数 μ > = 0 \mu>=0 μ>=0,其中 1 2 μ h T h \frac{1}{2}\mu h^Th 21μhTh是为了惩罚较大的迭代步长。

因此信赖域或阻尼算法的步骤为:当满足h为迭代量时,迭代计算 h t r h_{tr} htr h d m h_{dm} hdm,否则更新 Δ \Delta Δ μ \mu μ
这可以理解为当 h h h为下降方向时,使得 α = 1 \alpha=1 α=1;否则让 α = 0 \alpha=0 α=0(此时不调整 x x x),但是并不是结束迭代(除非 x = x ∗ x=x^* x=x),而是通过适当调整 Δ \Delta Δ μ \mu μ,从而使得下次迭代过程中更有可能使得 F ( x ) F(x) F(x)下降。因为仅有 h h h足够小时, L ( h ) L(h) L(h)才被假定为接近 F ( x + h ) F(x+h) F(x+h)的近似值,因此导致某步迭代失败的原因就是 h h h过大,因此需要减小 h h h。进一步的,如果当前迭代量 h h h被接受,这表明或许在新的迭代值 x x x附近以更大的迭代量 h h h,从而可减少我们求解 x ∗ x^* x的迭代步数。定义模型的优劣可采用以下收益比:
ρ = F ( x ) − F ( x + h ) L ( 0 ) − L ( h ) \rho=\frac{F(x)-F(x+h)}{L(0)-L(h)} ρ=L(0)L(h)F(x)F(x+h)
当迭代量 h h h不是函数下降方向时,上述表达式的分子小于0,而分母大于0,此时表明 h h h过大而应当减小。
在信赖域方法中,通过调整半径 Δ \Delta Δ的大小来实现监控迭代步长,以下方法被广泛使用:

if( ρ < 0.25 \rho<0.25 ρ<0.25)
Δ : = Δ / 2 \Delta:=\Delta /2 Δ:=Δ/2
else
Δ : \Delta: Δ:=max{ Δ , 3 ∗ ∣ ∣ h ∣ ∣ \Delta, 3*||h|| Δ,3h}

因此,如果 ρ < 0.25 \rho<0.25 ρ<0.25,需要采用更小的步长;如果 ρ > 0.25 \rho>0.25 ρ>0.25,需要采用更大的步长。信赖域算法对于 ρ \rho ρ处于0.25到0.75之间、除数 p 1 = 2 p_1=2 p1=2或者因子 p 2 = 3 p_2=3 p2=3时微小变化并不敏感,但是这两个数的选取是较为重要的,从而干扰可以避免迭代过程中 Δ \Delta Δ的值发生振荡。
在阻尼算法中,较小的 ρ \rho ρ值表明需要增大阻尼项,从而增加对较大迭代步长的惩罚,较大的 ρ \rho ρ值表明模型 L ( h ) L(h) L(h)是函数 F ( x + h ) F(x+h) F(x+h)的较好近似,因此阻尼项需要减小。在阻尼算法中以下方法被广泛使用:

if( ρ < 0.25 \rho<0.25 ρ<0.25)
μ : = μ ∗ 2 \mu:=\mu *2 μ:=μ2
else
μ : = μ / 3 \mu:=\mu /3 μ:=μ/3

同样地,阻尼算法对于 ρ \rho ρ处于0.25到0.75之间、因子 p 1 = 2 p_1=2 p1=2或者除数 p 2 = 3 p_2=3 p2=3时微小变化也不敏感,但是为了避免 μ \mu μ的值发生振,这两个数的选取也较为重要。经验表明,在阈值0.25和0.75之间的非连续变化可能产生抖动 ,将会减慢迭代收敛的过程,以下方法在整体上具有更好的表现

if( ρ < 0.25 \rho<0.25 ρ<0.25)
μ : = μ \mu:=\mu μ:=μ *max{ 1 3 , 1 − ( 2 ρ − 1 ) 3 \frac{1}{3}, 1-(2\rho -1)^3 31,1(2ρ1)3}; ν : = 2 \nu:=2 ν:=2
else
μ : = μ ∗ ν \mu:=\mu *\nu μ:=μν; ν : = 2 ∗ ν \nu:=2*\nu ν:=2ν

其中因子 ν \nu ν的初始值为2。可以看到,如果连续的迭代失败(指下降方向错误),将会导致 μ \mu μ的迅速增大。
非线性最小二乘问题的求解方法(一)_第3张图片
在阻尼算法中,步长的计算过程即求解该函数的驻点:

ϕ μ ( h ) = L ( h ) + 1 2 μ h T h = F ( x ) + h T c + 1 2 h T B h + 1 2 μ h T h = F ( x ) + h T c + 1 2 h T ( B + μ I ) h \phi_\mu (h)=L(h)+\frac{1}{2}\mu h^Th=F(x)+h^Tc+\frac{1}{2}h^TBh+\frac{1}{2}\mu h^Th=F(x)+h^Tc+\frac{1}{2}h^T(B+\mu I)h ϕμ(h)=L(h)+21μhTh=F(x)+hTc+21hTBh+21μhTh=F(x)+hTc+21hT(B+μI)h

这表明 h = h d m h=h_{dm} h=hdm是下列方程的解:

ϕ μ ′ ( h ) = L ′ ( h ) + 1 2 μ h = c + ( B + μ I ) h = 0 \phi'_\mu (h)=L'(h)+\frac{1}{2}\mu h=c+(B+\mu I)h=0 ϕμ(h)=L(h)+21μh=c+(B+μI)h=0

因此, ( B + μ I ) h d m = − c (B+\mu I)h_{dm}=-c (B+μI)hdm=c,其中 I I I为单位矩阵,当 μ \mu μ相当大时,对阵矩阵 B + μ I B+\mu I B+μI是正定矩阵,此时 h d m h_{dm} hdm L L L的局部极小点。在阻尼牛顿法中,令 c = F ′ ( x ) c=F'(x) c=F(x)并且 B = F ′ ′ ( x ) B=F''(x) B=F(x),此时可通过求解:

( F ′ ′ ( x ) + μ I ) h d n = − F ′ ( x ) (F''(x)+\mu I)h_{dn}=-F'(x) (F(x)+μI)hdn=F(x)

其中 h d n h_{dn} hdn为阻尼牛顿法的迭代步长,当 μ \mu μ非常大时, h d n ≈ − 1 μ F ′ ( x ) h_{dn}\approx -\frac{1}{\mu}F'(x) hdnμ1F(x),即沿着负梯度方向迭代较小的步长;当 μ \mu μ非常小时, h d n h_{dn} hdn近似等于牛顿法的迭代步长 h n h_n hn。因此阻尼牛顿法可以认为是梯度法和牛顿法的一种混合方法。
在信赖域算法中,迭代量 h t r h_{tr} htr可以视为是以下约束优化问题的解:

求解 a g r m i n h L ( h ) agrmin_hL(h) agrminhL(h),约束条件为 h T h < = Δ 2 h^Th<=\Delta^2 hTh<=Δ2

如果矩阵 B B B为正定矩阵,则 L ( h ) L(h) L(h)的无约束最小点即为 B h = − c Bh=-c Bh=c的解,并且如果 h h h足够小(满足 h T h < = Δ 2 h^Th<=\Delta^2 hTh<=Δ2),那么此时 h t r h_{tr} htr即为所求解;否则问题需要考虑约束条件而变得较为复杂。事实上和前文提到的类似,并不需要精确求解上述约束优化问题,在下文的3.33.4部分将会提供两种 h t r h_{tr} htr的近似求解方法。
最后说一下当矩阵 B B B为正定矩阵时阻尼算法和信赖域算法的相似之处:当无约束最小点落在信赖域的外部时,存在 λ > 0 \lambda>0 λ>0使得 B h t r + c = − λ h t r Bh_{tr}+c=-\lambda h_{tr} Bhtr+c=λhtr(这部分内容未给出证明,可自行查阅Madsen的著作),当 λ \lambda λ与阻尼参数 μ \mu μ相等时,信赖域算法与阻尼法的计算过程类似。另一方面,对于给定的阻尼参数 μ > = 0 \mu>=0 μ>=0,阻尼法的求解过程为 h d m = a r g m i n ∣ ∣ h ∣ ∣ < = ∣ ∣ h d m ∣ ∣ h_{dm}=argmin_{||h||<=||h_{dm}||} hdm=argminh<=hdm{ L ( x ) L(x) L(x)},当 ∣ ∣ h d m ∣ ∣ ||h_{dm}|| hdm与信赖域半径 Δ \Delta Δ相等时, h d m h_{dm} hdm h t r h_{tr} htr相等。因此,这两类方法是紧密相联的,但是当两种方法计算迭代步长相等时,并不存在一个简单的公式可以描述 Δ \Delta Δ值和 μ \mu μ值的关系。

附录

Cholesky’s method

这里介绍的Cholesky’s method主要用于判断矩阵是否为正定矩阵及方程求解。首先需要先了解对称矩阵(即对于矩阵 A ∈ R n × n A\in R^{n\times n} ARn×n,满足 A = A T A=A^T A=AT,亦即 a i j = a j i a_{ij}=a_{ji} aij=aji)与正定矩阵的关系:

如果对于任意非零向量 x ∈ R n x\in R^n xRn,存在 x T A x > 0 x^TAx>0 xTAx>0,则对称矩阵A为正定矩阵
如果对于任意非零向量 x ∈ R n x\in R^n xRn,存在 x T A x < 0 x^TAx<0 xTAx<0,则对称矩阵A为负定矩阵

如果将对称矩阵 A ∈ R n × n A\in R^{n\times n} ARn×n分解为两个三角矩阵的乘积,即 A = L U A=LU A=LU,其中 L L L为单位下三角矩阵, U U U为上三角矩阵,并且用{ ( λ j , v j ) (\lambda_j, v_j) (λj,vj)表示矩阵 A A A的特征解,即 A v j = λ j v j Av_j=\lambda_jv_j Avj=λjvj j = 1 , 2 , ⋯ , n j=1,2,⋯,n j=1,2,,n那么有:
1 o 1^o 1o 特征解为实数, λ j ∈ R \lambda_j\in R λjR并且特征向量{ v j v_j vj}组成空间 R n R^n Rn的一组标准正交基
2 o 2^o 2o以下描述等价:
i) A为正定矩阵(或半正定矩阵);
ii) 所有的 λ j > 0 \lambda_j>0 λj>0(或 λ j > = 0 \lambda_j>=0 λj>=0)
iii) 所有的 u i i > 0 u_ii>0 uii>0(或 u i i > = 0 u_ii>=0 uii>=0)
如果矩阵 A A A是正定矩阵,那么有:
3 o 3^o 3o L U LU LU分解是数值稳定的
4 o 4^o 4o U = D L T U=DL^T U=DLT,其中 D = d i a g ( u i i ) D=diag(u_{ii}) D=diag(uii)
5 o 5^o 5o A = C T C A=C^TC A=CTC,即Cholesky分解,其中 C ∈ R n × n C\in R^{n\times n} CRn×n为上三角型矩阵

对于给定矩阵 J ∈ R m × n J\in R^{m\times n} JRm×n,令 A = J T J A=J^TJ A=JTJ,显然矩阵 A A A为对称矩阵。进一步地,对于任意非零向量 x ∈ R n x\in R^n xRn,令 y = J x y=Jx y=Jx,那么有

x T A x = x T J T J x = y T y > = 0 x^TAx=x^TJ^TJx=y^Ty>=0 xTAx=xTJTJx=yTy>=0

表明矩阵 A A A为半正定矩阵,如果 m > = n m>=n m>=n并且 J J J的列向量线性无关,则A为正定矩阵。根据以下方程:

( A + μ I ) v j = ( λ j + μ ) v j (A+\mu I)v_j=(\lambda_j+\mu)v_j (A+μI)vj=(λj+μ)vj

可知如果矩阵 A A A为对称矩阵和正定矩阵并且 μ > 0 \mu>0 μ>0,显然矩阵 A + μ I A+\mu I A+μI为对称矩阵且必为正定矩阵。
对称矩阵 A A A的条件数为

κ 2 ( A ) = \kappa_2(A)= κ2(A)=max{ ∣ λ j ∣ |\lambda_j| λj}/min{ ∣ λ j ∣ |\lambda_j| λj}

如果A为正定矩阵(或半正定)且 μ > 0 \mu>0 μ>0,那么有

κ 2 ( A + μ I ) = ( \kappa_2(A+\mu I)=( κ2(A+μI)=(max{ ∣ λ j ∣ |\lambda_j| λj}+ μ \mu μ)/(min{ ∣ λ j ∣ |\lambda_j| λj}+ μ \mu μ)<=(max{ ∣ λ j ∣ |\lambda_j| λj}+ μ \mu μ)/ μ \mu μ

该函数为 μ \mu μ的递减函数。注意到单位下三角矩阵主要由 l i i = 1 l_{ii}=1 lii=1 l i j = 0 l_{ij}=0 lij=0组成(其中 j > i j>i j>i),并且矩阵 A A A的LU分解未经过旋转,以及LU分解和Cholesky分解之间的联系,有

A = L U = L D L T = C T C A=LU=LDL^T=C^TC A=LU=LDLT=CTC

表明

C = D 1 / 2 L T C=D^{1/2}L^T C=D1/2LT,其中 D 1 / 2 = d i a g ( u i i ) D^{1/2}=diag(\sqrt{ u_{ii}}) D1/2=diag(uii )

Cholesky分解可以按照下述方法直接计算(中间无需进行LU分解),其中包括对矩阵正定性的判断:

b e g i n begin begin
k : = 0 ; p o s d e f : = t r u e k:=0;posdef:=true k:=0;posdef:=true
w h i l e ( p o s d e f ) a n d ( k < n ) while(posdef) and (kwhile(posdef)and(k<n)
{
k : = k + 1 ; d : = a k k − ∑ i = 1 k − 1 c i k 2 k:=k+1;d:=a_{kk}-\sum_{i=1}^{k-1}{c_{ik}^2} k:=k+1;d:=akki=1k1cik2
i f if if(d>0)
{
\quad c k k : = d c_{kk}:=\sqrt {d} ckk:=d
\quad f o r ( j : k + 1 , ⋯ , n ) for(j:k+1,⋯,n) for(j:k+1,,n)
\quad {
\quad \quad c k j : = ( a k j − ∑ i = 1 k − 1 c i j c i k c_{kj}:=(a_{kj}-\sum_{i=1}^{k-1}{c_{ij}c_{ik}} ckj:=(akji=1k1cijcik)/ c k k c_{kk} ckk
\quad }
}
else
{
\quad posdef:=false
}
}
e n d end end

以上的算法需要耗费约 1 3 n 3 \frac{1}{3}n^3 31n3次浮点运算,当矩阵 C C C确定后,系统 A x = b Ax=b Ax=b可以通过换元求解,每次迭代大约需要 n 2 n^2 n2次浮点运算:

C T z = b C^Tz=b CTz=b,其中 C x = z Cx=z Cx=z

你可能感兴趣的:(算法学习,算法,线性代数)