zoukankan      html  css  js  c++  java
  • 牛顿法

    这篇博客主要介绍一种最优化的方法:牛顿法,拟牛顿法的两种实现(DFP 和 BFGS)。

    牛顿法

    牛顿法是一个寻找方程根的算法,迭代计算的过程如图所示。这个算法如何和函数的最优化联系起来呢?

    最优化

    我们想要求解的问题如下:

    [mathop{min}limits_{x in R^n} f(x) ]

    假如 (f(x)) 是凸函数,那么我们只需要找到一阶导数为 (0) 的点,就可以得到局部最小值。因此,牛顿法在最优化问题中干的事情就是求解一阶导数的零点。接下来,类比方程求根的牛顿法,我们先将函数的一阶导数在 (x_k) 处展开。

    [ abla f(x) = g_k + H_k (x - x_k) ]

    这里 (g_k) 表示在 (x_k) 的梯度,(H_k) 表示海塞矩阵,它是向量 ( abla f(x)) 对向量 (x) 求导得出来的。

    接下来令 ( abla f(x) = 0),我们可以求解出 (x)

    [x = x_k - H_{k}^{-1} g_k ]

    接下来迭代求解 (x),然后带入梯度公式去计算,如果小于 (epsilon),我们可以认为它的梯度已经够"平"了,可以停止迭代了。

    拟牛顿法

    思路分析

    拟牛顿法主要是为了解决牛顿法中海塞矩阵求逆的问题,我们可以考虑用另外的矩阵来代替海塞矩阵。这样的一个矩阵需要满足两个条件:一,正定。二,拟牛顿条件。

    拟牛顿条件是海塞矩阵需要满足的条件,如果考虑别的矩阵来替代,我们要求这样的矩阵也满足这样的条件。

    (x=x_{k+1}) 带入下面公式,我们可以得到拟牛顿条件。

    [ abla f(x) = g_k + H_k (x - x_k) ]

    [g_{k+1} = g_k + H_k (x_{k+1} - x_k) ]

    (y_k = g_{k+1} - g_k), (delta_{k} = x_{k+1} - x_k),代入上述式子得到:

    [y_k = H_k \, delta_{k} ]

    [H_{k}^{-1} \, y_k = delta_{k} ]

    考虑使用正定的矩阵 (G_k) 代替海塞矩阵的逆,那么我们能否保证替代之后函数值得到下降呢?

    后面为了进行泰勒展开,所以这里在 (x) 的迭代公式中加入了步长 (lambda)

    [x = x_k - lambda \, G_k g_k ]

    (lambda) 足够小的情况下,可以进行在 (x) 处进行泰勒展开。

    [f(x) = f(x_k) - lambda g_{k}^{T} G_k g_k ]

    由于 (G_k) 是正定矩阵,所以 (g_{k}^{T} G_k g_k > 0)。因此在 (lambda) 足够小的情况下,(f(x)) 的函数值会在下降。使用 (B_k) 代替 (G_k) 的分析是一样的,只不过第一步要对 (B_k) 先求个逆。正定矩阵的逆也是正定的,后面的分析是一样的了。

    DFP 算法

    拟牛顿条件:(H_{k}^{-1} \, y_k = delta_{k})

    DFP 算法使用 (G_k) 代替海塞矩阵的逆。它通过构造两个待定矩阵来迭代求解 (G_k)。构造矩阵如下:

    [G_{k+1} = G_k + P_k + Q_k ]

    [G_{k+1} \, y = G_k \, y + P_k \, y + Q_k \, y ]

    (G_k \, y = -Q_k \, y)(P_k \, y = delta_{k}),代入上式,可以证明下一个 (G_{k+1}) 也是满足拟牛顿条件的。

    (P_k)(Q_k) 的解由构造得到。(一开始我在想着两边同乘的思路呢...)

    [P_k = delta_{k} frac{delta_{k}^{T}}{delta_{k}^{T} \, y_k} ]

    [Q_k = -G_k \, y_k frac{y_{k}^{T} \, G_k}{y_{k}^{T} \, G_k \, y_k} ]

    最后得到迭代公式:

    [G_{k+1} = G_{k} + P_{k} + Q_{k} ]

    在李航的书里,算法还有一步是搜索 (lambda),算法的整体步骤类似牛顿法。

    BFGS 算法

    拟牛顿条件:(y_k = H_{k} \, delta_{k})

    我们可以使用 (G_k) 代替海塞矩阵的逆,亦可以使用矩阵 (B_k) 代替海塞矩阵。整个构造的思路类似 BFP,首先构造如下迭代公式:

    [B_{k+1} = B_k + P_k + Q_k ]

    接下来两边同乘 (delta_{k})

    [B_{k+1} \, delta_{k} = B_k \, delta_{k} + P_k \, delta_{k} + Q_k \, delta_{k} ]

    同样令 (B_k \, delta_{k} = -Q_k \, delta_{k})(y_k = P_k \, delta_{k})

    同样可以构造出 (P_k)(Q_k)

    [P_k = y_k frac{y_{k}^{T}}{y_{k}^{T} \, delta_k} ]

    [Q_k = -B_k \, delta_k frac{delta_{k}^{T} \, B_k}{delta_{k}^{T} \, G_k \, delta_k} ]

    最后得到迭代公式:

    [B_{k+1} = B_{k} + P_{k} + Q_{k} ]

    总结

    一句话总结:将牛顿法用于求解凸函数的一阶导数的零点,这个零点就是局部最优点。

  • 相关阅读:
    批量刷新远程物化视图的方法(备用)
    Oracle 11g中CTE应用示例
    PL/SQL DEVELOPER中查询结果复制出来中文乱码的解决方案
    RHEL5.5 64位下安装Oracle 11g 64位安装前置条件的两种方法
    不良言论屏蔽方案探讨——自说自话方案
    AWWWB 网站克隆器 v2.0发布
    OneNote中到底能放多少种东西?
    Visual Studio 2010 旗舰版 安装问题小记
    WPF命中测试示例(一)——坐标点命中测试
    网页内嵌Windows Media Player播放器的多文件播放方法
  • 原文地址:https://www.cnblogs.com/zzk0/p/13879038.html
Copyright © 2011-2022 走看看