優化算法演化歷程
機器學習和深度學習中使用到的優化算法的演化歷程如下:
SGD –> Momentum –> Nesterov –> Adagrad –> Adadelta –> Adam –> Nadam
演化過程 | 原因 |
---|---|
SGD –> Momentum | 由於SGD在優化過程中容易產生震盪,爲減小震盪,Momentum在梯度下降過程中引入了動量,使之具有慣性 |
Momentum –> Nesterov | 對梯度項進行矯正,使梯度下降方向由積累的動量和假設走到下一步的梯度兩部分決定的 |
Nesterov –> Adagrad | Adagrad中引入二階動量,使之能夠自適應調節學習率 |
Adagrad –> Adadelta | 由於Adagrad 使用了之前所有梯度的平方,會導致訓練到後面梯度爲0,因此,在Adadelta中只用前面一段時間的下降梯度的配方 |
Adadelta –> Adam | 在梯度更新中,使用了動量,並且能夠自適應調節學習率 |
Adam –> Nadam | 引入了Nesterov 動量項 |
各優化算法的公式與特點
SGD
公式:
特點:
- 僅由當前所在的梯度來決定參數如何更新
- 梯度下降過程中容易出現震盪
Momentum
公式:
特點:
- 引入動量,減小SGD在梯度下降過程中的震盪
- 梯度下降過程中,之前的動量也對當前運動有影響
Nesterov
公式:
特點:
- 在Momentum優化算法的基礎上,對當前梯度值進行矯正
- 矯正方式爲,假設參數往積累的動量方向走了一步時所在位置的梯度作爲當前的梯度值
Adagrad
公式:
特點:
- 適合用於稀疏梯度
- 前期梯度下降較快,後期梯度下降較慢
- 具有自適應學習率
- 訓練後期,由於梯度累計較大,會使訓練提前結束
Adadelta
公式:
特點:
- 在Adagrad基礎上,減小提前結束訓練的風險
Adam
公式:
特點:
- Adam梯度經過偏置校正後,每一次迭代學習率都有一個固定範圍,使得參數比較平穩
- 結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
- 爲不同的參數計算不同的自適應學習率
- 也適用於大多非凸優化問題——適用於大數據集和高維空間
各優化算法的分類
梯度修正 | 優化算法 |
---|---|
沒進入動量,且不具有自適應學習率 | BGD、SGD |
引入動量 | Momentum、Nesterov |
自適應學習率 | Adagrad、Adadelta、RMSprop |
引入動量且自適應學習率 | Adam、Adamx、Nadam |
優化算法使用總結
- 在不考慮優化算法的使用細節及其技巧的情況下,一般使用Adam
- 雖然後面的優化算法都是在SGD上改進而來,但是目前很多paper依舊使用SGD
- 一般在訓練時,數據都要進行shuffle
- 幾種優化算法並不一定哪一個絕對好,視模型和數據而定