深度學習

隨機失活(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