2020-5-22 吴恩达-改善深层NN-w1 深度学习的实用层面(1.7 理解 Dropout--压缩权重/分层设置keep-prob)
1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai
1.7 理解 Dropout Why does drop out work?
- 1.單個神經元實施Dropout
- 2.NN實施Dropout
- 3.兩個使用Dropout的經驗
Dropout可以隨機刪除網絡中的神經單元,他為什么可以通過正則化發揮如此大的作用呢?
上一節課已經介紹過,Dropout可以隨機刪除網絡中的神經單元,每次迭代后,NN都比以前更小。采用一個較小的NN和使用正則化的效果是一樣的。
1.單個神經元實施Dropout
我們從單個神經元入手。
如上圖,這個單元的工作就是輸入并生成一些有意義的輸出。
現在通過dropout,該單元的輸入幾乎被消除,有時這兩個單元會被刪除,有時會刪除其它單元。
也就是說,上圖中中間的單元,它不能依靠任何特征,因為特征都有可能被隨機清除,或者說該單元的輸入都可能被隨機清除。
我不愿意把所有賭注都放在一個節點上,不愿意給任何一個輸入加上太多權重,因為它可能會被刪除。因此該單元將通過這種方式積極地傳播開,并為單元的四個輸入增加一點權重,通過傳播所有權重,dropout將產生收縮權重的平方范數的效果,和我們之前講過的正則化類似,實施dropout的結果是它會壓縮權重,并完成一些預防過擬合的外層正則化。
事實證明,dropout是一種正則化的替代形式。
而L2對不同權重的衰減是不同的,它取決于倍增的激活函數的大小。
總結
dropout的功能類似于L2正則化,與L2正則化不同的是,被應用的方式不同,dropout也會有所不同,甚至更適用于不同的輸入范圍。
2.NN實施Dropout
上圖是一個有3個輸入特征的網絡,每層分別由7,7,3,2,1個節點。有一個要選擇的參數是keep-prob,它代表每一層上保留單元的概率。
實施dropout的另一個細節是,不同層的keep-prob也可以變化。
- 第一層權重矩陣W[1]維度3x7
- 第二層權重矩陣W[2]維度7x7
- 第三層權重矩陣W[3]維度7x3
- 第四層權重矩陣W[4]維度3x2
- 第五層權重矩陣W[5]維度2x1
W[2]是最大的權重矩陣,因為它擁有最大參數集,即7×7。
- 為了預防矩陣過擬合,第二層的keep-prob值應該相對較低,假設是0.5。
- 對于其它層,過擬合的程度可能沒那么嚴重,它們的keep-prob值可能高一些,可能是0.7。
- 如果在某一層,我們不必擔心其過擬合的問題,那么keep-prob可以為1。這意味著保留所有單元,并且不在這一層使用dropout。
keep-prob設置如下圖
再次強調一下,對于有可能出現過擬合,且含有諸多參數的層,我們可以把keep-prob設置成比較小的值,以便應用更強大的dropout。有點像在處理L2正則化的正則化參數λ\lambdaλ,我們嘗試對某些層施行更多正則化。
對于輸入層,或者說第零層,從技術上講,我們也可以應用dropout,這樣有機會刪除一個或多個輸入特征,雖然現實中我們通常不這么做。
keep-prob=1,是非常常用的輸入值,當然也可以是0.9,但是消除一半的輸入特征是不太可能的。通常情況下,即使你對輸入層應用dropout,那keep-prob也會接近于1。
總結
如果你擔心某些層比其它層更容易發生過擬合
- 一個方案是,把某些層的keep-prob值設置得比其它層更低,缺點是為了使用交叉驗證,你要搜索更多的超級參數
- 另一種方案是,在一些層上應用dropout,而有些層不用dropout,應用dropout的層只含有一個超級參數,就是keep-prob
3.兩個使用Dropout的經驗
dropout有兩個實施過程中的經驗。
- 經驗1
實施dropout,在計算機視覺領域有很多成功的第一次。
計算視覺中的輸入量非常大,輸入太多像素,以至于沒有足夠的數據,所以dropout在計算機視覺中應用得比較頻繁。有些計算機視覺研究人員非常喜歡用它,幾乎成了默認的選擇。
但要牢記一點,dropout是一種正則化方法,它有助于預防過擬合,因此除非算法過擬合,不然不要使用dropout。所以dropout在其它領域應用得比較少。
- 經驗2
dropout一大缺點就是J代價函數不再被明確定義,每次迭代,都會隨機移除一些節點,所以很難double check梯度下降的性能。定義明確的代價函數每次迭代后都會下降,因為要優化的代價函數J實際上并沒有明確定義,或者說在某種程度上很難計算,所以我們失去了調試工具來繪制梯度下降曲線。
我通常會關閉dropout函數,將keep-prob的值設為1,運行代碼,確保J函數單調遞減,然后再打開dropout函數。雖然我們并沒有關于其他方法性能的數據統計,我覺得你也可以嘗試其它方法,把它們與dropout方法一起使用。
總結
以上是生活随笔為你收集整理的2020-5-22 吴恩达-改善深层NN-w1 深度学习的实用层面(1.7 理解 Dropout--压缩权重/分层设置keep-prob)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鬼武者2一招必杀
- 下一篇: dropout keep_prob参数