Dropout/zh

    From Marovi AI
    This page is a translated version of the page Dropout and the translation is 100% complete.
    Other languages:
    Article
    Topic area Deep Learning
    Difficulty Intermediate
    Prerequisites Neural Networks, Overfitting and Regularization

    Dropout(隨機失活)是一種用於神經網絡的正則化技術,在每個訓練步驟中隨機將一部分神經元的激活值置為零。Srivastava 等人(2014)提出了該方法,dropout 是深度學習中防止過擬合最廣泛使用的方法之一。

    動機:協同適應

    在大型神經網絡中,神經元可能會形成複雜的協同適應模式——只有在特定其他神經元存在時才能正常工作的神經元組。這種緊密耦合使網絡變得脆弱且容易過擬合,因為學到的特徵依賴於訓練數據的特定特性,而不是捕獲穩健的、通用的模式。

    Dropout 通過迫使每個神經元學習與許多不同隨機子集的其他神經元協同工作時仍然有用的特徵,從而打破這些協同適應。

    Dropout 算法

    訓練階段

    在每個訓練步驟中,dropout 層中的每個神經元獨立地以概率 $ p $保留概率)被保留,或以概率 $ 1 - p $ 被置為零。形式上,對於具有激活向量 $ \mathbf{h} $ 的層:

    $ r_j \sim \mathrm{Bernoulli}(p) $
    $ \tilde{h}_j = r_j \cdot h_j $

    其中 $ r_j $ 是為每個神經元 $ j $ 獨立抽取的二值掩碼。對於隱藏層,典型的保留概率為 $ p = 0.5 $;對於輸入層,則為 $ p = 0.8 $ 或更高。

    每個訓練步驟實際上是在訓練一個從完整架構中採樣得到的不同的「稀疏化」子網絡。對於 $ n $ 個神經元,存在 $ 2^n $ 個可能的子網絡,從而形成一個隱式的集成。

    推理階段:反向 dropout

    在推理時,所有神經元都處於激活狀態,因此每個神經元的期望輸出相對於訓練時會按因子 $ p $ 縮放。有兩種方法可以解決這一問題:

    • 標準 dropout:在測試時將所有權重乘以 $ p $
    • 反向 dropout(更常用):在訓練期間,將保留的激活值除以 $ p $
    $ \tilde{h}_j = \frac{r_j \cdot h_j}{p} $

    反向 dropout 確保在訓練期間 $ \tilde{h}_j $ 的期望值等於 $ h_j $,因此推理時無需任何調整。這是 PyTorch 和 TensorFlow 等框架中的默認實現。

    理論解釋

    集成視角

    Dropout 可以視為在訓練一個具有大量權重共享的、規模指數級龐大的子網絡集成。在測試時,使用帶縮放權重的完整網絡可以近似所有 $ 2^n $ 個子網絡預測的幾何平均。這種集成平均降低了方差並改善了泛化能力。

    貝葉斯解釋

    Gal 和 Ghahramani(2016)證明,在每個權重層之前應用 dropout 的神經網絡在數學上等價於深度高斯過程的近似。在測試時執行 dropout(蒙特卡洛 dropout)會產生一個預測分佈,從而提供模型不確定性的實用估計。

    Dropout 的變體

    變體 描述 典型應用
    標準 dropout 丟棄單個神經元 全連接層
    空間 dropout 丟棄整個特徵圖(通道) 卷積網絡
    DropConnect 丟棄單個權重而非神經元 密集層
    變分 dropout 學習每個神經元/權重的 dropout 率 貝葉斯深度學習
    DropBlock 丟棄特徵圖的連續區域 卷積網絡
    Alpha dropout 保持自歸一化特性(用於 SELU 激活) 自歸一化網絡

    空間 dropout(Tompson 等,2015)對於卷積網絡尤為重要。在卷積特徵圖上應用標準 dropout 效果不佳,因為相鄰的激活值高度相關;丟棄單個像素仍會留下冗餘的空間信息。空間 dropout 則丟棄整個通道,迫使網絡使用多樣化的特徵表示。

    實用指南

    • 放置位置:在全連接層中,應在激活函數之後應用 dropout。在 Transformer 中,dropout 應用於注意力權重以及前饋子層之後。
    • 比率選擇:隱藏層從 $ p = 0.5 $ 開始。對參數較少的層使用更高的保留率(較低的 dropout)。對於更大的模型或較小的數據集,增加 dropout。
    • 與 BatchNorm 的交互:同時使用 dropout 和 Batch Normalization 需要謹慎,因為 dropout 引入的方差可能會破壞批統計量的穩定性。常見做法是僅在最後一個批歸一化層之後應用 dropout。
    • 調度 dropout:某些訓練方案在訓練過程中從不使用 dropout 開始並逐漸提高比率,或反之亦然。

    對訓練的影響

    Dropout 通常會增加訓練損失並減慢收斂速度,因為每一步的有效模型容量都降低了。然而,它會縮小訓練性能與驗證性能之間的差距,從而帶來更好的泛化能力。如果訓練損失已經很高(欠擬合),則應減少或移除 dropout。

    參見

    參考文獻

    • Srivastava, N. et al. (2014). "Dropout: A Simple Way to Prevent Neural Networks from Overfitting". Journal of Machine Learning Research 15(56):1929–1958.
    • Gal, Y. and Ghahramani, Z. (2016). "Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning". ICML.
    • Tompson, J. et al. (2015). "Efficient Object Localization Using Convolutional Networks". CVPR.
    • Wan, L. et al. (2013). "Regularization of Neural Networks using DropConnect". ICML.
    • Ghiasi, G., Lin, T.-Y. and Le, Q. V. (2018). "DropBlock: A regularization method for convolutional networks". NeurIPS.