Batch Normalization(批量归一化)
Batch Normalization(批量归一化)是 2015年提出的方法,是一种用于加速深度神经网络训练并提高其稳定性的方法。
其主要思想是对每个mini-batch中的数据进行归一化,使得每个mini-batch的数据分布的均值为0,方差为1。
具体来说,Batch Normalization的过程包括以下几个步骤:
-
计算mini-batch的均值和方差:
对于一个mini-batch B = { x 1 , x 2 , . . . , x m } B = \{x_1, x_2, ..., x_m\} B={x1,x2,...,xm},首先计算该mini-batch的均值 μ B \mu_B μB 和方差 σ B 2 \sigma_B^2 σB2:μ B = 1 m ∑ i = 1 m x i \mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i μB=m1i=1∑mxi
σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2 σB2=m1i=1∑m(xi−μB)2
-
归一化:
使用计算得到的均值和方差对每个输入数据进行归一化处理:x ^ i = x i − μ B σ B 2 + ϵ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i=σB2+ϵxi−μB
这里, ϵ \epsilon ϵ 是一个小的常数,用于防止分母为零。
-
缩放和平移:
归一化后的数据再进行缩放和平移,以恢复数据的表达能力。通过引入可学习的参数 γ \gamma γ 和 β \beta β,实现如下变换:y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
Batch Normalization的好处包括:
- 加速训练:通过减少内部协变量偏移(Internal Covariate Shift),Batch Normalization可以加速神经网络的训练过程,使得模型收敛速度更快。
- 稳定训练过程:通过将输入数据的分布规范化,可以减少梯度爆炸和梯度消失的问题,提高训练过程的稳定性。
- 减少对初始化的依赖:使用Batch Normalization可以使得网络对权重初始化不那么敏感,从而更容易训练出好的模型。
在实际应用中,Batch Normalization已成为深度学习模型中的一种标准技术,广泛应用于各类神经网络中,如卷积神经网络(CNN)和循环神经网络(RNN)。
示例
对于给定的数据 [ 1 , 2 , 3 , 4 , 5 , 6 , 23 , 22 , 30 , 40 , 64 , 12 , 39 ] [1, 2, 3, 4, 5, 6, 23, 22, 30, 40, 64, 12, 39] [1,2,3,4,5,6,23,22,30,40,64,12,39],我们将对其进行Batch Normalization,使其均值为0,方差为1。具体步骤如下:
-
计算均值 μ \mu μ:
μ = 1 + 2 + 3 + 4 + 5 + 6 + 23 + 22 + 30 + 40 + 64 + 12 + 39 13 = 251 13 ≈ 19.31 \mu = \frac{1 + 2 + 3 + 4 + 5 + 6 + 23 + 22 + 30 + 40 + 64 + 12 + 39}{13} = \frac{251}{13} \approx 19.31 μ=131+2+3+4+5+6+23+22+30+40+64+12+39=13251≈19.31
-
计算方差 σ 2 \sigma^2 σ2:
σ 2 = ( 1 − 19.31 ) 2 + ( 2 − 19.31 ) 2 + ( 3 − 19.31 ) 2 + ⋯ + ( 39 − 19.31 ) 2 13 \sigma^2 = \frac{(1-19.31)^2 + (2-19.31)^2 + (3-19.31)^2 + \cdots + (39-19.31)^2}{13} σ2=13(1−19.31)2+(2−19.31)2+(3−19.31)2+⋯+(39−19.31)2
计算每个数据点与均值的差的平方,并求和:
∑ ( x i − μ ) 2 = ( 1 − 19.31 ) 2 + ( 2 − 19.31 ) 2 + ( 3 − 19.31 ) 2 + ⋯ + ( 39 − 19.31 ) 2 = 8031.38 \sum (x_i - \mu)^2 = (1-19.31)^2 + (2-19.31)^2 + (3-19.31)^2 + \cdots + (39-19.31)^2 = 8031.38 ∑(xi−μ)2=(1−19.31)2+(2−19.31)2+(3−19.31)2+⋯+(39−19.31)2=8031.38
然后,方差为:
σ 2 = 8031.38 13 ≈ 617.03 \sigma^2 = \frac{8031.38}{13} \approx 617.03 σ2=138031.38≈617.03
-
计算标准差 σ \sigma σ:
σ = 617.03 ≈ 24.84 \sigma = \sqrt{617.03} \approx 24.84 σ=617.03≈24.84
-
归一化:
对每个数据点 x i x_i xi 进行归一化处理:x ^ i = x i − μ σ \hat{x}_i = \frac{x_i - \mu}{\sigma} x^i=σxi−μ
具体归一化结果如下:
x ^ 1 = 1 − 19.31 24.84 ≈ − 0.74 x ^ 2 = 2 − 19.31 24.84 ≈ − 0.70 x ^ 3 = 3 − 19.31 24.84 ≈ − 0.66 x ^ 4 = 4 − 19.31 24.84 ≈ − 0.62 x ^ 5 = 5 − 19.31 24.84 ≈ − 0.58 x ^ 6 = 6 − 19.31 24.84 ≈ − 0.54 x ^ 23 = 23 − 19.31 24.84 ≈ 0.15 x ^ 22 = 22 − 19.31 24.84 ≈ 0.11 x ^ 30 = 30 − 19.31 24.84 ≈ 0.43 x ^ 40 = 40 − 19.31 24.84 ≈ 0.83 x ^ 64 = 64 − 19.31 24.84 ≈ 1.80 x ^ 12 = 12 − 19.31 24.84 ≈ − 0.29 x ^ 39 = 39 − 19.31 24.84 ≈ 0.79 \begin{align*} \hat{x}_1 &= \frac{1 - 19.31}{24.84} \approx -0.74 \\ \hat{x}_2 &= \frac{2 - 19.31}{24.84} \approx -0.70 \\ \hat{x}_3 &= \frac{3 - 19.31}{24.84} \approx -0.66 \\ \hat{x}_4 &= \frac{4 - 19.31}{24.84} \approx -0.62 \\ \hat{x}_5 &= \frac{5 - 19.31}{24.84} \approx -0.58 \\ \hat{x}_6 &= \frac{6 - 19.31}{24.84} \approx -0.54 \\ \hat{x}_{23} &= \frac{23 - 19.31}{24.84} \approx 0.15 \\ \hat{x}_{22} &= \frac{22 - 19.31}{24.84} \approx 0.11 \\ \hat{x}_{30} &= \frac{30 - 19.31}{24.84} \approx 0.43 \\ \hat{x}_{40} &= \frac{40 - 19.31}{24.84} \approx 0.83 \\ \hat{x}_{64} &= \frac{64 - 19.31}{24.84} \approx 1.80 \\ \hat{x}_{12} &= \frac{12 - 19.31}{24.84} \approx -0.29 \\ \hat{x}_{39} &= \frac{39 - 19.31}{24.84} \approx 0.79 \\ \end{align*} x^1x^2x^3x^4x^5x^6x^23x^22x^30x^40x^64x^12x^39=24.841−19.31≈−0.74=24.842−19.31≈−0.70=24.843−19.31≈−0.66=24.844−19.31≈−0.62=24.845−19.31≈−0.58=24.846−19.31≈−0.54=24.8423−19.31≈0.15=24.8422−19.31≈0.11=24.8430−19.31≈0.43=24.8440−19.31≈0.83=24.8464−19.31≈1.80=24.8412−19.31≈−0.29=24.8439−19.31≈0.79
通过这些步骤,我们将原始数据归一化,使其均值为0,方差为1。这就是Batch Normalization的基本操作过程。
上面示例的可视化
左边为开始的数据,后面为Batch Norm之后的数据
- 左图为原始数据的柱状图,红色虚线表示数据的均值(Mean μ \mu μ = 19.31),绿色虚线表示标准差范围(Mean + Std Dev σ \sigma σ)。
- 右图为归一化后的数据的柱状图,红色虚线表示归一化后的均值(Mean μ \mu μ = 0),绿色虚线表示归一化后的标准差范围(Std Dev σ \sigma σ = 1)。
通过这种可视化,我们可以清晰地看到数据在Batch Normalization处理前后的变化。