Batch Normalization

Batch Normalization 

Training:

(m是每一个minibatch中相同通道位的元素个数)
        根据论文 batch normalization 主要解决了训练过程中internal covariate shift(模型内部参数协矩阵变化问题)由于深度神经网络往往由很多层网络连接而成,一旦上层网络中的参数分布发生细微变化经过多层计算过后这一细微变化很有可能会被放大进而导致内部参数之间协方差矩阵的变化。bach normalization的加入在每个非线性层前加入了新的一层首先将参数映射至一个期望为0方差为1的分布区间再利用线性层恢复其表达能力使得每个激活层的输入都大致维持在一个相对稳定的分布区间内。
        模型训练完成之后,batch-norm层在预测时用的方差和期望将由每个mini-batch替换为整个训练集上该参数的期望与方差。

(2)Momentum:移动平均法(Moving Average)

       稍微改变一下训练过程中计算均值和方差的办法,设 [公式]是当前步骤求出的均值, [公式] 是之前的训练步骤累积起来求得的均值(也称running mean),则:

[公式]
       其中,p是momentum的超参,表示模型在多大程度上依赖于过去的均值和当前的均值。 [公式] 则是新一轮的ruuning mean,也就是当前步骤里最终使用的mean。同理,对于方差,我们也有:
[公式]

采用这种方法的好处是:

  •        节省了存储空间,不需要保存所有的均值和方差结果,只需要保存running mean和running variance即可
  •        方便在训练模型的阶段追踪模型的表现。一般来讲,在模型训练的中途,我们会塞入validation dataset,对模型训练的效果进行追踪。采用移动平均法,不需要等模型训练过程结束再去做无偏估计,我们直接用running mean和running variance就可以在validation上评估模型。

Batch-norm in nets:

For Linear layers:

    在线性层中使用batch-norm其实和上面第一节中的图片一致,就是对激活层的各个输入参数分别进行独立的batch-norm。

For convolutional layers:

    为了适应卷积运算与线性运算之间的不同,作者对应用于卷积层后的batch-norm做了一定的修改,我们计算的方差和期望不再基于某一特定的特征(feature)而是基于一个特定的feature map --- 特征层(一张RGB图像有3层,灰度图像只有一层)对每一个feature map上的所有参数做相同的bach-norm变换





评论

此博客中的热门博文

Swin-transformer

An overview of gradient descent optimization algorithms.

SROCC, KROCC, PLCC, RMSE