7

Keras執行退出引用this paperKeras實施的脫落正確嗎?

以下摘錄是從紙:

的想法是在測試時使用一個單一的神經網絡沒有輟學。 該網絡的權重是經過訓練的 權重的縮小版本。如果一個單元被訓練期間保留的概率爲p,該單元的 傳出權重由p在試驗時間乘以作爲 如圖2所示。

的Keras文檔中提到漏失在列車時間僅用於,並從差實現

x = K.in_train_phase(K.dropout(x, level=self.p), x)

以下線,似乎表明確實從輸出層被簡單地沿着在測試時通過。

此外,我無法找到在培訓完成後縮小權重的代碼,正如文中所建議的。我的理解是,這個縮放步驟對於退出工作來說是基本必要的,因爲它相當於在「子網」集合中獲得預期的中間層輸出。沒有它,計算就不再被認爲是從這個「子網絡」集合中抽取的。

那麼我的問題是,在Keras中實施的退出的縮放效果在哪裏?

更新1:好吧,所以Keras使用反向刪除,儘管它在Keras文檔和代碼中被稱爲丟失。鏈接http://cs231n.github.io/neural-networks-2/#reg似乎並不表示這兩者是等效的。在https://stats.stackexchange.com/questions/205932/dropout-scaling-the-activation-versus-inverting-the-dropout也沒有答案。我可以看到他們做了類似的事情,但我還沒有看到有人說他們完全一樣。我認爲他們不是。

因此,一個新的問題:輟學和倒退相當於?爲了清楚起見,我正在尋找數學上的理由來說明他們是否是。

回答

6

是的。它被正確執行。從Dropout發明的時候起,人們從實施的角度改進了它。凱拉斯正在使用這種技術之一。它被稱爲反向丟失,你可以閱讀它here

UPDATE:

說實話 - 在嚴格的數學意義上這兩種方法是不等價的。在倒置案例您將每個隱藏的激活乘以一個倒數參數的倒數。但由於該導數是線性的,因此相當於將所有梯度乘以相同的因子。爲了克服這種差異,你必須設置不同的學習權重。從這個角度來看,這種方法有所不同。但是,從實際角度出發 - 這個方法是等效的,因爲:

  1. 如果使用自動設置學習率(如RMSProp或Adagrad)的方法 - 它將使算法幾乎沒有變化。
  2. 如果您使用自動設置學習率的方法 - 您必須考慮到退出的隨機性,以及由於某些神經元在訓練階段將被關閉的事實(測試期間不會發生什麼/評估階段) - 您必須重新調整學習速度以克服這種差異。概率論給了我們最好的重新調整因子 - 它是一個退出參數的倒數,它使得損失函數梯度長度的預期值在列車和測試/評估階段都相同。

當然 - 以上兩點都是關於倒排遺漏技巧。

+0

感謝您的支持。你有沒有機會提供對我所問的第二個問題的見解? – user3390629

+0

我更新了我的答案。 –

+0

好的,你能解釋他們爲什麼相當(在答案中)?看來,使用丟失的網絡1和使用反向丟失的網絡2計算的梯度將是不同的,因此它們將會收斂到不同的最終狀態。 – user3390629

0

摘自the original Dropout paper(第10節):

在本文中,我們描述了差爲其中我們在訓練時間保留的概率爲p單元中,並由通過的係數乘以它們按比例縮小的權重的方法p在測試時間。達到同樣效果的另一種方法是在訓練時間乘以1/p來放大保留的激活,而不是在測試時修改權重。這些方法等同於適當縮放每層的學習速率和權重初始化。