这篇讲下我对这两个方法的理解。
Momentum动量
首先讲动量方法,它的基本迭代通常可以表述为
(1)
这里的 表示衰减因子,可以理解为对以前方向的依赖程度,注意到如果 ,那就变成了普通的梯度方法了。有时会看到下面这种写法:
其实这是一样的。 这里我想推导下另外一种等价形式。
然后我们引入一个中间变量 ,并令它满足
这样我们就得到了新的迭代形式
(2)
Nesterov加速
Nesterov加速方法的基本迭代形式为
(3)
和动量方法的区别在于二者用到了不同点的梯度,动量方法采用的是上一步 的梯度方向,而Nesterov加速方法则是从 朝着 往前一步。 一种解释是,反正要朝着 方向走,不如先利用了这个信息,这个叫未卜先知。 接下来我来推导出第二种等价形式
然后引入中间变量 ,使得它满足
然后得到第二种等价形式
(4)
这可以理解为,先走个梯度步,然后再走个加速步。 我最早了解到Nesterov加速方法就(4)这种形式,看很多优化方面的文章,都是(4)这种形式,比如在FISTA方法中。 (3)这种形式是在看深度学习相关文献时了解到的,一开始看到二者的不同有点懵逼,后面才知道二者是等价的,这下就舒畅了。