计算机视觉大型攻略 —— 程序猿数学(2) 数值优化(二)最小二乘问题

计算机视觉和机器学习里面有大量的最小二乘问题,例如相机校正,视觉里程计,vSLAM等。最小二乘问题可以认为是无约束非线性优化的一个特例。可以使用一般化的方法求解,然而由于他的形式的特殊性,可以采用一些性能更好的算法。

更多一般性方法可以参考这篇文章:无约束非线性优化算法

参考:

[1] Numerical Optimization. Nocedal, Jorge, Wright, S.
[2] Computer vision: models, learning and inference. Simon J.D. Prince
[3] 最优化理论与方法, 袁亚湘
[4] Convex Optimization.  Stephen Boyd, Lieven Vandenberghe
[5]

最小二乘问题

最小二乘问题的目标函数定义,

                                 f(x) = \frac{1}{2}\sum ^{m}_{j=1}r^{2}_{j}(x) \; \; \; \; \; \; \; \; \; \; \left ( 1 \right )                                    

其中,x\in \mathbb{R}^{n}, 并且假设 m\geqslant n。每一个r_{j}称为残差(residual),通常可以写作,

                                 r_{j}(x) = \phi (x:t_{j})-y_{j} \; \; \; \; \; \; \; \; \; \; \left ( 2 \right )

此差值衡量了模型(y_{i})与观测(\phi (x;t_{j}))的差异。样本数有m个,残差可以写成m维向量。

                                  r(x)=(r_{1}(x),r_{2}(x),...,r_{m}(x))^{T} \; \; \; \; \; \; \; \; \; \; \left ( 3 \right )

在求解非线性最优化的时通常需要对目标函数求一阶,二阶导数。

f(x)的雅克比矩阵,

                                 J(x)=\left [ \frac{\partial r_{j}}{\partial x_{i}} \right ]_{j=1,2,...m; \; \;i=1,2,...n}=\begin{bmatrix} \triangledown r_{1}(x)^{T}\\ \triangledown r_{2}(x)^{T}\\ ... \\ \triangledown r_{m}(x)^{T} \end{bmatrix} \; \; \; \; \; \; \; \; \; \; \left ( 4 \right )

梯度及Hessian矩阵为

                                \triangledown f(x)= \sum ^{m}_{j=1}r_{j}(x)\triangledown r_{j}(x) = J(x)^{T}r(x)\; \; \; \; \; \; \; \; \; \; \left ( 5 \right )

                                \triangledown^{2} f(x)= \sum ^{m}_{j=1}\triangledown r_{j}(x)\triangledown r_{j}(x)^{T} + \sum_{j=1}^{m} r_{j}(x)\triangledown^{2} r_{j}(x) = J(x)^{T}J(x)+\sum_{j=1}^{m}r_{j}(x)\triangledown^{2} r_{j}(x) \; \; \; \; \; \; \; \; \; \; \left ( 6\right )

线性最小二乘

r_{j}(x)为线性时,该问题称为线性最小二乘问题。对于线性问题,

残差向量可以写作,

                                 r(x)=Jx-y \; \; \; \; \; \; \; \; \; \; \left ( 7\right ),

目标函数,

                                 f(x)=\frac{1}{2}\left \| Jx-y \right \|^{2} \; \; \; \; \; \; \; \; \; \; \left ( 8\right )

一阶导数及二阶导数为,

                                \triangledown f(x)=J^{T}(Jx-y), \;\; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \left ( 9\right )

                                \triangledown^{2} f(x)=J^{T}J \;\; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \left ( 10\right )

对这个凸函数求极值,只需令一阶导数为0。

                                J^{T}Jx^{*} = J^{T}y \;\; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \left ( 11\right )

对于上面这个公式,可以通过Cholesky分解,QR分解及SVD分解来求解。

非线性最小二乘

非线性最小二乘的目标函数为非线性函数,有两个经典的算法高斯牛顿法,莱文伯格-马夸特法,前者基于线性搜索,后者基于信赖域。更多关于线性搜索和信赖域的内容可参考上一篇。

传送门: 无约束非线性优化

GAUSS-NEWTON

高斯牛顿法从牛顿法演变而来,在无约束非线性优化这篇文章中提到的牛顿法是基于线性搜索(Line Search)的算法,每一次迭代需要计算搜索方向p_{k}

                                            (\triangledown^{2} f(x_{k})) p_{k} = - \triangledown f(x_{k}) \;\; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \left ( 12\right )

