TF05——批标准化
TF05——批标准化
批标准化(Batch Normalization,BN)
神经网络对0附近的数据更敏感,但是随着网络层数的增加,特征数据会出现偏离0均值的过程,标准化可以使数据符合以0为均值,1为标准差的分布,把偏移的特征数据重新拉回到0附近
标准化:使数据符合0为均值,1为标准差的分布
批标准化:对一小批数据(batch),做标准化处理
批标准化后,第k个卷积核的输出特征图(feature map)中,第i个像素点(常用在卷积操作和激活操作之间)
可以通过以下式子,计算皮标准化后的输出特征图
\[H_{i}^{'k}=\frac{H_{i}^{k}-\mu _{batch}^{k}}{\sigma_{\text {batch }}^{k}} \]\(H_{i}^{k}\):批标准化前,第k个卷积核,输出特征图第i个像素点
\(\mu _{batch}^{k}\):批标准化前,第k个卷积核,batch张输出特征图第i个像素点平均值
$ \sigma_{\text {batch }}^{k}$:批标准化前,第k个卷积核,batch张输出特征图第i个像素点标准差
\[\mu_{\text {batch }}^{k}=\frac{1}{m} \sum_{i=1}^{m} H_{i}^{k} \]\[\sigma_{\text {batch }}^{k}=\sqrt{\sigma+\frac{1}{m} \sum_{i=1}^{m}\left(H_{i}^{k}-\mu_{\text {batch }}^{k}\right)^{2}} \]\(H^{‘}\)表示第k个卷积核,输出特征图中的第i个像素点,批标准化操作会让每个像素点进行减均值除以标准差的自更新计算,对于第k个卷积核,batch张输出特征图中所有数值的平均值和标准差,是对第k个卷积核产生的batch张输出特征图,集体求均值和标准差,对于\(\mu\)和\(\sigma\)就是对第k个卷积核计算出来的batch张输出特征图中的所有像素点求均值和标准差

BN操作将原本偏移的特征数据,重新拉回到0均值,是进入激活函数的数据分布在激活函数的线性区,使得输入数据的微小变化,更明显的体现到激活函数的输出,提升了激活函数对输入数据的区分力

但是这种简单的特征数据标准化,使特征数据完全满足标准正态分布,集中在激活函数函数中心的线性区域,使激活函数丧失了非线性特性,因此再BN操作中为每个卷积核引入了两个可训练参数
- 为每个卷积核引入可训练参数\(\gamma\)(缩放因子)和(偏移因子)\(\beta\),调整批归一化的力度
反向传播时,\(\gamma\)(缩放因子)和(偏移因子)\(\beta\)会与其他待训练参数一同被训练优化,使标准正态分布后的特征数据通过缩放因子和偏移因子,优化了特征数据分布的宽窄和偏移量,保证了网络的非线性表达力

- BN层位于卷积层之后,激活层之前

Tensorflow提供了BN操作的函数BatchNormalization()
- TF描述批标准化
tf.keras.layers.BatchNormalization()
model = tf.keras.model.Sequential([
Conv2D(filters=6,kernel size=(5,5),padding='same'),#卷积层
BatchNormalization()#BN层
Activation('relu')#激活层
MaxPool2D(pool_size=(2,2),strides=2,padding='same')#池化层
Dropout(0,2)#dropoutc
])