AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
27/100 第三週:📌 卷積神經網路 CNN
27.批次正規化(Batch Norm)⚖️ 穩定訓練與加速收斂!
________________________________________
✅ 核心概念
Batch Normalization(批次正規化) 是一種深度學習訓練技術,透過標準化每一層輸入的分布,幫助模型更快收斂、更穩定訓練,並能一定程度上減緩過擬合。
📌 解決問題:
• 層層傳遞中,輸出分布會不斷變化,造成內部協變異變化(Internal Covariate Shift)
• 神經元激活值不穩,導致學習困難、收斂速度慢
________________________________________
🧠 如何做 Batch Normalization?
在每個 mini-batch 中:
1. 計算輸入特徵的平均與標準差
2. 標準化:
x^i= (xi−μbatch) / (σbatch+ϵ)
這條公式就是 Batch Normalization 的「標準化步驟」,讓每一層神經網路的輸入保持穩定分佈,是深度學習中提高效能的關鍵技巧。
3. 加入可學參數 γ 和 β,進行線性變換恢復表達能力:
y=γ⋅x^+βy
✅ 最終模型學到的其實是最「適合訓練」的標準化特徵!
________________________________________
🔄 加在哪裡?
通常加在:
• 捲積層或全連接層之後、激活函數(如 ReLU)之前
Conv2D → BatchNorm → ReLU → Pooling
________________________________________
⚙️ TensorFlow / Keras 實作:
python
from tensorflow.keras import layers
model = tf.keras.Sequential([
layers.Conv2D(32, (3, 3), padding='same'),
layers.BatchNormalization(),
layers.ReLU(),
layers.MaxPooling2D(pool_size=(2, 2))
])
這段程式碼構建了一個基本的卷積神經網路模組,用於圖像特徵提取。它依序包含四個層級:
Conv2D:建立一個 3×3 的捲積濾鏡,輸出 32 個特徵圖,padding='same' 表示輸出尺寸與輸入相同;
BatchNormalization:對每個 mini-batch 的輸出做標準化,穩定訓練過程、加速收斂;
ReLU:非線性激活函數,引入非線性,強化模型表達力;
MaxPooling2D:使用 2×2 的池化窗進行下採樣,減少空間維度與參數量,提取關鍵特徵。
這樣的結構常見於 CNN 的前幾層,能有效萃取圖像的局部特徵並壓縮資訊量,為後續分類或回歸任務做準備。
________________________________________
📈 批次正規化的好處
效果 說明
✅ 穩定激活分布 免梯度爆炸或消失,讓深層網路也能順利訓練
✅ 加快模型收斂速度 可使用較高的學習率,減少訓練時間
✅ 提升泛化能力 有類似正則化效果,能減少對 Dropout 的依賴
✅ 支援深層網路架構設計 ResNet、DenseNet、Transformer 等核心組件之一
________________________________________
⚠️ 設計注意事項:
• 在訓練與測試時會有不同行為(訓練使用 batch mean/std,測試使用整體估計值)
• 在小批次(batch size < 8)下效果可能不佳 → 可改用 Layer Norm 或 Group Norm
• Batch Norm 不一定與 Dropout 同時使用,可能會互相抵消
________________________________________
📊 與其他正規化方式比較:
Batch Normalization (Batch Norm) 運作方式:對 mini-batch 的特徵做標準化 適用情況:CNN、MLP、一般深度學習模型 Layer Normalization (Layer Norm) 運作方式:對 每個樣本的所有特徵 做標準化 適用情況:NLP、RNN、Transformer 等序列模型 Group Normalization (Group Norm) 運作方式:對特徵圖的 通道群組 做標準化 適用情況:小 batch size 的 CNN,避免 Batch Norm 效果不佳
________________________________________
小結與啟示:
✅ Batch Normalization 是深度學習中的「訓練穩定劑」
✅ 幫助模型快速收斂、抑制梯度異常、提升泛化能力
✅ 幾乎所有現代深度網路結構(CNN、ResNet、Transformer)都會使用