如是我闻: 在 CNN 中,每个样本在经过一层隐藏层(通常是卷积层 + 激活函数)后,确实会变成一组特征图(Feature Maps)。所以,在 CNN 里,Layer Normalization 主要作用在通道(C 维度)上,而不是 batch 维度。
![](https://i-blog.csdnimg.cn/direct/3764e2abd4db49929b79e792b13fc2b5.png)
📌 为什么 CNN 中 Layer Normalization 作用在通道维度(C)?
在 CNN 里,每个输入样本(比如一张图片)经过一层卷积层后,会变成一组特征图:
输入尺寸: ( C in , H , W ) ⇒ 输出尺寸: ( C out , H , W ) \text{输入尺寸:} (C_{\text{in}}, H, W) \quad \Rightarrow \quad \text{输出尺寸:} (C_{\text{out}}, H, W) 输入尺寸:(Cin,H,W)⇒输出尺寸:(Cout,H,W)
- ( C in (C_{\text{in}} (Cin 是输入通道数(比如 RGB 图像有 3 个通道)。
- C out C_{\text{out}} Cout 是卷积后的输出通道数(通常会增加,比如 64 个通道)。
- H 和 W 代表特征图的空间大小。
📌 CNN 的每一层输出的不是一个数值,而是一组特征图!
- 在 CNN 里,每个样本在每一层都会产生 多个特征图(Feature Maps),每个通道表示不同的特征(比如边缘、纹理、颜色等)。
- 也就是说,CNN 里,每个样本的隐藏层输出是一个 (C, H, W) 维度的张量,而不是一个单独的数值向量。
📌 传统的 Layer Normalization 作用在 MLP(全连接网络)中
在 MLP(多层感知机)里,每一层的神经元输出是一个 向量 (比如一个 128 维的隐藏层向量):
x = [ x 1 , x 2 , . . . , x 128 ] x = [x_1, x_2, ..., x_{128}] x=[x1,x2,...,x128]
- 在 MLP 里,Layer Normalization 直接对这个向量归一化 ,计算它的均值和标准差:
μ = 1 H ∑ i = 1 H x i , σ = 1 H ∑ i = 1 H ( x i − μ ) 2 \mu = \frac{1}{H} \sum_{i=1}^{H} x_i, \quad \sigma = \sqrt{\frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2} μ=H1i=1∑Hxi,σ=H1i=1∑H(xi−μ)2- 这里的 H H H 是隐藏层的维度(比如 128)。
📌 CNN 里 Layer Normalization 的特殊性
在 CNN 里,每一层的输出是一个 3D 特征图:
( X ∈ R C × H × W ) (X \in \mathbb{R}^{C \times H \times W}) (X∈RC×H×W)
- 在 CNN 里,我们不能像 MLP 那样直接对整个向量归一化,而是要考虑 H 和 W 维度。
- Layer Normalization 在 CNN 里,通常会对通道(C 维度)单独归一化 ,即:
- 对每个样本的每个通道单独计算均值和标准差 ,然后归一化:
μ = 1 H × W ∑ i = 1 H ∑ j = 1 W x i , j \mu = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_{i,j} μ=H×W1i=1∑Hj=1∑Wxi,j
σ = 1 H × W ∑ i = 1 H ∑ j = 1 W ( x i , j − μ ) 2 \sigma = \sqrt{\frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} (x_{i,j} - \mu)^2} σ=H×W1i=1∑Hj=1∑W(xi,j−μ)2 - 也就是说,在 CNN 里,Layer Normalization 不是对整个通道(C 维度)求均值,而是对每个通道的 H × W 位置进行归一化。
- 对每个样本的每个通道单独计算均值和标准差 ,然后归一化:
以上