1. 程式人生 > >batch、batch_size、epoch、iteration簡介

batch、batch_size、epoch、iteration簡介

batch_size、epoch、iteration是深度學習中常見的幾個超引數:

(1)batchsize:每批資料量的大小。DL通常用SGD的優化演算法進行訓練,也就是一次(1 個iteration)一起訓練batchsize個樣本,計算它們的平均損失函式值,來更新引數。

(2)iteration:1個iteration即迭代一次,也就是用batchsize個樣本訓練一次。

(3)epoch:1個epoch指用訓練集中的全部樣本訓練一次,此時相當於batchsize 等於訓練集的樣本數。

最初訓練DNN採用一次對全體訓練集中的樣本進行訓練(即使用1個epoch),並計算一次損失函式值,來更新一次權值。當時資料集較小,該方法尚可。後來隨著資料集迅速增大,導致這種方法一次開銷大進而佔用記憶體過大,速度過慢。

後來產生了一次只訓練一個樣本的方法(batchsize=1),稱作線上學習。該方法根據每一個樣本的情況更新一次權值,開銷小速度快,但收到單個樣本的巨大隨機性,全域性來看優化效能較差,收斂速度很慢,產生區域性震盪,有限迭代次數內很可能無法收斂。

目前常用隨機梯度下降SGD來訓練,相當於上述兩個“極端”方法的折中:將訓練集分成多個mini_batch(即常說的batch),一次迭代訓練一個minibatch(即batchsize個樣本),根據該batch資料的loss更新權值。這相比於全資料集訓練,相當於是在尋找最優時人為增加了一些隨機噪聲,來修正由區域性資料得到的梯度,儘量避免因batchsize過大陷入區域性最優。

這種方法存在兩對矛盾。由於一次只分析的一小部分資料,因此整體優化效果與batchsize有關:

batchsize越小,一個batch中的隨機性越大,越不易收斂。然而batchsize越小,速度越快,權值更新越頻繁;且具有隨機性,對於非凸損失函式來講,更便於尋找全域性最優。從這個角度看,收斂更快,更容易達到全域性最優。

batchsize越大,越能夠表徵全體資料的特徵,其確定的梯度下降方向越準確,(因此收斂越快),且迭代次數少,總體速度更快。然而大的batchsize相對來講缺乏隨機性,容易使梯度始終向單一方向下降,陷入區域性最優;而且當batchsize增大到一定程度,再增大batchsize,一次batch產生的權值更新(即梯度下降方向)基本不變。因此理論上存在一個最合適的batchsize值,使得訓練能夠收斂最快或者收斂效果最好(全域性最優點)。

根據現有的調參經驗,加入正則化項BN後,在記憶體容量允許的情況下,一般來說設定一個較大的batchsize值更好,通常從128開始調整。

這裡寫圖片描述

當然,包括超引數對網路優化的影響在內的許多關於的DL理論尚不成熟,大多處在依靠實驗嘗試、觀察、歸納總結的階段。 文章如有明顯錯誤,懇請及時批評指正。

https://blog.csdn.net/nini_coded/article/details/79250703?utm_source=copy