Dropout与DropConnect

为了防止模型过拟合,dropout是一种trick,之前提到Batch Normalization的使用可以不必再使用dropout,但是我们还是有必要温习下什么是dropout。

Dropout

dropout在全连接层使用。在训练阶段,对于每个节点,以p概率将其输出值保留,以1-p概率将其输出值乘以0。在测试阶段,输出结果要乘以p。原因是:保持训练阶段和测试阶段的期望值相同。训练阶段,对于每个节点,dropout之前的输出是x, 经历dropout之后的期望值是px+(1p)0=pxpx+(1-p)*0 = px,因此在测试阶段需要将结果乘以p,从而输出的期望值是pxpx

可以看到,这样增加了测试阶段的计算量,影响测试性能。
Inverted dropout: 训练阶段将输出值再除以p。这样测试阶段不需要任何增加的计算。

dropout为什么可以缓解网络过拟合?

  1. 减少了节点之间的co-adaptation(共适应性)
  2. bagging的极限形式

DropConnect

不同于dropout, dropconnect不是将节点的输出值置为0,而是将权值(即节点之间的边)以1-p概率乘以0。
下面这样图清楚了展示了dropout和dropconnect的不同:
Dropout与DropConnect
在测试阶段,需要对每个权重进行高斯分布的采样,高斯分布的均值和方差如下:
Dropout与DropConnect
因此测试阶段,会慢一些。

[1] https://www.cnblogs.com/tornadomeet/p/3430312.html
[2] https://cloud.tencent.com/developer/news/246964