殘差連接(Residual Connection / Skip Connection)和歸一化(Normalization)的結合,是現代深度學習模型(尤其是深度神經網絡和Transformer架構)成功的關鍵因素之一。
核心概念回顧
-
殘差連接 (Residual Connection):
- 思想: 不是讓網絡層直接學習目標映射
H(x)
,而是讓它們學習殘差映射F(x) = H(x) - x
。然后,最終的輸出是H(x) = F(x) + x
。 - 實現: 將某一層(或一組層)的輸入
x
直接跳過這些層,加到這些層的輸出F(x)
上。通常通過簡單的加法(y = F(x, {W_i}) + x
)或連接(y = F(x, {W_i}) || x
)實現,加法更常見。 - 主要作用:
- 緩解梯度消失/爆炸: 在反向傳播時,梯度可以通過殘差路徑(
+ x
部分)幾乎無損地傳遞回淺層,使得深層網絡能夠被有效訓練。 - 恒等映射: 如果最優的
F(x)
是零映射(即什么都不做是最好的),那么學習F(x) = 0
比學習H(x) = x
更容易(因為后者需要精確的恒等變換)。 - 促進信息流動: 允許原始輸入信息更直接地傳遞到后面的層,減少信息在多層變換中的損失或扭曲。
- 簡化優化: 優化殘差映射
F(x)
通常比優化原始映射H(x)
更容易。
- 緩解梯度消失/爆炸: 在反向傳播時,梯度可以通過殘差路徑(
- 思想: 不是讓網絡層直接學習目標映射
-
歸一化 (Normalization):
- 思想: 對神經網絡層內部的激活值或權重進行標準化處理,使其分布(如均值、方差)保持穩定。
- 常見類型:
- 批歸一化 (Batch Normalization, BN): 對單個特征通道在一個小批量(Batch)的所有樣本上進行歸一化(減均值除標準差)。廣泛應用于CNN。
- 層歸一化 (Layer Normalization, LN): 對單個樣本的所有特征通道(或一個子集)進行歸一化。廣泛應用于RNN、Transformer。
- 實例歸一化 (Instance Normalization, IN): 對單個樣本的單個特征通道進行歸一化。常用于風格遷移。
- 組歸一化 (Group Normalization, GN): 將通道分組,對單個樣本的每個組進行歸一化。是BN在小批量場景下的替代方案。
- 主要作用:
- 加速訓練收斂: 通過穩定層輸入的分布,減少內部協變量偏移(Internal Covariate Shift),使得網絡可以使用更大的學習率。
- 緩解梯度問題: 有助于緩解梯度消失/爆炸問題。
- 輕微的正則化效果: BN在訓練時使用小批量的統計量,引入了隨機性,有輕微正則化效果。
殘差連接與歸一化的結合:協同效應
將殘差連接和歸一化結合使用,能產生強大的協同效應,解決深度模型訓練中的關鍵挑戰:
-
解決殘差加法帶來的分布偏移:
- 殘差連接
y = F(x) + x
將兩個不同來源(原始輸入x
和變換后的輸出F(x)
)的數據相加。F(x)
和x
的分布可能差異很大(尤其是F(x)
經過了權重矩陣和非線性激活)。 - 直接將它們相加可能導致
y
的分布發生劇烈變化(分布偏移),這不利于后續層的處理和學習。 - 歸一化的作用: 在
y
輸入到下一層之前(或之后,取決于具體結構),應用歸一化層(如 BN 或 LN)可以將y
重新調整到期望的分布(例如,零均值、單位方差),穩定后續層的輸入。這抵消了殘差加法可能引入的分布不穩定性。
- 殘差連接
-
穩定深層訓練:
- 深度網絡的核心問題是梯度在反向傳播過程中會逐層衰減(消失)或急劇增大(爆炸)。
- 殘差連接的作用: 提供了一條梯度可以幾乎無損回傳的“高速公路”。
- 歸一化的作用: 通過穩定各層的輸入分布,使得梯度計算更加穩定可靠,避免了因輸入分布劇烈變化導致的梯度異常。
- 結合效果: 殘差連接確保了梯度流的通暢,而歸一化確保了梯度流經的路徑是平滑穩定的。兩者共同作用,使得訓練非常深的網絡(如數百層的 ResNet 或數十層的 Transformer)成為可能。
-
提升模型性能和收斂速度:
- 穩定的梯度流和輸入分布使得優化器(如 SGD, Adam)能夠更有效地工作。
- 模型能夠更快地收斂到更好的解,通常也能獲得更高的最終精度。
結合方式:常見模式
最常見的結合方式是在殘差塊(Residual Block)內部或周圍放置歸一化層。具體位置有多種設計,各有優缺點:
-
Pre-Normalization (Pre-Norm):
- 結構:
Norm -> Layer (Conv/Linear/Attention) -> Activation -> + Shortcut
- 流程: 輸入
x
先經過歸一化層(如 LN),然后進入主要的計算層(卷積、全連接、注意力等),再經過激活函數(如 ReLU, GELU),最后與原始輸入x
(或經過投影的x
)相加。 - 優點: 梯度流更穩定,尤其對非常深的模型(如 Transformer)效果更好。訓練通常更穩定。
- 缺點: 原始輸入
x
沒有經過歸一化就直接參與加法,理論上加法后的分布可能不如 Post-Norm 穩定(但在實踐中,Pre-Norm 的穩定性優勢通常更顯著)。 - 典型應用: Transformer 架構(如 GPT, BERT 的后續變種,T5)普遍采用 Pre-LN 結構。
- 結構:
-
Post-Normalization (Post-Norm):
- 結構:
Layer (Conv/Linear/Attention) -> Norm -> Activation -> + Shortcut
或Layer -> Activation -> Norm -> + Shortcut
- 流程: 輸入
x
先經過主要的計算層和激活函數,然后進行歸一化,最后再與原始輸入x
(或經過投影的x
)相加。 - 優點: 加法操作
F(x) + x
的輸出y
會立即被歸一化,理論上能更直接地穩定輸出分布。 - 缺點: 對于非常深的模型,梯度流經過多個 Post-Norm 層時可能會累積不穩定因素,導致訓練困難(如梯度消失或爆炸)。
- 典型應用: 原始 ResNet 使用
Conv -> BN -> ReLU
結構(BN 在卷積后、激活前),加法后不再歸一化(可視為一種 Post-Norm 變體)。原始 Transformer 論文使用的是 Post-LN(Add & Norm 在計算層之后)。
- 結構:
-
其他變體:
- 有些結構會在殘差塊內部使用多個歸一化層。
- 有些結構(如原始的 ResNet)只在卷積層后使用 BN,殘差加法后不再歸一化(因為 BN 已經穩定了卷積層的輸出,且 CNN 的深度相對 Transformer 較淺)。
實際應用例子
-
ResNet (圖像識別 - CNN 代表):
- 結構: 核心是殘差塊。一個基本塊包含:
- 卷積層 1 -> 批歸一化 (BN) -> ReLU
- 卷積層 2 -> 批歸一化 (BN)
- 殘差連接:將塊的輸入
x
加到第二個 BN 的輸出上 (F(x) + x
) - ReLU (在加法之后)
- 結合方式: 這是 Post-Normalization 的一種形式(BN 在卷積后,加法前)。BN 穩定了卷積層的輸出
F(x)
,使得F(x) + x
的分布相對可控,然后最后的 ReLU 再進行非線性變換。BN 在這里至關重要,它使得 ResNet 能夠訓練超過 100 層,并在 ImageNet 等任務上取得突破性成果。
- 結構: 核心是殘差塊。一個基本塊包含:
-
Transformer Encoder/Decoder Layer (NLP/CV - Transformer 代表):
- 結構 (以 Pre-LN 為例,如 BERT, GPT):
- 子層 1 (如 Multi-Head Self-Attention):
- 輸入
x
- 層歸一化 (LN) -> 多頭注意力計算 -> Dropout
- 殘差連接:
x + Dropout(Attention(LN(x)))
- 輸入
- 子層 2 (如 Feed-Forward Network):
- 輸入
y
(子層 1 的輸出) - 層歸一化 (LN) -> 全連接層 1 -> 激活 (如 GELU) -> Dropout -> 全連接層 2 -> Dropout
- 殘差連接:
y + Dropout(FFN(LN(y)))
- 輸入
- 子層 1 (如 Multi-Head Self-Attention):
- 結合方式: 這是典型的 Pre-Normalization (Pre-LN)。在每個子層(注意力或前饋網絡)的核心計算之前進行層歸一化 (LN)。LN 穩定了子層的輸入,然后子層進行計算,最后通過殘差連接與子層輸入相加。這種 Pre-LN 結構被證明在訓練非常深的 Transformer 模型(如大型語言模型)時比原始的 Post-LN 更穩定。
- 結構 (以 Pre-LN 為例,如 BERT, GPT):
-
Vision Transformer (ViT - CV):
- 結構: ViT 將 Transformer 架構應用于圖像。其編碼器層結構與上述 Transformer Encoder Layer 幾乎完全相同。
- 結合方式: 同樣采用類似 Pre-LN 或 Post-LN 的結構(現代實現多傾向 Pre-LN),在每個多頭注意力層和前饋網絡層前后使用層歸一化 (LN) 和殘差連接。這使得 ViT 能夠有效處理圖像塊序列,并在大規模圖像識別任務上取得優異性能。
-
BERT / GPT (NLP):
- 結構: BERT(編碼器)和 GPT(解碼器)的核心構建塊就是 Transformer 層。
- 結合方式: 與上述 Transformer 例子一致。BERT/GPT 及其后續變種(RoBERTa, GPT-2, GPT-3 等)的成功,很大程度上依賴于殘差連接和層歸一化 (LN) 的結合,使得訓練包含數億甚至數千億參數的數十層深度模型成為可能。
總結
殘差連接解決了深度模型訓練中的梯度流問題,使得訓練極深網絡成為可能。歸一化(BN, LN 等)解決了網絡內部激活值分布不穩定的問題,加速收斂并提升穩定性。兩者的結合是協同的:
- 歸一化補償了殘差連接中直接加法操作可能引起的輸入分布偏移,為后續層提供了穩定的輸入。
- 殘差連接為歸一化層提供了更通暢、更穩定的梯度回傳路徑。
- 這種組合極大地增強了深度模型的訓練穩定性、收斂速度和最終性能,是現代深度學習架構(從 ResNet 到 Transformer 及其各種衍生模型)不可或缺的核心設計范式。選擇 Pre-Norm 還是 Post-Norm 取決于具體架構和深度,Pre-Norm 在極深模型中通常表現出更好的穩定性。