BN层
预测阶段,所有的参数的取值都是固定的,对BN层而言,意味着μ、σ、γ、β都是固定值
γ、β是学习的值,测试阶段为固定值,
对于μ、σ,在训练阶段它们为当前mini batch的统计量,随着输入batch的不同,μ、σ一直在变化,在预测阶段,输入数据只能有一条,选择的u和σ可以采用训练收敛最后几批mini batch的μ、σ的期望,作为预测阶段的μ和σ
1、BN的作用:
可以使用更大的学习率,训练过程更加稳定,极大提高了训练速度。
可以将bias置为0,因为Batch Normalization的Standardization过程会移除直流分量,所以不再需要bias。
对权重初始化不再敏感,通常权重采样自0均值某方差的高斯分布,以往对高斯分布的方差设置十分重要,有了Batch
Normalization后,对与同一个输出节点相连的权重进行放缩,其标准差σ也会放缩同样的倍数,相除抵消。
对权重的尺度不再敏感,理由同上,尺度统一由γ参数控制,在训练中决定。
深层网络可以使用sigmoid和tanh了,理由同上,BN抑制了梯度消失。
Batch Normalization具有某种正则作用,不需要太依赖dropout,减少过拟合。
2、BN层放在ReLU前面还是后面?
原paper建议将BN层放置在ReLU前,因为ReLU激活函数的输出非负,不能近似为高斯分布。
参数
ReLU
参数
inplace 可以选择就地操作
Conv2D
Group