假設我們要訓練這樣乙個神經網路
輸入是x輸出是y,正常的流程是:我們首先把x通過網路前向傳播,然後把誤差反向傳播以更新引數讓網路進行學習。使用dropout之後過程變成:
隨機(臨時)刪掉網路中一半的隱藏神經元,輸入輸出神經元保持不變(下圖中虛線為部分臨時被刪除的神經元)
把輸入x通過修改後的網路前向傳播,然後把得到的損失結果通過修改的網路反向傳播。一小批訓練樣本執行完這個過程後就按照隨機梯度下降法更新(沒有被刪除的神經元)對應的引數(w,b)。
然後繼續重複這一過程:
恢復被刪掉的神經元(此時被刪除的神經元保持原樣,而沒有被刪除的神經元已經有所更新)
從隱藏神經元中隨機選擇乙個一半大小的子集 臨時刪除掉(備份被刪除神經元的引數)。
對一小批訓練樣本,先前向傳播然後反向傳播損失並根據隨機梯度下降法更新引數(w,b) (沒有被刪除的那一部分引數得到更新,刪除的神經元引數保持被刪除前的結果)
不斷重複這一過程。
先回到正常的模型(沒有dropout),我們用相同的訓練資料去訓練5個不同的神經網路,一般會得到5個不同的結果,此時我們可以採用 「5個結果取均值」或者「多數取勝的投票策略」去決定最終結果。(例如 3個網路判斷結果為數字9,那麼很有可能真正的結果就是數字9,其它兩個網路給出了錯誤結果)。這種「綜合起來取平均」的策略通常可以有效防止過擬合問題。因為不同的網路可能產生不同的過擬合,取平均則有可能讓一些「相反的」擬合互相抵消。dropout掉不同的隱藏神經元就類似在訓練不同的網路(隨機刪掉一半隱藏神經元導致網路結構已經不同),整個dropout過程就相當於 對很多個不同的神經網路取平均。而不同的網路產生不同的過擬合,一些互為「反向」的擬合相互抵消就可以達到整體上減少過擬合。
因為dropout程式導致兩個神經元不一定每次都在乙個dropout網路**現。(這樣權值的更新不再依賴於有固定關係的隱含節點的共同作用,阻止了某些特徵僅僅在其它特定特徵下才有效果的情況)。迫使網路去學習更加魯棒的特徵 (這些特徵在其它的神經元的隨機子集中也存在)。換句話說假如我們的神經網路是在做出某種**,它不應該對一些特定的線索片段太過敏感,即使丟失特定的線索,它也應該可以從眾多其它線索中學習一些共同的模式(魯棒性)。(這個角度看 dropout就有點像l1,l2正則,減少權重使得網路對丟失特定神經元連線的魯棒性提高)
參考:neural networks and deep learning
dropout解決過擬合問題
dropout防止過擬合
l1 l2正則化是通過修改代價函式來實現的,而dropout則是通過修改神經網路本身來實現的,它是在訓練網路時用的一種技巧 trike 它的流程如下 假設我們要訓練上圖這個網路,在訓練開始時,我們隨機地 刪除 一半的隱層單元,視它們為不存在,得到如下的網路 保持輸入輸出層不變,按照bp演算法更新上圖...
dropout解決過擬合
原理就是在第一次學習的過程中,隨即忽略一些神經元和神經的鏈結。使得神經網路變得不完整。一次一次。每一次得出的結果不依賴某乙個引數。這樣就解決了過擬合問題。import tensorflow as tf from sklearn.datasets import load digits from skl...
正則化 Dropout 與過擬合
正則化器允許在優化過程中對層的引數或層的啟用情況進行懲罰。網路優化的損失函式也包括這些懲罰項。懲罰是以層為物件進行的。具體的 api 因層而異,但dense,conv1d,conv2d和conv3d這些層具有統一的 api。正則化器開放 3 個關鍵字引數 from keras import regu...