14 - 點解成日聽人講「Mini-Batch 梯度下降」?
深度學習界嘅「打怪升級」主要靠三招:
Batch GD:一次食晒成個資料庫
Stochastic GD (SGD):一啖食一粒
Mini-Batch GD:每啖食一小碗
第三招最受歡迎,原因就係 速度同穩定兼顧。下面用廣東話分段講,例子夠貼地,保證秒懂。
🧠 Mini-Batch 背後嘅直覺
諗吓你要搬 50 噸貨櫃:
一次過搬晒(Batch)— 肌肉拉傷 + 車唔郁
逐件貨逐件搬(SGD)— 行到腳軟都未完
分 200 kg 箱(Mini-Batch)— 幾部手拖叉車、一輪搞掂
同理,計梯度時:
Batch → 每次更新超精準,但計到你瞓著
SGD → 超快,但方向左搖右擺,好似醉酒司機
Mini-Batch → 少少雜訊幫你跳出局部谷,又唔會亂飛
🔁 訓練流程逐步睇
Shuffle:先將成個 dataset 打亂,免得次次同一堆資料黐埋一齊。
切批:例如 50 萬筆,每批 512 筆 ⇒ 977 個 batch。
迴圈:
拎第 k 批 → Forward pass
算 Loss
Backward pass 出梯度
立即更新權重 (optimizer.step)
完一個 epoch 就把所有批行晒;重複幾十個 epoch 直至收斂。
📉 Loss 曲線長乜樣?
Batch:條線靚到似 Excel 趨勢線,超平滑。
SGD:上上落落似股票細價股。
Mini-Batch:輕微鋸齒,但總體向下,好似行山落斜踩到碎石。
呢啲雜訊反而有利:可以跳出鞍點 (saddle point),早啲搵到更好嘅低谷。
🌍 實戰案例
串流平台推薦
3 億用戶行為,JSON 檔加埋幾 TB。
每批 4 024 條紀錄,一晚就可完成 1 個 epoch,用 8 块 GPU 開火。
醫療影像 CT 3D
單張 CT 片就 400 MB。
喺 24 GB GPU 只放得落 2–3 張,所以 batch size 取 2,但仍屬 Mini-Batch。
手機鍵盤語言模型
用戶私隱分散喺手機端 —> federated learning 時每機 mini-batch 32,合併梯度回伺服器。
自動駕駛影片
30 FPS、每秒 7 MB,訓練 CNN-LSTM。
先抽 8 幀成一條序列做一批,既省顯存又保持時間依賴。
✨ Mini-Batch 優點一覽
GPU 親善:矩陣運算先發揮 CUDA 最大吞吐。
記憶體友好:一次淨係載批量資料,超大數據一樣 train 得起。
收斂快:比 Batch 快見成效;比 SGD 稳定。
天然正則化:批與批之間嘅雜訊可防過擬合。
🛠️ 點揀 Batch Size?
情景 | 建議大小 | 解說 |
圖像分類,顯存夠 | 128 / 256 / 512 | 2ⁿ 對齊 GPU warp,速度最佳 |
NLP Transformer(長序列) | 32 / 64 | 序列長耗記憶體,細批防 OOM |
醫療 3D 影像 | 1–8 | 單樣本已巨大,細批亦屬 Mini-Batch |
Tabular + CPU | 1 000–10 000 | 記憶體細,但 CPU cache 食得起大批 |
Tips:
顯存爆?用 Gradient Accumulation:連續算多個微批再一次 step()。
Batch 太細收斂慢?試加 BatchNorm / GroupNorm 稳定分佈。
🔄 與其他方法比較
Batch GD
優:理論收斂最穩
缺:巨量資料難落 RAM;每步耗時長
SGD
優:每步超 快,隨時在線更新
缺:Loss 曲線似心電圖,需細 learning-rate schedule
Mini-Batch
集兩家之長,配合 Adam、SGD-Momentum 幾乎成業界標配
✅ 小結 — 「小組開會」哲學
「大會」(Batch) — 每人發言一次,效率低。
「街訪」(SGD) — 隨機捉人講,方向亂。
「小組會」(Mini-Batch) — 幾個代表快閃開會,結論快而可信。
實務上:只要記得 顯存夠就加大、唔夠就縮細或做 accumulate,再配合 Learning Rate Scheduler,同一套模型都可以喺 Laptop 到雲端 GPU 順利跑通。Mini-Batch 就係你喺效率同準確之間嘅黃金平衡點!🎯