Deep Learning
Optimizers
optimizers 通用參數(shù)
待優(yōu)化參數(shù):, 目標(biāo)函數(shù):, 初始learning rate:
-
在每一個epoch t 中:
計算目標(biāo)函數(shù)關(guān)于當(dāng)前參數(shù)的梯度: [圖片上傳失敗...(image-33816e-1552923429589)]
根據(jù)歷史梯度計算一階動量和二階動量:[圖片上傳失敗...(image-9748e9-1552923429589)],
計算當(dāng)前時刻的下降梯度: [圖片上傳失敗...(image-8ac494-1552923429589)]
根據(jù)下降梯度進行更新: [圖片上傳失敗...(image-1a5e0a-1552923429589)]
SGD
- 一階動量:; 二階動量:
- 下降梯度:
現(xiàn)在通用的SGD通常指代mini-batch SGD溉箕,其迭代次數(shù)為每個batch的個數(shù)盅视。對于每次迭代,SGD對每個batch求樣本的梯度均值然后進行梯度更新瓮栗。
$$w_{t+1} = w_t - a \cdot \frac {1} {n} \sum \nabla f(w_t)$$
SGD-Momentum
- 一階動量:
- 一階動量是哥哥時刻梯度方向的指數(shù)移動平均值,約等于最近個時刻的梯度向量和的平均值
- 主要由此前累積的下降方向所決定
AdaGrad
自適應(yīng)學(xué)習(xí)率
- 二階動量::迄今為止所有梯度的平方和
- 梯度下降:
實質(zhì)上,learning rate 由 變成了 隨著迭代時候二階動量越大蛔六,學(xué)習(xí)率越小
RMSProp
只關(guān)注過去一段時間的梯度變化而非全部變化荆永,這里區(qū)別于AdaGrad。避免二階動量持續(xù)累積国章,導(dǎo)致訓(xùn)練提前結(jié)束具钥。
- 二階動量:
Adam
adaptive + Momentum
結(jié)合了一階動量和二階動量
- 一階動量:
- 二階動量:
實際使用過程,參數(shù)默認(rèn):
Comparison
- Adam收斂問題
- 由于RMSProp和Adam的二階動量是固定時間窗口的累積捉腥,隨著時間窗口變化氓拼,遇到的數(shù)據(jù)可能發(fā)生巨變,是的可能會時大時小抵碟,不是單調(diào)變化桃漾。這在后期的訓(xùn)練有可能導(dǎo)致模型無法收斂。
- 修正方法:
- 由于RMSProp和Adam的二階動量是固定時間窗口的累積捉腥,隨著時間窗口變化氓拼,遇到的數(shù)據(jù)可能發(fā)生巨變,是的可能會時大時小抵碟,不是單調(diào)變化桃漾。這在后期的訓(xùn)練有可能導(dǎo)致模型無法收斂。
- 錯過全劇最優(yōu)解問題
-
自適應(yīng)學(xué)習(xí)率算法可能會對前期的特征過擬合拟逮,后期才出現(xiàn)的特征難以糾正前期的擬合效果
- 修正方法:充分shuffle數(shù)據(jù)集
- 盡管收斂速度快撬统,但是收斂的效果沒有SGD好。主要因為后期的學(xué)習(xí)速率太低了敦迄,影響有效收斂恋追。
- 修正方法:對Adam的學(xué)習(xí)率下界做約束。
-
自適應(yīng)學(xué)習(xí)率算法可能會對前期的特征過擬合拟逮,后期才出現(xiàn)的特征難以糾正前期的擬合效果
- 核心差異:下降方向
- SGD下降方向就是該位置的梯度的反方向
- 帶一階動量的SGD下降方向就是該位置一階動量的方向
- 自適應(yīng)學(xué)習(xí)率算法每個參數(shù)設(shè)定了不同的學(xué)習(xí)率罚屋,在不同維度上設(shè)定不同的步長苦囱。因此其下降方向為scaled的一階動量方向
- Adam + SGD組合策略
- 繼承了Adam的快速收斂和SGD的精度收斂
- 數(shù)據(jù)是稀疏的(分類問題),可以優(yōu)先考慮自適應(yīng)學(xué)習(xí)率算法脾猛∷和回歸問題SGD通常更好
Batch Normalization
優(yōu)勢:
- 減少了人為選擇參數(shù)。在某些情況下可以取消 dropout 和 L2 正則項參數(shù),或者采取更小的 L2 正則項約束參數(shù)猛拴;
- 減少了對學(xué)習(xí)率的要求「Γ現(xiàn)在我們可以使用初始很大的學(xué)習(xí)率或者選擇了較小的學(xué)習(xí)率,算法也能夠快速訓(xùn)練收斂愉昆;
- 可以不再使用局部響應(yīng)歸一化职员。BN 本身就是歸一化網(wǎng)絡(luò)(局部響應(yīng)歸一化在 AlexNet 網(wǎng)絡(luò)中存在)
- 破壞原來的數(shù)據(jù)分布,一定程度上緩解過擬合(防止每批訓(xùn)練中某一個樣本經(jīng)常被挑選到跛溉,文獻(xiàn)說這個可以提高 1% 的精度)焊切。
- 減少梯度消失,加快收斂速度倒谷,提高訓(xùn)練精度蛛蒙。
算法流程:
下面給出 BN 算法在訓(xùn)練時的過程
輸入:上一層輸出結(jié)果 X=x1,x2,...,xm,學(xué)習(xí)參數(shù) γ,β
- 計算上一層輸出數(shù)據(jù)的均值渤愁,其中牵祟,m 是此次訓(xùn)練樣本 batch 的大小。
?
- 計算上一層輸出數(shù)據(jù)的標(biāo)準(zhǔn)差
?
- 歸一化處理抖格,得到
?
其中 ? 是為了避免分母為 0 而加進去的接近于 0 的很小值
- 重構(gòu)诺苹,對經(jīng)過上面歸一化處理得到的數(shù)據(jù)進行重構(gòu)咕晋,得到
?
其中,γ,β 為可學(xué)習(xí)參數(shù)收奔。
注:上述是 BN 訓(xùn)練時的過程掌呜,但是當(dāng)在投入使用時,往往只是輸入一個樣本坪哄,沒有所謂的均值 μβ 和標(biāo)準(zhǔn)差 σ2β质蕉。此時,均值 μβ 是計算所有 batch μβ 值的平均值得到翩肌,標(biāo)準(zhǔn)差 σ2β 采用每個batch σ2β 的無偏估計得到模暗。