ubuntu之路——day9.2 Covariate shift问题和Batch Norm的解决方案

Batch Norm的意义:Covariate shift的问题

在传统的机器学习中,我们通常会认为source domain和target domain的分布是一致的,也就是说,训练数据和测试数据是满足相同分布的。这是通过训练数据获得的模型能够在测试集上获得好的效果的一个基本保障。

Convariate Shift是指训练集的样本数据和目标样本集分布不一致时,训练得到的模型无法很好的Generalization。它是分布不一致假设之下的一个分支问题,也就是指Sorce Domain和Target Domain的条件概率一致的,但是其边缘概率不同。的确,对于神经网络的各层输出,在经过了层内操作后,各层输出分布就会与对应的输入信号分布不同,而且差异会随着网络深度增大而加大了,但每一层所指向的Label仍然是不变的。

解决办法:一般是根据训练样本和目标样本的比例对训练样本做一个矫正。所以,通过引入Bactch Normalization来标准化某些层或者所有层的输入,从而固定每层输入信息的均值和方差。

BN的本质:对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。

详情请参照:https://www.cnblogs.com/guoyaohua/p/8724433.html这位博主的文章详细介绍了Batch Norm的操作过程

在深度网络中BN相当于在z=wx+b和a = ξ(z)中间添加了一个z~= BN(z)的过程

BatchNorm在深度网络中的应用:

for t = 1, 2,...,n(n = mini-batch size)

  compute forward prop on mini-batch X{t}

  in each hidden layer,using BatchNorm to replace Z[l] with Z~[l]

  use back prop to compute dw[l],db[l],dβ[l],dγ[l]

  update parameters :w[l] := w - αdw[l]

           β[l] := β - αdβ[l]

           γ[l] := γ - αdγ[l]  注意参数更新的过程可以使用momentum、RMSprop、Adam代替

原文地址:https://www.cnblogs.com/NWNU-LHY/p/11200048.html