深度學習中的Dropout原理介紹

2021-08-10 07:56:34 字數 3197 閱讀 1148

如果網路的問題在於連線密集,那麼久強制讓它稀疏,基於這種想法的演算法就是dropout演算法。

因為在機器學習的一些模型中,如果模型的引數太多,而訓練樣本又太少的話,這樣訓練出來的模型很容易產生過擬合現象。在訓練bp網路時經常遇到的乙個問題,過擬合指的是模型在訓練資料上損失函式比較小,**準確率較高(如果通過畫圖來表示的話,就是擬合曲線比較尖,不平滑,泛化能力不好),但是在測試資料上損失函式比較大,**準確率較低。

常用的防治過擬合的方法是在模型的損失函式中,需要對模型的引數進行「懲罰」,這樣的話這些引數就不會太大,而越小的引數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。因此在新增權值懲罰項後,應用梯度下降演算法迭代優化計算時,如果引數theta比較大,則此時的正則項數值也比較大,那麼在下一次更新引數時,引數削減的也比較大。可以使擬合結果看起來更平滑,不至於過擬合。

dropout是hintion最近2年提出的;為了防止模型過擬合,dropout可以作為一種trikc供選擇。在hinton的**摘要中指出,在每個訓練批次中,通過忽略一半的特徵檢測器(讓一半的隱層節點值為0),可以明顯地減少過擬合現象。這種方式可以減少特徵檢測器間的相互作用,檢測器相互作用是指某些檢測器依賴其他檢測器才能發揮作用。

訓練階段:

1.dropout是在標準的bp網路的的結構上,使bp網的隱層啟用值,以一定的比例v變為0,即按照一定比例v,隨機地讓一部分隱層節點失效;在後面benchmark實驗測試時,部分實驗讓隱層節點失效的基礎上,使輸入資料也以一定比例(試驗用20%)是部分輸入資料失效(這個有點像denoising autoencoder),這樣得到了更好的結果。

2.去掉權值懲罰項,取而代之的事,限制權值的範圍,給每個權值設定乙個上限範圍;如果在訓練跟新的過程中,權值超過了這個上限,則把權值設定為這個上限的值(這個上限值得設定作者並沒有說設定多少最好,後面的試驗中作者說這個上限設定為15時,最好;為啥?估計是交叉驗證得出的實驗結論)。

這樣處理,不論權值更新量有多大,權值都不會過大。此外,還可以使演算法使用乙個比較大的學習率,來加快學習速度,從而使演算法在乙個更廣闊的權值空間中搜尋更好的權值,而不用擔心權值過大。

測試階段:

在網路前向傳播到輸出層前時隱含層節點的輸出值都要縮減到(1-v)倍;例如正常的隱層輸出為a,此時需要縮減為a(1-v)。

這裡我的解釋是:假設比例v=0.5,即在訓練階段,以0.5的比例忽略隱層節點;那麼假設隱層有80個節點,每個節點輸出值為1,那麼此時只有40個節點正常工作;也就是說總的輸出為40個1和40個0;輸出總和為40;而在測試階段,由於我們的權值已經訓練完成,此時就不在按照0.5的比例忽略隱層輸出,假設此時每個隱層的輸出還是1,那麼此時總的輸出為80個1,明顯比dropout訓練時輸出大一倍(由於dropout比例為0.5);所以為了得到和訓練時一樣的輸出結果,就縮減隱層輸出為a(1-v);即此時輸出80個0.5,總和也為40.這樣就使得測試階段和訓練階段的輸出「一致」了。(個人見解)

dropout可以看做是一種模型平均,所謂模型平均,顧名思義,就是把來自不同模型的估計或者**通過一定的權重平均起來,在一些文獻中也稱為模型組合,它一般包括組合估計和組合**。

