IT 论文精读 · PAPER 30

Dropout(随机失活)

Srivastava, Hinton, Krizhevsky, Sutskever & Salakhutdinov · University of Toronto · JMLR 2014

EN →

这篇论文干了什么?

2014 年,多伦多大学 Hinton 的团队把一个像恶作剧的做法写成了正式论文:训练神经网络时,每一步都随机让一部分神经元「请假」——临时当它们不存在。这个只有几行代码的招数叫 Dropout(随机失活),它治的是深度学习最常见的病:模型把训练题背下来了,一换新题就露馅。2012 年点燃这轮 AI 热潮的 AlexNet,用的就是它。

旧世界的痛

神经网络的参数动辄百万上千万,训练数据却总是有限。参数一多,它就能把训练集里只属于这批数据的巧合也记住——「猫图右下角都有块草地」,换成没见过的图便原形毕露。这叫过拟合

最灵的解药是「三个臭皮匠」:训练好几个模型、预测时投票,各自的偶然错误互相抵消。问题是太贵——训练几十个大网络要几十倍算力,上线后每张图还得跑几十遍。

那个点子

Dropout 的做法朴素到有点粗暴:训练的每一步,随机挑出大约一半的神经元,连同它们的所有连线一起临时抹掉,让剩下那个「缺胳膊少腿」的网络照常学这一步;下一步重新抽签,请假的换成另一批。

为什么这管用

第一,它拆散了小圈子。一个神经元若总能指望隔壁那位替它兜底,它学的本事就只在「隔壁在场」时管用;一群神经元抱团互补,换到新数据上很脆。随机请假之后没人知道身边还剩谁,每个神经元只好学一身自己也站得住的本事。论文的比方很妙:与其组一个五十人的大阴谋(一环出错全盘皆输),不如组十个五人小分队。

第二,它把「三个臭皮匠」变便宜了。每次抽签得到的都是一个不同的残缺网络,几十万步下来等于练过了海量个网络——而它们共用同一套权重,只花了训练一个网络的钱。

那考试的时候呢?

上线时不能再抽签——同一张图问两遍答案不一样可不行。办法朴素得让人发笑:让所有神经元都到场,但把每个人的发言音量按当初的出勤率调小。训练时平均只有一半人在场,现在人齐了,每人说轻一点,总音量才对得上。神奇的是,这一次普通计算的效果,就非常接近让那海量个残缺网络挨个投票。

代价说一句:每一步都在跟随机噪声较劲,训练到同样水平大约要多花两三倍的时间。

带来了什么

Dropout 让「把网络造大」不再等于「更容易背题」,成了 2012–2016 年深度学习的标配零件,今天 Transformer 里也还留着它的位置。它还开创了一整条思路:往训练里故意加噪声,逼模型学出更结实的东西

一句话记住

训练时随机让一半神经元请假,逼每个神经元学出不依赖特定同伴的本事,同时等于用一套权重训练了海量个残缺网络;测试时让所有人到场、音量按出勤率调小,一次前向就近似拿到它们的集体投票。

想看掩码怎么算、为什么乘以 p、以及各数据集上的实验数字? → 切到精读版