批次大小 是什麼?

Batch Size:批次大小 的完整解釋

批次大小是訓練時每次更新模型參數所使用的樣本數,直接影響訓練速度、記憶體用量與模型收斂穩定性

容易混淆

批次大小 vs Epoch? 批次大小:每次更新前看的樣本數 Epoch:整個訓練集看過幾輪 最關鍵的區別:批次大小看一次看幾筆,Epoch 看全資料跑幾次

批次大小 vs 學習率? 批次大小:決定梯度估計的穩定度 學習率:決定參數往哪個方向走多大步 最關鍵的區別:批次大小管資料量,學習率管步伐大小

批次大小 vs Mini-batch? 批次大小:可分成小批次與全批次 Mini-batch:介於兩者之間的常見做法 最關鍵的區別:Mini-batch 其實就是最常用的批次訓練方式

記住這句就好

一次看得越多,更新越穩,但也越吃記憶體

實際案例

GPU 記憶體有限 大模型放不下太大的批次,只好把 batch size 調小,避免訓練時爆記憶體

訓練抖動 如果 loss 上下波動很大,可能是批次太小,梯度估計太吵

算法與應用

重點 你要看什麼 為什麼重要
小批次 更新快、雜訊大 有時泛化較好但較不穩
大批次 更新穩、吃記憶體 訓練吞吐高但可能要調學習率
選擇 看硬體與任務 沒有一個固定萬用答案

中英對照與三種批次方式

中文 英文 一次用幾筆資料更新
批次大小 batch size 統稱,指一次餵幾筆
全批次梯度下降 batch gradient descent 全部資料
隨機梯度下降 stochastic gradient descent 1 筆
小批次梯度下降 mini-batch gradient descent 通常 32 到 512 筆

現在講 SGD 時,實際指的幾乎都是小批次版本,純粹一次一筆的做法在深度學習裡已經沒人用。

批次大小怎麼選,取捨在哪

批次大小 梯度估計 訓練速度 記憶體 泛化
小(16 到 64) 雜訊大 每步快、總步數多 通常較好
大(512 以上) 穩定 每步慢、總步數少、能吃滿 GPU 吃重 可能較差

大批次泛化較差的現象很有名,一般的解釋是小批次的梯度雜訊本身有正則化效果,會把參數推離尖銳的極小值,落到較平坦的區域,而平坦區域對應較好的泛化。

一個實務上一定要知道的規則:改批次大小就要改學習率。

常見做法是線性縮放律(linear scaling rule):批次大小乘 k 倍,學習率也乘 k 倍。另一個常見版本是乘根號 k。無論用哪一個,只調批次不調學習率幾乎一定會讓訓練變差,很多人以為是大批次不好,其實是學習率沒跟著調。

大批次還需要搭配暖身(warmup):一開始用很小的學習率跑幾百步再升到目標值,否則初期梯度不穩定會直接發散。

顯存不夠時的解法是梯度累積(gradient accumulation)。 跑好幾個小批次、把梯度加起來、最後才更新一次,效果等同於一個大批次,代價只是時間。這讓小顯存的機器也能複現大批次的訓練設定。

相關術語

常見問題

批次大小怎麼選?

先看硬體能放多少,再用驗證集測試穩定性與效果。

批次大小會影響泛化嗎?

會,較小批次常帶來較大雜訊,有時反而有助泛化。

Batch size 和 mini-batch 一樣嗎?

在很多語境裡 mini-batch 就是指實務上常用的那個批次大小。