zoukankan      html  css  js  c++  java
  • 梯度下降、牛顿法和拉格朗日对偶性

    这篇文章主要介绍梯度下降、牛顿法和拉格朗日对偶性的过程和一些原理的证明。

    梯度下降:

    假设$f(x),xin R^{n}$,有一阶的连续偏导数,要求解的无约束最优化问题是:

                $min limits_{xin R^{n}}f(x)$

    $x^*$表示目标函数$f(x)$的极小点。

    首先解释一下为什么梯度下降可行:对于一个有一阶连续偏导数的凸函数,若存在函数的极小值点,让x不断地往函数值减少的方向移动,最终会到达一个不动点,而这个不动点,就是函数f(x)的极小值点。选择负梯度方向,可以让x更快地到达不动点的位置。

    负梯度的方向为什么是下降最快的方向呢?下面先证明一下:

    方向导数定义:

    记$z=f(x,y)$在$M_0=(x_0,y_0)$处可微,则$f(x,y)$在$M_0$沿着任意方向$l=(cos a,cos b)$存在方向导数,且:

     

    $frac{partial f(x_0,y_0)}{partial l}=frac{partial f(x_0,y_0)}{partial x}cos a+frac{partial f(x_0,y_0)}{partial y}cos b$

     

    因此,$z=f(x,y)$在$M_0$的沿着的方向导数可以改写成:

    $frac{partial f(x_0,y_0)}{partial l}=(frac{partial f(x_0,y_0)}{partial x},frac{partial f(x_0,y_0)}{partial y})centerdot(cos a,cos b)$$= riangledown f(x_0,y_0)centerdot l=| riangledown f(x_0,y_0)|cos< riangledown f(x_0,y_0),l>$

     

    从$cos< riangledown f(x_0,y_0),l>$部分可以看到,如果$ riangledown f(x_0,y_0)$和下降方向反向,那么$cos< riangledown f(x_0,y_0),l>=cos pi=-1$

    ,这是$cos< riangledown f(x_0,y_0),l>$的最小值,因此,可以证明,负梯度方向是下降最快的方向。(注:被面试官问过,印象太深刻了,特意在此加上这段)

     

    言归正传,下面就得介绍梯度下降了的方法了:

    由于$f(x)$具有一阶连续偏导,因此,它在点$(x_k,y_k)$处沿着负梯度方向的导数是:

    $g_k=g(x_k)= riangledown f(x_k)$

     

    设定一个下降步长$eta_k$,如果我们把梯度下降这一个过程看作是从山上走到山谷的过程,那么  $eta_k$描述的是我们从$x_k$位置走到$x_{k+1}$位置所走的每一步的步幅,也可以称为步长。于是,

     

    就有:$x_{k+1}gets x_k-eta_k*(- riangledown f(x_k))$

     

    即:$x_{k+1}gets x_k+eta_k* riangledown f(x_k)$

    梯度下降的算法的步骤如下:

    输入:目标函数$f(x)$,梯度函数$g(x)= riangledown f(x)$,误差$varepsilon$

    输出:$f(x)$的极小值点$x^*$

    取初始值$x^{(0)}in R$,置$k=0$

    (1)   计算$f(x^{(k)})$

    (2)   计算梯度$g_k=g(x^{(k)})$,当$||g_k||<varepsilon$时,停止迭代,令$x^*=x^{(k)}$;

    否则,取步长$eta_k$,令$x_{k+1}gets x_k+eta_k* riangledown f(x_k)$,计算$f(x^{(k+1)})$,

    当$||f(x^{(k+1)})-f(x^(k))||<varepsilon$或者$||x^{(k+1)}-x^{(k)}||<varepsilon$,停止迭代,$x^*=x^{(k+1)}$

    (3)       否则$k=k+1$,转(2)

    当目标函数是凸函数时,梯度下降的解是全局最优解,一般情况下,其解不保证是全局最优解,梯度下降的收敛速度也未必是最快的。

    牛顿法:

    假设$f(x),xin R^{n}$,有二阶的连续偏导数,要求解的无约束最优化问题是:

          $min limits_{xin R^{n}}f(x)$

    $x^*$表示目标函数$f(x)$的极小点。

    由于$f(x)$有二阶连续偏导,因此,可以将$f(x)$在$x=x_k$处泰勒展开:

    $f(x)=f(x^{(k)})+g^{T}_{k}(x-x^{(k)})+frac{1}{2}(x-x^{(k)})^{T}H(x^{(k)})(x-x^{(k)}) (N_1)$

    考虑到$f(x),xin R^{n}$有极值的必要条件是$ riangledown f(x)=0$,

    假设,第k+1次迭代值为$x^{(k+1)}$,假设满足:$ riangledown f(x^{(k+1)})=0$

    由$(N_1)$可得: $ riangledown f(x)=g_{k}+H_k(x-x^{(k)})$

    于是:$ riangledown f(x^{(k+1)})=g_k+H_k(x^{(k+1)}-x^{(k)})=0$

    所以,可得迭代方程为:$x^{(k+1)}=x^{(k)}-H_{k}^{-1}g_k$

    算法-牛顿法

    输入:目标函数$f(x)$,梯度$g(x)= riangledown f(x)$,海赛矩阵$H(x)$,精度

    输出:$f(x)$的极小值点$x^*$

    (1)       取初始值$x^{(0)}$,k=0

    (2)       计算$g_k=g(x^{(k)})$

    (3)       若$||g_k||<varepsilon$,停止计算,返回近似解$x^*=x^{(k)}$

    (4)       计算$H_k=H(x^{(k)})$

    (5)       $x^{(k+1)}=x^{(k)}-H_{k}^{-1}g_k$

    (6)       令 $k=k+1$,转(2)

    其中,求$H_{k}^{-1}$的计算比较复杂,所以,在这个基础上,有改进办法。主要的思想是使用一个矩阵来近似$H^{-1}$,详细过程会在后面总结,此处不详细说。

    拉格朗日对偶性

    前面梯度下降和牛顿法都是解决无约束条件的最优化问题的办法,但是,要是遇到了有约束的最优化问题,就得将约束条件考虑进来。

    (1)原始问题

    假设$f(x),c_{i}(x),h_j(x),xin R^{n}$,是连续可微函数,考虑约束最优化问题:

        $min limits_{xin R^{n}}f(x)$

    $s.t. c_i(x)leq 0,i=1,2,3...,k$

              $h_j(x)=0,i=1,2,3...,l$

    引进广义拉格朗日函数:

             $L(x,a,b)=f(x)+sum_{i=1}^{k}a_ic_i(x)+sum_{j=1}^{l}b_jh_j(x)$

    记  $ heta_p(x)=max limits_{a,b:a_igeq 0} L(x,a,b)$

    当且仅当$ heta_p(x)$满足问题的约束条件时,$ heta_p(x)=f(x)$,否则$ heta_p(x)=+infty$

    当满足约束条件的情况下,再求$min limits_{xin R^{n}} heta_p(x)$将等价于求$min limits_{xin R^{n}}f(x)$

    将$ heta_p(x)=max limits_{a,b:a_igeq 0} L(x,a,b)$代入,将得到:

    $min limits_{xin R^{n}} heta_p(x)=min limits_{xin R^{n}} max limits_{a,b:a_igeq 0} L(x,a,b) (L)$

    上面的问题(L)被称为拉格朗日函数的极小极大值问题。

    (2)对偶问题:

    定义$max limits_{xin R^{n}} heta_D(x)=max limits_{a,b:a_igeq 0} min limits_{xin R^{n}} L(x,a,b)$是$(L)$的对偶问题。其中$max limits_{a,b:a_igeq 0} min limits_{xin R^{n}} L(x,a,b)$被称为拉格朗日函数的极大极小值问题。

     

    所以,上面的定义可以描述如右:拉格朗日函数的极大极小值问题是极小极大值问题的对偶问题。(我在这里有一个疑惑:拉格朗日函数的极小极大值问题是极大极小值问题的对偶问题么?

    拉格朗日对偶性的想法是,希望能够找到一个条件,能够让原始问题和对偶问题同解。然后,就有人去找了,此处省略10000字。最终,他们找到了这个条件,称为对偶互补条件,又称为KKT(Karush-Kuhn-Tucker条件。

    假设$f(x),c_{i}(x)$是凸函数,$h_j(x)$是仿射函数(见注释),$x^*,a^*,b^*$是原始问题和对偶问题的解的充要条件如下:

    $ riangledown_xL(x^*,a^*,b^*)=0$

    $ riangledown_aL(x^*,a^*,b^*)=0$

    $ riangledown_bL(x^*,a^*,b^*)=0$

    $a^{*}_{i}c_{i}(x^*)=0, i=1,2,3....,k$

    $c_{i}(x^*)leq 0, i=1,2,3....,k$

    $a^{*}_{i}geq 0, i=1,2,3....,k$

    $h_{j}(x^*)=0, i=1,2,3....,l$

    特别地若$a^{*}_{i}>0$,$c_{i}(x^*)=0$

    注:仿射函数即由1阶多项式构成的函数,一般形式为 f (x) = A x + b,这里,A 是一个 m×k 矩阵,x 是一个 k 向量,b是一个m向量,实际上反映了一种从 k 维到 m 维的空间映射关系。

    在满足KKT条件的情况下,可以将原始问题转化成对偶问题来求解,这时候,可以根据KKT条件和对偶性来简化原始问题。具体的例子,将会在求解SVM的目标函数中看到。

    参考文献:

    (1)李航 《统计学习方法》

    (2)维基百科

    转载请注明:http://www.cnblogs.com/weibao/p/5557796.html

    有任何问题,请联系weibao798@gmail.com

  • 相关阅读:
    GitFlow 工作流指南
    第一个 Spring Boot 应用程序
    Spring Boot MyBatis
    JavaScript的并且&&
    利用JavaScript的%读分秒
    利用JavaScript的%做隔行换色
    利用JavaScript制作计算器
    利用JavaScript制作简易日历
    javascript实现选项卡切换的4种方法
    循环
  • 原文地址:https://www.cnblogs.com/weibao/p/5557796.html
Copyright © 2011-2022 走看看