非线性优化
对于一个最小非线性二乘问题:
min
x
F
(
x
)
=
1
2
∥
f
(
x
)
∥
2
2
\min_xF(x)=\frac{1}{2}\begin{Vmatrix}f(x)\end{Vmatrix}^2_2
xminF(x)=21∥∥f(x)∥∥22
式中求取函数
f
(
x
)
f(x)
f(x)的L2范数的平方和的一半的最小值,L2范数指对各项取平方和后开方运算。
求解目标函数最小,转化为使其导数为零时的自变量
x
x
x取值:
d
F
d
x
=
0
\frac{dF}{dx}=0
dxdF=0
一般采用迭代法求解,从一个初始值开始,不断迭代更新变量,使得目标函数取值下降:
1.
给
定
初
始
值
x
0
2.
对
于
第
k
次
迭
代
,
寻
找
增
量
Δ
x
k
使
得
∥
f
(
x
k
+
Δ
x
k
)
∥
2
2
达
到
极
小
值
3.
若
Δ
x
k
足
够
小
,
则
满
足
条
件
停
止
4.
反
之
,
x
k
+
1
=
x
k
+
Δ
x
k
,
继
续
迭
代
下
一
轮
\begin{aligned} 1.&给定初始值x_0\\ 2.&对于第k次迭代,寻找增量\Delta x_k使得\begin{Vmatrix}f(x_k+\Delta x_k)\end{Vmatrix}^2_2达到极小值\\ 3.&若\Delta x_k足够小,则满足条件停止\\ 4.&反之,x_{k+1}=x_k+\Delta x_k,继续迭代下一轮\\ \end{aligned}
1.2.3.4.给定初始值x0对于第k次迭代,寻找增量Δxk使得∥∥f(xk+Δxk)∥∥22达到极小值若Δxk足够小,则满足条件停止反之,xk+1=xk+Δxk,继续迭代下一轮
求解增量
Δ
x
k
\Delta x_k
Δxk的方式,通常有如下几种:最速下降法、牛顿法、高斯-牛顿法及列文伯格-马夸尔特法等。
最速下降法
考虑第
k
k
k次迭代,将目标函数进行一阶泰勒展开:
F
(
x
k
+
Δ
x
k
)
≈
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
F(x_k+\Delta x_k)\approx F(x_k)+J(x_k)^T\Delta x_k
F(xk+Δxk)≈F(xk)+J(xk)TΔxk
矩阵
J
(
x
k
)
J(x_k)
J(xk)为函数
F
(
x
)
F(x)
F(x)关于
x
x
x的一阶导数,称为雅可比矩阵(Jacobian Matrix)。
此时可以选取增量如下:
Δ
x
∗
=
a
r
g
min
(
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
)
\Delta x^*=arg\min\Bigl(F(x_k)+J(x_k)^T\Delta x_k\Bigr)
Δx∗=argmin(F(xk)+J(xk)TΔxk)
右侧对$\Delta x_k $求导取零:
Δ
x
∗
=
−
J
(
x
k
)
\Delta x^*=-J(x_k)
Δx∗=−J(xk)
通常,还需要进一步定义一个步长
λ
\lambda
λ,从而沿着方向梯度方向前进,使得目标函数在一阶线性近似下得到下降。最速下降法过于贪心,导致其下降路线容易形成锯齿路线(走格子边缘),从而增加迭代次数。
牛顿法
考虑第
k
k
k次迭代,将目标函数进行二阶泰勒展开:
F
(
x
k
+
Δ
x
k
)
≈
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
+
1
2
Δ
x
k
T
H
(
x
k
)
Δ
x
k
F(x_k+\Delta x_k)\approx F(x_k)+J(x_k)^T\Delta x_k+\frac{1}{2}\Delta x_k^TH(x_k)\Delta x_k
F(xk+Δxk)≈F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk
矩阵
H
(
x
k
)
H(x_k)
H(xk)为函数
F
(
x
)
F(x)
F(x)关于
x
x
x的二阶导数,称为海森矩阵(Hessian Matrix),此时取增量如下:
Δ
x
∗
=
a
r
g
min
(
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
+
1
2
Δ
x
k
T
H
(
x
k
)
Δ
x
k
)
\Delta x^*=arg\min\Bigl( F(x_k)+J(x_k)^T\Delta x_k+\frac{1}{2}\Delta x_k^TH(x_k)\Delta x_k\Bigr)
Δx∗=argmin(F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk)
同样,右侧求导取零:
H
(
x
k
)
Δ
x
k
=
−
J
(
x
k
)
H(x_k)\Delta x_k=-J(x_k)
H(xk)Δxk=−J(xk)
求解上述线性方程,即可得到增量表达。牛顿法需要耗费大量算力求解
H
H
H,应避免此问题发生。
通常采用拟牛顿法进行求解最小二乘问题。
高斯-牛顿法(GN)
对于一个目标函数
F
(
x
)
F(x)
F(x):
min
x
F
(
x
)
=
1
2
∥
f
(
x
)
∥
2
2
\min_xF(x)=\frac{1}{2}\begin{Vmatrix}f(x)\end{Vmatrix}^2_2
xminF(x)=21∥∥f(x)∥∥22
GN法通过将
f
(
x
)
f(x)
f(x)进行泰勒展开,代替对
F
(
x
)
F(x)
F(x)目标展开,从而提高效率。
f
(
x
k
+
Δ
x
k
)
≈
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
f(x_k+\Delta x_k)\approx f(x_k)+J(x_k)^T\Delta x_k
f(xk+Δxk)≈f(xk)+J(xk)TΔxk
此时,求解增量使得
∥
f
(
x
+
Δ
x
k
)
∥
2
\begin{Vmatrix}f(x+\Delta x_k)\end{Vmatrix}^2
∥∥f(x+Δxk)∥∥2最小:
Δ
x
∗
=
a
r
g
min
x
1
2
∥
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
∥
2
\Delta x^* = arg\min_{x}\frac{1}{2}\begin{Vmatrix}f(x_k)+J(x_k)^T\Delta x_k\end{Vmatrix}^2
Δx∗=argxmin21∥∥f(xk)+J(xk)TΔxk∥∥2
对表达式进行化简:
1
2
∥
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
∥
2
=
1
2
(
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
)
T
(
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
)
=
1
2
(
∥
f
(
x
k
)
∥
2
2
+
2
f
(
x
k
)
J
(
x
)
T
Δ
x
k
+
Δ
x
k
T
J
(
x
k
)
J
(
x
k
)
T
Δ
x
k
)
\begin{aligned} \frac{1}{2}\begin{Vmatrix}f(x_k)+J(x_k)^T\Delta x_k\end{Vmatrix}^2&=\frac{1}{2}\Bigl(f(x_k)+J(x_k)^T\Delta x_k\Bigr)^T\Bigl(f(x_k)+J(x_k)^T\Delta x_k\Bigr)\\ &=\frac{1}{2}\Bigl(\begin{Vmatrix}f(x_k)\end{Vmatrix}^2_2+2f(x_k)J(x)^T\Delta x_k+\Delta x_k^TJ(x_k)J(x_k)^T\Delta x_k\Bigr) \end{aligned}
21∥∥f(xk)+J(xk)TΔxk∥∥2=21(f(xk)+J(xk)TΔxk)T(f(xk)+J(xk)TΔxk)=21(∥∥f(xk)∥∥22+2f(xk)J(x)TΔxk+ΔxkTJ(xk)J(xk)TΔxk)
求解使其最小的
x
x
x即为对
Δ
x
\Delta x
Δx求导为零:
J
(
x
k
)
f
(
x
k
)
+
J
(
x
k
)
J
T
(
x
k
)
Δ
x
k
=
0
J
(
x
k
)
J
T
(
x
k
)
Δ
x
k
=
−
J
(
x
k
)
f
(
x
k
)
\begin{aligned} J(x_k)f(x_k)+J(x_k)J^T(x_k)\Delta x_k =0\\ J(x_k)J^T(x_k)\Delta x_k=-J(x_k)f(x_k) \end{aligned}
J(xk)f(xk)+J(xk)JT(xk)Δxk=0J(xk)JT(xk)Δxk=−J(xk)f(xk)
记
H
(
x
k
)
=
J
(
x
k
)
J
T
(
x
k
)
H(x_k)=J(x_k)J^T(x_k)
H(xk)=J(xk)JT(xk),
g
(
x
k
)
=
−
J
(
x
k
)
f
(
x
k
)
g(x_k)=-J(x_k)f(x_k)
g(xk)=−J(xk)f(xk),从而得到关于
Δ
x
k
\Delta x_k
Δxk的线性方程组:
H
(
x
k
)
Δ
x
k
=
g
(
x
k
)
H(x_k)\Delta x_k=g(x_k)
H(xk)Δxk=g(xk)
称其为增量方程,或高斯牛顿方程(Gauss-Newton Equation),正规方程(Normal Equation)。GN法采用
J
J
T
JJ^T
JJT近似牛顿法中二阶海森矩阵
H
H
H,从而避免大量的计算,该算法流程如下:
1.
给
定
初
始
值
x
0
2.
对
第
k
次
迭
代
,
求
雅
可
比
矩
阵
J
(
x
k
)
和
误
差
f
(
x
k
)
3.
求
解
增
量
方
程
:
H
Δ
x
k
=
g
4.
若
Δ
x
k
足
够
小
,
则
满
足
条
件
停
止
5.
反
之
,
x
k
+
1
=
x
k
+
Δ
x
k
,
继
续
迭
代
下
一
轮
\begin{aligned} 1.&给定初始值x_0\\ 2.&对第k次迭代,求雅可比矩阵J(x_k)和误差f(x_k)\\ 3.&求解增量方程:H\Delta x_k=g\\ 4.&若\Delta x_k足够小,则满足条件停止\\ 5.&反之,x_{k+1}=x_k+\Delta x_k,继续迭代下一轮\\ \end{aligned}
1.2.3.4.5.给定初始值x0对第k次迭代,求雅可比矩阵J(xk)和误差f(xk)求解增量方程:HΔxk=g若Δxk足够小,则满足条件停止反之,xk+1=xk+Δxk,继续迭代下一轮
对于增量方程的求解,应满足矩阵 H H H可逆,但 J J T JJ^T JJT为半正定矩阵,可能出现奇异矩阵或病态情况,导致算法不收敛。
列文伯格-马夸尔特法在一定程度上修正了上述问题。
列文伯格-马夸尔特法(LM)
LM法的收敛速度慢于GN法,但其健壮性更强,又被称为阻尼牛顿法(Damped Newton Method)
GN法二阶泰勒展开以近似线性化,其效果仅在展开点附近存在较好近似效果。因此应对 Δ x k \Delta x_k Δxk添加一个区间范围,称为信赖区间(Trust Region)。认为在信赖区间内近似有效而近似区间外无效。
采用近似模型同实际函数间的差异确定信赖区间范围:
ρ
=
f
(
x
k
+
Δ
x
k
)
−
f
(
x
k
)
J
(
x
k
)
T
Δ
x
\rho=\frac{f(x_k+\Delta x_k)-f(x_k)}{J(x_k)^T\Delta x}
ρ=J(xk)TΔxf(xk+Δxk)−f(xk)
指标
ρ
\rho
ρ用于刻画近似的好坏程度,其中,分母为近似模型下降的值,分子为实际函数下降的值。
ρ
\rho
ρ接近1,则近似效果好,应扩大近似范围;
ρ
\rho
ρ较小,则近似效果差,应缩小近似范围。由此,构建LM算法模型:
1.
给
定
初
始
值
x
0
以
及
初
始
优
化
半
径
μ
2.
对
第
k
次
迭
代
,
在
G
N
法
的
基
础
上
增
加
信
赖
区
域
:
min
Δ
x
k
1
2
∥
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
∥
2
,
s
.
t
.
∥
D
Δ
x
k
∥
2
≤
μ
,
其
中
,
μ
为
信
赖
区
间
半
径
,
D
为
系
数
矩
阵
3.
计
算
指
标
:
ρ
=
f
(
x
k
+
Δ
x
k
)
−
f
(
x
k
)
J
(
x
k
)
T
Δ
x
4.
若
ρ
>
0.75
,
则
设
置
μ
=
2
μ
5.
若
ρ
<
0.25
,
则
设
置
μ
=
0.5
μ
6.
若
ρ
处
于
某
阈
值
区
间
,
则
认
为
近
似
可
行
,
x
k
+
1
=
x
k
+
Δ
x
k
7.
判
断
是
否
收
敛
,
若
收
敛
则
结
束
,
反
之
返
回
第
二
步
迭
代
\begin{aligned} 1.&给定初始值x_0以及初始优化半径\mu\\ 2.&对第k次迭代,在GN法的基础上增加信赖区域:\\ &\qquad\qquad\min_{\Delta x_k}\frac{1}{2}\begin{Vmatrix}f(x_k)+J(x_k)^T\Delta x_k\end{Vmatrix}^2,\quad s.t.\quad \begin{Vmatrix}D\Delta x_k\end{Vmatrix}^2\leq\mu, \\ &\qquad\qquad 其中,\mu为信赖区间半径,D为系数矩阵\\ 3.&计算指标:\rho=\frac{f(x_k+\Delta x_k)-f(x_k)}{J(x_k)^T\Delta x}\\ 4.& 若\rho>0.75,则设置\mu=2\mu\\ 5.& 若\rho<0.25,则设置\mu=0.5\mu\\ 6.& 若\rho处于某阈值区间,则认为近似可行,x_{k+1}=x_k+\Delta x_k\\ 7.&判断是否收敛,若收敛则结束,反之返回第二步迭代\\ \end{aligned}
1.2.3.4.5.6.7.给定初始值x0以及初始优化半径μ对第k次迭代,在GN法的基础上增加信赖区域:Δxkmin21∥∥f(xk)+J(xk)TΔxk∥∥2,s.t.∥∥DΔxk∥∥2≤μ,其中,μ为信赖区间半径,D为系数矩阵计算指标:ρ=J(xk)TΔxf(xk+Δxk)−f(xk)若ρ>0.75,则设置μ=2μ若ρ<0.25,则设置μ=0.5μ若ρ处于某阈值区间,则认为近似可行,xk+1=xk+Δxk判断是否收敛,若收敛则结束,反之返回第二步迭代
此处,将增量取值限定在半径为
μ
\mu
μ的球中(
∥
Δ
x
k
∥
2
≤
μ
\begin{Vmatrix}\Delta x_k\end{Vmatrix}^2\leq\mu
∥∥Δxk∥∥2≤μ),增加系数矩阵后,可视其为一个椭球(
∥
D
Δ
x
k
∥
2
≤
μ
\begin{Vmatrix}D\Delta x_k\end{Vmatrix}^2\leq\mu
∥∥DΔxk∥∥2≤μ)。
列文伯格取 D = I D=I D=I,也即将增量约束在球中。而马夸尔特则将 D D D取为非负数对角阵(实际中通常取 J T J J^TJ JTJ对角元素平方根),从而使得梯度小的维度上约束范围更大。
构建拉格朗日方程,将约束项放入目标函数:
L
(
Δ
x
k
,
λ
)
=
1
2
∥
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
∥
2
+
λ
2
(
∥
D
Δ
x
k
∥
2
−
μ
)
L(\Delta x_k, \lambda)=\frac{1}{2}\begin{Vmatrix}f(x_k)+J(x_k)^T\Delta x_k\end{Vmatrix}^2+\frac{\lambda}{2}\Bigl(\begin{Vmatrix}D\Delta x_k\end{Vmatrix}^2-\mu\Bigr)
L(Δxk,λ)=21∥∥f(xk)+J(xk)TΔxk∥∥2+2λ(∥∥DΔxk∥∥2−μ)
称
λ
\lambda
λ为拉格朗日乘子,求其关于
Δ
x
k
\Delta x_k
Δxk的导数为零:
(
H
+
λ
D
T
D
)
Δ
x
k
=
g
(H+\lambda D^TD)\Delta x_k =g
(H+λDTD)Δxk=g
当参数
λ
\lambda
λ较小时,
H
H
H占据主要地位,二次近似模型在范围内较好,LM法接近于GN法;当参数
λ
\lambda
λ较大时,
λ
D
T
D
\lambda D^TD
λDTD占据主要地位,二次近似模型在范围内较差,LM法接近于最速下降法。
LM法在一定程度上,可避免线性方程组的系数矩阵非奇异、病态问题,提供更稳定、更准确的增量 Δ x k \Delta x_k Δxk
常见的非线性求解方法还包含狗腿法DogLeg等。