批次大小 是什麼?
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 就是指實務上常用的那個批次大小。