丟棄法(dropout)
容量過大的神經網路可能藉由建立脆弱的神經元小圈子來背下訓練集,這些小圈子只在一起時才管用——一個偵測器只在另外三個特定的偵測器啟動時才發火——這種共適應(co-adaptation)一旦輸入稍有不同就崩潰。丟棄法(Srivastava 等人,2014)以蓄意破壞拆散這些小圈子:每個訓練步驟隨機關掉一部分神經元,使任何神經元都無法依賴某個特定夥伴在場。被迫在不可預測的缺席中工作,每個神經元都必須學會一個本身就有用的特徵,這產生出更穩健、更冗餘、更不過擬合的網路。
機制上,訓練期間每個激活值以機率 1−p 保留、以機率 p 歸零(全連接層典型的 p 為 0.5,卷積層較小)。為了讓訊號的期望大小不變、使下一層看到一致的尺度,「反轉丟棄法(inverted dropout)」把存活下來的激活值除以 1−p。測試時丟棄法完全關閉、使用完整網路;訓練時的 1/(1−p) 縮放正是讓帶雜訊訓練的網路匹配完整網路期望輸出的關鍵,所以測試時無需任何調整。
有一個漂亮的詮釋:由於每一步都訓練一個不同的隨機子網路(不同的神經元子集),丟棄法近似地訓練了一個指數般龐大、彼此共享權重的子網路集成(ensemble),而測試時使用完整網路則近似於平均該集成的預測。集成是提升泛化最可靠的方法之一,而丟棄法在單一模型內就買到了它的廉價版本。
在現代電腦視覺中情況已改變。批次正規化本身已提供正則化,並在卷積骨幹內大致取代了丟棄法,所以你很少在現代 CNN 的卷積層看到重度丟棄。但丟棄法在 transformer 中仍活躍且核心——施加於 ViT、DETR 與 CLIP 的注意力權重與 MLP 激活值——而它的空間表親「隨機深度(stochastic depth,DropPath)」會在訓練時隨機丟棄整個殘差區塊,是極深 ResNet 與視覺 transformer 的標準正則化器。
與批次正規化一樣,丟棄法只在訓練時運作:推論時必須停用(model.eval())。在評估時仍開著會隨機破壞預測、使結果無法重現——不過刻意在測試時保持開啟本身就是一種技術,「蒙地卡羅丟棄法(Monte Carlo dropout)」,用來估計模型的不確定性。