如是我聞:
1. Instance Normalization(IN)
Instance Normalization(IN)最早由 Ulyanov et al.(2017) 提出,主要用于 風格遷移(Style Transfer) 任務。它的核心思想是 對每個樣本的每個通道 ( C ) (C) (C) 單獨計算均值和方差,然后進行歸一化。
與 Batch Normalization(BN)不同,IN 不依賴 mini-batch 統計信息,所以更適用于小 batch size 甚至 batch size = 1 的情況。
數學公式
對于一個輸入特征 x t i l m x_{tilm} xtilm?,其中:
- t t t 表示 batch 維度(樣本索引)
- i i i 表示通道索引(C)
- l , m l, m l,m 分別表示特征圖的空間坐標 H × W H × W H×W
均值計算
μ t i = 1 H W ∑ l = 1 W ∑ m = 1 H x t i l m \mu_{ti} = \frac{1}{HW} \sum_{l=1}^{W} \sum_{m=1}^{H} x_{tilm} μti?=HW1?l=1∑W?m=1∑H?xtilm?
方差計算
σ t i 2 = 1 H W ∑ l = 1 W ∑ m = 1 H ( x t i l m ? μ t i ) 2 \sigma^2_{ti} = \frac{1}{HW} \sum_{l=1}^{W} \sum_{m=1}^{H} (x_{tilm} - \mu_{ti})^2 σti2?=HW1?l=1∑W?m=1∑H?(xtilm??μti?)2
歸一化
y t i l m = x t i l m ? μ t i σ t i 2 + ? y_{tilm} = \frac{x_{tilm} - \mu_{ti}}{\sqrt{\sigma^2_{ti} + \epsilon}} ytilm?=σti2?+??xtilm??μti??
💡 計算范圍:
Instance Normalization 只在 單個樣本的單個通道 (H×W 維度) 內計算均值和方差,而不會跨通道或跨樣本計算。
2. Layer Normalization(LN)
概念
Layer Normalization(LN)由 Ba et al.(2016) 提出,最初用于 RNN 和 Transformer 結構,后來也在 CNN 中被廣泛使用。它的核心思想是 對整個樣本的所有通道 (C×H×W) 計算均值和方差,然后進行歸一化。
不同于 Batch Normalization(BN),LN 不依賴 batch 維度,適用于 NLP 和 Transformer 任務,特別是在 batch size 變化較大的情況下,仍能保持穩定的效果。
數學公式
對于一個輸入特征 x i j k l x_{ijkl} xijkl?,其中:
- i i i 表示 batch 維度(樣本索引)
- j j j 表示通道索引( C C C)
- k , l k, l k,l 分別表示特征圖的空間坐標( H × W H × W H×W)
均值計算
μ l = 1 C H W ∑ j = 1 C ∑ k = 1 H ∑ l = 1 W x i j k l \mu^l = \frac{1}{CHW} \sum_{j=1}^{C} \sum_{k=1}^{H} \sum_{l=1}^{W} x_{ijkl} μl=CHW1?j=1∑C?k=1∑H?l=1∑W?xijkl?
方差計算
σ l 2 = 1 C H W ∑ j = 1 C ∑ k = 1 H ∑ l = 1 W ( x i j k l ? μ l ) 2 \sigma^2_l = \frac{1}{CHW} \sum_{j=1}^{C} \sum_{k=1}^{H} \sum_{l=1}^{W} (x_{ijkl} - \mu^l)^2 σl2?=CHW1?j=1∑C?k=1∑H?l=1∑W?(xijkl??μl)2
歸一化
y i j k l = x i j k l ? μ l σ l 2 + ? y_{ijkl} = \frac{x_{ijkl} - \mu^l}{\sqrt{\sigma^2_l + \epsilon}} yijkl?=σl2?+??xijkl??μl?
💡 計算范圍:
Layer Normalization 在整個樣本的所有通道 (C×H×W) 維度上計算均值和方差,不同通道之間的歸一化統計量是共享的。
3. 計算示例
假設我們有一個輸入 特征圖大小為 2 × 2 2 \times 2 2×2,batch size 為 1,通道數 C = 2,即:
X = [ Channel?1 : [ 1 2 3 4 ] , Channel?2 : [ 5 6 7 8 ] ] X = \begin{bmatrix} \text{Channel 1}: & \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad \text{Channel 2}: & \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \end{bmatrix} X=[Channel?1:?[13?24?],Channel?2:?[57?68?]?]
Instance Normalization
IN 對 每個通道 ( C C C) 獨立歸一化,計算均值和方差:
-
Channel 1 均值:
μ 1 = 1 + 2 + 3 + 4 4 = 2.5 \mu_1 = \frac{1+2+3+4}{4} = 2.5 μ1?=41+2+3+4?=2.5
方差:
σ 1 2 = ( 1 ? 2.5 ) 2 + ( 2 ? 2.5 ) 2 + ( 3 ? 2.5 ) 2 + ( 4 ? 2.5 ) 2 4 = 1.25 \sigma_1^2 = \frac{(1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 + (4-2.5)^2}{4} = 1.25 σ12?=4(1?2.5)2+(2?2.5)2+(3?2.5)2+(4?2.5)2?=1.25
歸一化:
Y 1 = X 1 ? 2.5 1.25 + ? Y_1 = \frac{X_1 - 2.5}{\sqrt{1.25 + \epsilon}} Y1?=1.25+??X1??2.5? -
Channel 2 均值:
μ 2 = 5 + 6 + 7 + 8 4 = 6.5 \mu_2 = \frac{5+6+7+8}{4} = 6.5 μ2?=45+6+7+8?=6.5
歸一化后:
Y 2 = X 2 ? 6.5 1.25 + ? Y_2 = \frac{X_2 - 6.5}{\sqrt{1.25 + \epsilon}} Y2?=1.25+??X2??6.5?
Layer Normalization
LN 對 整個樣本的所有通道 (C×H×W) 歸一化,計算:
- 總均值:
μ = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 8 = 4.5 \mu = \frac{1+2+3+4+5+6+7+8}{8} = 4.5 μ=81+2+3+4+5+6+7+8?=4.5 - 總方差:
σ 2 = ( 1 ? 4.5 ) 2 + ? + ( 8 ? 4.5 ) 2 8 = 5.25 \sigma^2 = \frac{(1-4.5)^2 + \dots + (8-4.5)^2}{8} = 5.25 σ2=8(1?4.5)2+?+(8?4.5)2?=5.25 - 歸一化:
Y = X ? 4.5 5.25 + ? Y = \frac{X - 4.5}{\sqrt{5.25 + \epsilon}} Y=5.25+??X?4.5?
4. 主要區別
歸一化方法 | 計算均值/方差的范圍 | 歸一化的單位 | 適用場景 |
---|---|---|---|
Instance Normalization (IN) | 每個通道 (H×W) 計算均值和方差 | 每個通道獨立歸一化 | 風格遷移、GAN、計算機視覺任務 |
Layer Normalization (LN) | 整個樣本 (C×H×W) 計算均值和方差 | 所有通道一起歸一化 | NLP、Transformer、RNN/CNN 任務 |
5. 總結
- IN 適用于圖像任務(如風格遷移),可以幫助去除特定風格信息。
- LN 適用于 NLP 和 CNN 任務,因為它不會受到 batch size 影響,在 Transformer 和 RNN 里表現更穩定。
希望這篇文章能幫助你理解 Instance Normalization 和 Layer Normalization 的核心概念及其不同應用!🎯