深入了解梯度下降算法

一、目标函数:

      首先明确一下本文的符号使用:向量用粗体表示,标量用普通的字母表示,例如: 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) 分别是函数对 x y求偏导的结果。相信学过微积分的同学对这个式子会有映像。

我们的目标是在函数空间中移动一定的距离 h h趋向于零),即 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 方向上的投影。所以当 f u 方向相同时, |f|cos<f,u>=|f| ,函数增长最快; f u 方向相反时, |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 ,斜率在 fk c2fk 之间的 f(xk+αkpk) pk 的内积 f(xk+αkpk)pk 会大于 fkpk (最快下降),小于 c2fkpk 所以满足曲率条件可以保证斜率 f(xk+αkpk) 不在 fk c2fk 之间。从而 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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值