基於梯度下降的優化演算法對比

2021-10-07 02:59:05 字數 2619 閱讀 7986

主要介紹小批量梯度下降演算法、動量梯度下降演算法、rmsprop演算法、adam演算法,結論:這四種優化演算法預設選擇adam優化演算法。

梯度下降演算法包含全批量梯度下降、小批量梯度下降、隨機梯度下降演算法。全批量梯度下降演算法每次訓練處理的是全部的資料集,當在訓練樣本數量龐大的時候,一次迭代耗時過長,而且在此過程中只做一次梯度下降。而小批量梯度下降每次訓練mini_batch_size條資料,在乙個週期中將所有的樣本訓練一次,進行了更多次的梯度下降。因此在對神經網路模型優化時使用小批量梯度下降演算法更為合適。當mini_batch_size的大小為1時就是隨機梯度下降,當mini_batch_size的大小為整個訓練集時就是全批量梯度下降。在神經網路演算法中,常常使用隨機梯度下降來表示小批量梯度下降演算法。

隨機梯度下降的關鍵為梯度使用小規模的樣本近似估計,實現的時候就是在演算法的每一步,在訓練集中隨機選取乙個小批量樣本,使用這個小批量樣本的梯度均值作為整體樣本的梯度估計,然後進行梯度下降。

演算法1展示了該演算法具體進行梯度下降的過程。

使用隨機梯度下降法時,損失值並不是一直降低的,這是因為該演算法的梯度估計引入了雜訊[15],因此如果該樣本在進行梯度下降時所指的方向錯誤,則會遠離全域性最小值,不過大部分情況下朝著全域性最小值移動。因此雖然存在雜訊,但是損失值在整體上是呈現降低的趨勢。另外由於雜訊的存在,使用隨機梯度下降法進行優化時一般不會收斂,而是在區域性最小值附近來回波動。對於小批量樣本的數量受儲存器的儲存容量限制,因此將其範圍設定為[(32),(64),(128),(256)],以提高其運算效率。

儘管隨機梯度下降法是當前經常使用的優化方法,不過有時其學習會很慢。引入動量的目的就是加速學習,尤其是應對高曲率、小但方向一致的梯度以及帶雜訊的梯度的情況。動量梯度下降演算法積累歷史梯度指數衰減的移動平均,並且沿該方向下降,其核心就是計算梯度的指數加權平均數,然後利用該梯度估計去更新權重。

演算法2展示了該演算法具體進行梯度下降的過程,其中動量引數設定為0.9。

如果把梯度下降的過程比作小球由山坡滾向山谷的過程,損失值相當於小球當前的高度,優化的過程就是小球滾向山谷的過程。設小球的位置是x,每次移動dx, x處的高度為損失值。那麼普通的梯度下降法對應的小球滾動是這樣的:在出發點a處,計算坡度最陡的方向,沿著該方向移動到b點,然後停下來。在b點再計算坡度最陡的方向,沿該方向走一段再停下,然後重複上述步驟。可以看出小球每到乙個位置都必須停下來,採用類似盲人下山的方式,用拐杖探明坡度最陡的方向,沿此方向移動一步後停下來,重複該過程直到到達山谷。動量梯度下降法對應的小球滾動過程則是在其從某個位置a滾動位置點b時,不停止而是此時小球獲得一定速度,再繼續滾動時,小球在此速度的基礎上繼續滾動,從而加速到達山谷的過程。所以這個過程中含有乙個速度變數,利用該變數更新引數,該變數積累最近的梯度資訊,當梯度方向一致時,速度增快從而加速收斂;當梯度方向不一致時,可以達到減小路徑的曲折程度的效果。

隨機梯度下降演算法和動量梯度下降演算法都是對引數向量進行整體操作,對向量每個元素的調整都是一樣的,而所有的元素要同時調整到乙個較優的學習率是很困難的,需要經過反覆測試,耗費大量的計算資源,因此自適應的調整學習率,甚至是逐引數的自適應調整學習率是當下研究的熱點。這些方法一般會引入新的超引數,但是訓練集對這些超引數不敏感,引數設定比較容易。

凸優化中的adagrad演算法能自適應調整學習率,縮放所有引數反比於其歷史梯度平方值總和的平方根。因此對於高梯度值的引數,其歷史積累和大,等效學習率減小,更新強度減弱;對於低梯度值的權重,其歷史積累和小,等效學習率增大,更新強度增強。最終達到在引數空間中向更為平緩的方向移動的效果。adagrad應用於凸優化問題時可以實現快速收斂,但用於非凸函式優化時,adagrad由於從訓練初期就開始積累梯度平方然後調整學習率,可能會使得學習率在達到區域性最小值之前就變得相當小了。因此凸優化時該演算法可取得令人滿意的效果,但是在對深度神經網路模型進行訓練時,即進行非凸優化時會使有效學習率過早和過度的減小。rmsprop演算法丟棄過遠的歷史梯度資訊,使用最近的梯度資訊以改進adagrad演算法,使其在非凸優化時仍可以取得較好的效果。rmsprop演算法利用指數衰減平均進而摒棄過遠的歷史梯度,使其可以在找到區域性最優值後保證有效學習率不會變得過小,進而加快神經網路的訓練速度。

演算法3展示了該演算法具體進行梯度下降的過程。

adam演算法是逐引數自適應調整學習率的又一演算法,該演算法將動量引入rmsprop演算法中。該演算法中,動量直接用於梯度一階矩(指數加權)的估計,但這並沒有明確的理論動機。另外,rmsprop的非中心的二階矩不包含偏置修正,因此初期會有很高的偏置,adam演算法進行了偏置修正,修正一階矩和非中心的二階矩估計,該演算法被證實對神經網路以及更加廣泛的結構進行優化時可以取得不錯的效果。

演算法4展示了該演算法具體進行梯度下降的過程。

對於獲取優化演算法接近收斂時的迭代次數,借鑑sklearn中神經網路演算法的實現,若連續10次沒有達到優化最小目標(損失至少下降1e-5),則判定為已經找到近收斂點。

通過上述方法可以大致比較下這四種優化演算法收斂的速度快慢。

梯度下降及優化演算法

全量梯度下降法bgd batch gradient descent 隨機梯度下降法sgd stochastic gradient descent 小批量梯度下降法 mini batch gradient descent momentum梯度下降法 nag梯度下降法 兩者的關係可以這樣理解 隨機梯度下...

最優化演算法 梯度下降

梯度下降演算法,參考edwin 最優化導論 8.2章節,演算法採用go語言實現。此處演算法仍然存在疑惑,主要是獲取梯度下降時如何確定步長,即使採用割線法獲取最優步長,那麼割線法的初始值又如何確定?下面程式中雖然採用了牛頓法獲取極值,但非常依賴初始取值範圍!filename grad.go autho...

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...