您的位置:首页 > 其它

优化问题中的梯度方法总结

2015-10-20 09:30 260 查看
在常见的优化问题的求解过程中,经常会碰到运用梯度的方法来求得极值点,对于梯度的理解,一开始还停留在本科高数中的简单知识点,这两天通过《Convex optimization》Chapter9的学习+网络资源增进了理解,整理下来。

常用梯度方法:梯度下降法、共轭梯度法(共轭方向法)、投影梯度法、牛顿法

无约束优化问题

这些梯度方法一般被运用于无约束优化问题最值得求解。

minf(x)s.t.∀x∈R\min f(x)\quad s.t.\forall x\in\mathbb R

其中,f(x)f(x) 有一阶连续偏导数。

注:对于梯度的理解,一个曲面在某点处的梯度应该是该曲面的法向量,并且是该曲线增量最快的方向,而在该点处的偏导数应该是在该点处的一个切线

梯度下降法(Gradient Descent)

梯度下降法又叫最速下降法(Steepest Descent)

Algorithm:

1.初始点:x1∈Rn x^1\in\mathbb R^n,允许误差ε>0 \varepsilon\gt 0,令k=1 k=1。

2.计算搜索方向dk=−∇f(xk)d^k=-\nabla f(x^k) ;

3.若∥∥dk∥∥≤ε\left \| d^k \right \| \le \varepsilon,则停止计算,xkx^k为所求极值点;否则,求最优步长λk\lambda _k,使得f(xk+λkdk)=minλf(xk+λdk)f(x^k+\lambda _k d^k)=\min_\lambda f(x^k + \lambda d^k)。

4.令xk+1=xk+λdkx^{k+1}=x^k+\lambda d^k,令k:=k+1k:=k+1,转2。

在上述算法中,搜索方向总是当前迭代点的负梯度方向,即表示总是按照下降最快的方向搜索,方法的名字也就源于此。

共轭梯度法(Conjugate Gradient)

首先,要理解共轭方向。对于共轭方向,有如下定义:

设A是n×nn\times n的对称正定矩阵,对于Rn\mathbb R^n中的两个非零向量d1d^1和d2d^2,

若有d1TAd2=0d^{1^T}Ad^2=0,则称d1d^1和d2d^2关于A共轭。

注:如果A是单位矩阵,则

d1T⋅I⋅d2=0⇒d1T⋅d2=0⇒d1⊥d2 d^{1^T}\cdot I \cdot d^2=0 \Rightarrow d^{1^T}\cdot d^2=0 \Rightarrow d^1 \bot d^2

表明共轭是正交的推广。

对于二次函数情形

minf(x)=12xTAx+bTx+c\min f(x)=\frac12 x^TAx+b^Tx+c

其中x∈Rnx\in \mathbb R^n,A是对称正定矩阵,b∈Rnb\in \mathbb R^n,c是常数。

Algorithm

1.任取初始点x1x^1,精度要求ε\varepsilon,令k=1k=1。

2.令g1=∇f(x1)g_1=\nabla f(x^1),若∥g1∥<ε\left \| g_1 \right \| \lt \varepsilon,停止,x1x^1为所求极小点;

否则,令d1=−g1d^1=-g_1,利用公式λk=−gTkdkdkTAdk(1) \lambda _k=- \dfrac{g_k^T d^k}{{d^k}^T Ad^k}\tag{1}计算λ1\lambda _1,令x2=x1+λ1d1x^2=x^1+\lambda _1d^1。

3.令gk+1=∇f(xk+1)g_{k+1}=\nabla f(x^{k+1}),若 ∥∥gk+1∥∥<ε\left \| g_{k+1} \right \| \lt \varepsilon ,停止,xk+1x^{k+1}为所求极小点;否则,令dk+1=−gk+1+βkdk d^{k+1}=-g_{k+1}+\beta _k d^k,其中βk\beta _k用公式

βk=dkTAgk+1dkTAdk(2)\beta _k=\frac{{d^k}^T Ag_{k+1}}{{d^k}^T Ad^k} \tag{2}计算得到。令k:=k+1k:=k+1。

4.利用公式(1)计算λk\lambda_k,令xk+1=xk+λkdkx^{k+1}=x^k+\lambda _kd^k,转3。

在上面的算法中,(1)式确定了步长,推导过程为:

要求解minλf(xk+λdk)\min _\lambda f(x^k+\lambda d^k)。记φ(λ)=f(xk+λdk)\varphi (\lambda)=f(x^k +\lambda d^k),令φ′(λ)=∇f(xk+λdk)Tdk=0\varphi '(\lambda)=\nabla f(x^k+\lambda d^k)^Td^k=0,即有

[A((xk)+λdk)+b]Tdk=0[A((x^k)+\lambda d^k)+b]^Td^k=0

令gk=λf(xk)=Axk+bg_k=\lambda f(x^k)=Ax^k+b,则有[gk+λAdk]Tdk=0[g_k+\lambda Ad^k]^Td^k=0,化解得到(1)式。

(2)式用于求下一个搜索方向,如何确定βk\beta _k?

迭代式:dk+1=−gk+1+βkdkd^{k+1}=-g_{k+1}+\beta _kd^k

要求dk+1d^{k+1}和dkd^k关于A共轭。则在上式两边同时左乘dkTA{d^k}^TA,得到0=dkTAdk+1=−dkTAgk+1+βkdkTAdk0={d^k}^TAd^{k+1}=-{d^k}^TAg_{k+1}+\beta _k{d^k}^TAd^k化解得到(2)式。

在算法中,我们注意到第2步d1d^1直接使用的是负梯度,这保证了算法朝着下降的方向搜索,但是,在搜索的过程中,就是运用共轭梯度的方法了。

对于一般函数而言,共轭梯度法的整体思路是不变的,只是对(1)(2)式的改动,对于(1)式可以通过牛顿法进行线性搜索得到当前状态下使得函数取最小的步长,对于(2)式,可以根据需求来变更迭代格式,比如常用的FR迭代格式和PRP迭代格式。

FR(Fletcher-Reeves)迭代格式(1964) βi=∥∥gi+1∥∥2∥gi∥2\beta _i=\frac {\left \| g_{i+1}\right \| ^2}{\left \| g_i \right \| ^2}

PRP(Polak,Ribiere and Polyar)(1969) βi=gTi+1(gi+1−gi)gTigi\beta _i=\frac {g_{i+1}^T(g_i+1-g_i)}{g_i^Tg_i}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: