深度學習 · 訓練穩定技巧

Batch Normalization 批次正規化

讓每一層收到的數字分布保持穩定,深層網路才訓練得動、訓練得快。

穩定訓練內部協變量偏移γ、β 可學習大學習率BN vs LayerNorm

💡一句話定義

Batch Normalization(批次正規化)= 在每一層的輸入上,針對「當前這個 mini-batch」算出均值與變異數,把數值拉成 均值 0、標準差 1 的標準分布,再用兩個可學習參數 γ(縮放)、β(平移)還原網路真正需要的尺度。

白話:深層網路的每一層都在被前面層「餵數字」。如果這些數字忽大忽小、分布一直變,後面的層就很難學。BN 的工作,就是在每一層前面裝一個整流器,先把數字整成固定的分布,再交給下一層。

🏃用接力賽來想

沒有 BN:每一棒選手的起跑位置都不一樣——有人在起點、有人已經在終點附近。後面的人根本不知道要從哪開始跑,交接一團亂。

有 BN:每次交棒前都先把選手「歸零」拉回同一條起跑線,每個人都從穩定的位置起跑,整場比賽又快又順。

數學上:把每層輸出標準化成均值 0、標準差 1,再用 γ、β 微調回網路需要的尺度。

🎮互動:看每層分布被拉直

打開 / 關閉 Batch Norm 開關,再按「模擬訓練」。關掉時每層分布會各自漂移(均值亂跑、變異數變大);打開時每層都被壓回 μ≈0、σ≈1。

📊 Batch Normalization 視覺化

看每層輸出分布如何從歪斜 → 標準化

Batch Norm
OFF
切換 BN 開關,觀察每層分布變化
每層隱藏層的輸出分布(直方圖)

🌀它到底解決什麼問題?

深層網路訓練時,前面層的參數一直在更新,於是後面每一層收到的輸入分布也一直在變——這個現象叫做 內部協變量偏移(Internal Covariate Shift, ICS)。後面的層被迫花力氣去追前面層的變化,而不是專心學任務本身,結果就是:學習率不敢調大、訓練慢、容易卡住。

BN 把每一層的輸入「釘」在穩定的分布上,後面的層看到的尺度固定,就能安心學。這帶來幾個實際好處:

可用更大學習率
分布穩定,梯度不易爆炸,收斂更快。
🎯降低初始化敏感
對權重初始值不再那麼挑剔。
🛡️輕微正則化
mini-batch 統計本身帶噪音,略減過擬合。
📉緩解梯度問題
減少梯度消失/爆炸,深層網路更好訓練。

🧮BN 的數學(4 步)

① mini-batch 均值 μB = (1/m) Σ xi
② mini-batch 變異數 σ²B = (1/m) Σ (xi − μB
③ 標準化 x̂i = (xi − μB) / √(σ²B + ε)
④ 縮放平移 yi = γ · x̂i + β ← γ、β 可學習

第 ③ 步把數字壓成標準常態;第 ④ 步的 γ、β 很關鍵——它讓網路「如果標準化過頭了,可以自己還原回去」,所以 BN 不會硬性剝奪網路的表達能力。ε 是一個很小的數,避免除以 0。

⚖️訓練 vs 推論:行為不一樣(必考)

這是 iPAS 最愛考的細節:BN 在訓練推論時用的統計量不同。

階段用哪個統計量為什麼
訓練當前 mini-batch 的 μ、σ²邊訓練邊算,同時累積「移動平均」備用
推論訓練期間累積的移動平均 μ、σ²推論常常一次只有一筆、或 batch 很小,不能靠當下批次統計
部署地雷:推論前務必把模型切到 eval 模式(PyTorch 的 model.eval()),否則 BN 仍用批次統計,結果會不穩、甚至一筆資料就崩。

🔀BatchNorm vs LayerNorm

兩者都是正規化,差別在沿哪個維度算統計量。這決定了它們各自適合的場景。

面向BatchNormLayerNorm
正規化維度跨「批次」同一特徵單一樣本內、跨「特徵」
對 batch 大小敏感,小 batch 統計不穩不受 batch 大小影響
訓練/推論不一致(需移動平均、切 eval)一致,較單純
典型場景CNN、影像RNN、Transformer、序列
一句記憶:影像 CNN 多用 BatchNorm;文字序列與 Transformer 幾乎都用 LayerNorm(因為序列長度不定、batch 常很小,BN 會不穩)。

自我檢測

Q1. BN 把每層輸入標準化成什麼?為什麼還要 γ、β?
標準化成均值 0、標準差 1。加上可學習的 γ(縮放)、β(平移)是為了讓網路能還原它真正需要的尺度——萬一標準化把有用的資訊壓掉了,網路可以自己調回來,不會犧牲表達能力。
Q2. 為什麼推論時不能用當下批次的統計量?
推論常常一次只有一筆或極少樣本,批次統計沒有代表性、也不穩。所以改用訓練期間累積的「移動平均」μ、σ²。部署前要把模型切到 eval 模式。
Q3. 為什麼 Transformer 用 LayerNorm 而不是 BatchNorm?
序列任務的 batch 常很小、序列長度不定,BatchNorm 依賴批次統計會很不穩;LayerNorm 只在單一樣本內、沿特徵維度正規化,不受 batch 大小與序列長度影響,因此更適合。
Q4. 「內部協變量偏移」是什麼?BN 如何緩解?
訓練中前面層參數不斷更新,導致後面每一層收到的輸入分布一直改變(ICS),後面的層被迫一直重新適應。BN 把每層輸入釘在穩定分布上,讓後面的層看到固定尺度,因而訓練更快更穩、可用更大學習率。

🎯重點整理

📝 iPAS 考點提醒

批次正規化(BatchNorm)穩定並加速深層網路訓練,iPAS 深度學習考點(中級科目三)。重點:對每層輸入做標準化,減緩內部協變量偏移、容許較大學習率、有輕微正則化效果。易混點:訓練時用批次統計、推論時用累積的移動平均,兩者不同;小批次時 BatchNorm 不穩,序列模型多改用 LayerNorm。情境:CNN 常見、Transformer 用 LayerNorm。

想練情境題與詳解 → AI 學習與考證地圖

❓ 常見問題

Batch Normalization 是什麼?

在網路中對每一層的輸入做正規化(以該批次的均值與變異),讓數值分布穩定,加速並穩定深層網路的訓練。

它解決什麼問題?

緩解內部協變量偏移與梯度問題,讓可用較大學習率、收斂更快,也有輕微正則化效果(略減過擬合)。

訓練和推論時行為一樣嗎?

不一樣。訓練用當前批次統計量;推論用訓練期間累積的移動平均統計量,部署時要正確切到 eval 模式。

BatchNorm 和 LayerNorm 差在哪?

BatchNorm 依批次維度(對 batch 敏感、小 batch 不穩);LayerNorm 對單一樣本的特徵維度正規化(序列與 Transformer 常用)、不受 batch 大小影響。

用 BatchNorm 要注意什麼?

batch 太小統計不穩、與 Dropout 順序需留意、推論要切 eval;RNN 與小批次情境常改用 LayerNorm。

🧭 相關主題

← 返回 AI 學習與考證地圖