dropout理解 簡易理解

2021-09-24 21:45:35 字數 1922 閱讀 2973

所謂的dropout,從字面意思理解,就是「拋棄」。

拋棄什麼呢?拋棄的是網路中隱藏層的節點(輸入層和輸出層是由資料型別和問題型別決定的,當然不能動啦!)。

怎麼拋棄呢?dropout有乙個引數p,p的取值介於0和1,含義是每個節點有p概率被拋棄。

被拋棄對這個節點有什麼影響呢?dropout對於節點的影響表現在,一旦某個節點被選定為拋棄的節點,那麼對於神經網路的forward過程這個節點的輸出就被置為0;對於backward過程,這個節點的權重和偏置不參與更新。也就是說,在某次迭代中,網路中有部分節點不參與這一次的訓練,整個網路結構等效於下圖右側(左側是dropout前的)。

回歸到最重要的問題:為什麼dropout效果這麼好。hinton大神的解釋是dropout減少了節點之間的共適應。共適應這個詞說起來好專業,我舉個例子來說一下我的理解:

假設乙個網路中有10個節點,有乙個perfect節點,它的取值剛剛好,另外9個節點的取值還需要調整,也就是所謂的一神帶9坑!這個時候網路的輸出層往回傳遞誤差,這10個節點都不知道自己現在的取值是不是合適的啊,畢竟咱們開了上帝視角,而它們沒有。所以它們就根據傳回來的誤差更新自己的取值,雖然其他9個節點可能有更合適的取值,但是這個perfect的值就破壞了啊。而且,在更新取值的時候,其他9個坑逼節點心想「這個誤差是咱們10個共同造成的,嗯,我只要把我那份誤差更新掉就行」,而實際上最終的誤差是9個節點造成的,也就是說這些個坑逼節點對自己的錯誤認識還不夠充分!不行,不能這麼寵著它們!乙個很簡單的想法,就是讓perfect不工作,得了,您歇著吧!這個時候9個節點就可以更好的更新自己權值,直到出現下乙個perfect節點。

但是,問題是咱們也不知道哪個節點是perfect節點啊,咱們訓練的時候別說上帝視角了,有時候就連哪些個節點是dead node都看不穿啊。那怎麼辦呢?就讓部分節點先不工作吧,先富帶後富。假設不工作的節點全是坑壁節點,那對於perfect節點就是好事啊,畢竟最後的誤差就小了。如果不工作的節點恰好有perfect節點,那對於那些個正在工作的菜雞節點就是好事,讓他們能正確認識到自己的錯誤!這樣網路就能訓練得更好了。

當節點之間的共適應性減少了,除了能讓網路取得更好的引數外,還能具有模型融合的優勢。做過資料探勘比賽的都知道,即使是幾個弱雞模型ensemble一下,也能有非常亮眼的表現。這就是dropout帶來的另外乙個好處。

本次內容需要使用一下 sklearn 資料庫當中的資料, 沒有安裝 sklearn 的同學可以參考一下這個教程 安裝一下. 然後import以下模組.

from sklearn.datasets import load_digits

from sklearn.cross_validation import train_test_split

from sklearn.preprocessing import labelbinarizer

......wx_plus_b = tf.nn.dropout(wx_plus_b, keep_prob)

這裡的keep_prob是保留概率,即我們要保留的結果所佔比例,它作為乙個placeholder,在run時傳入, 當keep_prob=1的時候,相當於100%保留,也就是dropout沒有起作用。 下面我們分析一下程式結構,首先準備資料,

訓練中keep_prob=1時,就可以暴露出overfitting問題。keep_prob=0.5時,dropout就發揮了作用。 我們可以兩種引數分別執行程式,對比一下結果。

keep_prob=1時,模型對訓練資料的適應性優於測試資料,存在overfitting,輸出如下: 紅線是train的誤差, 藍線是test的誤差.

​當keep_prob=0.5時效果好了很多,輸出如下:

簡單理解dropout

dropout是cnn 卷積神經網路 中的乙個trick,能防止過擬合。關於dropout的詳細內容,還是看 原文好了 hinton,g.e.et al.2012 improving neural networks by preventing co adaptation of feature det...

深度學習 dropout理解

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

深度學習 理解dropout

dropout是指在深度學習網路的訓練過程中,對於神經網路單元,按照一定的概率將其暫時從網路中丟棄。注意是暫時,對於隨機梯度下降來說,由於是隨機丟棄,故而每乙個mini batch都在訓練不同的網路。dropout是cnn中防止過擬合提高效果的乙個大殺器。dropout如何工作 dropout以概率...