Dropout
輟學使性能更差
我正在玩dropout,因為機器學習中所有最先進的結果似乎都在使用它(例如,請參見此處)。我熟悉所有的指導方針(訓練時間更長、增加模型容量、使用更高的學習率),但仍然看不到它起作用。我嘗試了幾個不同的例子:CNN 用於 IMDB,CNN 用於 MNIST, MLP 用於 MNIST ,MLP 用於 IRIS,即使默認配置有 dropout (取自Keras 示例),關閉 dropout 也會使我的所有結果更好。例如,我附上了在 IRIS 數據集上訓練的模型之一的結果。沒有 dropout 的配置顯然具有最佳性能。
我錯過了什麼?
IRIS 示例的代碼在此處。
Dropout 是一種正則化技術,在防止過擬合方面最為有效。但是,有幾個地方的 dropout 會影響性能。
- 就在最後一層之前。這通常是應用 dropout 的不好地方,因為網絡沒有能力在分類發生之前“糾正”由 dropout 引起的錯誤。如果我沒看錯,您可能在 iris MLP 中的 softmax 之前放置了 dropout。
- 當網絡相對於數據集較小時,通常不需要正則化。如果模型容量已經很低,通過添加正則化進一步降低它會損害性能。我注意到您的大多數網絡都相對較小且較淺。
- 當訓練時間有限時。目前尚不清楚這裡是否是這種情況,但如果您在收斂之前不進行訓練,則 dropout 可能會產生更差的結果。通常 dropout 在訓練開始時會損害性能,但會導致最終的“收斂”錯誤較低。因此,如果您不打算在收斂之前進行訓練,您可能不想使用 dropout。
最後,我想提一下,據我所知,dropout 現在很少使用,已經被一種稱為批量標準化的技術所取代。當然,這並不是說 dropout 不是一個有效的嘗試工具。