批标准化—BN
作用:神经网络对0附近的数据更敏感,但是随着网络层数的增加,特征数据会出现偏离0均值的情况,标准化可以使数据符合以0位均值,1为标准差的正太分布,把偏移的特征数据重新拉回0附近。
方法:
标准化:使数据符合0为均值,1为标准差的分布。
批标准差:对一小批数据(batch),做标准化处理。
批标准化后,第K个卷积核的输出特征图中的第i个像素点的值计算过程为:
批标准化前,第K个卷积核,输出特征图中第i个像素点的值
批标准化前,第K个卷积核,batch张输出特征中所有像素点的平均值即 像素点的数量 = batch*该层卷积核数量*每个 卷积核的输出特征图像素数量
批标准化前,第k个卷积核,batch张输出特征中所有要素点的标准差
BN操作将原本偏移的特征数据重新拉回到0均值,使进入激活函数的数据分布在激活函数线性区,使得输入数据的微小变化更明显的体现到激活函数的输出,提升了激活函数对输入数据的区分力
但是这种简单的特征数据标准化使特征数据完全满足标准正分布,集中在激活函数的中心区域,使激活函数失去了非线性特性。
因此在BN操作中为每个卷积核引入了两个可训练参数γ和β,反向传播时缩放银子γ和偏移因子β会与其他带训练参数一同被训练优化,使标准正太分布后的特征数据通过缩放因子和偏移因子优化了特征数据的宽窄和偏移量保证了网络的非线性表达力
BN层位于卷积层之后,激活层之前
TF2描述:
tf,keras.layers.BatchNormalization()
实例:
model = tf.keras.models.Sequential( Conv2D(filter=6, kernel_size=(5, 5), padding='same'), # 卷积层 BatchNormalization(), # BN层 Activation('relu'), # 激活函数 MaxPool2D(pool_size=(2, 2), strides=2, padding='same'), # 池化层 Dropout(0.2) # dropout层 )