BatchNorm
每次小Batch训练都会进行标准化,将数值的分布调整为均值0、方差1,以保证数值的稳定性、加快训练。
同时,Batch Norm会维护一个全局的均值和方差,通过滑动平均计算得到。
movingMean=movingMean∗(moment)+(1−moment)∗batchNrom
movingStd=movingStd∗(moment)+(1−moment)∗batchStd
这两个全局参数将会保留到测试的时候使用
Dropout
在训练的过程中,会对神经元的输出按照一定概率r 冻结,实际操作上就是将神经元的输出全部置0,可以有效避免过拟合。
在测试的时候,所有的神经元都会参与计算,为了保证在激活函数的输入数值稳定性,需对输出的结果进行1−r的放缩。
证明:激活函数的依赖于输入的信号强度,在训练的时候,信号强度的期望为E1(x)=∑i(1−r)Y(i) ,表示第i个神经元能输出的概率为1−r, 输出强度为Y(i) , 在测试的时候,所有的神经元都能输出,信号强度的期望为E2(x)=∑iY(i) ,为了保证信号强度相等,所以(1−r)E2=E1, 所以需要在测试的时候,将数值放缩1−r倍。
Dropout的本质是Bagging思想。
随机选择不同的神经元等价于训练不同的模型,这种多样性可以降低模型的方差。
所谓方差,方差大代表着过于复杂,对数据集过于敏感,过于依赖某些特征,在测试集效果表现不佳