深度学习

随机失活(dropout)

/ DROP-owt /

随机失活(dropout),是一种故意捣乱的把戏,用来阻止网络去「背」训练数据、而非真正学习。在每一个训练步里,dropout 都随机关掉一部分神经元——比如关掉一半——而且每次挑的「倒霉蛋」都不一样。这就好比每一轮练习,都有随机一半的队员被按在替补席上,于是留下的队员谁也别想靠某一个明星,人人都得学会出力。结果就是一个不过分依赖任何单个神经元的网络,而这往往让它对从没见过的数据泛化得更好。

dropout 对抗的毛病,是「过拟合」:一个有着数百万参数的网络,完全可以把训练样本一字不差地背下来,在它们上面考得漂亮,在任何新东西上却惨不忍睹。靠着不停地随机敲掉神经元,dropout 逼着网络去构建冗余、稳健的特征——哪怕队里缺了几个人,这些特征照样管用。实际上,你是在悄悄训练一大群略有不同、却共用权重的网络,再把它们的智慧平均起来——这是一种廉价的办法,去获得「把许多模型合起来」所带来的那份稳当。

有两条实务要点能让人保持清醒。第一,dropout 只在训练时用;到了推断时,每个神经元都被重新打开(并做一点小小的重新缩放,好让总量对得上),因为这时你要的是网络完整、稳定的判断。第二,它是针对一种特定病症——过拟合太重——的工具,而非包治百病的灵药。把失活率调得太高,网络就根本学不进去(欠拟合);而在批归一化等别的正则手段已经把局面稳住的地方,重度 dropout 往往是多余的。要在你的模型明显在「死记硬背」时才用它,而不是条件反射式地用。

某层的五个神经元输出 [0.8, 0.2, 0.9, 0.5, 0.3]。在 40% 的失活率下,这一步随机有两个被清零 →[0.8, 0, 0.9, 0, 0.3]。下一步,又是另外两个熄灭。到推断时,五个全都开着。

训练时随机把神经元按上替补席,逼着其余的各自扛起担子。

推断时 dropout 是关掉的——整张网络全员上场。初学者常犯的一个 bug,就是做真实预测时忘了把它关掉,凭空注入随机性,把结果拖坏。

又称
随机失活隨機失活丢弃法dropout regularization