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}$

  • 相关阅读:
    my sql Group_concat函数
    [Effective JavaScript 笔记]第43条:使用Object的直接实例构造轻量级的字典
    [Effective JavaScript 笔记]第4章:对象和原型--个人总结
    [Effective JavaScript 笔记]第42条:避免使用轻率的猴子补丁
    [Effective JavaScript 笔记]第41条:将原型视为实现细节
    [Effective JavaScript 笔记]第40条:避免继承标准类
    [Effective JavaScript 笔记]第39条:不要重用父类的属性名
    [Effective JavaScript 笔记]第38条:在子类的构造函数中调用父类的构造函数
    [Effective JavaScript 笔记]第37条:认识到this变量的隐式绑定问题
    [Effective JavaScript 笔记]第36条:只将实例状态存储在实例对象中
  • 原文地址:https://www.cnblogs.com/wzhao-cn/p/11284001.html
Copyright © 2011-2022 走看看