动机:
防止隐层分布多次改变,BN让每个隐层节点的激活输入分布缩小到-1和1之间.
好处:
缩小输入空间,从而降低调参难度;防止梯度爆炸/消失,从而加速网络收敛.
BN计算公式:
keras.layers.normalization.BatchNormalization(axis=-1,momentum=0.99,epsilon=0.001,center=True,scale=True,beta_initializer='zeros',gamma_initializer='ones',moving_mean_initializer='zeros',moving_variance_initializer='ones',beta_regularizer=None,gamma_regularizer=None,beta_constraint=None,gamma_constraint=None)
参数
- axis: 整数,指定要规范化的轴,通常为特征轴。例如在进行
data_format="channels_first
的2D卷积后,一般会设axis=1。 - momentum: 动态均值的动量
- epsilon:大于0的小浮点数,用于防止除0错误
- center: 若设为True,将会将beta作为偏置加上去,否则忽略参数beta
- scale: 若设为True,则会乘以gamma,否则不使用gamma。当下一层是线性的时,可以设False,因为scaling的操作将被下一层执行。
- beta_initializer:beta权重的初始方法
- gamma_initializer: gamma的初始化方法
- moving_mean_initializer: 动态均值的初始化方法
- moving_variance_initializer: 动态方差的初始化方法
- beta_regularizer: 可选的beta正则
- gamma_regularizer: 可选的gamma正则
- beta_constraint: 可选的beta约束
- gamma_constraint: 可选的gamma约束