編者按:梯度下降兩大痛點:陷入局部極小值和過擬合。 Towards Data Science博主Devin Soni簡要介紹了緩解這兩個問題的常用方法。
介紹基於梯度下降訓練神經網路時, 我們將冒網路落入局部極小值的風險, 網路在誤差平面上停止的位置並非整個平面的最低點。 這是因為誤差平面不是內凸的, 平面可能包含眾多不同於全域最小值的局部極小值。 此外, 儘管在訓練資料上, 網路可能到達全域最小值, 並收斂於所需點, 我們無法保證網路所學的概括性有多好。 這意味著它們傾向於過擬合訓練資料。
有一些手段有助於緩解這些問題,
這些演算法改編了標準梯度下降演算法,
在演算法的每次反覆運算中使用訓練資料的一個子集。
SGD在每權重更新上使用一個樣本,
mini-batch SGD使用預定義數目的樣本(通常遠小於訓練樣本的總數)。
這大大加速了訓練,
因為我們在每次反覆運算中沒有使用整個資料集,
它需要的計算量少得多。
同時,
它也有望導向更好的表現,
因為網路在訓練中斷斷續續的移動應該能讓它更好地避開局部極小值,
而使用一小部分資料集當有助於預防過擬合。
正則化基本上是一個懲罰模型複雜度的機制,
它是通過在損失函數中加入一個表示模型複雜度的項做到這一點的。
在神經網路的例子中,
它懲罰較大的權重,
較大的權重可能意味著神經網路過擬合了訓練資料。
最左:欠擬合;最右:過擬合
若網路的原損失函數記為L(y, t), 正則化常數記為λ, 則應用了L2正則化後, 損失函數改寫為如下形式:
正則化在損失函數中加入了網路的每個權重的平方和, 以懲罰給任何一個連接分配了過多權重的模型, 希望能降低過擬合程度。
動量簡單來說, 動量在當前權重更新上加上一小部分前次權重更新。
基於這一簡單的動量概念,
還有其他一些更高級的動量形式, 比如Nesterov方法。
學習率退火我們可以不在整個訓練過程中使用同一學習率, 而是隨著時間的進展降低學習率, 也就是退火。
最常見的退火規劃基於1/t關係, 如下圖所示, 其中T和μ0為給定的超參數, μ為當前學習率:
這經常被稱為“搜索並收斂”(search-then-converge)退火規劃, 因為直到t達到T之前, 網路都處於“搜索”階段, 學習率沒有下降很多, 在此之後, 學習率減慢, 網路進入“收斂”階段。 這和探索(exploitation)與利用(exploration)間的平衡多多少少有些關係。 剛開始我們優先探索搜索空間, 擴展我們關於空間的整體知識, 隨著時間的推進, 我們過渡到利用搜索空間中我們已經找到的良好區域, 收縮至特定的極小值。
結語這些改進標準梯度下降演算法的方法都需要在模型中加入超參數,因而會增加調整網路所需的時間。最近提出的一些新演算法,比如Adam、Adagrad、Adadelta,傾向於在每個參數的基礎上進行優化,而不是基於全域優化,因此它們可以基於單獨情況精細地調整學習率。在實踐中,它們往往更快、更好。下圖同時演示了之前提到的梯度下降變體的工作過程。注意看,和簡單的動量或SGD相比,更複雜的變體收斂得更快。
收縮至特定的極小值。結語這些改進標準梯度下降演算法的方法都需要在模型中加入超參數,因而會增加調整網路所需的時間。最近提出的一些新演算法,比如Adam、Adagrad、Adadelta,傾向於在每個參數的基礎上進行優化,而不是基於全域優化,因此它們可以基於單獨情況精細地調整學習率。在實踐中,它們往往更快、更好。下圖同時演示了之前提到的梯度下降變體的工作過程。注意看,和簡單的動量或SGD相比,更複雜的變體收斂得更快。