Batch Normalization
通道归一化
1. BN的计算单位是通道
假设Batch为1,即当前batch只有一张图片。一张图片对应R、G、B三个通道。
求解均值和方差时,是以通道为单位,分别求得每个通道的像素值综合,除以H*W。即先求R通道的所有像素值之和,然后除以H*W得到R通道的均值,然后同理求得
。
R通道的方差,即每个像素值减去均值,差求平方,所有的像素执行上述操作,求和,然后除以H*W。
2. BN后的像素值
还是以R通道为例,其他通道等同。
仅仅是中间像素值,并非最终结果像素值。最终结果的像素值如下:
其中和
为可训练参数。
3. BN的目的
CNN在训练过程中,假设输入数据服从独立同分布。但在一层层卷积和激活作用下,隐含层的输入已经偏离对了同分布的假设。 将数据规整到统一区间,减少数据的发散程度,降低网络的学习难度。BN的精髓在于归一之后,使用 作为还原参数,在一定程度上保留原数据的分布。
4. 对于Batch_size大于1的均值、方差和像素值更新
对于Batch_size大于1的情况,即是将batch中每一张图片(隐含层可看做每一张图片可能有小于3个通道,也可能有多于3个通道),每张图片的对应所有R通道求和,然后计算和
。所有R通道的像素值,分别通过
和
求得像素BN后的值。
ε通常取很小的值,如1e-5
5. 训练时的μR
和σR2
和后期推理时有什么不同?
首先训练时的均值、方差和推理时的计算方式是不一样的。
训练时,均值和方差都是基于当前batch计算所得。
这个时候,每一个batch的均值和方差都会被记录下来。
推理时,是通过上述记录的所有batch的均值和方差,然后通过如下计算所得:
注意:每一个隐含层的军均值和方差都是记录用来求得当前层的均值和方差,且每个通道只用来求当前通道的均值和方差。
实在懒得作图了,回头遇到合适的盗一张。