54.2_Inverted Dropout
54.2 Inverted Dropout
Inverted Dropout 在训练时进行缩放处理。回忆一下,之前在测试时乘以 scale 以实现缩放。现在为了避免在测试时做相应的处理,我们要在训练时先将神经元的值乘以 ,这样就不必在测试时做任何缩放转换。Inverted Dropout 的代码如下所示。
# 训练时
scale = 1 - dropout_ratio
mask = np.random.randint(*x.shape) > dropout_ratio
y = x * mask / scale
# 测试时
y = xInverted Dropout 的工作原理与 Direct Dropout 的工作原理相同。不过 Inverted Dropout 有一个优点,那就是它在测试时不做任何处理,所以它在测试时的处理速度(略)快。如果只使用推理处理,这倒是一个理想的特性。
Inverted Dropout还支持在训练时动态地改变dropout_ratio。例如我们可以在第1次流转数据时设置dropout_ratio ,在下一次流转数据时设置dropout_ratio 。而Direct Dropout需要固定dropout_ratio进行训练。如果在训练过程中改变了数值,它就会与测试时的行为不一致。出于这些优点,许多深度学习框架采用了Inverted Dropout方式,DeZero也采用了该方式。