在開始assignment之前派任,要先馬一個(gè)國外大神對(duì)于gradient descent optimization algorithm的總結(jié):http://sebastianruder.com/optimizing-gradient-descent/index.html#fnref:1
Gradient Descent
(1) SGD
SGD的問題在于涯塔,在很多情況下收斂速度過慢,考慮如下情況:
在flat的方向上過慢汞舱,而在steep的方向上上下幅度過大導(dǎo)致收斂過程異常緩慢。為了解決這個(gè)問題,有人提出了Momentum Update
(2) Momentum update
Andrej大神教我們?nèi)绾稳ダ斫膺@個(gè)momentum(動(dòng)量)宝穗。首先我們的loss function在這個(gè)field內(nèi)就像一個(gè)小球,它需要force產(chǎn)生加速度码秉,從而有速度逮矛。gradient就相當(dāng)于加速度,v就是速度转砖,那么mu*v就是friction须鼎。也就是說為了讓小球能穩(wěn)定下來,我們需要一個(gè)friction來達(dá)到steady state府蔗。mu就是momentum晋控,表示雖然我們希望改變梯度,但是要保留原來的值贡避,好比慣性一樣示启,和當(dāng)前計(jì)算得出的改變量做一個(gè)tradeoff居扒。mu可以取0.5,0.9,0.99等...
當(dāng)然有人在momentum基礎(chǔ)上又做了一步改進(jìn),就是
NAG的意義在于蝌焚,向前多“觀測”了一步裹唆,這樣調(diào)整過程可以更快速。
(3) AdaGrad
這樣的意義在于只洒,當(dāng)我們發(fā)現(xiàn)原來在steep方向上下降速度過快(可以從累積的cache體現(xiàn))许帐,這樣的scale down做法就可以減緩這個(gè)方向的下降速度,從而減小jiggle毕谴,加快收斂成畦。但是問題是,過了一些迭代之后“小球”就停下來了涝开,這并不是我們想要的羡鸥,尤其是在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的時(shí)候。Hinton在12年對(duì)這個(gè)算法做出了改進(jìn)忠寻。加入了leaky:
這樣的好處在于解決了當(dāng)cache過大的時(shí)候惧浴,梯度下降不再繼續(xù)的尷尬。 比較funny的一點(diǎn)在于奕剃,Hinton本人并沒有發(fā)表文章衷旅,只是在他po在coursera的課上的一個(gè)slide里面提到...之后有人在論文里只好引用這個(gè)slide...哈哈哈6666,Hinton都不屑于發(fā)這種東西了是嘛……
(4) Adam Update
Adam: combining momentum update and RMSProp
Andrej說一般來講beta1取0.9纵朋,beta2取0.995柿顶。
(5) 關(guān)鍵是 Learning decay rate over time!
通常這些exponential decay用于sgd。
(6) Second order optimization methods
nice feature: no learning rate操软,可以由hessian矩陣更直接的知道該向最速下降方向走多少嘁锯。
兩種常見的second order optimization: BFGS and L-BFGS