个人笔记:为什么用BN层。1,它一定程度上抑制了梯度“不活跃”区间,因为神经网络内部发生了协方差偏移。2,防止过拟合,《一个样本只与minibatch中其他样本有相互关系;对于同一个训练样本,网络的输出会发生变化。这些效果有助于提升网络泛化能力,像dropout一样防止网络过拟合,同时BN的使用,可以减少或者去掉dropout类似的策略。》其他博主写的,能理解一点。
计算步骤:例如一个batch样本,在RGB通道channal上进行减均值出方差,批归一化后数据呈现高斯分布,然后再进行×γ+β的操作,γ和β是梯度求导更新出来的,当然第一次是赋值的(0,1,并没改变),之后的:γ新 = γ旧+γ梯度,这样即保持反向更新梯度的敏感区间,有保持了非线性映射能力(毕竟均值为0,方差为1处于线性区间)。测试阶段,不是利用自己样本的均值和方差,毕竟一个样本谈不上,利用的是训练阶段***累计***求的均值和方差,说白了,利用训练数据构成的张量空间,怎么你能不用其均值和方差呢。我觉得就算测试数据是一个batch,也应该用训练数据构成的张量空间,但是测试数据这个batch比训练数据都庞大,这。。。。。。。谁知道呢