tags:数值优化
最小二乘
请思考一下下面的问题
最小二乘的一个重要用途是数据拟合,来看一个例子。假设有
m
组样本点数据
其中向量
x
是该模型的参数,这里设
其中
{ϵi}
纵坐标的测量误差,假设这个误差服从白噪声(即服从高斯分布
N(0,1)
)。对于任何一个
x
我们可以计算它的残差
这里使用最小二乘的定义来求解最小的
x∗
值。现实中,很多问题都是最小二乘的一个特殊的变体:给一个函数
F:Rn↦R
,找满足映射关系的
F
的最小参数值。其中
一般情况下,找到全局最小很困难。这里我们仅仅求解
F
的局部最小解,也就是求在
我们假设目标函数是光滑可微分的,下面的泰勒的截断式是有效的
其中
g
是梯度函数,即:
H
是黑塞矩阵,即:
如果
x∗
是局部最小解同时
∥h∥
足够的小,那么我们不可能找的一个点
x∗+h
使得
F
的值更小。由1.4a可知:
对于上面的必要条件我们给出一个具体的名字叫稳定点:
因此局部最小点也是一个稳定点,但也可能是一个局部最大点。稳定点也有可能既不是局部最小点也不是局部最大点,这个点也被称作鞍点。为了确定给定的点是不是局部最小点。我们需要把第二个条件
xs
带入1.4a,于是有
从定义(1.4c)可知,黑塞矩阵是对称的矩阵,如果我们让
Hs
是正定的,它的特征值要比某些数字
δ>0
要大,则有
上式说明对于给定的足够小的
∥h∥
第二个条件起主要作用,同时第二个条件是正的,这样我们可以得到
如果 Hs 是负定的,则 xs 是局部最大解。如果 Hs 是非定的(也就是它有正的和负的特征值),则 xs 是一个鞍点。
2. 下降方法
所有非线性优化方法都是迭代方法。从迭代开始点 x0,x1,⋯, ,我们希望它能够收敛到被给函数的局部最小点 x∗ ,看定义1.3。大多数的方法使用下面的约束强制函数是下降的
这就防止了函数收敛到局部最大点同时也使函数更少的可能收敛到鞍点。如果被给的函数的局部最小点不止一个,那么收敛的结果值依赖于它的初始解 x0 。因为我们不知道哪一个最小解将要被发现。所以最小解不有必要与 x0 很接近。
在很多情况下,该方法可能要经历两个阶段才能收敛到最小解。当 x0 远离最小解时,我们想让该方法能够稳定的朝着$x^*收敛。因此在整个的迭代过程中我们应保证误差不增加(除了在第一步时),也就是
其中
ek
表示当前的误差,
当
xk
接近
x∗
时,我们想让函数更快的收敛,看看下面关于收敛速度的一些定义
下面给出下降方法的算法步骤,其中迭代的每一步我们需要考虑下面两个问题
- 找到下降的方向 hd
- 找到一个好的迭代步长
算法大概步骤
思考一下下面的情况,关于以
x
起点,
这里我们把
F(x+α)
看成关于
α
的函数
可以看出,如果
α=0,ϕ′(0)=htF′(x)<0
时,
F(x)
为单调减函数。所有我们可以得到下降方向
h
满足的条件
如果没有那样的
h
存在,而此时又有
这个过程叫做线性搜索。下面我们先介绍两种计算下降方向的方法。
2.1 最速下降法
从(2.5)我们可以知道完成一个
αh,α>0
,函数的相对增益值满足
其中
θ
是
h
和
以(2.8)为基础的方法叫做最速下降方法或者梯度方法。它是下降方向最好的方法,我们可以把它应用于(2.7)。该方法收敛的速度是线性的,比较缓慢。然而最速下降法用于精确线性搜索,在有限计算精度下有可能找不到最小点。但大多数情况下,该方法在最初的迭代过程中能够表现出很好的性能。
思考一下有没有这么一种混合方法,该方法在最初的表现的很好,如梯度方法,在接近真实解时它表现的像牛顿法。接下来我们来看看什么是牛顿法。使用混合方法的一个关键性问题是什么时候切换这两种方法最恰当。
2.2 牛顿法
我们从
x∗
是一个稳点时推导这个方法。根据(1.6)的定义,它满足
F′(x)=0
,这是一个非线性方程组,由泰勒表达式
我们推导牛顿方法:找
hn
的解
计算下一次的迭代
若假设
H
是正定非奇异的,对于所有
这说明了 hn 是下降方向,它满足2.6定义的条件。
牛顿方法在迭代的最后阶段(即接近最小解)能够表现的非常的好。它也说明了如果黑塞矩阵是正定的(1.8定义的),在真实解附近 F″(x) 也是正定的,然后就可以得到二次收敛的速度。另一方面,如果 F″(x) 是负定的,我们将得到二次收敛速度的最大解。我们可以使用下降的条件避免收敛到最大点。
下面是依据梯度方法和牛顿方法的混合方法,根据2.10可知,如果 F″ 是正定的,牛顿方法能够保证是下山方向。
这里 hsd 是最速下降方向, α 是通过线性搜索找到。检查一个矩阵是不是正定的一个好的工具是使用乔里斯基方法(Cholesk’s method),如果分解成功还可以用来求解线性方程组,因此对正定的检查是很方面的。
在2.4节我们将介绍同时求解搜索方向 hn 和步长 α 的方法。混合方法是非常有效的但它是很难被使用的。因为它需要计算 F″(x) ,对于于一些复杂的应用是很困难的。相反我们使用拟牛顿方法(Quasi-Newton method),它使用一系列的逐渐逼近 H∗=F″(x) 的方法。
2.3 线性搜索
给定一个点
x
和下降方向
要保证
h
是下降的方向,则有
对于牛顿法,通常情况下,我们让 α=1 ,对于 α 的选择可能引起一下几种情况
- α 很小,使得目标函数增益很小, α 应该增加。
- α 很大,大到 ϕ(α)≥ϕ(0) ,这时应该减少 α 使得满足下降方向。
- α 接近 ϕ(α) 的最小值,接受这个 α 值。
精确地线性搜索是求解一系列的
α1,α2,⋯
的迭代过程,我们的目标是寻找最小的
αe
(2.7)。当迭代步长
αs
满足下面的条件时停止
其中
τ
是非常小的正数。其中
精确的线性搜索可能会更多的计算时间,那是因为当
x
远离
这就保证了不会出现第二种情况,第一种情况中
(α,ϕ(α))
很接近起始点的切向,我们给出下面的条件
如果开始的猜想的 α 满足这些约束,我就就接受它,否则我们必须以精确线性搜索为基础迭代搜索。
2.4 信頼域和阻尼方法
假设
L
有如下的模型
其中 c⊆Rn , 矩阵 B⊆Rn×n 是对称的。 L(h) 是对 F(x+h) 的近似。在 h 充分小的情况下这个近似是正确的。
在信頼域中我们假设知道一个正的数字
阻尼模型里迭代步长被确定
其中阻尼参数 u≥0 。条件 12uhTh=12u∥h∥2 被看做惩罚大步骤。
算法2.4的中心部分若以上述方法为基础则有
如果
h
满足下降的方向(2.1),则相应的
因为
计算步长模型的质量可以使用增益率来评估
也是说计算函数值真实的减少与预测的减少之间的比率。在这个式子中,分母是正的,如果分子是负的说明这一步不是下山方向(步长太大了应该减小步长)。
在信頼域中我们一直监测
△
的步长,下面的更新策略被广泛使用的
因此,如果 ρ<14 ,我们使用更小的步长,而 ρ>34 说明我们可以使用更大的步长。信頼域算法对阈值0.25,0.75,除数 p1=2 或者因子 p2=3 的微小变化不敏感。但是 p1=2,p2=3 的选择是非常重要的,它使得 △ 值不震荡。
在阻尼方法中,如果
ρ
很小表明应该加大阻尼因子也就是增加惩罚步长。如果
ρ
是一个大的值表明
L(h)
很好的近似了
F(x+h)
,此时阻尼因子应该减小。下面的策略与(2.19)一样都是被广泛使用的,它最初由马夸尔克(Marquardt)提出
这个方法与上一个方法一样对阈值0.25, 0.75, p1=2,p2=3 的微小变化不敏感, p1,p2 的选择很重要,它使得 u 值不发生震荡。经验表明通过阈值0.25,0.75的不连续变换可能引起”抖动”的减缓收敛。下面是由尼克森(Nielsen)提出的总体性能较优越的策略
2.4.1 计算步长
通过函数的稳定点求解阻尼因子的步长。
要求
φu(h)
最小的解,则意味着
hdm
是
的解( 参考2.16),从 (2.14)的定义可以看到它等价于
其中
I
是单位阵,如果
例子 2.1 阻尼牛顿法
假设模型为上述的
这里 hdm 就是所说的阻尼牛顿步,如果 u 很大,有
也即是在最速方向上的很小的步。另一方面,如果
u
很小,
信頼域方法的步
htr
通过下面的约束问题求解
3. 非线性最小二乘
首先考虑下面的问题
给一个向量函数 f:Rn↦Rm,m>n 现在要使 ∥f(x)∥ 最小。即:
或者等价于时 F(x) 最小,即:
最小二乘问题可以通过一般的优化方法,我们将要提出的LMA方法更加有效率,很多情况下LMA要比线性方法要好,有些时候甚至是二次收敛的。
当初始解远离真实解时,表现的像是一个梯度下降法(线性搜索),速度很慢,但是是可收敛的。
当初始解很接近真实解时,LMA表现的像是高斯牛顿方法,它的收敛速度二次的。
对于求解 F(x) 的最小值,首先需要对 F(X) 求导,这里假设 f 有连续的二街偏导数。我们可以利用泰勒的阶段二项式:
对
F:Rn↦R,
求一阶导,即:
因此 F(x) 的梯度为:
例3.1 线性最小二乘问题
若 f(x)=b−Ax ,其中 b⊆Rm,A⊆Rm×n ,这是一个简单的线性最小二乘问题。其中: f′(x)=−A ,从1.4b可知
假设 F′(x∗)=0 ,则有:
上式又叫正规方程组,为了解这个问题可以写成:
我们可以通过正交矩阵 Q 求解
*Note: 用正交矩阵求得的解要比解正规方程组得到的解精确的多。
例3.2 求正规方程的解
f(x∗)=0 , where f:Rn↦Rn
我们可以使用牛顿迭代法,牛顿迭代法的条件是首先有一个初始解的猜想
x0
(
x0
很接近真实解),然后依次计算
x1,x2,…
,所有这些
x
必须满足
这里如果
J(x∗)
是非奇异的,牛顿迭代法的收敛速度是二次的。也就是如果
dk=∥xk−x∗∥
是很小的,
∥xk+1−x∗∥=O(d2k)
,如果
x
s是远离
3.1 高斯牛顿法
当初始解很接近真实解,高斯牛顿法是一种十分有效的方法,它的收敛速度是二次的,高斯牛顿法的实现以向量函数的一阶导为基础。同时高斯牛顿法在求解非线性问题时,也是把它局部化线性处理。由 3.2a 知,当 ∥h∥2 很小时我们可以得到:
最小化 L(h) 得到高斯牛顿步长h_gn,
与3.4a比较可知
L′(0)=F′(x)
。从上面的方程
L″(h)
与
h
无关的并且是对称的。这里如果
因此对于
F
来讲
我们可以用下面的方程迭代求解:
{x⊆|F(x)≤F(x0)}
在所有的迭代步骤中 J 是满秩。
Note:基于优化的牛顿法通常是二次收敛的,但是高斯牛顿法通常不是这种情况。
下面我们比较这两种方法的搜索方向:
Note: F(x∗) 的值决定了收敛的速度。
例子3.3 考虑下面的问题,其中 n=1,m=2
接着:
这就表明如果 γ<1 ,那么 F″(0)>0 ,因此 x=0 是一个局部最小解(更准确的说它是一个全局最小解)。下面在看看雅克比矩阵:
高斯牛顿方法的迭代步骤:
如果 γ≠0 且 xk 趋近于0则有:
最后,如果 γ=0 则有 xk+1=xk−xk=0 ,这里一步就找到了解,因为这时 f(x) 退化成线性函数。
例子3.4牛顿迭代法和高斯牛顿法
回想例子1.2,
f(x∗)=0
,其中
f:Rn↦Rn
。如果使用牛顿迭代法去解决这个问题,迭代步骤如下:
高斯牛顿法最小化
F(x)=12fT(x)f(x)
有如下的步骤:
这里 J(x) 是方阵,若假设 J(x) 是非奇异的且 (JT(x))−1 存在,高斯牛顿方法和牛顿迭代法具有相同的问题。也就是初始解的问题。
3.2 The Levernberg-Marquardt Method
Leverberg-Marquardt Method(LMA)中文称作列文伯格-马夸尔特法,也常被叫做阻尼最小二乘法(damped least-squares method)。常被用来解决非线性最小二乘问题,特别是在最小二乘曲线拟合问题(least squares curve fitting)。LMA算法其实就是下降法与高斯牛顿的结合,当初始解远离真实解时,LMA算法表现的像下降法,当初始解接近真实解时LMA算法表现的像是高斯牛顿法。下面定义了 hlm :
这里, J=J(x),f=f(x) 。其中阻尼参数 μ 的作用如下:
如果 μ≥0 ,则系数矩阵是正定的,这就保证了 hlm 是下降方向
如果 μ 的值较大我们有
hlm≃−1uF′(x)
也就是在最速下降的方向减少步长,这也说明了如果当前的迭代解如果远离真实解时这是一个很好的确保正确的方法。
- 如果 μ 是很小的。则有 hlm=hgn ,这对最终的真实解来说是一个很好地迭代步长。这时候如果 F′(x∗)=0 (或者 F′x∗ 非长的小),我们可能得到二次的收敛速度。
这就是阻尼擦数对方向和步长的影响。这也给了我们一个求解的方法,即使不是线性搜索的时候。
μ
值得选择应该与
A0=JT(x)J(x0)
的元素有关,例如让
这里
τ
是用户自定义的(此算法对于
τ
的选取不敏感,但是一般的经验都是使用很小的值,例如如果
x0
很接近真实解时
τ=10−6
),否则,
τ=10−3
或者
τ=1
.)。控制
τ
更新的条件是
ρ
,
其中分母是对线性模型(1.7b)增益的预测
因为 hTlm,−hTlmg 都是正的,所以保证了 L(0)−L(hlm) 是正的。
如果 ρ 的值很大,说明 L(hhm) 能够很好的近似 F(x+hlm) ,此时我们可以减少阻尼因子 μ ,使得下一次LM步长更加接近高斯牛顿步长。如果 ρ 很小(也有可能是负的),那么 L(hlm) 不能够近似 F(x+hlm) ,此时我们应该增加 μ ,也就是使得 μ=2μ 以此让 μ 更加接近最速下降的方向和减少步长。
算法的停止迭代条件应该反映到全剧最小,我们有
F′(x∗)=g(x∗)=0
,因此我们可以使用
其中
ϵ
是用户设定的非常小的正数,另一个判断停止迭代的条件是利用
x
非常小的变换。
这里假设如果
x
趋近于0,当
ϵ2,kmax 都是用户设定的值,$\epsilon_2 \; , k_{max}的作用在于如果
ϵ1
设置的比较小以至于对舍入误差有很大的影响停止迭代,这也表明了
F
的增益也
AlgorithmLevenberg−Marquartmethod
begin
k:=0;ν:=2;x:=x0;
A:=JT(x)J(x);g:=JT(x)f(x);
found:=(∥g∥∞≤ϵ1);μ=τ∗max{aii};
while(notfound)and(k<kmax)
k:=k+1;Solve(A+μI)hlm=−g;
if∥hlm∥≤ϵ2(∥x∥+ϵ2)
found:=true;
else
xnew:=x+hlm;
ρ:=(F(x)−F(xnew))/(L(0)−L(hlm));
ifρ>0
x:=xnew;
A:=JT(x)J(x);g:=JT(x)f(x);
found:=(∥g∥∞≤ϵ1);
μ=:μ∗max{13,1−(2ρ−1)3};ν:=2;
else
μ:=μ∗ν;ν:=2∗ν;
end
参考文献
[1] Method for non-linear least squares problems. 2nd Edition, April 2004. K.Madsen, H.BNielsen, O.Tingleff.
[2] A Brif Description of the Levenberg-Marquardt Algorithm Implemented by levmar.
[3] 科学计算导论 .