##Least-Square optimization
待求问题:
其中,是一个到的映射函数,其实就是在LS问题中需要构建的error函数。m一般大于n,也就是超定方程。
举个例子,一个参数识别问题:
待求参数有四个, 观测数据为, 其中是量测的噪声,这里显式的写出来,只是代表量测中存在误差。如果想仿真伪造数据的话,可以在truth上加上randn(1)*sigma
,其中sigma
为Gaussian噪声的标准差。对这个系统观测了次,如何从这个观测中估计,就是LS需要解决的问题。对于线性系统这个问题很简单,把问题写成就是要求的结果。
待求问题一般也可以写成:
,其中是从到的函数。
全局最优/局部最优
求非线性最小二乘的全局最优解释很复杂的,后面要介绍的算法都是局部最优算法,局部最优通俗上说就是在最优解附件的领域上,是最小的。
Gradient/Jacobian/Hessian
. 为啥需要这三个矩阵,下面说明。另外,注意一般情况下,.
stationary point
局部最小点一定是stationary point, 但是stationary point也可以是极大值点或者鞍点,怎么判断?用Hessian矩阵,positive definitive=局部极小,negative definitive=局部极大,indefinitive=鞍点。
算法的收敛速度
-
线性,$$ e_{k+1} / e_{k} =\alpha,\ \ 0<\alpha<1$$; -
二次,$$ e_{k+1} =O( e_{k} ^2)$$
##算法 所有的non-linear optimization算法都是迭代的,迭代的原则是.
通用的Descent Method,包含关键的三步:
- 选择descent direction ;
- 选择step length, ;
- 然后进行迭代,直至收敛或者最大迭代步数到达。
那么什么是descent direction? ,至于为什么,对进行一阶Taylor展开就知道了。
怎么选择? 也就是某些文章中会写的line search步骤。理论上,最好的, 要实现这一目标,也是需要迭代的。
Steepest Descent Method
也叫做gradient method, 顾名思义,就是把第一步中的, 因为沿着梯度方向是最速的上升或者下降的方向。此方法在快到local minimum的时候收敛速度是linear的,very slow,但是在initial阶段,速度还是很快的。
Newton Method
, Newton法在最终收敛段速度是quadratic的,代价是需要求Hessian. Quasi-Newton和Newton的关系 Newton用的是真的Hessian,Quasi-Newton,顾名思义,用的是近似的Hessian?为啥要用近似的Hessian呢,因为Hessian对于很多系统来说,真的很难求。
Soft line search
soft line search,顾名思义,就是不要求是最优的。soft line search接受一个,只要它满足:
- 沿着当前梯度下降了一定程度;
- target点梯度大于当前梯度的倍,; 第一点保证了,步不会选的太小,第二点保证了,步不会选到上升方向。
Trust Region V.S Damped Method
Assume: , 其中是在附近的二阶Taylor展开。Truth region的意思是,存在一个ball,radius是, 选择.而damped mathod,选择.这两种方法默认,但是要求在基本descent算法的经典三步上,增加一步:
- 更新或者; 更新的原则取决于当前的估计评价值。直观上讲,对于TR算法,如果评价高,代表可以增大region的radius,加快收敛;反之减小。对于DM算法,如果评价好,就减小阻尼,反之就增大阻尼。
Newton-Raphson’s Method
solve
Gauss-Newton Method
solve 注意和Newton法的对比,GN法一般没有quadratic收敛速度。
Levenberg-Marquardt
LM是一种DM算法。 solve .退出机制:
-
$$ h_{lm} $$很小了; - 达到最大次数;
Dogleg
DL是一种TR方法。依赖于GN法和SD法,根据步长是否超过了,决定是采用GN,或者SD,或者二者的加权。理论上说,DL要比LM好,但是对于一般问题,无法确定DL和LM谁的收敛速度更快。
Toolbox for Non-linear Optimization
NLOP的基本问题就是上面所描述的,然后理论和实际又是另一回事,比如说如果待解问题维度很高,Jacobian会变得很大,如果还是dense的,内存和求解速度都会遇到很多挑战;反之,比如BA问题,待解参数虽然很多,但是是sparse的问题,如果直接按照上面的解法去处理,速度会很慢。下面是一些我个人调研过的能过求解通用NLOP问题的工具:
- google ceres: 大全,可以解带约束的,可以解不带约束的;
- Eigen unsupported:只能求解不带约束的问题,所有矩阵都是dense的,因此问题很大的时候,要考虑一下内存够不够;
其他诸如sparseLM, cminpack这些,我没有使用过,不过也至少是过去(ceres之前)的主流求解器。
Reference
- Methods for non-linear least squares problems, 2nd Edition, 2004. K.Madsen, H.B.Nielsen, O.Tingleff, Informatincs and Mathematical Modeling, Techinical University of Denmark.