相關課件:https://download.csdn.net/download/haoyutiangang/10495508
2.1 Mini-batch 梯度下降法
原因: 大數據集時,執行一次循環時間很長,梯度下降很慢;
mini-batch 是指將大數據集 n分成一系列小數據集m,每計算一個小數據集就執行一次梯度下降,這樣一次大數據集的計算可以下降n/m 次,從而增加梯度下降的速度。
- 執行一次小數據集爲一次 mini-batch
- 執行一次大數據集爲一次 epoch
mini-batch 使用上角標{i}表示,例如 Zi表示第一個 mini-batch中的 Z
2.2 理解 mini-batch 梯度下降法
mini-batch梯度: 小幅震動,總體下降
- batch梯度下降:
- 對所有m個訓練樣本執行一次梯度下降,每一次迭代時間較長;
- Cost function 總是向減小的方向下降。
- 隨機梯度下降:
- 對每一個訓練樣本執行一次梯度下降,但是丟失了向量化帶來的計算加速;
- Cost function總體的趨勢向最小值的方向下降,但是無法到達全局最小值點,呈現波動的形式。
- Mini-batch梯度下降:
- 選擇一個1 < size < m的合適的size進行Mini-batch梯度下降,可以實現快速學習,也應用了向量化帶來的好處。
- Cost function的下降處於前兩者之間。
選擇 mini-batch 的大小
- 小數據集(m<2000) 選用 batch 梯度下降
- 大數據集選取:2^6, 2^7, 2^8, 2^9, 2^10 (都嘗試一下選用最優的)
- Mini-batch的大小要符合CPU/GPU內存,且爲2冪次。
2.3 指數加權平均
爲了介紹下面的優化算法,需要先理解指數加權平均,又叫指數加權移動平均。
公式:
vt=βvt−1+(1−β)θt
β 爲對過去的權重,1-β 爲對當前值的權重,組合爲移動加權平均。
結果大體相當於平均了近 1/(1-beta) 天的值, 例如 β = 0.95 相當於平均了近20天的值
2.4 理解指數加權平均
一般來說有
(1−ε)1/ε=e1
上文說 β = 0.9 則 ε = 1 - 0.9 = 0.1 也就是 0.910=1/e, 經過10天左右權重下降到1/e,所以大體平均了1/ε=1/(1−β) 天的數值。
- 指數加權平均算法僅需要一行代碼,一個 catch 來保存上次計算的結果即可。
- 如果直接用前幾天的平均數則需要保存幾個 catch, 運算也較爲複雜。
2.5 指數加權平均的偏差修正
由於加權平均的執行的前期,歷史幾天的數據不足(比如第一天執行時就沒有之前幾天的歷史數據), 所以會造成前期數值很小的情況。
- 偏差修正
vtvt=βvt−1+(1−β)θt=1−βtvt
經過修正後,前期的值不在變得很小,並且後期修正逐漸趨向於1, 從而和不修正的後期重合。
實際過程中,一般直接忽略前期偏差的影響,不用修正偏差。
2.6 動量(Momentum)梯度下降法
Momentum:計算梯度的指數加權移動平均v,用這個值來更新參數。
梯度下降如上圖藍線所示,梯度下降過程中有縱向波動,由於這種波動的存在,我們只能採取較小的學習率,否則波動會更大。
而使用動量梯度下降法(指數加權平均)後,經過平均,相當於抵消了上下波動,使波動趨近於零(如圖中紅線所示),這樣就可以採用稍微大點的學習率加快梯度下降的速度。
算法實現
vdWWvdbb=βvdW+(1−β)dW:=W−αvdW=βvdb+(1−β)db:=b−αvdb
2.7 RMSprop(root mean square prop)
另一種抵消波動加快梯度下降的算法
利用 S 來更新參數
SdWWSdbb=β2SdW+(1−β2)dW2:=W−αSdW+εSdW=β2Sdb+(1−β2)db2:=b−αSdb+εSdb
- 與 Momentum 區別:平方後的指數加權平均,更新參數時再開方
- 爲了與 Momentum 的參數 β (β1) 相區分,這裏使用β2
- ε 的出現是防止除數爲0,一般 ε=10−8 即可
2.8 Adam 優化算法
Adam: adaptive moment estimation.
Adam = Momentum(表示第一距) + RMSprop(表示第二矩)
initialization:VdWVdbSdWSdbWbVdw=0,Vdb=0,SdW=0,Sdb=0=β1VdW+(1−β1)dW=β1Vdb+(1−β1)dbVdWcorrected=1−β1tVdWVdbcorrected=1−β1tVdb=β2SdW+(1−β2)dW2=β2Sdb+(1−β2)db2SdWcorrected=1−β2tSdWSdbcorrected=1−β2tSdb:=W−αSdWcorrected+εVdWcorrected:=b−αSdbcorrected+εVdbcorrected
超參數的選擇
- α: 需要進行調試
- β1: 推薦 0.9,dW 的加權平均
- β2: 推薦 0.999,dW2 的加權平均
- ε: 推薦 10−8,防止除數爲0
2.9 學習率衰減
我們採用 mini-batch 算法時,設置一個固定的學習率 α, 由於樣本缺失會造成一定幅度的波動,很難收斂,會在最低點附近波動。
如果設置一個較小的學習率,則起初下降太慢。
爲了下降快起初學習率可以比較大,爲了收斂學習率應該逐漸變小,這就是學習率衰減。
學習率衰減的實現
epoch: 一次樣本的全集,多個 mini-batch
epoch_num: 第幾次 epoch
-
常用
α=1+decay_rate∗epoch_num1α0
-
指數衰減
α=0.95epoch_numα0
-
其他
α=epoch_numkα0
-
離散衰減
α=21α0
-
手動衰減
- 數據量小時,感覺下降慢了,自己手動修改 α
2.10 局部最優的問題
低維情況下可能出現多個極小值,也就是局部最優解。
高維情況下出現極小值的概率很小,因爲極小值要求每個參數的導數在這裏都是極小值,比如20000維,導數爲0時都是極小值的概率很小2−20000,更大可能出現部分極小值部分極大值的情況,我們稱爲鞍點。
- 幾乎不可能陷入局部最小值點,更多是鞍點
- 處於鞍點的平穩區會減緩梯度下降速度,利用 Adam 等算法可以得到改善。