BN 層(Batch Normalization)——這是深度神經網絡中非常重要的一環,它大大改善了網絡的訓練速度、穩定性和收斂效果。
🧠 一句話理解 BN 層的作用:
Batch Normalization(批歸一化)通過標準化每一層的激活值,讓訓練過程更穩定、更快、更容易收斂。
🧩 為什么需要 BN 層?
在深度網絡中,隨著層數增加,每層的輸入分布會發生變化(稱為 internal covariate shift):
? 比如某一層開始習慣輸入是 [-1, 1] 的分布;
? 但由于前面參數更新,下一次訓練時輸入可能變成 [0, 10];
? 導致該層“適應不過來”,訓練變慢,甚至梯度消失或爆炸。
🎯 BN 是怎么解決這個問題的?
? 它做了兩步處理:
1. 標準化(Standardization):
? 對 mini-batch 的每個神經元,減去均值、除以標準差,使輸出是均值為 0、方差為 1。
? 類似 z-score:
2. 線性變換(恢復表達能力):
? 引入兩個可學習參數 γ(scale)和 β(shift):
? 這一步確保即使你歸一化了,也不會失去模型擬合能力(BN 不是簡單的“壓縮”,而是“規范+再建”)。
🌟 BN 的作用總結:
功能 | 解釋 |
---|---|
📉 減少內部協變量偏移 | 讓每層輸入分布更穩定,網絡更容易學習 |
? 加快收斂速度 | 訓練更快、效果更好(可以用更大學習率) |
📐 緩解梯度消失/爆炸 | 標準化后激活不會太大太小,梯度更穩 |
🧲 一定程度正則化 | 每次用 mini-batch,會引入噪聲,有點像 Dropout |
🚀 更深網絡也能穩定訓練 | 尤其適用于 ResNet、VGG 等大網絡結構 |
🎨 類比記憶:
想象你在一個樓梯上訓練爬樓,如果每一層的高度都在不斷變(有的高有的矮),你會訓練得很累;BN 就像把每一層都“規范化”為標準的高度,讓你更容易上樓。
🧪 使用場景:
? 常用于卷積層或全連接層后,激活函數前后都可以(通常是前)。
? 訓練時用 batch 均值和方差,推理時用滑動平均。