1. 程式人生 > >深度學習優化器總結

深度學習優化器總結

深度學習(一般指深度神經網路DNN)有幾個關鍵的要素:訓練集,網路結構,損失函式(目標函式),優化方法。這裡記錄一下優化方法相關知識點吧。

1. why using optimizer?

訓練DNN時,我們的目標是更新網路引數以使得損失函式最小化,optimizer就是更新引數的方法。不同的optimizer都遵循一個基本原則:

W = W- \eta \frac{\partial J}{\partial W}

\eta是學習率,也就是每次引數更新的程度。根據是否改變學習率,可以將optimizer分為兩大派別。

2. 學習率固定的optimizer

1) BGD:Batch gradient descent,即在整個訓練集上forward和backward一次,然後更新一次引數。缺點:收斂速度慢,大量重複計算。

2) SGD:Stochastic gradient descent,即在每一個訓練樣本上forward和backward一次,然後更新一次引數。優點:收斂速度快;缺點:波動大。

3) mini-batch SGD:將訓練集分為小的批次(batch),在每一個批次上forward和backward一次,然後更新一次引數。中和了前兩個。一般所說的SGD即為mini-batch SGD。

4) momentum SGD 動量

更新當前引數時既考慮當前梯度,又考慮之前的梯度(稱之為動量)。

\\ g = \frac{\partial J}{\partial W} \\ v = \alpha v - \eta g\\ W = W + v

5) Nesterov SGD 牛頓動量: 

添加了校正因子的momentum, 即先用舊的動量更新一遍引數,然後再依據momentum的流程走。

\\\\ g = \frac{\partial J}{\partial W} \\ W = W + \alpha V\\ V = \alpha V - \eta g\\ W = W + V

上述兩種動量方法都加速了學習速率,牛頓法添加了校正因子,進一步優化了原始動量方法。

3. 改變學習率的optimizer

上述方法學習率均固定,然而選擇學習率又是很困難的,太小會使得收斂速度太慢,訓練花費時間太長,太大又會產生波動(可能會跨過最優點)。可以參考下面兩張圖:

 

1) AdaGrad SGD:

每次迭代都會改變學習率,其目的是在平緩的地方使用大學習率,在陡峭的地方使用小學習率,使得收斂速度快的同時防止波動。r 是更新學習率時用的,由公式可知,越平緩,梯度g越小,r越小,則學習率增大(實現平緩處用大梯度)。\sigma為一個小常數,為了防止分母為0。

其中學習率的改變取決於梯度平方的累積(梯度累積為指數累積)(第二個公式)。

\\ g = \frac{\partial J}{\partial W}\\ r = r + g\cdot g\\ \eta = \frac{\eta}{\sigma + \sqrt{r}}\\ W = W - \eta\cdot g

2) RMSProp SGD:

與AdaGrad類似,改進梯度累積為指數衰減的移動平均,對非凸函式友好。\rho為衰減指數,指的是對於遙遠的過去資訊使用量較小。

\\ r = \rho r + (1-\rho )g\cdot g

3) RMSProp + Nesterov

RMSProp也可以結合動量,既使用了動量又改變了學習率,從兩個方面改進優化演算法。公式如下,紅色部分是RMSProp梯度衰減累積部分,黑色是牛頓動量部分。

\\ W = W + \alpha V \\ g = \frac{\partial J}{\partial W} \\ {\color{Red} r = \rho r + (1-\rho) g \cdot g }\\ {\color{Red} \eta = \frac{\eta}{\sigma+\sqrt{r}} }\\ V = \alpha V - \eta g \\ W = W + V

4) Adam SGD (Momentum + RMSProp):

結合了momentum和RMSProp,同時也引入了修正項(即衰減的指數梯度累積,和衰減的動量累積)

\\ g = \frac{\partial J}{\partial W} \\ v = \rho_1 v + (1- \rho_1)g \\ r = \rho_2 r + (1-\rho_2)g\cdot g \\ {\color{Green}\hat{v} = \frac{v}{1- \rho_1^{2}} } \\ {\color{Green} \hat{r} = \frac{r}{1- \rho_2^{2}} } \\ \eta = \frac{\eta}{\sigma + \sqrt{\hat{r}}} \\ W = W - \eta \hat{v}

一般來說,使用動量且改變學習率,會使得收斂加速且減少波動,因此,adam SGD較為流行。