zoukankan      html  css  js  c++  java
  • 优化算法-无约束优化

    无约束优化的常见算法

    无约束优化问题可以表示为:

    $min_{ heta} L( heta)$

    其中目标函数 $L(cdot)$ 是光滑的。如何针对不同的目标函数,不同的应用场景求解一个无约束优化问题是机器学习领域的关注点。

    经典的优化算法可以分为直接法和迭代法两大类。

    直接法

    直接法,就是能够直接给出优化问题的最优解的方法,这种方法能够通过一个解析式直接求出对应的最优解。但是有一系列的约束使得这种方法并不能广泛适用。

    直接法要求目标函数具有两个条件:

    (1)$L{cdot}$ 是凸函数,如果$L{cdot}$ 是凸函数,则 $ heta^{*}$ 是最优解的充分必要条件是 $L{cdot}$ 在 $ heta^{*}$ 处的梯度为 0。即

    $ riangledown L( heta^{*}) = 0$

    (2)为了能够直接求解出 $ heta^{*}$,需要上式有闭式解(解析解)。

    而同时满足上述两个条件的经典的模型是岭回归(带正则化项的线性回归):

    $L( heta) = ||X heta -y||_{2}^{2}+lambda || heta||_{2}^{2}$

    其最优解为:$ heta^{*} = (X^{T}X+lambda I)^{-1} X^{T}y$

    迭代法

    迭代法,是通过迭代的修改当前对最优解的估计,使得目标朝着最优解的方向前进,最终得到最优解或最优解的近似估计值。

    假设当前对最优解的估计为 $ heta_{t}$,则希望求解优化问题:

    $delta_{t} = underset{delta}{arg min} L( heta_{t}+delta)$

    从而得到对最优解的更好的估计 $ heta_{t+1} = heta_{t}+delta_{t}$。

    迭代法可以分为一阶迭代法和二阶迭代法。

    梯度下降法

     一阶迭代法又称为梯度下降法,通过对目标函数进行一阶泰勒展开(在 $ heta_t$ 处展开)得到近似式:

    $L( heta_{t}+delta) approx L( heta_t)+ riangledown L( heta_t)^{T} delta$

    由于该近似式在 $delta$ 较小时才比较准确,因此在求解 $delta_t$ 时一般加上 $L_2$ 正则项得到:

    $L( heta_{t}+delta) approx L( heta_t)+ riangledown L( heta_t)^{T} delta+frac{1}{2 alpha}||delta||_{2}^{2}$

    $frac{partial L}{partial heta} = riangledown L( heta_t)+alpha delta = 0$

    $delta_t = -alpha riangledown  L( heta_t)$

    由此,一阶迭代公式法表示为

    $ heta_{t+1} = heta_t -alpha riangledown  L( heta_t)$

    其中,$alpha$ 是学习率,通过一维线性搜索[1]得到。

    牛顿法

    二阶迭代法又称为牛顿法,通过对目标函数进行二阶泰勒展开(在 $ heta_t$ 处展开)得到近似式:

    $L( heta_t + delta) approx L( heta_t)+ riangledown L( heta_t)^{T} delta+frac{1}{2}delta^T H_t delta$

    其中,$ H_t = riangledown ^{2}L( heta_t)$是函数 $L$ 在 $ heta_t$ 处的Hessian矩阵[2]。通过求解近似优化问题

    $delta_t =underset{delta}{arg min}  left ( L( heta_t)+ riangledown L( heta_t)^{T} delta + frac{1}{2}delta^T H_t delta ight )=-H_t^{-1} riangledown L( heta_t)$

    由此,二阶迭代公式法表示为

    $ heta_{t+1} = heta_{t}-H_t^{-1} riangledown L( heta_t)$

    因为函数 $L( heta)$ 有极值的必要条件是在极值点处一阶导数为 0,即梯度向两位零。特别是当 Hessian 矩阵为正定矩阵时,函数$L( heta)$ 的极值为极小值。

    牛顿法的收敛速度一般要远快于梯度下降法,但是在高维情况下,Hessian 矩阵求逆的计算复杂度很大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点。因此针对牛顿法的 Hessian 的逆的求解复杂高的问题,后面提出了拟牛顿法的思想。即考虑使用一个 $n$ 阶矩阵近似代替 $H( heta_t)$。其中比较著名的是 BFGS 算法。

    拟牛顿法-BFGS算法

    BFGS 算法的主要思想是使用一个矩阵 $B_k$ 逼近 Hessian 矩阵。首先由牛顿法可知,令:$L( heta_t+delta) = L( heta)$,则

    $L( heta) = L( heta_t)+ riangledown L( heta_t)^{T}( heta- heta_t)+frac{1}{2} ( heta- heta_t)^{T} H_t ( heta- heta_t)$

    $;;;;; ;;frac{partial L( heta)}{partial  heta }= riangledown L( heta _t)^T+H_t( heta - heta _t)=0\
    overset{ heta = heta_{t+1}}{Rightarrow } ;;; riangledown L( heta _{t+1})- riangledown L( heta _t) = H_t( heta_{t+1} - heta _t) = H_t delta_t$

    令 $y_t = riangledown L( heta _{t+1})- riangledown L( heta _t)$,有 $y_t = H_t delta_t$,用 $B_{t+1}$ 近似 $H_t$,同时令 $B_{t+1} = B_t+P_t+Q_t$ 得到:

    $B_{t+1} delta_t = B_t \delta_t + P_t delta_t+Q_t delta_t$

    考虑使 $P_t $ 和 $Q_t$ 满足:

    $P_tdelta_t = y_t$

    $Q_t delta_t = -B_t delta_t$

    找到适合条件的$P_t$ 和 $Q_t$,得到 BFGS 算法矩阵 $B_{t+1}$ 的迭代公式:

    $B_{t+1} = B_t + frac{y_t y_t ^T}{y_t^T delta_t} + frac{B_t delta_t delta_t^T B_t}{delta_t^T B_t delta_t}$

  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/wzhao-cn/p/11284001.html
Copyright © 2011-2022 走看看