dropout中**體現了「不同模型」;這個奧秘就是我們隨機選擇忽略隱層節點,在每個批次的訓練過程中,由於每次隨機忽略的隱層節點都不同,這樣就使每次訓練的網路都是不一樣的,每次訓練都可以單做乙個「新」的模型;此外,隱含節點都是以一定概率隨機出現,因此不能保證每2個隱含節點每次都同時出現,這樣權值的更新不再依賴於有固定關係隱含節點的共同作用,阻止了某些特徵僅僅在其它特定特徵下才有效果的情況。

這樣dropout過程就是乙個非常有效的神經網路模型平均方法,通過訓練大量的不同的網路,來平均**概率。不同的模型在不同的訓練集上訓練(每個批次的訓練資料都是隨機選擇),最後在每個模型用相同的權重來「融合」,介個有點類似boosting演算法。

首先先介紹乙個基於matlab deeplearning toolbox版本的dropout**,主要參考(tornadomeet大牛部落格),如果了解denoisingautoencoder的訓練過程,則這個dropout的訓練過程如出一轍;不需要怎麼修改,就可以直接執行,因為在toolbox中已經修改完成了。

這個過程比較簡單,而且也沒有使用l2規則項,來限制權值的範圍;主要是用於理解dropout網路,在訓練樣本比較少的情況下,dropout可以很好的防止網路過擬合。

訓練步驟:

1.提取資料(只提取2000個訓練樣本)

2 初始化網路結構:這裡主要利用nnsetup函式構建乙個[784 100 10]的網路。由於是練習用途,所以不進行pre_training。

3 採用minibatch方法,設定dropout比例nn.dropoutfraction=0.5;利用nntrain函式訓練網路。

按比例隨機忽略隱層節點:

if(nn.dropoutfraction > 0)

if(nn.testing)%測試階段實現mean network,詳見上篇博文

nn.a = nn.a.*(1 - nn.dropoutfraction);

else

%訓練階段使用

nn.dropoutmask =(rand(size(nn.a))>nn.dropoutfraction);

nn.a =nn.a.*nn.dropoutmask;

endend

>> a=rand(1,6)

>> temp=(rand(size(a))>0.5)

>> dropout_a=a.*temp

誤差delta反向傳播實現:

% delta(i)=delta(i+1)w(i)*a(i)(1-a(i)) ;之後再進行dropout

if(nn.dropoutfraction>0)

d = d .* [ones(size(d,1),1) nn.dropoutmask];

end

權值更新值delta_w實現:

%  delta_w(i)=delta(i+1)*a(i) 

fori = 1 : (n - 1)

ifi+1==n

nn.dw = (d' * nn.a) / size(d, 1);

else

nn.dw = (d(:,2:end)' * nn.a) / size(d, 1);

endend

測試樣本錯誤率:15.500% without dropout

測試樣本錯誤率:12.100% with dropout

參考文獻:

深度學習 Dropout原理及其python實現

1 dropout簡述 dropout是解決神經網路模型過擬合的一種常用方法。dropout是指在神經網路訓練過程中,以一定的概率隨機丟棄神經元 注意是暫時丟棄 以減少神經元之間的依賴性,從而提高模型的泛化能力。dropout類似ensemble方法 組合多個模型,以獲得更好的效果,使整合的模型具有...

深度學習 Drop out

1.原理 在每個訓練批次的前向傳播中,以概率p保留部分神經元。目的是 簡化神經網路的複雜度,降低過擬合風險。根據保留概率p計算乙個概率向量r 1,0,1,0,0,1,1.然後保留部分節點。2.注意點 因為dropout一般只使用在訓練時,而測試時所有的神經元都會保留。為了使訓練和測試時對應,可以有以...

深度學習 dropout理解

深度神經網路的訓練是一件非常困難的事,涉及到很多因素,比如損失函式的非凸性導致的區域性最優值 計算過程中的數值穩定性 訓練過程中的過擬合等。其中,過擬合是很容易發生的現象,也是在訓練dnn中必須要解決的問題。過擬合我們先來講一下什麼是 過擬合 過擬合是指模型訓練到一定程度後,在訓練集上得到的測試誤差...