这篇文章主要介绍梯度下降、牛顿法和拉格朗日对偶性的过程和一些原理的证明。
梯度下降:
假设$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