zoukankan      html  css  js  c++  java
  • A-03 牛顿法和拟牛顿法


    更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

    牛顿法和拟牛顿法

    牛顿法(Newton method)和拟牛顿法(quasi-Newton method)和梯度下降法一样也是求解最优化问题的常用方法,但是他们的收敛速度比梯度下降法快。牛顿法是迭代算法,每一步都需要求目标函数的海森矩阵的逆矩阵,计算复杂;拟牛顿法通过正定矩阵近似海森矩阵的逆矩阵,简化这个计算过程。

    一、牛顿法详解

    1.1 无约束最优化问题

    对于一个约束问题

    [underbrace{min}_{xin{R^n}}f(x) ]

    其中(x^*)为目标函数的极小点。

    1.2 牛顿法迭代公式

    假设(f(x))具有二阶连续偏导数,如果第(k)次迭代值为(x^{(k)}),则可以把(f(x))(x^{(k)})附近使用二阶泰勒展开

    [f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})+frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)}) ]

    其中(g_k=g(x^{(k)})= abla{f(x^{(k)})})(f(x))的梯度向量在点(x^{(k)})的值,(H(x^{(k)}))(f(x))的海森矩阵

    [H(x)=[frac{partial^2f}{partial{x_i}partial{x_j}}]_{m*n} ]

    在点(x^{(k)})的值。函数(f(x))有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别是当(H(x^{(k)}))是正定矩阵的时候,函数(f(x))的极值为极小值。
    牛顿法利用极小点的必要条件

    [ abla{f(x)}=0 ]

    每次迭代中从点(x^{(k)})开始,求目标函数的极小点,作为第(k+1)次迭代值(x^{(k+1)}),即假设(x^{(k+1)})满足

    [ abla{f(x^{(k+1)}}=0 ]

    通过泰勒二阶展开式即可得

    [ abla{f(x)}=g_k+H_k(x-x^{(k)}) ]

    其中(H_k=H(x^{(k)})),由此( abla{f(x^{(k+1)}}=0)变成

    [g_k+H_k(x^{(k+1)}-x^{(k)}) = 0 ]

    因此

    [x^{(k+1)}=x^{(k)}-H_k^{-1}g_k ]

    [x^{(k+1)}=x^{(k)}+p_k ]

    其中

    [egin{align} & x^{(k+1)}=x^{(k)}-H_k^{-1}g_k=x^{(k)}+p_k \ & -H_k^{-1}g_k=p_k \ & H_kp_k=-g_k end{align} ]

    使用(x^{(k+1)}=x^{(k)}-H_k^{-1}g_k)作为迭代公式的算法就是牛顿法。

    1.3 牛顿法和梯度下降法

    从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。

    虽然牛顿法看起来比梯度下降法好很多,但是别忘记了牛顿法迭代过程中需要计算海森矩阵的逆矩阵,如果数据量较大的话,牛顿法的计算开销将远远大于梯度下降法。

    二、牛顿法流程

    2.1 输入

    目标函数(f(x)),梯度(g(x)= abla{f(x)}),海森矩阵(H(x)),精度要求(epsilon)

    2.2 输出

    (f(x))的极小点(x^*)

    2.3 流程

    1. 取初始点(x^{(0)}),并且让(k=0)
    2. 计算(g_k=g(x^{(k)}))
    3. 如果(||g_k||leqepsilon),停止计算,得到近似解(x^*=x^{(k)})
    4. 计算(H_k=H(x^{(k)})),并求出(p_k)

    [H_kp_k=-g_k ]

    1. (x^{(k+1)}=x^{(k)}+p_k)
    2. (k=k+1),转到第2步

    在第4步求(p_k)的时候,(p_k=-H_k^{-1}g_k),要求求海森矩阵的逆矩阵(H_k^{-1}),计算会比较复杂。

    三、拟牛顿法简介

    在牛顿法的迭代中,需要计算海森矩阵的逆矩阵(H^{-1}),这个过程是比较复杂的,而拟牛顿法则使用了一个(n)阶矩阵(G_k=G(x^{(k)}))近似替代(H_k^{-1}=H^{-1}(x^{(k)})),此处不多赘述。

  • 相关阅读:
    《微信公众平台入门到精通》
    windows 7 memcached报failed to install service or service already installed的解决方案
    Xcode5新特性
    [置顶] 请听一个故事------>你真的认为iPhone只是一部手机?苹果惊天秘密!!
    gallery利用代码定位图片并且不丢失动画效果
    [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
    struts漏洞修补过程之S2-016
    内存管理之内存分配
    Cocos2d—X游戏开发之CCTableView详解(十一)
    Log4j详细设置说明
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11686761.html
Copyright © 2011-2022 走看看