成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【DL-CV】更高級的參數(shù)更新/優(yōu)化(一)

tinyq / 2998人閱讀

摘要:對所有參數(shù)更新時應(yīng)用同樣的學(xué)習(xí)率梯度由許多偏導(dǎo)數(shù)組成,對應(yīng)著各個參數(shù)的更新。對于偏導(dǎo)數(shù)大的,我們希望配個小的學(xué)習(xí)率給他對于偏導(dǎo)數(shù)小的,我們希望配個大的學(xué)習(xí)率給他,這樣各個參數(shù)都能獲得大致相同的更新幅度,提高網(wǎng)絡(luò)的健壯性。

后續(xù)【DL-CV】更高級的參數(shù)更新/優(yōu)化(二)

【DL-CV】正則化,Dropout<前篇---后篇>【DL-CV】淺談GoogLeNet(咕咕net)


原版SGD的問題

原味版的SGD(以下稱SGD)是通過死跟負梯度方向來對參數(shù)進行更新的,也就是走一步、停下確定方向、再走一步,如此循環(huán)。非常簡單,非常老實的走法不是麼?但是SGD這個相對簡單的算法在實際使用中還是會產(chǎn)生不少的問題,下面我們來看看最主要的幾個


1??SGD 一旦陷入損失的局部最小值或鞍點(既不是最大值也不是最小值的臨界點)訓(xùn)練將變得緩慢:

作為問題的引入我們先考慮參數(shù)只有一個的情況下?lián)p失關(guān)于該參數(shù)的圖(如上,x軸是該參數(shù),y軸是損失)

當SGD遇到局部最小值時,因為梯度為0,參數(shù)不會更新,最終就卡在局部最小值這個點了

當SGD遇到或接近鞍點時,同樣梯度為0或非常小,參數(shù)也幾乎不會更新,于是也卡在該鞍點

這是一維的情況,在高維的情況下(上千上萬個參數(shù)),局部最小值意味著所有參數(shù)無論往哪個方向走損失都會增大,這其實是非常罕見的事情。而高維情況下的鞍點可以這樣理解,即在該點下某些方向會使損失增大,某些方向會使損失減少;所以在高維情況下遇到鞍點將會是非常常見的事情,在鞍點附近訓(xùn)練速度將會變得緩慢。


2??SGD 對所有參數(shù)更新時應(yīng)用同樣的學(xué)習(xí)率:
梯度由許多偏導(dǎo)數(shù)組成,對應(yīng)著各個參數(shù)的更新。對于偏導(dǎo)數(shù)大的,我們希望配個小的學(xué)習(xí)率給他;對于偏導(dǎo)數(shù)小的,我們希望配個大的學(xué)習(xí)率給他,這樣各個參數(shù)都能獲得大致相同的更新幅度,提高網(wǎng)絡(luò)的健壯性??上GD固定死的學(xué)習(xí)率不能滿足我們的要求


3??SGD 在遇到噪聲時,訓(xùn)練將變得緩慢:
SGD 是通過隨機抽取小批量樣本進行訓(xùn)練的,是對每次損失和梯度的估計(不像批量學(xué)習(xí)一樣全部訓(xùn)練樣本全往里塞獲得真實的損失和估計),當估計中存在噪音,參數(shù)更新的方向會受到影響而偏離,導(dǎo)致訓(xùn)練時間延長


綜上,使用原版的SGD進行參數(shù)更新帶來的體驗并不是那么好(需要更新?lián)Q代啦)。還好的是,偉大的研究人員,或是對原版SGD進行了各種各樣的魔改,或是靈光一閃提出新的更新算法,現(xiàn)在已經(jīng)有多種更高級的參數(shù)更新的方法啦,下面就來看一下

普通動量更新

該方法的關(guān)鍵是引入一個速度的概念。速度這個量將對歷次求得的梯度進行累加,在每次累加時會有一參數(shù)$gamma$對原速度進行衰減處理后再進行累加。參數(shù)更新時,我們不在根據(jù)當前的負梯度方向進行更新,而是根據(jù)當前速度方向更新。這樣引入速度之后 SGD卡在局部最小值和鞍點的問題 會得到有效解決,從而加速訓(xùn)練。

上面的說明不懂沒關(guān)系,看了下面的比喻你便會豁然開朗

