非线性最小二乘法优化问题(1)

最近工作需要用到ceres,代码里面都直接给出了结果及很简单说明,在编程的过程中为了多了解一些,顺便网络查询了一些背景理论以及阅读一些数值优化方法的教材,随手记录了一下学习笔记,现计划分几篇分享到微信公众号。

无约束最优化方法

最小二乘法优化方法整个理论体系被包含在无约束最优化方法之中,目的是研究在无约束情况下如何求最优解的问题,采用迭代法求解本质是确定一个迭代差值dx,使目标/代价函数f(x+dx)下降,定义g(x)和G(x)分别为目标函数f(x)的一阶及二阶导数。

对于局部最优解:

  • 一阶必要条件:一阶导数g(x*)=0

  • 二阶必要条件:二阶导数G(x*)半正定

    半正定:对于非0向量d满足d'*G*d >=0

  • 二阶充分条件

    • g(x*)=0,且

    • G(x*)正定:对于非0向量d满足d'*G*d >0

      • 证明:

      Taylor展开: f(x + alpha*d) = f(x) + 0.5 * alpha^2 * d' * G(x) * d + o(||alpha * d||^2),当d' * G(x*) * d > 0, f(x + alpha*d) > f(x) ,即 f(x) 为严格局部极小值;

    • 下降方向d的约束

      由一般性Taylor展开:f(x + alpha*d) = f(x) + alpha * g'(x) * d + o(

      ||alpha * d)||^2),在步长alpha大于0情况下,要使f下降,则必须满足:g'(x) * d  < 0;


上面的alpha和d的求解方法最常见分为最速下降法和牛顿法:

  •     最速下降法

    • Taylor展开,只保留一阶项,忽略二阶及高阶项

      • f(x+a*d) = f(x) + a * d' * g(x) ,d为下降方向,a为步长,大于0的标量;

    • d取负梯度方向,即d = -g(k),此时目标函数最速下降(下降方向d与梯度方向相反,下降最快);

    • 当求出d之后,采用精确线性搜索求出a,固定d之后再次优化得到a;

    • 举例:

      优化函数:f(x)=0.5 * x1^2 + 2.5 * x2^2, 

      其中x=(x1,x2)',

      当初始值x0 =(5,1),则在x0处的梯度d为(5,5)',按照精确线性搜索min f(x0 - alpha * d),可求alpha = 0.3,即下一步迭代x1 = x0 + alpha * d = (3.333,-0.667)',按照上面的步骤持续迭代,直到梯度足够小(接近为0)停止迭代。

  • 牛顿法

    Taylor展开,保留二阶,忽略高阶项:f(x+h) = f(x) + h' * g(x) + 0.5 * h' * G * h;定义:min(q(h)) = min (f(x+h)),对h求导,令q'(h) = 0,即g + 0.5 * h' * (G' + G) = 0,由于G为f(x)的hessian矩阵,G为对称矩阵,即有 G * h = -g ,若G正定,由 h' * G * h = -h' * g  > 0,下降方向h显然满足f下降条件,当G'G非奇异时,h = -inv(G'G) * g,这种直接求逆的做法效率很低,一般会使用矩阵分解(如QR分解)来求h,在求出h之后,再迭代f(x+h),由于牛顿法每次迭代都需要二阶导数,效率很会很低,实际的工程一般是采用近似G的做法,下面的最小二乘法会有说明。

    最小二乘法优化问题


    定义如上式,r为残差函数,有一个或以上为非线性函数,上式为非线性最小二乘问题反之为线性最小二乘优化问题,由1节 将优化函数taylor展开之后牛顿法优化方程:G * h = -g,此方程为解决最小二乘优化问题基本方程。

    • 求g ,链式法则


    背景求导知识(分子阈):

    • 求G

      公式推起来特别繁琐,直接给出结论了:

          G = g' * g + S,

      即解最小二乘问题牛顿方程为:

           (g' * g + S)* h = -g' * r , 当S为0时转换为线性最小二乘问题。


      (未完待续)

你可能感兴趣的:(Others)