Dropout(随机失活)

定义

Dropout 是一种正则化技术:训练时,对某一层的每个神经元,以概率 p 独立地将其输出置 0(「丢弃」),保留概率为 1−p。每个 mini-batch(甚至每次前向)都重新随机采样丢弃掩码,因此每步训练的是一个随机子网络。由 Hinton 等提出,AlexNet(2012)在两个全连接层用 p=0.5 显著降低过拟合,是其夺冠的关键组件之一。

为什么有效

  1. 打破协同适应(co-adaptation):不加 Dropout 时,神经元容易相互依赖、共同拟合训练噪声。随机丢弃迫使每个神经元在缺少任意其他神经元的情况下也能独立提供有用特征,学到更冗余、鲁棒的表示。
  2. 近似模型集成:一个有 n 个可丢弃单元的网络,等价于 2ⁿ 个共享权重的子网络的集合。训练是在这些子网络间随机采样训练,推理是对它们做(近似)几何平均集成——用单个网络的代价换来了集成的泛化收益。
  3. 等效加噪正则:向隐层注入乘性伯努利噪声,可视为对权重的一种自适应正则,限制模型复杂度。

训练 / 推理的一致性处理

训练时丢弃后期望被缩小了,推理时若全部神经元都在,输出分布会失配。两种等价做法:

  • 标准 Dropout:推理时不丢弃,但把该层权重(或激活)乘以保留概率 (1−p),补偿期望。
  • Inverted Dropout(现在主流实现,PyTorch/TF 默认):训练时丢弃后立即把保留的激活除以 (1−p) 放大,推理时则完全不做任何缩放、也不丢弃。这样推理路径最干净。

超参与使用要点

  • p 常取 0.5(全连接层)到 0.1(更浅或已有其他正则时);卷积层因参数共享、本身不易过拟合,Dropout 收益小,常改用 BatchNorm 或结构化变体。
  • Dropout 与 BatchNorm 混用需谨慎(顺序不当会因训练/推理统计差异互相干扰)。
  • 会拉长训练时间(每步只训子网),但换来更好泛化。

主要变体

  • DropConnect:丢的是权重连接而非神经元输出。
  • SpatialDropout / DropBlock:卷积中按整个通道或空间块丢弃,比逐元素更契合 CNN 的空间相关性。
  • DropPath(Stochastic Depth):随机丢弃整条残差分支,广泛用于深层残差网络与 ViT。

在架构中的地位

AlexNet 引入后成为全连接层的标配正则。ViT、Transformer 系普遍在注意力与 FFN 输出、以及残差路径(DropPath)上使用 Dropout 家族技术。随着 BatchNorm/LayerNorm 与大规模数据的普及,卷积主干里的逐元素 Dropout 使用减少,但在小数据、全连接头和 Transformer 中仍是主力正则手段。