1 最小二乘问题
给定一组连续函数 f : R n → R m , m ⩾ n {\mathbf{f}}:{\mathbb{R}^n} \to {\mathbb{R}^m},{\text{ }}m \geqslant n f:Rn→Rm, m⩾n,其最小二乘问题的定义为
x ∗ = arg min x { F ( x ) } , F ( x ) = 1 2 ∑ i = 1 m ( f i ( x ) ) 2 = 1 2 ∥ f ( x ) ∥ 2 = 1 2 f ( x ) T f ( x ) . (1.1) {{\mathbf{x}}^ * } = \arg {\min _{\mathbf{x}}}\left\{ {F({\mathbf{x}})} \right\},{\text{ }}F({\mathbf{x}}) = \tfrac{1}{2}\sum\limits_{i = 1}^m {{{\left( {{f_i}({\mathbf{x}})} \right)}^2}} = \tfrac{1}{2}{\left\| {{\mathbf{f}}({\mathbf{x}})} \right\|^2} = \tfrac{1}{2}{\mathbf{f}}{({\mathbf{x}})^T}{\mathbf{f}}({\mathbf{x}}).\tag{1.1} x∗=argxmin{F(x)}, F(x)=21i=1∑m(fi(x))2=21∥f(x)∥2=21f(x)Tf(x).(1.1)
该问题一个重要的应用是数据的拟合,其中 f i ( x ) f_i(\bf{x}) fi(x) 可认为是样本值与拟合值之间的残差或者距离, x \bf{x} x 是需要拟合优化的参数。例如,假设有一组需要拟合的函数 g ( t ; x ) : R N → R M {\mathbf{g}}({\mathbf{t}};{\text{ }}{\mathbf{x}}):{\mathbb{R}^N} \to {\mathbb{R}^M} g(t; x):RN→RM,这时自变量为 t \bf{t} t,待优化参数为 x \bf{x} x,在这里被视为常数;同时有一组样本 ( t k , y k ) {({\bf{t}}_k , {\bf{y}}_k)} (tk,yk),其中 1 ⩽ k ⩽ K 1 \leqslant k \leqslant K 1⩽k⩽K,那么 f i ( x ) f_i(\bf{x}) fi(x) 可表示为
f i ( x ) = f i ( x ; t k ) = g ( j ) ( t k ; x ) − y k ( j ) , 1 ⩽ j ⩽ M , 1 ⩽ i ⩽ M × K . (1.2) {f_i}({\mathbf{x}}) = {f_i}({\mathbf{x}};{\text{ }}{{\mathbf{t}}_k}) = {g^{(j)}}({{\mathbf{t}}_k};{\text{ }}{\mathbf{x}}) - y_k^{(j)},{\text{ 1}} \leqslant j \leqslant M,{\text{ 1}} \leqslant i \leqslant M \times K.\tag{1.2} fi(x)=fi(x; tk)=g(j)(tk; x)−yk(j), 1⩽j⩽M, 1⩽i⩽M×K.(1.2)
从式(1.2)可以看出,各 f i ( x ) f_i(\bf{x}) fi(x) 的形式并不要求一致,而且可以同时优化不同的拟合函数,一个样本可能对应多个拟合函数。注意,这里实际上并不要求每个拟合函数包含所有的自变量与参数,也就是说实际的 f i ( x ) f_i(\bf{x}) fi(x) 个数可能少于 M × K M \times K M×K 个,但一般来说应该比需要拟合的参数的数量多,这在后面会有分析。
为了求解最小二乘问题,最直接的方法是对 F ( x ) F(\bf{x}) F(x) 求梯度,可得
∂ F ( x ) ∂ x j = ∑ i = 1 m f i ( x ) ∂ f i ( x ) ∂ x j ⇒ ∇ F ( x ) = F ′ ( x ) = J f ( x ) T f ( x ) . (1.3) \frac{{\partial F({\mathbf{x}})}}{{\partial {x_j}}} = \sum\limits_{i = 1}^m {{f_i}({\mathbf{x}})\frac{{\partial {f_i}({\mathbf{x}})}}{{\partial {x_j}}}} \Rightarrow \nabla F({\mathbf{x}}) = {\mathbf{F'}}({\mathbf{x}}) = {{\mathbf{J}}_f}{({\mathbf{x}})^T}{\mathbf{f}}({\mathbf{x}}).\tag{1.3} ∂xj∂F(x)=i=1∑mfi(x)∂xj∂fi(x)⇒∇F(x)=F′(x)=Jf(x)Tf(x).(1.3)
其中 J f ( x ) J_{f(\bf{x})} Jf(x) 称为 f ( x ) f(\bf{x}) f(x) 的雅可比(Jacobian)矩阵,其定义为
J f ( x ) = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ⋯ ∂ f 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 2 ⋯ ∂ f 2 ( x ) ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ f m ( x ) ∂ x 1 ∂ f m ( x ) ∂ x 2 ⋯ ∂ f m ( x ) ∂ x n ] ∈ R m × n . (1.4) {{\mathbf{J}}_f}({\mathbf{x}}) = \left[ {\begin{array}{c} {\frac{{\partial {f_1}({\mathbf{x}})}}{{\partial {x_1}}}}&{\frac{{\partial {f_1}({\mathbf{x}})}}{{\partial {x_2}}}}& \cdots &{\frac{{\partial {f_1}({\mathbf{x}})}}{{\partial {x_n}}}} \\ \\ {\frac{{\partial {f_2}({\mathbf{x}})}}{{\partial {x_1}}}}&{\frac{{\partial {f_2}({\mathbf{x}})}}{{\partial {x_2}}}}& \cdots &{\frac{{\partial {f_2}({\mathbf{x}})}}{{\partial {x_n}}}} \\ \vdots & \vdots & \ddots & \vdots \\ {\frac{{\partial {f_m}({\mathbf{x}})}}{{\partial {x_1}}}}&{\frac{{\partial {f_m}({\mathbf{x}})}}{{\partial {x_2}}}}& \cdots &{\frac{{\partial {f_m}({\mathbf{x}})}}{{\partial {x_n}}}} \end{array}} \right] \in {\mathbb{R}^{m \times n}}.\tag{1.4} Jf(x)=⎣⎢⎢⎢⎢⎢⎢⎡∂x1∂f1(x)∂x1∂f2(x)⋮∂x1∂fm(x)∂x2∂f1(x)∂x2∂f2(x)⋮∂x2∂fm(x)⋯⋯⋱⋯∂xn∂f1(x)∂xn∂f2(x)⋮∂xn∂fm(x)⎦⎥⎥⎥⎥⎥⎥⎤∈Rm×n.(1.4)
假设 F ( x ) F(\bf{x}) F(x) 连续且可导,那么其极值点对应着梯度为零的位置,即需要求解
F ′ ( x ∗ ) = J f ( x ∗ ) T f ( x ∗ ) = 0. (1.5) {\mathbf{F'}}({{\mathbf{x}}^ * }) = {{\mathbf{J}}_f}{({{\mathbf{x}}^ * })^T}{\mathbf{f}}({{\mathbf{x}}^ * }) = {\mathbf{0}}.\tag{1.5} F′(x∗)=Jf(x∗)Tf(x∗)=0.(1.5)
1.1 线性最小二乘问题
假设 f ( x ) \bf{f(x)} f(x) 为线性函数,即可表示为 f ( x ) = A x − b \bf{f(x)=Ax-b} f(x)=Ax−b,那么式(1.1)称为线性最小二乘问题,其求解比较简单,即
J f ( x ) = A ⇒ F ′ ( x ∗ ) = A T ( A x ∗ − b ) = 0 ⇒ x ∗ = ( A T A ) − 1 A T b . (1.6) {{\mathbf{J}}_f}({\mathbf{x}}) = {\mathbf{A}} \Rightarrow {\mathbf{F'}}({{\mathbf{x}}^ * }) = {{\mathbf{A}}^T}\left( {{\mathbf{A}}{{\mathbf{x}}^ * } - {\mathbf{b}}} \right) = {\mathbf{0}} \Rightarrow {{\mathbf{x}}^ * } = {\left( {{{\mathbf{A}}^T}{\mathbf{A}}} \right)^{ - 1}}{{\mathbf{A}}^T}{\mathbf{b}}.\tag{1.6} Jf(x)=A⇒F′(x∗)=AT(Ax∗−b)=0⇒x∗=(ATA)−1ATb.(1.6)
注意这里基于 A T A {\bf{A}}^T{\bf{A}} ATA 可逆的前提,这就要求其是满秩的,即 R ( A T A ) = n R({\bf{A}}^T{\bf{A}})=n R(ATA)=n。又因为
R ( A T A ) = R ( A ) ⩽ min { m , n } , R\left( {{{\mathbf{A}}^T}{\mathbf{A}}} \right) = R\left( {\mathbf{A}} \right) \leqslant \min \left\{ {m,{\text{ }}n} \right\}, R(ATA)=R(A)⩽min{m, n},
因此要求 m ≥ n m \ge n m≥n,且 A \bf{A} A 是列满秩的,这就要求对于每一个参数,至少有一个函数 f i ( x ) f_i(\bf{x}) fi(x) 与其相关。一般来说,我们不会通过直接求解 A T A {\bf{A}}^T{\bf{A}} ATA 的逆来求解式(1.6)的线性方程组,因为其效率低且不稳定,特别是 A T A {\bf{A}}^T{\bf{A}} ATA 条件数很大时。另外计算机截断精度也是一个不可忽视的问题。所以通常会通过矩阵分解,如 QR 分解或者 Cholesky 分解等方法来求解线性方程组以获得更好的效率以及稳定性。
1.2 非线性最小二乘问题
假设 f ( x ) \bf{f(x)} f(x) 为非线性函数,那么式(1.1)称为非线性最小二乘问题,这时通常无法或者很难直接得到式(1.5)的解析解,因此需要通过迭代的方法查找,即给定一组初始的参数值 x 0 {\bf{x}}_0 x0,然后在此基础上查找下一组参数,依此类推,直至满足相关的收敛条件或者到达最大的迭代次数。查找的策略有很多种,这些方法在易用性、鲁棒性和收敛速度等方面各有千秋,所以彼此并不是割裂的,采用混合的方法或许能够获取更好的性能。注意,非线性最小二乘问题只在乎极值点的查找,其并不保证能得到全局最优解,得到的极值点通常与初始位置相关,但也并不一定是最靠近初始位置的那个极值点。不失一般性,后面主要讨论极小值点的搜索。假设该函数为全局凸函数,那么可以保证找到的极值点是全局最小值点。
1.2.1 线性搜索
线性搜索(Line Search)属于最简单的搜索方法,即给定一个初始点 x \bf{x} x 和一个搜索方向 h \bf{h} h,找到最佳的步长,使得更新后的位置的函数值最小,即
min α φ ( α ) = F ( x + α h ) s . t . F ( x + α h ) ⩽ F ( x ) (1.7) \begin{gathered} {\min _\alpha }\varphi \left( \alpha \right) = F\left( {{\mathbf{x}} + \alpha {\mathbf{h}}} \right) \\ s.t.{\text{ }}F\left( {{\mathbf{x}} + \alpha {\mathbf{h}}} \right) \leqslant F\left( {\mathbf{x}} \right) \\ \end{gathered} \tag{1.7} αminφ(α)=F(x+αh)s.t. F(x+αh)⩽F(x)(1.7)
可以看到,线性搜索的性能好坏与给定的搜索方向密切相关,所以通常不会独立使用,而是配合其他一些优化算法,确定一个适合的方向再进行搜索。对于式(1.7),令其导数为零,有
φ ′ ( α ∗ ) = h T F ′ ( x + α ∗ h ) = 0. (1.8) \varphi '\left( {{\alpha ^ * }} \right) = {{\mathbf{h}}^T}{\mathbf{F'}}\left( {{\mathbf{x}} + {\alpha ^ * }{\mathbf{h}}} \right) = 0.\tag{1.8} φ′(α∗)=hTF′(x+α∗h)=0.(1.8)
这是一个重要的性质,即如果式(1.8)有解,那么意味着最佳的更新位置的梯度方向与原来的搜索方向是垂直的。
1.2.2 最速下降法
由于某一点的梯度方向代表函数在该点上升最快的方向,因此我们有理由认为沿着其梯度的反方向搜索能够更容易找到极小值点。具体来说,给定任意一个非零搜索方向 h \bf{h} h,根据泰勒公式展开可得
F ( x + α h ) = F ( x ) + α h T F ′ ( x ) + o ( α ) ≈ F ( x ) + α h T F ′ ( x ) (1.9) F({\mathbf{x}} + \alpha {\mathbf{h}}) = F({\mathbf{x}}) + \alpha {{\mathbf{h}}^T}{\mathbf{F'}}({\mathbf{x}}) + o(\alpha ) \approx F({\mathbf{x}}) + \alpha {{\mathbf{h}}^T}{\mathbf{F'}}({\mathbf{x}})\tag{1.9} F(x+αh)=F(x)+αhTF′(x)+o(α)≈F(x)+αhTF′(x)(1.9)
当 α \alpha α 趋向于无穷小时,余项 o ( α ) o(\alpha) o(α) 可以忽略,那么其函数值下降速度为
lim α → 0 F ( x ) − F ( x + α h ) α ∥ h ∥ = − 1 ∥ h ∥ h T F ′ ( x ) = − ∥ F ′ ( x ) ∥ cos θ . (1.10) \mathop {\lim }\limits_{\alpha \to 0} \frac{{F({\mathbf{x}}) - F({\mathbf{x}} + \alpha {\mathbf{h}})}}{{\alpha \left\| {\mathbf{h}} \right\|}} = - \frac{1}{{\left\| {\mathbf{h}} \right\|}}{{\mathbf{h}}^T}{\mathbf{F'}}({\mathbf{x}}) = - \left\| {{\mathbf{F'}}({\mathbf{x}})} \right\|\cos \theta .\tag{1.10} α→0limα∥h∥F(x)−F(x+αh)=−∥h∥1hTF′(x)=−∥F′(x)∥cosθ.(1.10)
其中 θ \theta θ 为搜索方向 h \bf{h} h 和梯度方向的夹角。可以看到,当 θ \theta θ 为 π \pi π 即为梯度的反方向时,函数值下降的速度最快。
因为每次的搜索方向都为该点梯度的反方向,所以这种搜索方法被称为梯度下降法(Gradient Descent)或者最速下降法(Steepest Descent)。这种方法通常配合线性搜索以获取最佳的步长。由于最速下降法只用到了一阶导数,所以比较简单,易于实现。同时,因为线性搜索可以沿着梯度方向一直前进,所以实际的步长可以比较大,特别是当搜索方向上函数梯度方向变化较小时,这时即使初始点离极值点较远也有比较快的收敛速度,鲁棒性也比较强。因此,最速下降法的应用十分广泛,特别是在深度学习领域,这里不细说。
![](https://i-blog.csdnimg.cn/blog_migrate/449686730e417fafdfb9ae682a2493cb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2ea8185cd89aca58cdb806bf34cb5b5c.png)
然而,尽管被称为最速下降法,由于其只用到一阶导数,所以当搜索方向上函数梯度方向变化较快时,梯度下降法具有比较差的最终收敛性能,即靠近极值点时,其收敛速度有可能大幅减缓甚至停滞。这是在线性搜索中由式(1.8)所导致的后果,因为式(1.8)所求得的最佳步长要求当前搜索方向与下一个点的梯度方向垂直,而该点的梯度方向的反方向正是下一次搜索的方向,所以在最速下降法中,相邻两次搜索方向是相互垂直的,导致其搜索路径是锯齿形状的,在接近极值点时很难到达精确的位置。
图 1 展示了两个简单的例子,其中 n = 2 n=2 n=2,黑色的圈代表函数的等高线,越往内部其值越小,中心处为极小值点,可以证明梯度的方向与等高线的切线垂直。当函数的等高线为一系列的同心圆时,可以知道在同一条半径上的点的梯度方向是相同的,因此,对于任意一个初始点,沿着其梯度的反方向进行线性搜索,总可以一次性地到达圆心处,这时候其收敛速度是最快的。当函数的等高线为一系列的同心且形状相同的椭圆时,如果初始点刚好落在长轴或者短轴上,那么也可以一次性收敛到极小值点。然而,当初始点在其他位置时,其最终的收敛性能将变得很差。因为由式(1.7)所定义的线性搜索是要找到当前搜索方向上函数值最小的点,因此其下一个点必定为当前搜索方向即当前梯度的反方向与某个椭圆等高线的切点。由于椭圆只有跟长轴和短轴相交的4个顶点的切线的垂直线经过中心即函数的极值点,所以搜索路径只会成锯齿状地无限靠近而无法精确地到达极值点。因此,某些梯度下降算法可能会使用自定义的步长而不是通过线性搜索来寻找最佳步长,这样就可以避免相邻两次的搜索方向相互垂直,但这又有可能导致搜索路径在接近极值点时来回震荡。
1.2.3 牛顿迭代法
从图 1 右侧我们已经可以看到,在接近极值点时,单纯在梯度反方向上搜索并不一定能获得最好的性能,这也是只使用一阶导数的缺点。那么一个自然的想法就是,在接近极值点时,不再只限定梯度这一个方向,而是在一个较小的邻域上面搜索,并且希望使用更高阶的导数信息。这就是牛顿迭代法(Newton’s method)以及后面一些改进方法的基本思想。由于三阶以上的导数求解比较困难,一般只使用到二阶的导数。
在当前点的较小邻域内,假设有一个增量 h \bf{h} h,根据泰勒公式,可得
F ( x + h ) = F ( x ) + h T F ′ ( x ) + 1 2 h T F ′ ′ ( x ) h + o ( ∥ h ∥ 2 ) , F ( x + h ) ≈ L n ( h ) = F ( x ) + h T F ′ ( x ) + 1 2 h T F ′ ′ ( x ) h . (1.11) \begin{gathered} F({\mathbf{x}} + {\mathbf{h}}) = F({\mathbf{x}}) + {{\mathbf{h}}^T}{\mathbf{F'}}({\mathbf{x}}) + \tfrac{1}{2}{{\mathbf{h}}^T}{\mathbf{F''}}({\mathbf{x}}){\mathbf{h}} + o\left( {{{\left\| {\mathbf{h}} \right\|}^2}} \right), \\ F({\mathbf{x}} + {\mathbf{h}}) \approx {L_{\text{n}}}({\mathbf{h}}) = F({\mathbf{x}}) + {{\mathbf{h}}^T}{\mathbf{F'}}({\mathbf{x}}) + \tfrac{1}{2}{{\mathbf{h}}^T}{\mathbf{F''}}({\mathbf{x}}){\mathbf{h}}. \\ \end{gathered} \tag{1.11} F(x+h)=F(x)+hTF′(x)+21hTF′′(x)h+o(∥h∥2),F(x+h)≈Ln(h)=F(x)+hTF′(x)+21hTF′′(x)h.(1.11)
h \bf{h} h 较小时,泰勒公式余项部分可忽略。其实质是用一个经过当前点的二次曲面 L n ( h ) L_{\text{n}}(\bf{h}) Ln(h) 来拟合 F ( x ) F(\bf{x}) F(x) 。那么,我们希望找到一个最佳方向和增量 h n {\bf{h}}_{\text{n}} hn,使得 L n ( h ) L_{\text{n}}(\bf{h}) Ln(h) 最小,有
L n ′ ( h n ) = F ′ ( x ) + 1 2 ( F ′ ′ ( x ) + F ′ ′ ( x ) T ) h n = F ′ ( x ) + F ′ ′ ( x ) h n = 0. (1.12) {L'_{\text{n}}}({{\mathbf{h}}_{\text{n}}}) = {\mathbf{F'}}({\mathbf{x}}) + \tfrac{1}{2}\left( {{\mathbf{F''}}({\mathbf{x}}) + {\mathbf{F''}}{{({\mathbf{x}})}^T}} \right){{\mathbf{h}}_{\text{n}}} = {\mathbf{F'}}({\mathbf{x}}) + {\mathbf{F''}}({\mathbf{x}}){{\mathbf{h}}_{\text{n}}} = {\mathbf{0}}.\tag{1.12} Ln′(hn)=F′(x)+21(F′′(x)+F′′(x)T)hn=F′(x)+F′′(x)hn=0.(1.12)
其中
[ F ′ ′ ( x ) ] j k = [ F ′ ′ ( x ) ] k j = ∑ i = 1 m [ ∂ f i ( x ) ∂ x j ∂ f i ( x ) ∂ x k + f i ( x ) ∂ 2 f i ( x ) ∂ x j ∂ x k ] , H F ( x ) = F ′ ′ ( x ) = J f ( x ) T J f ( x ) + ∑ i = 1 m f i ( x ) f ′ ′ i ( x ) ∈ R n × n . (1.13) \begin{gathered} {\left[ {{\mathbf{F''}}({\mathbf{x}})} \right]_{jk}} = {\left[ {{\mathbf{F''}}({\mathbf{x}})} \right]_{kj}} = \sum\limits_{i = 1}^m {\left[ {\frac{{\partial {f_i}({\mathbf{x}})}}{{\partial {x_j}}}\frac{{\partial {f_i}({\mathbf{x}})}}{{\partial {x_k}}} + {f_i}({\mathbf{x}})\frac{{\partial {^2 f_i}({\mathbf{x}})}}{{\partial {x_j}\partial {x_k}}}} \right]} , \\ {{\mathbf{H}}_F}({\mathbf{x}}) = {\mathbf{F''}}({\mathbf{x}}) = {{\mathbf{J}}_f}{({\mathbf{x}})^T}{{\mathbf{J}}_f}({\mathbf{x}}) + \sum\limits_{i = 1}^m {{f_i}({\mathbf{x}}){{{\mathbf{f''}}}_i}({\mathbf{x}})} \in {\mathbb{R}^{n \times n}}. \\ \end{gathered} \tag{1.13} [F′′(x)]jk=[F′′(x)]kj=i=1∑m[∂xj∂fi(x)∂xk∂fi(x)+fi(x)∂xj∂xk∂2fi(x)],HF(x)=F′′(x)=Jf(x)TJf(x)+i=1∑mfi(x)f′′i(x)∈Rn×n.(1.13)
H F ( x ) {\bf{H}}_F(\bf{x}) HF(x) 称为 F ( x ) F(\bf{x}) F(x) 的 Hessian 矩阵,其是一个实对称矩阵。为了简洁,在不影响理解的情况下,后面有时会省略部分符号的参数 ( x ) (\bf{x}) (x),即如 f , J f , H F {\bf{f}, J}_f, {\bf{H}}_F f,Jf,HF 等。那么,如果 H F {\bf{H}}_F HF 的逆矩阵存在,式(1.12)的解为
h n = − F ′ ′ ( x ) − 1 F ′ ( x ) = − H F − 1 J f T f . (1.14) {{\mathbf{h}}_{\text{n}}} = - {\mathbf{F''}}{({\mathbf{x}})^{ - 1}}{\mathbf{F'}}({\mathbf{x}}) = - {\mathbf{H}}_F^{ - 1}{\mathbf{J}}_f^T{\mathbf{f}}.\tag{1.14} hn=−F′′(x)−1F′(x)=−HF−1JfTf.(1.14)
若 H F {\bf{H}}_F HF 为正定矩阵,则可以保证其逆矩阵存在,且 h n {\bf{h}}_{\text{n}} hn 是 L n ( h ) L_{\text{n}}(\bf{h}) Ln(h) 的最小值点,如式(1.15)所示。同理,若 H F {\bf{H}}_F HF 为负定矩阵, h n {\bf{h}}_{\text{n}} hn 是 L n ( h ) L_{\text{n}}(\bf{h}) Ln(h) 的最大值点。
L n ( h n ) = F ( x ) − h n T F ′ ′ ( x ) h n + 1 2 h n T F ′ ′ ( x ) h n = F ( x ) − 1 2 h n T F ′ ′ ( x ) h n < F ( x ) = L n ( 0 ) . (1.15) \begin{aligned} {L_{\text{n}}}({{\mathbf{h}}_{\text{n}}}) &= F({\mathbf{x}}) - {\mathbf{h}}_{\text{n}}^T{\mathbf{F''}}({\mathbf{x}}){{\mathbf{h}}_{\text{n}}} + \tfrac{1}{2}{\mathbf{h}}_{\text{n}}^T{\mathbf{F''}}({\mathbf{x}}){{\mathbf{h}}_{\text{n}}} \\ &= F({\mathbf{x}}) - \tfrac{1}{2}{\mathbf{h}}_{\text{n}}^T{\mathbf{F''}}({\mathbf{x}}){{\mathbf{h}}_{\text{n}}} < F({\mathbf{x}}) = {L_{\text{n}}}({\mathbf{0}}). \\ \end{aligned} \tag{1.15} Ln(hn)=F(x)−hnTF′′(x)hn+21hnTF′′(x)hn=F(x)−21hnTF′′(x)hn<F(x)=Ln(0).(1.15)
可以看到,相比于最速下降法只在梯度反方向上搜索,牛顿法是在一个邻域内搜索,而且其最优搜索方向实际上相当于梯度方向关于 H F {\bf{H}}_F HF 的一个空间变换,因此具有很好的局部收敛性能。然而,牛顿法的局限性也很明显,使用二阶导数是其优点,同时也是缺点,因为计算 H F {\bf{H}}_F HF 矩阵的难度和计算量都比较大,特别是有些时候我们甚至不知道 f ( x ) \bf{f(x)} f(x) 的具体形式。而且, H F {\bf{H}}_F HF 并不总是正定或者可逆的。同时,因为其使用的是二次曲面近似,虽然对于二次型函数能够精确表示并一次性收敛,然而对于大多数具有更高阶导数的函数,其泰勒公式余项有时并不能忽略,有可能导致求得的 h n {\bf{h}}_{\text{n}} hn 超出了所能近似的邻域范围。根据式(1.15),如果二阶项大于泰勒公式余项,那么依然可以保证迭代是往下降方向前进的,但在离极值点较远时所需要的迭代的次数较多;而如果余项部分太大,则反而会导致迭代后的函数值上升。因此,牛顿法的收敛性能和初始点的选择有很大的关系。
为了解决牛顿法的稳定性问题,不少基于混合的方法被提出,例如我们可以结合最速下降法和牛顿法两者的优点,即当 H F {\bf{H}}_F HF 正定时,优先采用牛顿法,否则使用最速下降法。通常在远离极值点时,最速下降法往往会更有优势;而当搜索进入后期阶段即靠近极值点时,牛顿法的二次曲面近似效果比较好,这时就能更好地发挥作用。或者,类似于最速下降法,我们可以结合牛顿法和线性搜索,即在 h n {\bf{h}}_{\text{n}} hn 前面再乘以一个步长,并通过线性搜索来寻找最佳的步长,这样就可以避免迭代出现退化,并且,因为 h n {\bf{h}}_{\text{n}} hn 不是梯度的方向,因此相邻两次的搜索方向不会相互垂直,在一定程度上避免了最速下降法的收敛困难问题。
1.2.4 高斯-牛顿法
从式(1.13)可以看出, H F {\bf{H}}_F HF 需要计算各 f i ( x ) f_i(\bf{x}) fi(x) 的二阶偏导,然而这并不是一件易事,特别是有时候我们并不知道 f i ( x ) f_i(\bf{x}) fi(x) 的具体形式,通过有限差分法近似一来计算量大,二来计算机精度不足容易造成误差。高斯-牛顿法(Gauss-Newton method)就是要解决这样的问题。
如果在一个较小的邻域内,各 f i ( x ) f_i(\bf{x}) fi(x) 近似为线性函数,那么根据泰勒公式,
f ( x + h ) ≈ f ( x ) + J f ( x ) h . (1.16) {\mathbf{f}}({\mathbf{x}} + {\mathbf{h}}) \approx {\mathbf{f}}({\mathbf{x}}) + {{\mathbf{J}}_f}({\mathbf{x}}){\mathbf{h}}.\tag{1.16} f(x+h)≈f(x)+Jf(x)h.(1.16)
F ( x + h ) = 1 2 f ( x + h ) T f ( x + h ) ≈ L gn ( h ) = 1 2 f T f + f T J f h + 1 2 h T J f T J f h . (1.17) F({\mathbf{x}} + {\mathbf{h}}) = \tfrac{1}{2}{\mathbf{f}}{({\mathbf{x}} + {\mathbf{h}})^T}{\mathbf{f}}({\mathbf{x}} + {\mathbf{h}}) \approx {L_{{\text{gn}}}}({\mathbf{h}}) = \tfrac{1}{2}{{\mathbf{f}}^T}{\mathbf{f}} + {{\mathbf{f}}^T}{{\mathbf{J}}_f}{\mathbf{h}} + \tfrac{1}{2}{{\mathbf{h}}^T}{\mathbf{J}}_f^T{{\mathbf{J}}_f}{\mathbf{h}}.\tag{1.17} F(x+h)=21f(x+h)Tf(x+h)≈Lgn(h)=21fTf+fTJfh+21hTJfTJfh.(1.17)
这时
L gn ′ ( h ) = J f T f + J f T J f h . (1.18) {L'_{{\text{gn}}}}({\mathbf{h}}) = {\mathbf{J}}_f^T{\mathbf{f}} + {\mathbf{J}}_f^T{{\mathbf{J}}_f}{\mathbf{h}}.\tag{1.18} Lgn′(h)=JfTf+JfTJfh.(1.18)
可以看到,相比于式(1.12)和(1.13),由于各 f i ( x ) f_i(\bf{x}) fi(x) 被近似为线性函数,所以其二阶偏导部分为零,整个计算过程就只涉及 f ( x ) \bf{f(x)} f(x) 的雅可比矩阵即一阶导数了。然而,根据式(1.17), F ( x + h ) F(\bf{x+h}) F(x+h) 仍然是二阶的近似,因此虽然高斯-牛顿法不用计算 H F {\bf{H}}_{\text{F}} HF,但在接近极值点时依然具有与牛顿法相似的收敛性能。
根据式(1.18),可以得到最佳的搜索方向和步长为
L gn ′ ( h gn ) = J f T f + J f T J f h gn = 0 ⇒ h gn = − ( J f T J f ) − 1 J f T f . (1.19) {L'_{{\text{gn}}}}({{\mathbf{h}}_{{\text{gn}}}}) = {\mathbf{J}}_f^T{\mathbf{f}} + {\mathbf{J}}_f^T{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{gn}}}} = 0 \Rightarrow {{\mathbf{h}}_{{\text{gn}}}} = - {\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f}} \right)^{ - 1}}{\mathbf{J}}_f^T{\mathbf{f}}.\tag{1.19} Lgn′(hgn)=JfTf+JfTJfhgn=0⇒hgn=−(JfTJf)−1JfTf.(1.19)
这里同样要求 J f T J f {\mathbf{J}}_f^T{{\mathbf{J}}_f} JfTJf 是正定的。相比于 H F {\bf{H}}_{\text{F}} HF 有可能是正定、负定、不定等, J f T J f {\mathbf{J}}_f^T{{\mathbf{J}}_f} JfTJf则可以确定是半正定的,即对于任意一个非零向量 h \bf{h} h,有
∀ h ≠ 0 , h T J f T J f h = ( J f h ) T ( J f h ) ⩾ 0. (1.20) \forall {\mathbf{h}} \ne {\mathbf{0}},{\text{ }}{{\mathbf{h}}^T}{\mathbf{J}}_f^T{{\mathbf{J}}_f}{\mathbf{h}} = {\left( {{{\mathbf{J}}_f}{\mathbf{h}}} \right)^T}\left( {{{\mathbf{J}}_f}{\mathbf{h}}} \right) \geqslant 0.\tag{1.20} ∀h=0, hTJfTJfh=(Jfh)T(Jfh)⩾0.(1.20)
当 J f T J f {\mathbf{J}}_f^T{{\mathbf{J}}_f} JfTJf 满秩时,则可以证明是正定的,那么式(1.19)成立,同时可以保证
L gn ( h gn ) = 1 2 f T f + f T J f h gn + 1 2 h gn T J f T J f h gn = F ( x ) − 1 2 h gn T J f T J f h gn < F ( x ) = L gn ( 0 ) . (1.21) \begin{aligned} {L_{{\text{gn}}}}({{\mathbf{h}}_{{\text{gn}}}}) &= \tfrac{1}{2}{{\mathbf{f}}^T}{\mathbf{f}} + {{\mathbf{f}}^T}{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{gn}}}} + \tfrac{1}{2}{\mathbf{h}}_{{\text{gn}}}^T{\mathbf{J}}_f^T{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{gn}}}} \\ &= F({\mathbf{x}}) - \tfrac{1}{2}{\mathbf{h}}_{{\text{gn}}}^T{\mathbf{J}}_f^T{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{gn}}}} < F({\mathbf{x}}) = {L_{{\text{gn}}}}({\mathbf{0}}). \\ \end{aligned} \tag{1.21} Lgn(hgn)=21fTf+fTJfhgn+21hgnTJfTJfhgn=F(x)−21hgnTJfTJfhgn<F(x)=Lgn(0).(1.21)
因为
R ( J f T J f ) = R ( J f ) ⩽ min { m , n } . R\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f}} \right) = R\left( {{{\mathbf{J}}_f}} \right) \leqslant \min \left\{ {m,{\text{ }}n} \right\}. R(JfTJf)=R(Jf)⩽min{m, n}.
所以一般要求 m ⩾ n m \geqslant n m⩾n,即函数 f i ( x ) f_i(\bf{x}) fi(x) 的个数要比参数多,在数据拟合中意味着约束方程要比需要优化的参数个数多,并且这些约束方程彼此应该是独立的。因为这些条件一般是满足的,所以式(1.19)通常成立,相比于牛顿法就更有通用性。
然而,必须注意的是,以上的分析都是基于式(1.16)的,即 f ( x ) \bf{f(x)} f(x) 在较小邻域内近似为线性函数,而这在非线性最小二乘问题中很明显是没法保证成立的,这就要求邻域足够小,因此其同样不适合初始点离极值点较远的情况。另外,除了线性近似,根据式(1.13),当 f ′ ′ i ( x ) {{\mathbf{f''}}_i}({\mathbf{x}}) f′′i(x) 变化较小,而 { f i ( x ) } \left\{ {{f_i}({\mathbf{x}})} \right\} {fi(x)} 分布接近于白噪声时,那么我们可以认为其等号右侧第二项近似为零,即
∑ i = 1 m f i ( x ) f ′ ′ i ( x ) ≈ A ⋅ ∑ i = 1 m f i ( x ) ≈ O . (1.22) \sum\limits_{i = 1}^m {{f_i}({\mathbf{x}}){{{\mathbf{f''}}}_i}({\mathbf{x}})} \approx {\mathbf{A}} \cdot \sum\limits_{i = 1}^m {{f_i}({\mathbf{x}}) \approx {\mathbf{O}}} .\tag{1.22} i=1∑mfi(x)f′′i(x)≈A⋅i=1∑mfi(x)≈O.(1.22)
这也符合一些数据拟合问题的情况,这时我们则不需要对 f ( x ) \bf{f(x)} f(x) 进行线性近似。
1.2.5 Levenberg–Marquardt法
通过前面的分析我们发现,牛顿法和高斯-牛顿法都需要进行泰勒公式展开近似,这就要求邻域足够小,问题是应该多小?如果邻域太小,而初始点离极值点比较远,我们是不是应该考虑使用最速下降法?如果近似程度比较好我们是不是应该增大搜索邻域?对于这些问题,后来也衍生出一些称为基于信赖域的优化算法,例如 Powell 的狗腿法(Dog-leg method)等。Levenberg(1944)和Marquartdt(1963)两人则在高斯-牛顿法的基础上增加了一个阻尼系数提出了 LM 算法,其虽然不是明确地基于信赖域,但其实质则和信赖域法有异曲同工之妙。
如式(1.23)所示,
L lm ( h ) = 1 2 f T f + f T J f h + 1 2 h T J f T J f h + 1 2 μ h T h , μ > 0. (1.23) {L_{{\text{lm}}}}({\mathbf{h}}) = \tfrac{1}{2}{{\mathbf{f}}^T}{\mathbf{f}} + {{\mathbf{f}}^T}{{\mathbf{J}}_f}{\mathbf{h}} + \tfrac{1}{2}{{\mathbf{h}}^T}{\mathbf{J}}_f^T{{\mathbf{J}}_f}{\mathbf{h}} + \tfrac{1}{2}\mu {{\mathbf{h}}^T}{\mathbf{h}},{\text{ }}\mu > 0.\tag{1.23} Llm(h)=21fTf+fTJfh+21hTJfTJfh+21μhTh, μ>0.(1.23)
相比式(1.17),LM 法增加了一项惩罚项,或者正则化项,其中 μ \mu μ 称为阻尼系数。惩罚项的意义十分明显,因为高斯-牛顿法需要对 f ( x ) \bf{f(x)} f(x) 进行线性近似,所以我们必须要控制邻域的大小。当近似效果较好时,我们能在较大的邻域内进行搜索,这时 μ \mu μ 应该是一个比较小的值,这样惩罚项在 L lm ( h ) L_{\text{lm}}(\bf{h}) Llm(h) 中所占比重较小, h \bf{h} h 则可以相对较大;而当近似效果较差时,我们应该把邻域收紧到一个较小的范围,这时 μ \mu μ 应该是一个比较大的值,这样惩罚项在 L lm ( h ) L_{\text{lm}}(\bf{h}) Llm(h) 中所占比重较大, h \bf{h} h 则只能较小。
对 L lm ( h ) L_{\text{lm}}(\bf{h}) Llm(h) 进行求导,可得
L lm ′ ( h ) = J f T f + ( J f T J f + μ I ) h = J f T f + H h . (1.24) {L'_{{\text{lm}}}}({\mathbf{h}}) = {\mathbf{J}}_f^T{\mathbf{f}} + \left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right){\mathbf{h}} = {\mathbf{J}}_f^T{\mathbf{f}} + {\mathbf{Hh}}.\tag{1.24} Llm′(h)=JfTf+(JfTJf+μI)h=JfTf+Hh.(1.24)
注意这时
∀ h ≠ 0 , h T H h = h T ( J f T J f + μ I ) h = ( J f h ) T ( J f h ) + μ h T h > 0. (1.25) \forall {\mathbf{h}} \ne {\mathbf{0}},{\text{ }}{{\mathbf{h}}^T}{\mathbf{Hh}} = {{\mathbf{h}}^T}\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right){\mathbf{h}} = {\left( {{{\mathbf{J}}_f}{\mathbf{h}}} \right)^T}\left( {{{\mathbf{J}}_f}{\mathbf{h}}} \right) + \mu {{\mathbf{h}}^T}{\mathbf{h}} > 0.\tag{1.25} ∀h=0, hTHh=hT(JfTJf+μI)h=(Jfh)T(Jfh)+μhTh>0.(1.25)
这意味着 H \bf{H} H 是严格正定的,因此其逆矩阵也总是存在,那么
L lm ′ ( h lm ) = J f T f + ( J f T J f + μ I ) h lm = 0 ⇒ h lm = − ( J f T J f + μ I ) − 1 J f T f . (1.26) {L'_{{\text{lm}}}}({{\mathbf{h}}_{{\text{lm}}}}) = {\mathbf{J}}_f^T{\mathbf{f}} + \left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right){{\mathbf{h}}_{{\text{lm}}}} = {\mathbf{0}} \Rightarrow {{\mathbf{h}}_{{\text{lm}}}} = - {\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right)^{ - 1}}{\mathbf{J}}_f^T{\mathbf{f}}.\tag{1.26} Llm′(hlm)=JfTf+(JfTJf+μI)hlm=0⇒hlm=−(JfTJf+μI)−1JfTf.(1.26)
这时,
μ → 0 , h lm ≈ − ( J f T J f ) − 1 J f T f , μ → ∞ , h lm ≈ − 1 μ J f T f = − 1 μ F ′ ( x ) . (1.27) \begin{gathered} \mu \to 0,{\text{ }}{{\mathbf{h}}_{{\text{lm}}}} \approx - {\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f}} \right)^{ - 1}}{\mathbf{J}}_f^T{\mathbf{f}}, \\ \mu \to \infty ,{\text{ }}{{\mathbf{h}}_{{\text{lm}}}} \approx - \frac{1}{\mu }{\mathbf{J}}_f^T{\mathbf{f}} = - \frac{1}{\mu }{\mathbf{F'}}({\mathbf{x}}). \\ \end{gathered} \tag{1.27} μ→0, hlm≈−(JfTJf)−1JfTf,μ→∞, hlm≈−μ1JfTf=−μ1F′(x).(1.27)
那么,当 μ \mu μ 趋近于 0 时, h lm {\bf{h}}_{\text{lm}} hlm 趋近于高斯-牛顿法的解,说明这时候对 f ( x ) \bf{f(x)} f(x) 的线性近似效果比较好;当 μ \mu μ 趋近于无穷大时, h lm {\bf{h}}_{\text{lm}} hlm 趋近于一个小步长的最速下降法,说明这时对 f ( x ) \bf{f(x)} f(x) 的线性近似效果较差,为了保证算法的鲁棒性,我们更加趋向于在梯度的反方向上搜索。然而,怎么界定 μ \mu μ 是大是小?同时, f ( x ) \bf{f(x)} f(x) 在不同位置的线性近似程度肯定不同,我们应该以什么标准来根据优化的情况更新 μ \mu μ 值?
首先我们得确定一个适当的初始值 μ 0 \mu_0 μ0。如果我们可以确定初始点 x 0 {\bf{x}}_0 x0 是在极值点附近,那么 μ 0 \mu_0 μ0 应该相对比较小,那么搜索方式就更加偏向于高斯-牛顿法;如果初始点 x 0 {\bf{x}}_0 x0 离极值点可能比较远,那么那么 μ 0 \mu_0 μ0 应该大一些,那么搜索方式就更加偏向于最速下降法。根据式(1.26), μ \mu μ 的大小是与 J f T J f {\mathbf{J}}_f^T{{\mathbf{J}}_f} JfTJf 的元素大小相关的,因为 J f T J f {\mathbf{J}}_f^T{{\mathbf{J}}_f} JfTJf 是一个半正定实对称矩阵,因此可以证明其特征值 { λ i } \{\lambda_i\} {λi} 是实数且非负,且不同特征值对应的特征向量必定正交,重根特征值对应的特征向量也总可以经过正交化得到相同数量的相互正交的特征向量。所以,我们可将这些相互正交的特征向量 { v i } \{{\bf{v}}_i\} {vi} 作为 R n \mathbb{R}^n Rn 空间的一个规范正交基。那么, h lm {\bf{h}}_{\text{lm}} hlm 可表示为 { v i } \{{\bf{v}}_i\} {vi} 的线性组合,即有
h lm = ∑ i = 1 n a i v i = ∑ i = 1 n v i T h lm v i = ∑ i = 1 n v i v i T h lm . (1.28) {{\mathbf{h}}_{{\text{lm}}}} = \sum\limits_{i = 1}^n {{a_i}{{\mathbf{v}}_i}} = \sum\limits_{i = 1}^n {{\mathbf{v}}_i^T{{\mathbf{h}}_{{\text{lm}}}}{{\mathbf{v}}_i}} = \sum\limits_{i = 1}^n {{{\mathbf{v}}_i}{\mathbf{v}}_i^T{{\mathbf{h}}_{{\text{lm}}}}} .\tag{1.28} hlm=i=1∑naivi=i=1∑nviThlmvi=i=1∑nviviThlm.(1.28)
根据式(1.26),有
( J f T J f + μ I ) h lm = ∑ i = 1 n ( J f T J f + μ I ) v i v i T h lm = ∑ i = 1 n ( λ i + μ ) v i v i T h lm = − F ′ ( x ) . (1.29) \begin{gathered} \left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right){{\mathbf{h}}_{{\text{lm}}}} = \sum\limits_{i = 1}^n {\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right){{\mathbf{v}}_i}{\mathbf{v}}_i^T{{\mathbf{h}}_{{\text{lm}}}}} \\ = \sum\limits_{i = 1}^n {\left( {{\lambda _i} + \mu } \right){{\mathbf{v}}_i}{\mathbf{v}}_i^T{{\mathbf{h}}_{{\text{lm}}}}} = - {\mathbf{F'}}({\mathbf{x}}). \\ \end{gathered} \tag{1.29} (JfTJf+μI)hlm=i=1∑n(JfTJf+μI)viviThlm=i=1∑n(λi+μ)viviThlm=−F′(x).(1.29)
那么,
v j T [ ∑ i = 1 n ( λ i + μ ) v i v i T h lm ] v j = ( λ j + μ ) v j v j T h lm = − v j T F ′ ( x ) v j , h lm = ∑ j = 1 n v j v j T h lm = − ∑ j = 1 n v j T F ′ ( x ) λ j + μ v j . (1.30) \begin{gathered} {\mathbf{v}}_j^T\left[ {\sum\limits_{i = 1}^n {\left( {{\lambda _i} + \mu } \right){{\mathbf{v}}_i}{\mathbf{v}}_i^T{{\mathbf{h}}_{{\text{lm}}}}} } \right]{{\mathbf{v}}_j} = \left( {{\lambda _j} + \mu } \right){{\mathbf{v}}_j}{\mathbf{v}}_j^T{{\mathbf{h}}_{{\text{lm}}}} = - {\mathbf{v}}_j^T{\mathbf{F'}}({\mathbf{x}}){{\mathbf{v}}_j}, \\ {{\mathbf{h}}_{{\text{lm}}}} = \sum\limits_{j = 1}^n {{{\mathbf{v}}_j}{\mathbf{v}}_j^T{{\mathbf{h}}_{{\text{lm}}}}} = - \sum\limits_{j = 1}^n {\frac{{{\mathbf{v}}_j^T{\mathbf{F'}}({\mathbf{x}})}}{{{\lambda _j} + \mu }}{{\mathbf{v}}_j}} . \\ \end{gathered} \tag{1.30} vjT[i=1∑n(λi+μ)viviThlm]vj=(λj+μ)vjvjThlm=−vjTF′(x)vj,hlm=j=1∑nvjvjThlm=−j=1∑nλj+μvjTF′(x)vj.(1.30)
因此, μ \mu μ 的大小和特征值 { λ i } \{λ_i\} {λi} 的大小相关。根据瑞利商的性质,实对称矩阵的对角元素的值介于最小和最大特征值之间,因此我们可以定义初始 μ 0 \mu_0 μ0 为
μ 0 = τ ⋅ max { ( J f T J f ) i i } . (1.31) {\mu _0} = \tau \cdot \max \left\{ {{{\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f}} \right)}_{ii}}} \right\}.\tag{1.31} μ0=τ⋅max{(JfTJf)ii}.(1.31)
其中 τ \tau τ 可根据前面的分析定义,例如倾向高斯-牛顿法则取较小的数如 1 0 − 6 10^{-6} 10−6,倾向最速下降法则取较大的数如 1 0 − 3 10^{-3} 10−3 甚至 1 1 1。
确定初始 μ 0 \mu_0 μ0 后,接下来是要确定 μ \mu μ 的更新规则。根据前面的内容,我们知道 μ \mu μ 的存在是为了保证 f ( x ) \bf{f(x)} f(x) 在一定邻域内的线性近似程度,而式(1.17)是 f ( x ) \bf{f(x)} f(x) 线性近似的结果,那么我们可以定义 f ( x ) \bf{f(x)} f(x) 线性近似的程度为
ρ = F ( x ) − F ( x + h lm ) L gn ( 0 ) − L gn ( h lm ) . (1.32) \rho = \frac{{F({\mathbf{x}}) - F({\mathbf{x}} + {{\mathbf{h}}_{{\text{lm}}}})}}{{{L_{{\text{gn}}}}({\mathbf{0}}) - {L_{{\text{gn}}}}({{\mathbf{h}}_{{\text{lm}}}})}}.\tag{1.32} ρ=Lgn(0)−Lgn(hlm)F(x)−F(x+hlm).(1.32)
其中
L gn ( 0 ) − L gn ( h lm ) = − f T J f h lm − 1 2 h lm T J f T J f h lm = − 1 2 h lm T ( 2 J f T f + J f T J f h lm ) = − 1 2 h lm T [ − 2 ( J f T J f + μ I ) h lm + J f T J f h lm ] = 1 2 h lm T ( J f T J f + 2 μ I ) h lm > 0. (1.33) \begin{aligned} {L_{{\text{gn}}}}({\mathbf{0}}) - {L_{{\text{gn}}}}({{\mathbf{h}}_{{\text{lm}}}}) &= - {{\mathbf{f}}^T}{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{lm}}}} - \frac{1}{2}{\mathbf{h}}_{{\text{lm}}}^T{\mathbf{J}}_f^T{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{lm}}}} \\ &= - \frac{1}{2}{\mathbf{h}}_{{\text{lm}}}^T\left( {2{\mathbf{J}}_f^T{\mathbf{f}} + {\mathbf{J}}_f^T{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{lm}}}}} \right) \\ &= - \frac{1}{2}{\mathbf{h}}_{{\text{lm}}}^T\left[ { - 2\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + \mu {\mathbf{I}}} \right){{\mathbf{h}}_{{\text{lm}}}} + {\mathbf{J}}_f^T{{\mathbf{J}}_f}{{\mathbf{h}}_{{\text{lm}}}}} \right] \\ &= \frac{1}{2}{\mathbf{h}}_{{\text{lm}}}^T\left( {{\mathbf{J}}_f^T{{\mathbf{J}}_f} + 2\mu {\mathbf{I}}} \right){{\mathbf{h}}_{{\text{lm}}}} > 0. \\ \end{aligned} \tag{1.33} Lgn(0)−Lgn(hlm)=−fTJfhlm−21hlmTJfTJfhlm=−21hlmT(2JfTf+JfTJfhlm)=−21hlmT[−2(JfTJf+μI)hlm+JfTJfhlm]=21hlmT(JfTJf+2μI)hlm>0.(1.33)
因此, h lm {\bf{h}}_{\text{lm}} hlm 可以保证式(1.32)的分母一定是正数。如果 ρ ≤ 0 \rho \le 0 ρ≤0,即 F ( x + h lm ) F({\bf{x+h}}_{\text{lm}}) F(x+hlm) 不降反升,那我们可以十分肯定 f ( x ) \bf{f(x)} f(x) 的线性近似是有问题的,或者说搜索的邻域太大,那么这时我们不应该更新 x \bf{x} x,同时应该增大 μ \mu μ 值,以缩小搜索的邻域;当 ρ \rho ρ 是一个比较大的正数,最好是接近 1 1 1,这时我们就可以认为在该邻域内 f ( x ) \bf{f(x)} f(x) 的线性近似是比较恰当的,而且有理由认为更新 x \bf{x} x 后下一次搜索的邻域可以再扩大一些,因此这时候可以适当减小 μ \mu μ 值;当 ρ > 0 \rho \gt 0 ρ>0 但是又比较小,虽然更新后的 x \bf{x} x 可以使得函数值下降,但下降的幅度远小于我们的预期,这时我们应该适当缩小下一次搜索的邻域,因此这时候可以适当增大 μ \mu μ 值。综上所述,一种经典的 LM 算法的优化过程可以总结如下:
if ρ < ρ 1 , then μ new = β ∗ μ if ρ > ρ 2 , then μ new = μ / γ if ρ > 0 , then x new = x + h lm (1.34) \begin{aligned} &{\text{if }}\rho < {\rho _1},{\text{ then }}{\mu _{{\text{new}}}}{\text{ = }}\beta * \mu \\ &{\text{if }}\rho > {\rho _2},{\text{ then }}{\mu _{{\text{new}}}}{\text{ = }}\mu /\gamma \\ &{\text{if }}\rho > 0,{\text{ then }}{{\mathbf{x}}_{{\text{new}}}}{\text{ = }}{\mathbf{x}} + {{\mathbf{h}}_{{\text{lm}}}} \\ \end{aligned} \tag{1.34} if ρ<ρ1, then μnew = β∗μif ρ>ρ2, then μnew = μ/γif ρ>0, then xnew = x+hlm(1.34)
其中 0 < ρ 1 < ρ 2 < 1 0 \lt \rho_1 \lt \rho_2 \lt 1 0<ρ1<ρ2<1,而且 β , γ > 1 \beta, \gamma \gt 1 β,γ>1。实验表明 LM 算法对这些参数的选择并不是很敏感,比较常用的参数如下
ρ 1 = 0.25 , ρ 2 = 0.75 , β = 2 , γ = 3. {\rho _1} = 0.25,{\text{ }}{\rho _2} = 0.75,{\text{ }}\beta = 2,{\text{ }}\gamma = 3. ρ1=0.25, ρ2=0.75, β=2, γ=3.
在式(1.34)中, μ new / μ {\mu _{{\text{new}}}}/\mu μnew/μ 在经过阈值 ρ 1 \rho_1 ρ1 和 ρ 2 \rho_2 ρ2 的时候会发生跳变,可能会导致优化过程发生震荡,因此,一些论文里面也提出了一些变化更加平滑的策略,而且也不需要给出明确的阈值。图 2 展示了一种完整的 LM 算法流程,其 μ new / μ {\mu _{{\text{new}}}}/\mu μnew/μ 关于 ρ \rho ρ 的函数图像如图 3 所示。
![](https://i-blog.csdnimg.cn/blog_migrate/aac4d3355ce4e08eb1f91e902ad2a47d.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/83d97f835202d2beeedb492617eef564.png#pic_center)
总体来说,LM 算法综合了最速下降法和高斯-牛顿的的特点,对初始点的要求相对不那么严格,在收敛性能和鲁棒性方面都表现不错,因此在很多参数估计问题中都有应用,比如运动参数估计、相机姿态参数估计等等。总之,非线性最小二乘问题是一个相对复杂的问题,怎么在速度、易用性、鲁棒性等方面进行取舍需要根据实际的问题进行分析。除了前面提到的这几种算法,还有如前面提到的基于信赖域的算法、拟牛顿法等等,以及它们的混合算法和一些改进,在这里不一一细说,有兴趣的可以详细阅读下面的参考资料以及在网上进行搜索。
参考资料: