非线性优化
非线性最小二乘
最简单最小二乘问题:
min
x
1
2
∥
f
(
x
)
∥
2
2
\min_x\frac{1}{2} \parallel f\left(x\right)\parallel _2^2
xmin21∥f(x)∥22
这里自变量
x
∈
R
n
x\in \mathbb{R}^n
x∈Rn,
f
f
f是任意非线性函数,设
f
(
x
)
f\left(x\right)
f(x)有
m
m
m维:
f
(
x
)
∈
R
m
f\left(x\right)\in \mathbb{R}^m
f(x)∈Rm。如果
f
f
f是个数学形式上很简单的函数,令目标函数的导数为零,然后求解
x
x
x的最优值,就和求二元函数的极值一样:
d
f
d
x
=
0
\frac{df}{dx}=0
dxdf=0
解此方程,就得到了导数为零处的极值。可能是极大值、极小值或者鞍点处的值,只要逐个比较它们的函数值大小即可。
对于不方便直接求解的最小二乘问题,可以用迭代的方式,从一个初始值出发,不断更新当前的最优化变量,是目标函数下降。
- 给定某个初始值 x 0 x_0 x0
- 对于第 k k k次迭代,寻找一个增量 Δ x k \Delta x_k Δxk,使得 ∥ ( x k + Δ x k ) ∥ 2 2 \parallel \left(x_k+\Delta x_k\right)\parallel_2^2 ∥(xk+Δxk)∥22达到极小值。
- 若 Δ x k \Delta x_k Δxk足够小,则停止。
- 否则,令 x k + 1 = x k + Δ x k x_{k+1}=x_k+\Delta x_k xk+1=xk+Δxk,返回第2步
一阶和二阶梯度法
求解增量最直观的方式是将目标函数在
x
x
x附近进行泰勒展开:
∥
f
(
x
+
Δ
x
)
∥
2
2
≈
∥
f
(
x
)
∥
2
2
+
J
(
x
)
Δ
x
+
1
2
Δ
x
T
H
Δ
x
\parallel f\left(x+\Delta x \right)\parallel_2^2 \approx \parallel f\left(x\right) \parallel_2^2+J\left(x\right)\Delta x + \frac{1}{2} {\Delta x}^TH\Delta x
∥f(x+Δx)∥22≈∥f(x)∥22+J(x)Δx+21ΔxTHΔx
J
J
J是
∥
f
(
x
)
∥
2
2
\parallel f\left(x\right) \parallel_2^2
∥f(x)∥22关于
x
x
x的导数(雅克比矩阵),而
H
H
H则是二阶导数(海塞矩阵)。可以保留泰勒展开的一阶或二阶项,对应的求解方法则为一阶梯度或二阶梯度法。
如果保留一阶梯度,那么增量的解就为:
Δ
x
∗
=
−
J
T
(
x
)
{\Delta x}^*=-J^T\left(x\right)
Δx∗=−JT(x)
直观意义非常简单,只要沿着反向梯度方向前进即可。
如果
Δ
x
∗
=
−
λ
J
T
(
x
)
{\Delta x}^*=-\lambda J^T\left(x\right)
Δx∗=−λJT(x)
称为最速下降法。
如果保留二阶梯度信息,那么增量方程为:
Δ
x
∗
=
a
r
g
m
i
n
∥
f
(
x
)
∥
2
2
+
J
(
x
)
+
1
2
Δ
x
T
H
Δ
x
{\Delta x}^*=argmin \parallel f\left(x\right) \parallel _2^2 + J\left(x\right)+\frac{1}{2}{\Delta x}^TH\Delta x
Δx∗=argmin∥f(x)∥22+J(x)+21ΔxTHΔx
对右侧等式关于
Δ
x
\Delta x
Δx的导数并令它为零,就得到了增量的解:
H
Δ
x
=
−
J
T
H\Delta x = -J^T
HΔx=−JT
该方法又称为牛顿法。
高斯牛顿法
高斯牛顿的思想是将
f
(
x
)
f\left(x\right)
f(x)进行一阶的泰勒展开:
f
(
x
+
Δ
x
)
≈
f
(
x
)
+
J
(
x
)
Δ
x
f\left(x+\Delta x \right) \approx f\left(x\right)+J\left(x\right)\Delta x
f(x+Δx)≈f(x)+J(x)Δx
J
(
x
)
J\left(x\right)
J(x)为
f
(
x
)
f\left(x\right)
f(x)关于
x
x
x的导数,实际上是一个
m
×
n
m\times n
m×n矩阵,也是一个雅可比矩阵。根据前面的思路,当前的目标是寻找一个下降矢量
Δ
x
\Delta x
Δx,使得
∥
f
(
x
+
Δ
x
)
∥
2
\parallel f\left(x+\Delta x \right) \parallel^2
∥f(x+Δx)∥2达到最小。为了求
Δ
x
\Delta x
Δx,需要解一个线性的最小二乘问题:
Δ
x
∗
=
a
r
g
min
Δ
x
1
2
∥
f
(
x
)
+
J
(
x
)
Δ
x
∥
2
{\Delta x}^*=arg\min_{\Delta x}\frac{1}{2}\parallel f\left(x\right) + J\left(x\right)\Delta x \parallel ^2
Δx∗=argΔxmin21∥f(x)+J(x)Δx∥2
先展开目标函数的平方项:
∥
f
(
x
)
+
J
(
x
)
Δ
x
∥
2
=
(
f
(
x
)
+
J
(
x
)
Δ
x
)
T
(
f
(
x
)
+
J
(
x
)
Δ
x
)
\parallel f\left(x\right) + J\left(x\right) \Delta x \parallel ^2=\left(f\left(x\right) + J\left(x\right) \Delta x \right)^T\left(f\left(x\right)+J\left(x\right)\Delta x\right)
∥f(x)+J(x)Δx∥2=(f(x)+J(x)Δx)T(f(x)+J(x)Δx)
=
∥
f
(
x
)
∥
2
2
+
2
f
(
x
)
T
J
(
x
)
Δ
x
+
Δ
x
T
J
(
x
)
T
J
(
x
)
Δ
x
=\parallel f\left(x\right) \parallel _2^2 + 2{f\left(x\right)}^TJ\left(x\right)\Delta x+{\Delta x}^T{J\left(x\right)}^TJ\left(x\right)\Delta x
=∥f(x)∥22+2f(x)TJ(x)Δx+ΔxTJ(x)TJ(x)Δx
求上式关于
Δ
x
\Delta x
Δx的导数,并令其为零:
2
J
(
x
)
T
f
(
x
)
+
2
J
(
x
)
T
J
(
x
)
Δ
x
=
0
2{J\left(x\right)}^Tf\left(x\right)+2{J\left(x\right)}^TJ\left(x\right)\Delta x = 0
2J(x)Tf(x)+2J(x)TJ(x)Δx=0
⇒
J
(
x
)
T
J
(
x
)
Δ
x
=
−
J
(
x
)
T
f
(
x
)
\Rightarrow {J\left(x\right)}^TJ\left(x\right)\Delta x=-{J\left(x\right)}^Tf\left(x\right)
⇒J(x)TJ(x)Δx=−J(x)Tf(x)
要求解的变量是
Δ
x
\Delta x
Δx,因此这是一个线性方程组,称为增量方程也可以称为高斯牛顿方程(Gauss Newton equation)或者正规方程(Normal equation)。
对比牛顿法用
J
T
J
J^TJ
JTJ作为牛顿法中的二阶Hessian矩阵的近似,从而省略了计算
H
H
H的过程。求解增量方程是整个优化问题的核心所在。高斯牛顿法的算法步骤可以写成:
- 给定初始值 x 0 x_0 x0。
- 对于第 k k k次迭代,求出当前的雅可比矩阵 J ( x k ) J\left(x_k\right) J(xk)和误差 f ( x k ) f\left(x_k\right) f(xk)。
- 求解增量方程: J ( x ) T J ( x ) Δ x = − J ( x ) T f ( x ) {J\left(x\right)}^TJ\left(x\right)\Delta x=-{J\left(x\right)}^Tf\left(x\right) J(x)TJ(x)Δx=−J(x)Tf(x)
- 若 Δ x k \Delta x_k Δxk足够小,则停止。否则,令 x k + 1 = x k + Δ x k x_{k+1}=x_k+\Delta x_k xk+1=xk+Δxk,返回第2步。
列文伯格—马夸尔特方法
高斯牛顿法中采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果,所以很自然的想到应该给
Δ
x
\Delta x
Δx添加一个信赖区域(Trust Region),不能让它太大而使得近似不准确。非线性优化中有一系列这类方法,这类方法被称为信赖区域方法(Trust Region Method),在信赖区域里边认为近似是有效的;出了这个区域,近似可能会出问题。
如何确定这个信赖区域范围呢?一个较好的方法是根据近似模型跟实际函数之间的差异来确定:如果差异小,就让范围尽可能大;如果差异大,就缩小这个近似范围。
ρ
=
f
(
x
+
Δ
x
)
−
f
(
x
)
J
(
x
)
Δ
x
\rho=\frac{f\left(x+\Delta x\right) - f\left(x\right)}{J\left(x\right)\Delta x}
ρ=J(x)Δxf(x+Δx)−f(x)
使用上式来判断泰勒近似是否够好。
ρ
\rho
ρ的分子是实际函数下降的值,分母是近似模型下降的值。如果
ρ
\rho
ρ接近于1,则近似是好的。如果
ρ
\rho
ρ太小,说明实际减小的值远小于近似减小的值,认为近似较差,需要缩小近似范围。反之,如果
ρ
\rho
ρ比较大,则说明实际下降的比预计的跟大,可以放大近似范围。步骤如下:
- 给定初始值 x 0 x_0 x0以及初始优化半径 μ \mu μ。
- 对于第 k k k次迭代,求解:
min Δ x k 1 2 ∥ f ( x k ) + J ( x k ) Δ x k ∥ 2 , s . t . ∥ D Δ x k ∥ 2 ≤ μ \min_{{\Delta x}_k}\frac{1}{2}\parallel f\left(x_k\right)+J\left(x_k\right){\Delta x}_k \parallel^2,s.t.\parallel D{\Delta x}_k \parallel^2 \leq \mu Δxkmin21∥f(xk)+J(xk)Δxk∥2,s.t.∥DΔxk∥2≤μ- 计算 ρ \rho ρ
- ρ > 3 4 , μ = 2 μ \rho > \frac{3}{4}, \mu = 2 \mu ρ>43,μ=2μ
- ρ < 1 4 , μ = 0.5 μ \rho < \frac{1}{4}, \mu = 0.5 \mu ρ<41,μ=0.5μ
- 如果 ρ \rho ρ大于某阈值,则认为近似可行。令 x k + 1 = x k + Δ x k x_{k+1}=x_k+{\Delta x}_k xk+1=xk+Δxk
- 判断算法是否收敛。不收敛回第2步,否则结束。
近似范围扩大的倍数和阈值都是经验值,可以调节。在第2步中,我们把增量限定于一个半径为
μ
\mu
μ的球中,认为只是在这个球内才是有效的。带上
D
D
D之后这个球可以看成一个椭球。在列文伯格提出的优化方法中,把
D
D
D取成单位阵
I
I
I,相当于直接把
Δ
x
\Delta x
Δx约束在一个球中。随后,马夸尔提出将
D
D
D取成非负数对角阵-----实际中通常用
J
T
J
J^TJ
JTJ的对角元素平方根,使得在梯度小的维度上约束范围更大一些。
步骤2中是带不等式约束的优化问题,使用拉格朗日乘子将它转化为一个无约束优化问题:
min
Δ
x
k
1
2
∥
f
(
x
k
)
+
J
(
x
k
)
Δ
x
k
∥
2
+
λ
2
∥
D
Δ
x
∥
2
\min_{{\Delta x}_k}\frac{1}{2}\parallel f\left(x_k\right)+J\left(x_k\right){\Delta x}_k \parallel^2 + \frac{\lambda}{2}\parallel D\Delta x \parallel^2
Δxkmin21∥f(xk)+J(xk)Δxk∥2+2λ∥DΔx∥2
λ
\lambda
λ为拉格朗日乘子。类似于高斯牛顿法中的做法,展开后发现问题的核心乃是计算增量的线性方程:
J
(
x
)
T
J
(
x
)
Δ
x
+
λ
D
T
D
Δ
x
=
−
J
(
x
)
T
f
(
x
)
{J\left(x\right)}^TJ\left(x\right)\Delta x + \lambda D^TD\Delta x = -{J\left(x\right)}^Tf\left(x\right)
J(x)TJ(x)Δx+λDTDΔx=−J(x)Tf(x)
⇒
(
H
(
x
)
+
λ
D
T
D
)
Δ
x
=
−
J
(
x
)
T
f
(
x
)
\Rightarrow \left(H\left(x\right) + \lambda D^TD\right)\Delta x = -{J\left(x\right)}^Tf\left(x\right)
⇒(H(x)+λDTD)Δx=−J(x)Tf(x)
令
g
=
−
J
(
x
)
T
f
(
x
)
g=-{J\left(x\right)}^Tf\left(x\right)
g=−J(x)Tf(x)
⇒
(
H
(
x
)
+
λ
D
T
D
)
Δ
x
=
g
\Rightarrow \left(H\left(x\right) + \lambda D^TD\right)\Delta x = g
⇒(H(x)+λDTD)Δx=g
根据上式可以得到,当
λ
\lambda
λ比较大时,
H
H
H占主要地位,说明二次近似模型在该范围内是比较好的,列文伯格—马夸尔特法方法更接近于高斯牛顿法。另一方面,当
λ
\lambda
λ比较大时,
λ
I
\lambda I
λI占据主要地位,列文伯格—马夸尔特法更接近于一阶梯度下降法(即最速下降),这说明附近的二次近似不够好。列文伯格—马夸尔特方法的求解方式,可在一定程度上避免线性方程组的系数矩阵的非奇异和病态问题,提供更稳定,更准确的增量
Δ
x
\Delta x
Δx