訓練與最佳化

批次大小

批次大小是最佳化器在對權重做一次更新前看多少個訓練樣本。它位於三項考量的交叉點——每次梯度估計的品質、模型泛化得多好,以及你用掉多少記憶體與計算——而妥善權衡這些,是訓練大型視覺模型的核心。直覺上,小批次像是問幾個人的意見就立刻行動:快速且頻繁,但吵雜。大批次像是先民調上千人:每個決定都消息充分而穩定,但你做決定的次數少得多。

雜訊效應是精確的。小批次梯度是批次上的平均,而該平均的變異數對批次大小 m 大致按 1/m 縮放,所以批次變四倍會使梯度雜訊減半(標準誤按 1/√m 下降)。因此較大批次給出更平滑、更可靠的梯度,讓你能安全地使用較大學習率。這促成了線性縮放法則(Goyal 等人,「一小時訓練 ImageNet」):當你把批次乘以 k 時,學習率也乘以 k,並用暖身撐過較大的早期步長。此法則讓同一模型能在數百張 GPU 上以極大批次、用幾乎相同的週期數訓練。

泛化是更微妙的一軸。Keskar 等人觀察到「大批次泛化落差」:極大批次傾向收斂到尖銳極小值,能擬合訓練集卻泛化較差,而小批次額外的梯度雜訊把模型推向更平坦、更穩健的極小值。此效應真實但非絕對——細心的學習率縮放、暖身與更長訓練能彌補大半落差——但這正是為何單純為了速度把批次調大,可能悄悄損及測試準確率。

記憶體是視覺中的硬性限制。前向傳遞的激活值必須儲存以供反向傳播使用,而該儲存量隨批次大小與影像解析度線性增長,所以高解析度的偵測或分割模型每張 GPU 可能只塞得下 1 到 4 的批次。標準的變通做法是梯度累積(在一次更新前把數個微批次的梯度加總,在小硬體上模擬大批次),以及當涉及批次正規化時要小心,因為極小批次會使其逐批統計量很吵——這常是改用層、群組或同步批次正規化的理由。

真正重要的是「有效批次大小」:它等於每張 GPU 的批次 ×GPU 數量 × 梯度累積步數。兩次有效批次相同但拆分方式不同的訓練應該表現相近——除了批次正規化,它只看得到每張 GPU 的批次,除非你用同步 BN。

又称
mini-batch sizeeffective batch size