1. 程式人生 > 其它 >Mini-batch 梯度下降(Mini-batch gradient descent)

Mini-batch 梯度下降(Mini-batch gradient descent)

1 Mini-batch 梯度下降(Mini-batch gradient descent

向量化能夠讓你相對較快地處理所有m個樣本。如果m很大的話,處理速度仍然緩慢,如果m500 萬或 5000 萬或者更大的一個數,在對整個訓練集執行梯度下降法時,你要做的是,你必須處理整個訓練集,然後才能進行一步梯度下降法,所以如果你在處理完整個 500 萬個樣本的訓練集之前,先讓梯度下降法處理一部分,你的演算法速度會更快。

我們可以把訓練集分割為小一點的子集訓練,這些子集被取名為 mini-batch,假設每一個子集中只有 1000 個樣本,那麼把其中的x(1)x(1000)取出來,稱為X{1},將其稱為第一個子訓練集,也叫做

mini-batch,然後你再取出接下來的 1000 個樣本,從x(1001)x(2000),稱為X{2}然後再取 1000個樣本,以此類推,每個 mini-batch 都有 1000 個樣本。對Y也要進行相同處理,你也要相應地拆分Y的訓練集,所以這是Y{1},然後從y(1001)y(2000),這個叫Y{2},一直到Y{5000}

上角小括號(i)表示訓練集裡的值,所以x(i)是第i個訓練樣本,我們用了上角中括號[l]來表示神經網路的層數,z[l]表示神經網路中第l層的z值,我們現在引入了大括號t來代表不同的mini-batch,所以我們有X{t}Y{t}X{t}Y{t}的維數:如果X{1}是一個有 1000 個樣本的訓練集,或者說是

1000 個樣本的x值,所以維數應該是(nx, 1000)X{2}的維數應該是(nx, 1000),以此類推,因此所有的子集維數都是(nx, 1000),而這些(Y{t})的維數都是(1,1000)

mini-batch 梯度下降法,指的是每次同時處理的單個的 mini-batch X{t}Y{t},而不是同時處理全部的XY訓練集.首先對輸入也就是X{t},執行前向傳播,然後執行z[1] = w[1]x+ b[1],你在處理第一個 mini-batch,時它變成了X{t},即z[1] = w[1]x{t}+ b[1],然後執行A[1]k= g[1](Z[1]),之所以用大寫的Z是因為這是一個向量內涵,以此類推,直到

A[L]= g[L](Z[L]),這就是我們的預測值;接下來你要計算損失成本函式J,因為子集規模是 1000,,指的是來自於 mini-batchX{t}Y{t}中的樣本,如果你用到了正則化,可以使用正則化的術語,因為這是一個 mini-batch 的損失,所以我將J損失記為上角標t,放在大括號裡,接下來,你執行反向傳播來計算J{t}的梯度,你只是使用X{t}Y{t},然後你更新加權值,w實際上是w[t],更新為:w[l]:=w[l]=adw[l],對b做相同處理:b[l]:=b[l]=adb[l]

使用 batch 梯度下降法時,每次迭代你都需要歷遍整個訓練集,可以預期每次迭代成本都會下降,所以如果成本函式J是迭代次數的一個函式,它應該會隨著每次迭代而減少,如果J在某次迭代中增加了,那肯定出了問題,也許你的學習率太大。使用 mini-batch 梯度下降法,則並不是每次迭代都是下降的,會出現一些擺動,但整體趨勢是向下的,它不會總朝向最小值靠近,但它比隨機梯度下降要更持續地靠近最小值的方向。

如果訓練集較小,直接使用 batch 梯度下降法,你可以快速處理整個訓練集,比如少於2000個樣本。在 mini-batch 中,要確保X{t}Y{t},要符合 CPU/GPU 記憶體,取決於你的應用方向以及訓練集的大小。

本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15058835.html