Batch Normalization
Batch Normalization
Training:
根据论文 batch normalization 主要解决了训练过程中internal covariate shift(模型内部参数协矩阵变化问题)由于深度神经网络往往由很多层网络连接而成,一旦上层网络中的参数分布发生细微变化经过多层计算过后这一细微变化很有可能会被放大进而导致内部参数之间协方差矩阵的变化。bach normalization的加入在每个非线性层前加入了新的一层首先将参数映射至一个期望为0方差为1的分布区间再利用线性层恢复其表达能力使得每个激活层的输入都大致维持在一个相对稳定的分布区间内。
(2)Momentum:移动平均法(Moving Average)
稍微改变一下训练过程中计算均值和方差的办法,设 是当前步骤求出的均值,
是之前的训练步骤累积起来求得的均值(也称running mean),则:
采用这种方法的好处是:
- 节省了存储空间,不需要保存所有的均值和方差结果,只需要保存running mean和running variance即可
- 方便在训练模型的阶段追踪模型的表现。一般来讲,在模型训练的中途,我们会塞入validation dataset,对模型训练的效果进行追踪。采用移动平均法,不需要等模型训练过程结束再去做无偏估计,我们直接用running mean和running variance就可以在validation上评估模型。
Batch-norm in nets:
For Linear layers:
For convolutional layers:
为了适应卷积运算与线性运算之间的不同,作者对应用于卷积层后的batch-norm做了一定的修改,我们计算的方差和期望不再基于某一特定的特征(feature)而是基于一个特定的feature map --- 特征层(一张RGB图像有3层,灰度图像只有一层)对每一个feature map上的所有参数做相同的bach-norm变换。
评论
发表评论