Nesterov 加速算法

  • 梯度下降
  • 动量梯度下降
  • Nesterov 梯度下降
  • 思考


梯度下降是我们在优化或者深度学习中经常要用到的算法,基于最原始的梯度下降算法,有很多加速算法被提出,今天我们着重介绍Nesterov 加速算法。

Nesterov 加速算法可以在理论上证明有比梯度下降更快的收敛率,本文不会重点介绍收敛率的证明,而是会通过一些推导从几何直观上给出为什么使用Nesterov 的技术可以对原来的算法起到加速的作用。

梯度下降

对于优化目标
nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降
原始的梯度下降的方法是随机选取一个初始点 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_02,然后选取合适的步长按以下公式更新 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_02
nestrove加速随机梯度下降 nesterov加速梯度算法_深度学习_04
可以证明当 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_05nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_06

  • 设函数 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_07 为凸的梯度 nestrove加速随机梯度下降 nesterov加速梯度算法_深度学习_08-利普希茨连续函数
  • 极小值 nestrove加速随机梯度下降 nesterov加速梯度算法_深度学习_09
  • 如果步长 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_10 取为常数 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_11 且满足 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_12

点列 nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_13 的函数值收敛到最优值, 且在函数值的意义下收敛速度为 nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_14. 这里我们不做证明,具体证明可以参考这个PPT

动量梯度下降

在梯度下降中添加动量的想法很简单,想想求凸函数最小值的梯度下降法是一个小球在下山的过程,添加动量就是将小球真的看做一个有质量的小球,每次除了向梯度方向移动,还要沿着原有方向移动一点,这样可以让梯度下降更加平稳地到达极小值点。

nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_15

nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_16

Nesterov 梯度下降

Nesterov 加速算法有很多种不同的表示方式,但基本是等价的,Nesterov算法的想法是在动量算法的基础上,nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_17 是无论如何都要走的距离,那我们就直接用走出去以后前方的梯度来代替动量算法中的当前梯度,更新公式如下:
nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_18
这里我们给出另一个版本的Nesterov加加速算法:
nestrove加速随机梯度下降 nesterov加速梯度算法_深度学习_19
整理后不难发现上式等价于:
nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_20
这与我们最初定义的Nesterov 算法等价,而且我们有当参数满足以下条件时,

nestrove加速随机梯度下降 nesterov加速梯度算法_深度学习_21

可以证明点列 nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_13 的函数值收敛到最优值, 且在函数值的意义下收敛速度为 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_23。 这里我们依然不做证明,具体证明细节可以参考Nesterov加加速算法。我们主要想要介绍的是从知觉上解释为什么使用Nesterov之后算法会变快,虽然算法中看到了前方的梯度后再更新参数,但是正常的动量算法走一步之后也可以看到类似的梯度,从直觉上并不能很好的理解为什么快。接下来我们会将算法变换形式,从而理解Nesterov其实是一种用到了梯度的二阶信息的算法,我认为这是一种更好的理解方式。下面分析的灵感来自比Momentum更快:揭开Nesterov Accelerated Gradient的真面目,但是也许比他的适用范围更广。

首先我们令 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_24 ,这样我们有:
nestrove加速随机梯度下降 nesterov加速梯度算法_算法_25
nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_26 式左右同时加 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_27 可以得到
nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_28

nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_29
这样我们有
nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_30
nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_31 我们有
nestrove加速随机梯度下降 nesterov加速梯度算法_梯度下降_32
nestrove加速随机梯度下降 nesterov加速梯度算法_深度学习_33 带入 nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_34 我们有
nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_35
可以看到这里面第一项就是动量,第二项是梯度,最后一项就是梯度的二阶信息。但是更令人困惑的是,虽然我们可以得到这样一个比较好看的形式,但是这确是 nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_36 的更新方式而不是我们得到的 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_37 ,虽然说后期步长比较短,nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_36nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_37 比较接近,但是为什么 nestrove加速随机梯度下降 nesterov加速梯度算法_nestrove加速随机梯度下降_36 有这样形式好的更新策略但是要用 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_37

思考

  • 迭代公式中 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_42 是否同样有收敛率的保证,或者修改一些迭代条件后能否让 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_42
  • 在一些涉及对偶问题的算法中,对原始变量的更新是使用 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_42 的,只是为了证明方便还是真的 nestrove加速随机梯度下降 nesterov加速梯度算法_人工智能_42
  • 点赞过三后续继续更新硬核内容!