深入了解梯度下降算法

一、目标函数:

      首先明确一下本文的符号使用:向量用粗体表示,标量用普通的字母表示,例如:x表示一个向量,x表示一个标量。

梯度下降算法在优化理论中有着很重要的地位,凭借实现简单、解决最优化问题效果较好并且有很好的普适性等优点梯度下降算法在机器学习等领域具有广泛的应用。梯度下降算法通常用来解决无约束最小化问题:

minxRnf(x)

(注意到无约束最大化问题maxxRnf(x)可以通过简单的在目标函数前加负号而转变成无约束最小化问题minxRnf(x),所以只需要讨论最小化问题就行)

梯度下降算法迭代更新变量x的值来寻找目标函数的局部极小值,第k+1 轮迭代时变量的更新规则:

xk+1=xk+α(f)

其中xk是第k轮迭代后变量的值,α是更新步长,f 是目标函数导数(梯度)。

二、问题列表:

要对梯度下降算法有比较全面的了解首先需要回答以下几个问题:

1、为什么负梯度方向就是目标函数减小最快的方向?

2、迭代过程中步长如何选择?

三、梯度方向:

      梯度下降算法看起来很简单,直接对目标函数求导就可以了。但是肯定会有些同学有这样的疑问:为什么负梯度方向就是目标函数减小最快的方向?在此做简单的证明,更严格的证明可以查阅本文最后的参考资料。证明比较简单,不需要用到很高深的数学知识。

先从比较简单的二元函数开始,z=f(x,y),如果f(x,y)(x0,y0)可微,则

f(x0+Δx,y0+Δy)f(x0,y0)=fx(x0,y0)Δx+fy(x0,y0)Δy+o((Δx)2+(Δy)2)

其中ΔxΔy分别是在x轴和y轴方向上移动的距离,也就是在迭代过程中变量的更新量;fx(x0,y0)fy(x0,y0)分别是函数对xy求偏导的结果。相信学过微积分的同学对这个式子会有映像。

我们的目标是在函数空间中移动一定的距离hh趋向于零),即 h=(Δx)2+(Δy)2 固定的条件下使函数f的值下降最多。

因为长度h是固定的,所以总是可以找到某个角度

Δx=hcosα¯,Δy=hcosβ¯

(cosα¯)2+(cosβ¯)2=1,cosβ¯=sinα¯,α¯+β¯=90

替换掉ΔxΔy

limh0f(x0+hcosα¯,y0+hcosβ¯)f(x0,y0)=fx(x0,y0)hcosα¯+fy(x0,y0)hcosβ¯=h[fx(x0,y0)cosα¯+fy(x0,y0)cosβ¯]=h[fx(x0,y0),fy(x0,y0)][cosα¯,cosβ¯]

由于h是固定长度的标量,为了使limh0f(x0+hcosα¯,y0+hcosβ¯)f(x0,y0)最小,只能通过改变cosα¯cosβ¯。 而α¯+β¯=90,其实就只需要确定α¯的值。我们知道
f=[fx(x0,y0),fy(x0,y0)]

u=[cosα¯,cosβ¯],所以

limh0f(x0+hcosα¯,y0+hcosβ¯)f(x0,y0)=hfu

根据向量内积的定义,
fu=|f||u|cos<f,u>=|f|cos<f,u>

f在向量u方向上的投影。所以当fu方向相同时,|f|cos<f,u>=|f|,函数增长最快;fu方向相反时,|f|cos<f,u>=|f|,函数减小最快。
投影

二元函数的情况已经证完了,推广到多元的情况类似,这里就不再赘述了。

四、步长选择:

    步长α的选择对梯度下降算法来说很重要,α过小会导致收敛太慢;α过大容易导致发散。下面介绍几种常用的选择α的方法,其中线性搜索方法理论基础较好,但是在实际中使用没有前两种那么广泛,究其原因主要还是因为前面两种方法使用简单并且在大多数情况下都可以得到满意的效果。

固定常数:

    最简单的方法就是把α固定为一个常数,并且在迭代过程中不改变α的值。这种方法要求α较小,否则容易导致发散而无法收敛。

线性变化:

    另一种简单的方法是在迭代的过程中不断的减小α的值。常用的赋值方法是α=1/k,其中k是迭代的次数。也可以加入平滑因子α=τ/(k+τ),τR

线性搜索算法把步长的选择看做一个优化问题:

ϕ(α)=f(xk+αpk),α>0

其中pk是当前函数负梯度方向,ϕ(α)是步长α的函数,线性搜索方法利用函数ϕ(α)找到一个合适的步长。首先介绍两个条件:Wolfe条件和Goldstein条件,它们是用来判断步长α是否足够好的准则。

有了一个合适的步长αk之后,就可以通过下面的式子更新变量x了:

xk+1=xk+αkpk
1、Wolfe 条件:

Wolfe条件主要包括两点:足够下降曲率条件,在第k+1轮迭代时合适的步长αk的值应该同时满足这两个条件。

1、足够下降条件要求f的函数值减小足够多

f(xk+αkpk)f(xk)+c1αkfkpk,c1(0,1)

图中的l(α)就等于f(xk)+c1αkfkpk。如果新的变量值xk+1=xk+αkpk使得函数值小于等于l(α)那么这个变量值是可以接受的(acceptable)。

足够下降

2、曲率条件要求变量变化不能太小,即xk+αpk不能与xk太接近,否则收敛过慢

f(xk+αkpk)pkc2fkpk,c2(c1,1)

图中的tangent虚线对应斜率fk,其他几条虚线对应斜率c2fk,斜率在 fkc2fk 之间的f(xk+αkpk)pk的内积 f(xk+αkpk)pk 会大于fkpk(最快下降),小于c2fkpk所以满足曲率条件可以保证斜率f(xk+αkpk)不在fkc2fk 之间。从而xk+1不会在xk附近(从图中可以明显观察到),避免收敛过慢。

曲率条件

同时满足Wolfe两个条件的图如下,图中acceptable的区域表示满足Wolfe条件的区域:

Wolfe条件

2、Goldstein 条件:

Goldstein条件和Wolfe很类似,Goldstein条件要求函数值有足够的下降,但是不要下降太多

f(xk)+(1c)αkfkpkf(xk+αkpk)f(xk)+cαkfkpk,c(0,1/2)

两条虚直线夹角之间的α值都满足Goldstein条件。
Goldstein

    在实际应用中,大多数算法都不会完整使用Wolfe条件和Glodstein条件。Backtracking线性搜索是一种比较实用的步长选择算法,它只利用了Wolfe条件的足够下降条件。具体算法如图所示:

Backtracking

Backtracking算法比较简单,它从一个较大的α值开始,不断按比例ρ缩小直到满足足够下降条件,最终得到αk的值。

五、随机(stochastic)梯度下降和Mini-batch梯度下降算法:

    随机梯度下降算法和Mini-batch梯度下降算法都和原始的梯度下降算法类似,只是为了减少计算量,在一次迭代中只使用一个或者几个样本来更新变量x

六、坐标下降(coordinate descent)算法:

    坐标下降算法和梯度下降算法比较类似:坐标下降算法在每一次迭代中在当前点处沿一个坐标方向进行一维搜索 ,固定其他的坐标方向,找到一个函数的局部极小值。在整个过程中依次循环使用不同的坐标方向进行迭代。

坐标下降法

七、参考资料:

Numerical Optimization (Second Edition) by Jorge Nocedal, Stephen J. Wright.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值