機器學習的應用是乙個高度依賴經驗的過程,伴隨著大量迭代的過程,你需要訓練諸多模型,才能找到合適的那乙個,優化演算法能夠幫助你快速訓練模型。
向量化能夠讓你有效地對所有m個樣本進行計算,允許你處理整個訓練集。
我們要把訓練樣本放大巨大的矩陣x當中去,$} = [}}}...}]$,y也是如此,$y = [}}}...}]$,所以x的維數是$(,m)$,y的維數是$(1,m)$。
向量化能夠讓你相對較快地處理所有m個樣本。如果m很大的話,處理速度仍然緩慢。比如說,如果m是 500 萬或者更大的乙個數,在對整個訓練集執行梯度下降法時,你要做的是,你必須處理整個訓練集,然後才能進行一步梯度下降法,然後你需要再重新處理 500 萬個訓練樣本,才能進行下一步梯度下降法。所以如果你在處理完整個 500 萬個樣本的訓練集之前,先讓梯度下降法處理一部分,你的演算法速度會更快。
可以把訓練集分割為小一點的子集訓練,這些子集被取名為 mini-batch,假設每乙個子集中只有 1000 個樣本,那麼把其中的$}$到$}$ 取出來,將其稱為第乙個子訓練集,也叫做 mini-batch,然後你再取出接下來的 1000 個樣本,從$}$到$}$,然後再取 1000個樣本,以此類推。
$}$到$}$用$ }}$表示;
$}$到$}$用$ }}$表示。
如果你的訓練樣本一共有 500 萬個,每個 mini-batch 都有 1000 個樣本,也就是說,你有 5000 個mini-batch,因為 5000 乘以 1000 就是 5000 萬。你共有 5000 個 mini-batch,所以最後得到是$ }}$,對y也要進行相同處理,你也要相應地拆分y的訓練集,所以這是$ }}$,一直到$ }}$。mini-batch 的數量組成了$}\} }}$和$}\} }}$,這就是 1000 個訓練樣本,包含相應的輸入輸出對。$ }}$,$ }}$以此類推。因此所有的子集維數都是$(,1000)$ ,而這些$}\} }}$的維數都是$(1,1000)$。
batch 梯度下降法指的是我們之前講過的梯度下降法演算法,就是同時處理整個訓練集,這個名字就是**於能夠同時看到整個 batch 訓練集的樣本被處理,這個名字不怎麼樣,但就是這樣叫它。
相比之下,mini-batch 梯度下降法,你每次同時處理的單個的 mini-batch$}\} }}$和$}\} }}$,而不是同時處理全部的x和y訓練集。
在訓練集上執行 mini-batch 梯度下降法,你執行 for t=1……5000,因為我們有 5000 個各有 1000 個樣本的組,在 for 迴圈裡你要做得基本就是對$}\} }}$和$}\} }}$執行一步梯度下降法。假設你有乙個擁有 1000 個樣本的訓練集,而且假設你已經很熟悉一次性處理完的方法,你要用向量化去幾乎同時處理 1000 個樣本。
首先對輸入也就是$}\} }}$執行前向傳播,然後執行$} = }}\} }} + }$ ,然後執行$} = }(})$。之所以用大寫的z是因為這是乙個向量。$} = }(})$ ,這就是你的**值。注意這裡你需要用到乙個向量化的執行命令,這個向量化的執行命令,一次性處理 1000 個而不是 500 萬個樣本。
接下來你要計算損失成本函式j,因為子集規模是 1000,$j = \frac}\sum\nolimits_^l ^},})}$,這裡$^},})}$ 指的是來自於 mini-batch$}\} }}$和$}\} }}$中的樣本。
如果你用到了正則化,你也可以使用正則化的術語:
$ }} = \frac}\sum\nolimits_^l ^},})} + \frac}\sum\nolimits_l \right\|} _f^2$,其實跟之前我們執行梯度下降法如出一轍,除了你現在的物件不是x和y而是$}\} }}$和$}\} }}$,接下來,你執行反向傳播來計算$ }}$的梯度,你只是使用$}\} }}$和$}\} }}$,然後你更新加權值:
$}: = } - ad}$
$}: = } - ad}$
使用 batch 梯度下降法,一次遍歷訓練集只能讓你做乙個梯度下降,使用 mini-batch 梯度下降法,一次遍歷訓練集,能讓你做 5000 個梯度下降。當然正常來說你想要多次遍歷訓練集,還需要為另乙個 while 迴圈設定另乙個 for 迴圈。所以你可以一直處理遍歷訓練集,直到最後你能收斂到乙個合適的精度。
梯度下降之MiniBatch與並行化方法
問題的引入 考慮乙個典型的有監督機器學習問題,給定m個訓練樣本s 通過經驗風險最小化來得到一組權值w,則現在對於整個訓練集待優化目標函式為 其中引入l2正則,即在損失函式中引入 注意單個樣本引入損失為 並不用除以m 正則化的解釋 這裡的正則化項可以防止過擬合,注意是在整體的損失函式中引入正則項,一般...
深度學習(7) Mini batch梯度下降法
在前面的學習當中,對於神經網路的每次迭代,我們都是以整個訓練集x為單元進行訓練。這種訓練方法也叫batch梯度下降法。由於跑完整個x後才能更新引數,當資料量較大時,每次迭代的時間會非常長。batch梯度下降法的代價函式一定會嚴格遞減。為例減小每次跌打的時間,我們試圖縮小每次迭代的資料量 在這個方法中...
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...