作用
BN层一般放在线性层或卷积层后面,激活函数前面,作用如下:
1.加快网络收敛;
因为每层的数据都转换为同一的分布,这样会加快训练速度。
2.防止梯度爆炸和梯度消失;
因为BN会使非线性变换函数的输入值落入对输入比较敏感的区域。
3.防止过拟合,提升泛化能力。
因为BN求均值和方差是基于同一个batch内的样本,使网络不会朝一个方向学习。
计算过程
为什么会有放缩系数
γ
\gamma
γ和平移系数
β
\beta
β?
因为归一化不可避免的会改变数据的分布,从而可能会对激活函数只使用了其线性部分,限制了模型的表达能力。引入参数
γ
\gamma
γ和
β
\beta
β可以使网络的输出重构原始特征的表达能力。
训练阶段
在训练阶段,BN会对batch内的每个样本做归一化,每一层特征图会计算出HxWxChannel个均值和方差。训练时计算的均值和方差会不断按加权累积下来,通过移动平均的方法来近似得到整个样本集的均值和方差。
训练过程中共会产生(图片总数/batchsize)组 γ \gamma γ和 β \beta β。
在反向传播时,利用 γ \gamma γ和 β \beta β求梯度从而改变训练权重,每层都有自己的 γ \gamma γ和 β \beta β。
预测阶段
在预测阶段,很可能不是按batch预测的,通常只有一个样本,那么BN层中的均值和方差都是固定的,那就需要用到训练时的均值和方差通过移动平均而得到。