标准化 (Normalization):让训练更稳定高效
在深度神经网络中,每一层的输入都受到前面所有层参数的影响。在训练过程中,这些参数不断变化,导致每一层的输入分布也在剧烈变化,这种现象被称为“内部协变量偏移”。批量归一化 (BN) 就是为了解决这个问题而提出的。
批量归一化 (Batch Normalization)
核心思想:在网络的每一层激活函数之前,对一小批 (batch) 数据进行归一化处理,使其均值为0,方差为1。比喻:就像做菜时,不管拿到的食材是“1公斤”还是“2000克”,都先统一换算成“克”这个标准单位,这样后续的“烹饪”(网络层计算)就更容易处理了。
BN 层还会学习两个参数(gamma 和 beta),对归一化后的数据进行缩放和平移,以保留网络的表达能力。
动手试试:
点击按钮,随机生成一批激活值数据(左图),观察经过批量归一化处理后,数据分布是如何被“拉”回到中心区域的(右图)。
from tensorflow import keras
from keras import layers
model = keras.Sequential([
layers.Dense(64),
# 在激活函数之前插入BN层
layers.BatchNormalization(),
layers.Activation('relu'),
layers.Dense(10, activation='softmax')
])