BN和辍学者在培训和测试中的区别

来自:/p/61725100

BN,批量归一化,就是在深度神经网络训练过程中,使每层神经网络的输入保持紧密分布。

BN训练和测试的参数一样吗?

对于BN,在训练时,对每批的训练数据进行归一化处理,即使用每批数据的均值和方差。

测试的时候,比如预测一个样本,没有批次的概念。所以此时使用的均值和方差是所有训练数据的均值和方差,可以用移动平均法得到。

对于BN,当训练一个模型时,它的所有参数都是确定的,包括均值和方差、gamma和bata。

训练BN时为什么不用全训练集的均值和方差?

由于在训练的第一个完整历元过程中,无法获得除输入层以外的其他层的全训练集的均值和方差,因此只能在前向传播过程中获得训练批次的均值和方差。能否在一个完整的历元之后使用完整数据集的平均值和方差?

对于BN来说,每一批数据都归一化到同一个分布,每一批数据的均值和方差都会不一样,而不是用一个固定值。这种差异实际上可以增加模型的鲁棒性,并在一定程度上减少过拟合。

但是,一批数据和全部数据之间的均值和方差差异太大,无法表示训练集的分布。因此,BN通常要求完全打乱训练集,并使用较大的批处理值来缩小与总数据的差异。

Dropout在训练过程中以一定概率去激活神经元,即输出为0,以提高模型的泛化能力,减少过拟合。

辍学生需要它进行培训和测试吗?

在训练中使用Dropout来减少神经元对某些上层神经元的依赖,类似于集成多个不同网络结构的模型来减少过拟合的风险。

测试的时候要用到整个训练好的模型,所以不需要中途退出。

辍学如何平衡培训和测试的差异?

Dropout,在训练中,以一定的概率去激活神经元,实际上使对应神经元的输出为零。

假设失活概率为p,即这一层的每一个神经元都有一个p失活的概率。在下图所示的三层网络结构中,如果失活概率为0.5,则每次训练会有三个神经元失活,所以输出层的每个神经元只有三个输入,但实际测试中不会出现丢包,输出层的每个神经元有六个输入,这样在训练和测试时输出层的每个神经元的输入和与期望会有数量级的不同。

所以在训练时,要将第二层的输出数据除以(1-p)再传递给输出层神经元,作为神经元失活的补偿,使训练和测试时各层输入有大致相同的期望。

辍学部分参考:/program _ developer/article/details/80737724

BN和Dropout都可以降低过准合并的训练速度,但是如果两者一起使用,并不会产生1+1 >: 2的效果,相反可能会得到比单独使用更差的效果。

相关研究参考论文:通过方差转移理解液滴和批次标准化之间的无序。

本文作者发现,理解Dropout和BN冲突的关键是网络状态切换过程中神经方差的不一致行为。想象一下,如果图1中有一个神经响应X,当网络从训练变为测试时,Dropout可以通过其随机失活保持率(即P)来缩放响应,改变学习过程中神经元的方差,而BN仍然保持X的统计滑动方差,这种方差不匹配可能导致数值不稳定(见下图红色曲线)。随着网络的深入,最终预测的数值偏差可能会累积,从而降低系统的性能。为简单起见,作者将这种现象命名为“方差转移”。事实上,如果没有丢包,实际前馈中的神经元方差会非常接近BN累积的滑动方差(见下图蓝色曲线),这也保证了其较高的测试精度。

作者采用两种策略来探索如何打破这一限制。一种是在所有BN层之后使用Dropout,另一种是修改Dropout的公式,使其对方差不那么敏感,即高斯Dropout。

第一种方案比较简单,只是把Dropout放在所有BN层的后面,这样就不会出现方差偏差的问题,但实际上感觉是在逃避问题。

第二种方案来自原Dropout中提到的高斯Dropout,是Dropout形式的扩展。作者进一步扩展了高斯漏失,提出了均匀分布漏失,带来了一个好处就是这种形式的漏失(也称为“Uout”)对方差的离差不太敏感,总体来说方差没有那么强。