batch normalzation

introduction

  • BN主要是为了解决NN训练过程中难以收敛的问题,可以在一定上推迟过拟合的发生(注意:有些博客中说BN可以防止过拟合,但是论文(https://arxiv.org/pdf/1611.03530.pdf)中验证了BN只是有抑制作用,使得过拟合在更多的epoch之后出现,但是并不能阻止)
  • 在机器学习过程中,最理想的状态就是特征或者数据是独立同分布的,因此在数据预处理的时候,一般会使用PCA或者normalization方法去规范化数据,使得模型易于训练。
  • 下图是CNN训练中常用的normalization方法,一般每层feature map的尺寸是CNN batch 运行速度 cnn batch normalization_深度学习。其中BN是对每个batch中的每个channel中的所有值进行单独处理,最终可以得到C个mean与C个var的值。其他的normalization方法与特定的数据维度可以参见下图。

CNN batch 运行速度 cnn batch normalization_CNN batch 运行速度_02

注意:CNN中的normalization方法与regularization方法是不同的,一个是正规化,一个是正则化,
regularization是防止过拟合,normalization是为了规范数据的分布,便于后续的训练过程。

简介

  • 在训练的过程中,BN是首先计算当前channel中所有值得均值与方差,然后对其进行归一化,为了防止这种归一化使得数据丢失学习到的特征,BN又添加了2个可以学习的值,使得归一化的值可以有不同的变化。主要的公式如下

CNN batch 运行速度 cnn batch normalization_深度学习_03

  • 在测试的时候,一般都是一张图像,没有batch size的概念,无法在测试数据中获取原始数据的均值与方差,因此我们可以记录训练样本中的值,相当于假设每批训练样本中的均值和方差都是固定不变的,因此在测试阶段的CNN batch 运行速度 cnn batch normalization_深度学习_04CNN batch 运行速度 cnn batch normalization_CNN batch 运行速度_05的计算公式如下。

CNN batch 运行速度 cnn batch normalization_过拟合_06

上面计算结果是均值和标准差的无偏估计

  • 最后BN的使用公式就是

CNN batch 运行速度 cnn batch normalization_深度学习_07

注意

  • 在训练和测试的过程中,BN的使用稍有不同,但是原始公式都是相同的,造成差异的原因是训练和测试数据的不同。