BatchNorm和Dropout在训练和测试的区别

·790·2 分钟·
AI摘要: 本文探讨了BatchNorm和Dropout在训练和测试阶段的区别,并解释了它们各自的作用。BatchNorm通过滑动平均计算全局均值和方差,用于加快数值稳定性和加速训练过程。同时,它保留这些参数至测试阶段以供使用。Dropout则在训练过程中对神经元输出进行随机冻结,减少过拟合,并在测试时将输出结果放缩1-r倍,保证激活函数输入的稳定。文章还指出Dropout的本质是Bagging思想,通过随机选择不同的神经元来降低模型的方差。

BatchNorm

每次小Batch训练都会进行标准化,将数值的分布调整为均值0、方差1,以保证数值的稳定性、加快训练。

同时,Batch Norm会维护一个全局的均值和方差,通过滑动平均计算得到。

movingMean=movingMean(moment)+(1moment)batchNrommovingMean = movingMean * (moment) + (1 - moment) * batchNrom

movingStd=movingStd(moment)+(1moment)batchStdmovingStd = movingStd * (moment) + (1 - moment) * batchStd

这两个全局参数将会保留到测试的时候使用

Dropout

在训练的过程中,会对神经元的输出按照一定概率rr 冻结,实际操作上就是将神经元的输出全部置0,可以有效避免过拟合。

在测试的时候,所有的神经元都会参与计算,为了保证在激活函数的输入数值稳定性,需对输出的结果进行1r1 - r的放缩。

证明:激活函数的依赖于输入的信号强度,在训练的时候,信号强度的期望为E1(x)=i(1r)Y(i)E_1(x) = \sum_i (1-r) Y(i) ,表示第ii个神经元能输出的概率为1r 1- r, 输出强度为Y(i)Y(i) , 在测试的时候,所有的神经元都能输出,信号强度的期望为E2(x)=iY(i)E_2(x) = \sum_i Y(i) ,为了保证信号强度相等,所以(1r)E2=E1(1 - r) E_2 = E_1, 所以需要在测试的时候,将数值放缩1r1 - r倍。

Dropout的本质是Bagging思想。

随机选择不同的神经元等价于训练不同的模型,这种多样性可以降低模型的方差。

所谓方差,方差大代表着过于复杂,对数据集过于敏感,过于依赖某些特征,在测试集效果表现不佳

Kaggle学习赛初探