牛顿法的主要局限在二阶导数是否正定对称上。Gauss-Newton法使用J_{k}^{T}J_{k}近似二阶导数\triangledown^{2} f(x_{k}),即

                                          \triangledown^{2} f(x) = J(x)^{T}J(x)+\sum_{j=1}^{m}r_{j}(x)\triangledown^{2} r_{j}(x) \; \approx J(x)^{T}J(x)

代入公式(12)计算搜索方向p_{k}^{GN}

                                            J_{k}^{T}J_{k}p^{GN}_{k} = -J_{k}^{T}r_{k}

这样省掉了二阶导数的计算。

公式(6)加号右边的部分,   

                                           \sum_{j=1}^{m}r_{j}(x)\triangledown^{2} r_{j}(x) \; \; \; \; \; \; \; \; \; \;

将上面的求和部分近似为0,也就是说要么r_{j}(x)非常小,要么\triangledown^{2} r_{j}(x)非常小。前者非常小,意味着观测与模型的误差小,后者小,意味着残差函数接近线性。在实际情况中,这两种情况非常常见。

换一个角度考虑,求p_{k}实际上可以等价于最优化下面这个线性最小二乘问题。

                                            \min_{p} \frac{1}{2}\left \| J_{k}p+r_{k} \right \|^{2}

因此,可以通过线性最小二乘法求解每次迭代的下降方向。

LEVENBERG–MARQUARDT

与高斯牛顿法类似,LM算法同样使用了对Hessian矩阵的近似。不同的是LM算法使用信赖域而不是线性搜索。因此,相当于在高斯牛顿法的基础上增加了一个约束,即

                                     \min_{p} \frac{1}{2}\left \| J_{k}p+r_{k} \right \|^{2}, subject\; to\; \; \left \| p \right \|\leq \Delta _{k}

\Delta _{k}为信赖域的半径。信赖域中的二次函数为,

                                     m_{k}(p)=\frac{1}{2}\left \| r_{k} \right \|^{2}+p^{T}J_{k}^{T}r_{k}+\frac{1}{2}p^{T}J_{k}^{T}J_{k}p

LM算法也叫"damped Gauss-Newton method",思路是在高斯牛顿法计算的p_{k}^{GN}公式的基础上,增加一个衰退参数\lambda \geq 0

Gauss-Newton:                                      J^{T}Jp^{GN} = -J^{T}r 

LM:                                                      (J^{T}J+ \lambda I)p^{LM} = -J^{T}r

  • \lambda > 0时,协方差矩阵正定,保证了p^{LM}是下降方向。
  • 如果\lambda非常大,可以得到,

                        p^{LM} \simeq -\frac{1}{\lambda} J^{T}r = -\frac{1}{\lambda} F^{'}(x)

       这相当于梯度下降的一小步。也就是说,当迭代的位置远离最优点时,LM算法相当于梯度下降。

  • 如果\lambda非常小,那么p^{LM} \simeq p^{GN}。当迭代位置离最优点很近时,LM算法等价于GN算法。

可以看到衰退参数\lambda即定义了下降方向,也定义了步长,因此LM算法不需要进行LineSearch。\lambda本身代表了信赖域。

无约束非线性优化这篇文章提到信赖域算法需要一个判定条件\rho

                                           \varrho = \frac{F(x)-F(x+p^{LM})}{L(0)-L(p^{LM})}

分子为实际下降量,分母为预测下降量。

  • \rho 小,说明模型m预测的下降量高于模型f实际的下降量,需要缩小信赖域。
  • \rho 大,说明模型m预测的下降量低于实际模型f的下降量,可以采用此信赖域。

计算预测下降量 ,

                                 L(0)-L(p^{LM})=-(p^{LM})^{T}J^{T}f -\frac{1}{2}(p^{LM})^{T}J^{T}Jp^{LM}

                                                            \;\;\;\;\;\;\;\;\;\;\;\;\;=\frac{1}{2}(p^{LM})^{T}(\lambda p^{LM}-J^{T}f)

\lambda的初值应该和A_{0}=J^{T}(x_{0})J(x_{0})相关,比如说可以设

                                \lambda_{0} = \tau \max_{i}\left \{ a_{ii}^{0} \right \}

\tau为用户设定参数。

LM算法的伪代码

计算机视觉大型攻略 —— 程序猿数学(2) 数值优化(二)最小二乘问题_第1张图片

上一篇:无约束非线性优化

 

你可能感兴趣的:(程序员数学,#,最优化理论,高斯牛顿,GaussNewton,最小二乘法,非线性优化)