當前位置:
首頁 > 最新 > 如何改進梯度下降演算法

如何改進梯度下降演算法

作者:Devin Soni

編譯:weakish

編者按:梯度下降兩大痛點:陷入局部極小值和過擬合。Towards Data Science博主Devin Soni簡要介紹了緩解這兩個問題的常用方法。

介紹

基於梯度下降訓練神經網路時,我們將冒網路落入局部極小值的風險,網路在誤差平面上停止的位置並非整個平面的最低點。這是因為誤差平面不是內凸的,平面可能包含眾多不同於全局最小值的局部極小值。此外,儘管在訓練數據上,網路可能到達全局最小值,並收斂於所需點,我們無法保證網路所學的概括性有多好。這意味著它們傾向於過擬合訓練數據。

有一些手段有助於緩解這些問題,不過並沒有絕對地預防這些問題產生的方法。這是因為網路的誤差平面一般很難穿越,而神經網路整體而言很難解釋。

隨機梯度下降與mini-batch隨機梯度下降

這些演算法改編了標準梯度下降演算法,在演算法的每次迭代中使用訓練數據的一個子集。SGD在每權重更新上使用一個樣本,mini-batch SGD使用預定義數目的樣本(通常遠小於訓練樣本的總數)。這大大加速了訓練,因為我們在每次迭代中沒有使用整個數據集,它需要的計算量少得多。同時,它也有望導向更好的表現,因為網路在訓練中斷斷續續的移動應該能讓它更好地避開局部極小值,而使用一小部分數據集當有助於預防過擬合。

正則化

正則化基本上是一個懲罰模型複雜度的機制,它是通過在損失函數中加入一個表示模型複雜度的項做到這一點的。在神經網路的例子中,它懲罰較大的權重,較大的權重可能意味著神經網路過擬合了訓練數據。

最左:欠擬合;最右:過擬合

若網路的原損失函數記為,正則化常數記為,則應用了L2正則化後,損失函數改寫為如下形式:

正則化在損失函數中加入了網路的每個權重的平方和,以懲罰給任何一個連接分配了過多權重的模型,希望能降低過擬合程度。

動量

簡單來說,動量在當前權重更新上加上一小部分前次權重更新。這有助於預防模型陷入局部極小值,因為即使當前梯度為0,之前梯度絕大多數情況下不為0,這樣模型就不那麼容易陷入極小值。另外,使用動量也使誤差平面上的移動總體上更為平滑,而且移動得更快。

基於這一簡單的動量概念,我們可以重寫權重更新等式至如下形式(為動量因子):

還有其他一些更高級的動量形式,比如Nesterov方法

學習率退火

我們可以不在整個訓練過程中使用同一學習率,而是隨著時間的進展降低學習率,也就是退火。

最常見的退火規劃基於1/t關係,如下圖所示,其中Tμ為給定的超參數,μ為當前學習率:

這經常被稱為「搜索並收斂」(search-then-converge)退火規劃,因為直到t達到T之前,網路都處於「搜索」階段,學習率沒有下降很多,在此之後,學習率減慢,網路進入「收斂」階段。這和探索(exploitation)利用(exploration)間的平衡多多少少有些關係。剛開始我們優先探索搜索空間,擴展我們關於空間的整體知識,隨著時間的推進,我們過渡到利用搜索空間中我們已經找到的良好區域,收縮至特定的極小值。

結語

這些改進標準梯度下降演算法的方法都需要在模型中加入超參數,因而會增加調整網路所需的時間。最近提出的一些新演算法,比如AdamAdagradAdadelta,傾向於在每個參數的基礎上進行優化,而不是基於全局優化,因此它們可以基於單獨情況精細地調整學習率。在實踐中,它們往往更快、更好。下圖同時演示了之前提到的梯度下降變體的工作過程。注意看,和簡單的動量或SGD相比,更複雜的變體收斂得更快。

GIF

原文地址:https://towardsdatascience.com/improving-vanilla-gradient-descent-f9d91031ab1d


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 論智 的精彩文章:

面試了10家公司,這是我能記住的所有問題
獨立循環神經網路:打造更長更深的RNN

TAG:論智 |