非线性最小二乘问题的求解方法(一)
本文仅仅根据《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}} 21∑i=1mfi(x)2
其中: f i f_i fi: R n R^n Rn → \rightarrow →R, i=1,2,⋯,m是给定的函数,并且m>=n
例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)=yi−M(x,ti)=yi−x3ex1ti−x4ex2ti,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),其中∣∣x−x∗∣∣<δ
我们假设函数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(∣∣h∣∣3)
其中: 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 g≡F′(x)=[∂x1∂F(x),∂x2∂F(x),⋯,∂xn∂F(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}] H≡F′′(x)=[∂xi∂xj∂2F(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 g∗≡F′(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(∣∣h∣∣3), 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}<e_k||, k>K. ∣∣ek+1<ek∣∣,k>K.其中 e k = x k − x ∗ e_k=x_k-x^* ek=xk−x∗;当迭代值 x k x_k xk距离 x ∗ x^* x∗较近时,即最后阶段,我们需要较快的收敛速度,如:
线性收敛, ∣ ∣ e k + 1 ∣ ∣ < a ∣ ∣ e k ∣ ∣ , 其 中 ∣ ∣ e k ∣ ∣ 为 较 小 值 且 0 < a < 1 ||e_{k+1}||<a||e_k||,其中||e_k||为较小值且0<a<1 ∣∣ek+1∣∣<a∣∣ek