想象有一座高山,其高度代表損失值;有一個小球代表著參數(shù),在山的不同點有不同的值;我們的目標是讓小球滾到山底取得最優(yōu)參數(shù)(下山的過程就是訓(xùn)練的過程)。在這種想象下,負梯度就相當于重力在斜面上的分力使得小球有下降的趨勢,小球在下降的過程中因為重力做正功速度會增加;也因為這個速度的存在,小球會安然越過小山谷(對應(yīng)局部最小值)或平原(對應(yīng)鞍點)繼續(xù)下山。當小球真正接近“U型”山底時,小球會在山底來回擺動,最后因為阻力(對應(yīng)參數(shù)$gamma$)而停在山底(參數(shù)訓(xùn)練完成)。

懂了下面就放公式,順便比較SGD和魔改后的SGD,公式中的t代表第t次迭代更新

SGD SGD + 動量
公式(x是待更新參數(shù)) $$x_{t+1}=x_t-alpha abla_xL(x_t)$$ $$v_{t+1}=gamma v_t+alpha abla_xL(x_t)$$$$x_{t+1}=x_t-v_{t+1}$$
代碼實現(xiàn)

至于參數(shù)$gamma$,其存在相當于摩擦力,可使使速度衰減。如果沒有$gamma$,小球到達最后的“U型”山底就不會停下來,訓(xùn)練時參數(shù)可能就收斂不了。$gamma$常為[0.5,0.9,0.95,0.99]中的一個,并且通常為0.9。$gamma$也可以隨著訓(xùn)練的進行而逐漸上升,如剛開始將$gamma$設(shè)為0.5而在后面的多個epoch中慢慢提升到0.99

Nesterov動量

Nesterov動量與普通動量原理上有些許不同(Nesterov動量可以說是普通動量的小升級)。在理論上對于凸函數(shù)Nesterov動量能得到更好的收斂,在實踐中也確實比普通動量表現(xiàn)更好一些。

使用Nesterov動量時,不會計算當前點的梯度,而是先往速度方向步進到下一點,計算這“下一點”的梯度,然后回到原點把這“下一點”的梯度加到速度上,再用累加后的速度在原點上進行步進。這個看似多此一舉的操作并不是無意義的,計算“下一點”的梯度可以看作是對未來位置梯度的預(yù)測從而提前對速度方向進行修正,從而進一步加快訓(xùn)練速度。下面來對比一下普通動量和Nesterov動量:

普通動量 Nesterov動量
圖示
公式 $$v_{t+1}=gamma v_t+alpha abla_xL(x_t)$$$$x_{t+1}=x_t-v_{t+1}$$ $$v_{t+1}=gamma v_t + alpha abla_xL(x_t - gamma v_t)$$$$x_{t+1} = x_t-v_{t+1}$$

這兩個動量更新方法都有效解決了SGD的問題1??

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19802.html

相關(guān)文章

  • DL-CV高級參數(shù)新/優(yōu)化(二)

    續(xù)【DL-CV】更高級的參數(shù)更新(一) 【DL-CV】正則化,Dropout【DL-CV】淺談GoogLeNet(咕咕net) Adagrad 全名 Adaptive gradient algorithm ,翻譯過來就是適應(yīng)梯度算法,該算法能根據(jù)梯度中偏導(dǎo)數(shù)的大小給不同的偏導(dǎo)數(shù)以不同的學(xué)習(xí)率,偏導(dǎo)數(shù)大(小)的給個小(大)的學(xué)習(xí)率,以此來減少參數(shù)更新時的擺動。 其核心是引入一個參數(shù)對歷次的梯度的平方...

    jone5679 評論0 收藏0
  • DL-CV高級參數(shù)新/優(yōu)化(二)

    續(xù)【DL-CV】更高級的參數(shù)更新(一) 【DL-CV】正則化,Dropout【DL-CV】淺談GoogLeNet(咕咕net) Adagrad 全名 Adaptive gradient algorithm ,翻譯過來就是適應(yīng)梯度算法,該算法能根據(jù)梯度中偏導(dǎo)數(shù)的大小給不同的偏導(dǎo)數(shù)以不同的學(xué)習(xí)率,偏導(dǎo)數(shù)大(?。┑慕o個?。ù螅┑膶W(xué)習(xí)率,以此來減少參數(shù)更新時的擺動。 其核心是引入一個參數(shù)對歷次的梯度的平方...

    lemon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<