什么是批量归一化?

批量归一化(Batch Normalization)是一种广泛使用的技术,它可以加速深度神经网络的训练,提高模型的泛化能力。

批量归一化的主要思想是:在激活函数之前对网络中的每一层进行归一化处理,即对该层上的每个神经元,使其特征值不断调整为高斯分布(均值为0,标准差为1)。

具体步骤为:

  1. 计算特征的均值和标准差
  2. 每个特征值减去均值,再除以标准差,使特征变换为高斯分布
  3. 可利用可学习参数γ和β进一步缩放和偏移特征值
  4. 将第3步的结果输入到激活函数

代码示例:

python
import numpy as np

# 一批数据  
x = np.array([[1, 2, 3],  
              [4, 5, 6], 
              [7, 8, 9]])

# 计算均值和标准差  
mean = np.mean(x, axis=0)   # [4, 5, 6]
std = np.std(x, axis=0)     # [3, 3, 3]

# 归一化  
x_norm = (x - mean) / std   # [[-1, -1, -1],  
                            # [ 0,  0,  0],
                            # [ 1,  1,  1]]

# 缩放和偏移    
gamma = np.array([1.5, 2, 1]) 
beta = np.array([1, 0.5, 1])
x_norm_scale = gamma * x_norm + beta  

# [[ 0.5,  0.5,  0  ],
#  [ 2. ,  2. ,  2. ], 
#  [ 4. ,  3.5,  3. ]]   

可以看出,批量归一化通过减去均值和除以标准差,使得特征值变为高斯分布,然后利用γ和β再进行缩放和偏移,最终达到神经网络各层的特征值分布比较统一的目的。

所以,批量归一化的主要作用是:

  1. 使得每一层的输入特征值维持在一个相对较小的范围内,加速学习速度。
  2. 避免梯度消失或爆炸,加快模型的收敛。
  3. 减小模型对网络初始化的依赖,提高模型的泛化性。

批量归一化在训练深度神经网络时显示出很好的效果。它通过简单的归一化处理,可以极大提高模型的训练速度,提高最终模型的泛化性能。所以,理解批量归一化的原理和作用,对于我们训练深度神经网络很有帮助。