批量归一化 (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') ])

原始激活值

归一化后