人工智慧模型訓練技術:隨機失活,丟棄法,Dropout

果冻人工智能發表於2024-11-18

前一篇:《探索訓練人工智慧模型的詞彙大小與模型的維度》

序言:Dropout 是神經網路設計領域的一種技術,通常我們把它翻譯成 隨機失活 或者 丟棄法。如果訓練神經網路的時候不用 Dropout,模型就很容易“讀死書”,也就是過擬合,結果可能導致專案失敗。

那 Dropout 到底在幹什麼呢?其實很簡單,就是在訓練模型的時候,隨機關掉隱藏層中的一些神經元,不讓它們輸出結果。沒什麼玄乎的,就是這麼直接。比如說,在每一輪(epoch)訓練中,會隨機挑一些神經元“閉麥”,讓它們暫時休息,輸出值設為 0。但需要注意的是,哪些神經元會被關掉是隨機的,每次都不一樣,而不是每次關掉一批固定的神經元。這樣操作的好處是,模型必須依賴所有神經元協同工作,去學習更普遍的規律,而不是隻死記硬背幾個特定特徵。所以 Dropout 能很好地解決模型的“讀死書”問題,讓它更靈活、更聰明,也更有能力去識別它從未見過的新知識。

使用 Dropout

在減少過擬合方面,一個常用的技巧是在全連線神經網路中加入 Dropout。我們在第 3 章中探討了它在卷積神經網路中的應用。這時可能會很想直接使用 Dropout 來看看它對過擬合的效果,但在這裡我選擇先不急著用,而是等到詞彙表大小、嵌入維度和架構複雜度都調整好之後再試。畢竟,這些調整往往比使用 Dropout 對模型效果的影響更大,而我們已經從這些調整中看到了不錯的結果。

現在,我們的架構已經簡化到中間的全連線層只有 8 個神經元了,因此 Dropout 的作用可能會被最小化,但我們還是來試一試吧。以下是更新後的模型程式碼,加入了 0.25 的 Dropout(這相當於我們 8 個神經元中丟棄了 2 個):

model = tf.keras.Sequential([

tf.keras.layers.Embedding(vocab_size, embedding_dim),

tf.keras.layers.GlobalAveragePooling1D(),

tf.keras.layers.Dense(8, activation='relu'),

tf.keras.layers.Dropout(0.25),

tf.keras.layers.Dense(1, activation='sigmoid')

])

圖 6-14 顯示了訓練 100 個週期後的準確率結果。這次我們看到訓練集的準確率開始超過之前的閾值,而驗證集的準確率則在慢慢下降。這表明我們又進入了過擬合的區域。

這一點透過圖 6-15 的損失曲線得到了驗證。


圖 6-14:加入 Dropout 後的準確率


圖 6-15:加入 Dropout 後的損失

從這裡你可以看到,模型的驗證損失又開始呈現出之前那種隨著時間增加的趨勢。雖然情況沒有之前那麼糟糕,但顯然方向是不對的。

在這種情況下,由於神經元的數量非常少,加入 Dropout 可能並不是一個合適的選擇。不過,Dropout 仍然是一個很好的工具,要記得把它放進你的工具箱,在比這個更復雜的架構中使用它。

總結:本節示例演示了在網路中引入 Dropout 的效果。從實驗中我們可以看到,Dropout 是一個有效的工具,但它的作用依賴於模型架構和具體場景。對於像本例中這種簡化的模型,Dropout 的影響較小。但在更復雜的模型中,它往往是防止過擬合的關鍵手段。接下來,我們還會介紹幾種最佳化技術,幫助進一步解決模型過擬合的“讀死書”問題

相關文章