【深度学习-trick系列】Batch Normalization

“you want zero-mean unit-variance activations? just make them so.”

采用强制归一化,而不通过小心翼翼的设计激活函数,实现中间层的N(0,1)分布

resnet中的batch normalization

1
2
3
x = Conv2D(filters1, (1, 1), name=conv_name_base + '2a')(input_tensor)
x = BatchNormalization(axis=bn_axis, name=bn_name_base + '2a')(x)
x = Activation('relu')(x)

雷军
为什么要在激活前做BN?
雷军
因为我们期望的是激活函数的输入服从N(0,1),而不是激活函数的output服从N(0,1)。
雷军
有了BN,是否还需要对输入数据归一化处理?
雷军
不用了

DNN中的normalization

  • 白化(whitening)

关于Batch Normalization

为什么简写BM?

ResNet采用了Batch Normalization

源码实现

参考