Stanford cs231n #2 Parameter Update

在开始assignment之前,要先马一个国外大神对于gradient descent optimization algorithm的总结:http://sebastianruder.com/optimizing-gradient-descent/index.html#fnref:1

Gradient Descent

(1) SGD

Stanford cs231n #2 Parameter Update_第1张图片
Paste_Image.png

SGD的问题在于,在很多情况下收敛速度过慢,考虑如下情况:

Stanford cs231n #2 Parameter Update_第2张图片
Paste_Image.png

在flat的方向上过慢,而在steep的方向上上下幅度过大导致收敛过程异常缓慢。为了解决这个问题,有人提出了Momentum Update

(2) Momentum update

Stanford cs231n #2 Parameter Update_第3张图片
Paste_Image.png

Andrej大神教我们如何去理解这个momentum(动量)。首先我们的loss function在这个field内就像一个小球,它需要force产生加速度,从而有速度。gradient就相当于加速度,v就是速度,那么mu*v就是friction。也就是说为了让小球能稳定下来,我们需要一个friction来达到steady state。mu就是momentum,表示虽然我们希望改变梯度,但是要保留原来的值,好比惯性一样,和当前计算得出的改变量做一个tradeoff。mu可以取0.5,0.9,0.99等...

当然有人在momentum基础上又做了一步改进,就是

Stanford cs231n #2 Parameter Update_第4张图片
Paste_Image.png

NAG的意义在于,向前多“观测”了一步,这样调整过程可以更快速。

(3) AdaGrad

Stanford cs231n #2 Parameter Update_第5张图片
Paste_Image.png

这样的意义在于,当我们发现原来在steep方向上下降速度过快(可以从累积的cache体现),这样的scale down做法就可以减缓这个方向的下降速度,从而减小jiggle,加快收敛。但是问题是,过了一些迭代之后“小球”就停下来了,这并不是我们想要的,尤其是在训练深度神经网络的时候。Hinton在12年对这个算法做出了改进。加入了leaky:

Stanford cs231n #2 Parameter Update_第6张图片
Paste_Image.png

这样的好处在于解决了当cache过大的时候,梯度下降不再继续的尴尬。 比较funny的一点在于,Hinton本人并没有发表文章,只是在他po在coursera的课上的一个slide里面提到...之后有人在论文里只好引用这个slide...哈哈哈6666,Hinton都不屑于发这种东西了是嘛……

(4) Adam Update

Adam: combining momentum update and RMSProp

Stanford cs231n #2 Parameter Update_第7张图片
Paste_Image.png

Andrej说一般来讲beta1取0.9,beta2取0.995。

(5) 关键是 Learning decay rate over time!

Stanford cs231n #2 Parameter Update_第8张图片
Paste_Image.png

通常这些exponential decay用于sgd。

(6) Second order optimization methods

nice feature: no learning rate,可以由hessian矩阵更直接的知道该向最速下降方向走多少。

Stanford cs231n #2 Parameter Update_第9张图片
Paste_Image.png

两种常见的second order optimization: BFGS and L-BFGS

你可能感兴趣的:(Stanford cs231n #2 Parameter Update)