天天看點

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

Mini-batch

  1. Mini-batch是一個一次訓練資料集的一小部分,而不是整個訓練集的技術。它可以使記憶體較小、不能同時訓練整個資料集的電腦也可以訓練模型。

    Mini-batching 從運算角度來說是低效的,因為你不能在所有樣本中計算 loss。但是這點小代價也比根本不能運作模型要劃算。它跟随機梯度下降(SGD)結合在一起用也很有幫助。

    方法是在每一代訓練之前,對資料進行随機混洗,然後建立 mini-batches,對每一個 mini-batch,用梯度下降訓練網絡權重。因為這些 batches 是随機的,你其實是在對每個 batch 做随機梯度下降(SGD)。

  2. 假設 mini-batch 大小為 1,就有了新的算法,叫做随機梯度下降法,每個樣本都是獨立的 mini-batch,當你看第一個 mini-batch,也就是𝑋{1}和𝑌{1},如果 mini-batch 大小為 1,它就是你的第一個訓練樣本,這就是你的第一個訓練樣本。接着再看第二個mini-batch,也就是第二個訓練樣本,采取梯度下降步驟,然後是第三個訓練樣本,以此

    類推,一次隻處理一個。

  3. 首先,如果訓練集較小,直接使用 batch 梯度下降法,樣本集較小就沒必要使用 mini-batch 梯度下降法,你可以快速處理整個訓練集,是以使用 batch 梯度下降法也很好,這裡的少是說小于 2000 個樣本,這樣比較适合使用 batch 梯度下降法。不然,樣本數目較大的話,一般的 mini-batch 大小為 64 到 512,考慮到電腦記憶體設定和使用的方式,如果 mini-batch 大小是2 的𝑛次方,代碼會運作地快一些,64 就是2 的6 次方,以此類推,128 是2 的7 次方,256 是2 的 8 次方,512 是 2 的9 次方。是以我經常把 mini-batch 大小設成 2 的次方。在上一個視訊裡,我的 mini-batch 大小設為了 1000,建議你可以試一下 1024,也就是2 的10 次方。也有mini-batch 的大小為1024,不過比較少見,64 到512 的mini-batch 比較常見。

指數權重平均數

  1. 什麼是指數權重平均

指數權重平均(exponentially weighted averges),也叫指數權重移動平均,是一種常用的序列資料處理方式。

它的計算公式如下:

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

其中,

θ_t:為第 t 天的實際觀察值,

V_t: 是要代替 θ_t 的估計值,也就是第 t 天的指數權重平均值,

β: 為 V_{t-1} 的權重,是可調節的超參。( 0 < β < 1 )

例如:

我們有這樣一組氣溫資料,圖中橫軸為一年中的第幾天,縱軸為氣溫:

直接看上面的資料圖會發現噪音很多,

這時,我們可以用 指數權重平均 來提取這組資料的趨勢,

按照前面的公式計算:

這裡先設定 β = 0.9,首先初始化 V_0 = 0,然後計算出每個 V_t:

  

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

将計算後得到的 V_t 表示出來,就得到紅色線的數值:

可以看出,紅色的資料比藍色的原資料更加平滑,少了很多噪音,并且刻畫了原資料的趨勢。

指數權重平均,作為原資料的估計值,不僅可以 1. 撫平短期波動,起到了平滑的作用,

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

可以看出,紅色的資料比藍色的原資料更加平滑,少了很多噪音,并且刻畫了原資料的趨勢。

指數權重平均,作為原資料的估計值,不僅可以 1. 撫平短期波動,起到了平滑的作用,

  1. 為什麼在優化算法中使用指數權重平均

上面提到了一些 指數權重平均 的應用,這裡我們着重看一下在優化算法中的作用。

以 Momentum 梯度下降法為例,

Momentum 梯度下降法,就是計算了梯度的指數權重平均數,并以此來更新權重,它的運作速度幾乎總是快于标準的梯度下降算法。

這是為什麼呢?

讓我們來看一下這個圖,

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

例如這就是我們要優化的成本函數的形狀,圖中紅點就代表我們要達到的最小值的位置,

假設我們從左下角這裡出發開始用梯度下降法,那麼藍色曲線就是一步一步疊代,一步一步向最小值靠近的軌迹。

可以看出這種上下波動,減慢了梯度下降法的速度,而且無法使用更大的學習率,因為如果用較大的學習率,可能會偏離函數的範圍。

如果有一種方法,可以使得在縱軸上,學習得慢一點,減少這些擺動,但是在橫軸上,學習得快一些,快速地從左向右移移向紅點最小值,那麼訓練的速度就可以加快很多。

這個方法就是動量 Momentum 梯度下降法,它在每次計算梯度的疊代中,對 dw 和 db 使用了指數權重平均法的思想,

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

這樣我們就可以得到如圖紅色線的軌迹:

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

可以看到:

縱軸方向,平均過程中正負擺動互相抵消,平均值接近于零,擺動變小,學習放慢。

橫軸方向,因為所有的微分都指向橫軸方向,是以平均值仍然較大,向最小值運動更快了。

在抵達最小值的路上減少了擺動,加快了訓練速度。

  1. β 如何選擇?

根據前面的計算式子:

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

将 V_{100} 展開得到:

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

這裡可以看出,V_t 是對每天溫度的權重平均,之是以稱之為指數權重,是因為權重系數是随着時間以指數形式遞減的,時間越靠近,權重越大,越靠前,權重越小。

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

再來看下面三種情況:

當 β = 0.9 時,指數權重平均最後的結果如圖紅色線所示,代表的是最近 10 天的平均溫度值;

當 β = 0.98 時,指結果如圖綠色線所示,代表的是最近 50 天的平均溫度值;

當 β = 0.5 時,結果如下圖黃色線所示,代表的是最近 2 天的平均溫度值;

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數
深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

β 越小,噪音越多,雖然能夠很快的适應溫度的變化,但是更容易出現奇異值。

β 越大,得到的曲線越平坦,因為多平均了幾天的溫度,這個曲線的波動更小。

但有個缺點是,因為隻有 0.02 的權重給了當天的值,而之前的數值權重占了 0.98 ,

曲線進一步右移,在溫度變化時就會适應地更緩慢一些,會出現一定延遲。

通過上面的内容可知,β 也是一個很重要的超參數,不同的值有不同的效果,需要調節來達到最佳效果,一般 0.9 的效果就很好。

  1. 指 數 加 權 平 均 的 偏 差 修 正

    在機器學習中,在計算指數權重平均數的大部分時候,大家不在乎執行偏差修正,因為大部分人甯願熬過初始時期,拿到具有偏差的估測,然後繼續計算下去。如果你關心初始時期的偏差,在剛開始計算指數權重移動平均數的時候,偏差修正能幫助你在早期擷取更好的估測。

深度學習筆記(二):2優化算法(一)Mini-batch和指數權重平均數Mini-batch指數權重平均數

在估測初期不用v_t,而是v_t/(1-β^t),也就是𝜃1和𝜃2的權重平均數,并去除了偏差。你會發現随着𝑡增加,𝛽𝑡接近于 0,是以當𝑡很大的時候,偏差修正幾乎沒有作用.是以當𝑡較大的時候,紫線基本和綠線重合了

繼續閱讀