優化與訓練

小批量(mini-batch)

/ MIN-ee batch /

小批量,是一小撮訓練樣本,被當作一組一起處理,然後模型才更新一次自己。它是兩個極端之間的明智折中:一次只看一個樣本(在現代硬體上既抖又慢),與每次更新前都把整個資料集看一遍(準確,卻慢如冰川)。一個小批量——比如32、128或256個樣本——既能給你一個像樣的「該往哪邁步」的估計,又能讓你頻繁地邁步。

為什麼要成批處理?現代處理器(GPU之類)天生就是為並行地處理大量數字而造的。餵給它一個樣本,浪費了它絕大部分能力;餵給它一批,則能讓它忙起來。模型在這一批的所有樣本上算出損失,把梯度(建議的調整量)取平均,再據這個平均值做一次更新。批量越大,更新方向越平滑、越可靠;批量越小,則越帶雜訊,但每一步更快,而且往往泛化得還略好一點。

批量大小是一個貨真價實、需要你去調的旋鈕,而不是可以忽略的細節。太小,訓練會帶雜訊、收斂緩慢;太大,你可能得重新調學習率,吃掉更多記憶體,而那份額外的精確甚至可能損害泛化。它沒有一個放之四海皆準的最佳值——這取決於模型、資料,以及你負擔得起的硬體,所以人們才會在幾個選擇上來回試。

一個五萬張圖片的資料集,小批量大小取100,意味著模型處理100張圖片、做一次權重更新,再抓下一批100張——把整個資料集過一遍要做500次更新。把批量提到500,每過一遍就只有100次更新,但每次都基於一個更穩的平均值。

批量大小,是在「更新頻率」與「更新品質」之間做權衡。

批量大小與學習率是綁在一起的:批量翻倍,往往就得把學習率也調高。只改一個不改另一個,是訓練突然失靈的一個經典原因。

又稱
batchmini-batch size小批量批量小批次批次