Dropout(丟棄)
首先需要講一下過擬合,訓練一個大型網絡時,因爲訓練數據有限,很容易出現過擬合。過擬合是指模型的泛化能力差,網絡對訓練數據集的擬合能力很好,但是換了其他的數據集,擬合能力就變差了。
在訓練深層網絡模型時,按照一定的概率,暫時將神經元丟棄,得到一個更加簡單的網絡模型,即每一個batch訓練的網絡模型都是不一樣的,都是原始網絡的子集,這些子網絡共享權值,與原始網絡的層數、參數數目相等。這樣,每一個神經元在網絡中出現都是獨立的,不會依賴其他神經元。不同的batch訓練得到更多的子網絡,提高了網絡模型的泛化能力,可以防止過擬合。
由上圖可以看出,(a)是原始神經網絡,(b)是dropout之後的網絡。
原始網絡中第層第個神經元的輸出是:
採用dropout之後的網絡中第層第個神經元的輸出是:
其中,是第層第個神經元的輸出,是第層第個神經元的權重(卷積核),
是第層第個神經元的偏置。由伯努利函數以概率隨機的產生0、1向量,來決定網絡中第層第個神經元被丟棄還是保留,0表示該神經元被dropout,就是使該神經元的激活被置零;1則表示該神經元被保留用於構成子網絡。
在測試階段:
我們前面說過,其實Dropout是類似於平均網絡模型。我們可以這麼理解,我們在訓練階段訓練了1000個網絡,每個網絡生成的概率爲Pi,然後我們在測試階段的時候,我們肯定要把這1000個網絡的輸出結果都計算一遍,然後用這1000個輸出,乘以各自網絡的概率Pi,求得的期望值就是我們最終訓練得到原始網絡的精確度。
M是Dropout中所有的子網絡的集合,所以當我們在測試階段的時候,我們就是對M中所有的子網絡,以其出現的概率進行加權平均,得到期望值,就是原始網絡的精確度。
注:經過交叉驗證,dropout率等於0.5的時候效果最好,原因是0.5的時候dropout隨機生成的網絡結構最多。
缺點是模型收斂速度會減慢。