Mini-batch 梯度下降(Mini-batch gradient descent)
1 Mini-batch 梯度下降(Mini-batch gradient descent)
向量化能夠讓你相對較快地處理所有m個樣本。如果m很大的話,處理速度仍然緩慢,如果m是 500 萬或 5000 萬或者更大的一個數,在對整個訓練集執行梯度下降法時,你要做的是,你必須處理整個訓練集,然後才能進行一步梯度下降法,所以如果你在處理完整個 500 萬個樣本的訓練集之前,先讓梯度下降法處理一部分,你的演算法速度會更快。
我們可以把訓練集分割為小一點的子集訓練,這些子集被取名為 mini-batch,假設每一個子集中只有 1000 個樣本,那麼把其中的x(1)到x(1000)取出來,稱為X{1},將其稱為第一個子訓練集,也叫做
上角小括號(i)表示訓練集裡的值,所以x(i)是第i個訓練樣本,我們用了上角中括號[l]來表示神經網路的層數,z[l]表示神經網路中第l層的z值,我們現在引入了大括號t來代表不同的mini-batch,所以我們有X{t}和Y{t}。X{t}和Y{t}的維數:如果X{1}是一個有 1000 個樣本的訓練集,或者說是
mini-batch 梯度下降法,指的是每次同時處理的單個的 mini-batch X{t}和Y{t},而不是同時處理全部的X和Y訓練集.首先對輸入也就是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是因為這是一個向量內涵,以此類推,直到
使用 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