深度学习 | 表示学习 | 卷积神经网络 | Batch Normalization 在 CNN 中的示例 | 20
如是我闻: 让我们来用一个具体的例子说明 Batch Normalization 在 CNN 里的计算过程,特别是如何对每个通道(channel)进行归一化。
1. 假设我们有一个 CNN 层的输出
假设某个 CNN 层的输出是一个 4D 张量,形状为:
X
=
(
m
,
C
,
H
,
W
)
X = (m, C, H, W)
X=(m,C,H,W)
其中:
- m = 2 m = 2 m=2(batch 大小 = 2,即有 2 张图片)
- C = 3 C = 3 C=3(通道数 = 3,比如 RGB 三个通道)
- H = 2 , W = 2 H = 2, W = 2 H=2,W=2(特征图大小是 2 × 2 2 \times 2 2×2)
现在,我们假设输入数据如下(仅展示一个通道的数据):
X = [ 样本 1: [ [ 1 , 2 ] [ 3 , 4 ] [ 5 , 6 ] [ 7 , 8 ] ] 样本 2: [ [ 2 , 3 ] [ 4 , 5 ] [ 6 , 7 ] [ 8 , 9 ] ] ] X = \begin{bmatrix} \text{样本 1:} & \begin{bmatrix} [1, 2] & [3, 4] \\ [5, 6] & [7, 8] \end{bmatrix} \\ \text{样本 2:} & \begin{bmatrix} [2, 3] & [4, 5] \\ [6, 7] & [8, 9] \end{bmatrix} \end{bmatrix} X= 样本 1:样本 2:[[1,2][5,6][3,4][7,8]][[2,3][6,7][4,5][8,9]]
这个数据表示的是 一个 batch(2 张图片),每张图片有一个 2 × 2 2 \times 2 2×2 特征图。
2. 计算均值和方差
(1) 计算均值
我们需要对所有样本的这个通道进行归一化,所以我们计算该通道在所有样本上的均值:
μ B = 1 m × H × W ∑ i = 1 m ∑ j = 1 H ∑ k = 1 W x i , j , k \mu_B = \frac{1}{m \times H \times W} \sum_{i=1}^{m} \sum_{j=1}^{H} \sum_{k=1}^{W} x_{i, j, k} μB=m×H×W1i=1∑mj=1∑Hk=1∑Wxi,j,k
代入数据:
μ
B
=
1
2
×
2
×
2
(
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
)
\mu_B = \frac{1}{2 \times 2 \times 2} (1+2+3+4+5+6+7+8 + 2+3+4+5+6+7+8+9)
μB=2×2×21(1+2+3+4+5+6+7+8+2+3+4+5+6+7+8+9)
=
76
8
=
9.5
= \frac{76}{8} = 9.5
=876=9.5
(2) 计算方差
方差的计算公式:
σ
B
2
=
1
m
×
H
×
W
∑
i
=
1
m
∑
j
=
1
H
∑
k
=
1
W
(
x
i
,
j
,
k
−
μ
B
)
2
\sigma_B^2 = \frac{1}{m \times H \times W} \sum_{i=1}^{m} \sum_{j=1}^{H} \sum_{k=1}^{W} (x_{i, j, k} - \mu_B)^2
σB2=m×H×W1i=1∑mj=1∑Hk=1∑W(xi,j,k−μB)2
代入计算:
σ
B
2
=
1
8
(
(
1
−
4.75
)
2
+
(
2
−
4.75
)
2
+
(
3
−
4.75
)
2
+
(
4
−
4.75
)
2
+
⋯
+
(
9
−
4.75
)
2
)
\sigma_B^2 = \frac{1}{8} \left( (1-4.75)^2 + (2-4.75)^2 + (3-4.75)^2 + (4-4.75)^2 + \dots + (9-4.75)^2 \right)
σB2=81((1−4.75)2+(2−4.75)2+(3−4.75)2+(4−4.75)2+⋯+(9−4.75)2)
= 1 8 ( 14.06 + 7.56 + 3.06 + 0.56 + 0.56 + 3.06 + 7.56 + 14.06 ) = \frac{1}{8} \left( 14.06 + 7.56 + 3.06 + 0.56 + 0.56 + 3.06 + 7.56 + 14.06 \right) =81(14.06+7.56+3.06+0.56+0.56+3.06+7.56+14.06)
= 50.44 8 = 6.305 = \frac{50.44}{8} = 6.305 =850.44=6.305
3. 归一化数据
标准化公式:
x
^
i
,
j
,
k
=
x
i
,
j
,
k
−
μ
B
σ
B
2
+
ϵ
\hat{x}_{i,j,k} = \frac{x_{i,j,k} - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}
x^i,j,k=σB2+ϵxi,j,k−μB
假设
ϵ
=
1
0
−
5
\epsilon = 10^{-5}
ϵ=10−5很小,可以忽略不计,那么:
x
^
i
,
j
,
k
=
x
i
,
j
,
k
−
4.75
6.305
\hat{x}_{i,j,k} = \frac{x_{i,j,k} - 4.75}{\sqrt{6.305}}
x^i,j,k=6.305xi,j,k−4.75
计算部分归一化的值(只展示部分):
x
^
1
,
1
,
1
=
1
−
4.75
6.305
≈
−
3.75
2.51
≈
−
1.49
\hat{x}_{1,1,1} = \frac{1 - 4.75}{\sqrt{6.305}} \approx \frac{-3.75}{2.51} \approx -1.49
x^1,1,1=6.3051−4.75≈2.51−3.75≈−1.49
x
^
1
,
1
,
2
=
2
−
4.75
2.51
≈
−
1.10
\hat{x}_{1,1,2} = \frac{2 - 4.75}{2.51} \approx -1.10
x^1,1,2=2.512−4.75≈−1.10
x
^
2
,
2
,
2
=
9
−
4.75
2.51
≈
1.70
\hat{x}_{2,2,2} = \frac{9 - 4.75}{2.51} \approx 1.70
x^2,2,2=2.519−4.75≈1.70
经过这个过程,所有特征都会变成均值 0,方差 1。
4. 通过可学习参数进行缩放和平移
为了让网络有更强的表达能力,BN 引入了两个可学习参数:
y
i
,
j
,
k
=
γ
x
^
i
,
j
,
k
+
β
y_{i,j,k} = \gamma \hat{x}_{i,j,k} + \beta
yi,j,k=γx^i,j,k+β
- γ \gamma γ 控制缩放(scale)。
- β \beta β 控制偏移(shift)。
如果
γ
=
2
,
β
=
0.5
\gamma = 2, \beta = 0.5
γ=2,β=0.5,那么:
y
1
,
1
,
1
=
2
×
(
−
1.49
)
+
0.5
=
−
2.48
y_{1,1,1} = 2 \times (-1.49) + 0.5 = -2.48
y1,1,1=2×(−1.49)+0.5=−2.48
y
1
,
1
,
2
=
2
×
(
−
1.10
)
+
0.5
=
−
1.70
y_{1,1,2} = 2 \times (-1.10) + 0.5 = -1.70
y1,1,2=2×(−1.10)+0.5=−1.70
y
2
,
2
,
2
=
2
×
(
1.70
)
+
0.5
=
3.90
y_{2,2,2} = 2 \times (1.70) + 0.5 = 3.90
y2,2,2=2×(1.70)+0.5=3.90
5. 结果解释
(1) 归一化后,所有数据均值接近 0,方差接近 1
- 这样可以稳定训练过程,防止梯度消失或梯度爆炸。
(2) 通过 γ \gamma γ 和 β \beta β 让网络恢复部分信息
- 这样可以确保 BN 不会限制网络的表达能力,同时还能优化训练。
6. 总的来说
- Batch Normalization 在 CNN 里是对每个通道单独归一化,而不是整个输入张量归一化。
- 计算过程:
- 计算当前 batch 每个通道的均值和方差。
- 对该通道的所有数据进行归一化,使其均值为 0,方差为 1。
- 通过可学习参数 γ \gamma γ 和 β \beta β 进行缩放和平移,使得网络仍然能够学习适应的特征分布。
- 最终作用:
- 减少 Internal Covariate Shift(内部协变量偏移)。
- 加速收敛,提高稳定性。
- 降低对超参数(如学习率、初始化)的依赖。
以上