Dropout 做著隨機敲掉您網路上的單元 看似瘋狂的事 為什麼它可以做到正則化? 讓我們來得到一些比較好的直覺 在先前的影片中,在先前的影片中, 我用 dropout 隨機敲掉您網路上的單元 的這種直覺 這樣講好像是在每個循環中 您作用在小一點的神經網路 所以使用小一點的神經網路 似乎像是有正則化的影響 第二種直覺是 讓我們從一個單一的單元來看 假設是這一個 對於這個單元它的工作是對於輸入 它需要產生有意義的輸出 現在因為 dropout 這些輸入有可能隨機被去掉 有時候這兩個單元被消除 有時候不同的單元被消除 這個意思是這個單元 我用紫色來畫一個圈 它不能依賴任何一個特徵 因為任一個特徵都有可能 隨機跑走或者 任一個它的輸入都可能隨機跑掉 特別是會造成將所有的賭注 放在這些輸入上的遲疑 假設說這個輸入 權重來說, 我們會遲疑放太多的權重 在任一個輸入因為它會跑掉 所以這個單元會主動地分散權重 會給一點點權重到 這四項每一個的輸入 而分散所有的權重 這會傾向縮減權重的平方範數的影響 所以類似於我們看到在 L2正則化 建置 dropout 的影響是它會縮減 權重來做類似於 L2 正則化的動作 來幫助避免過適 但實際上 dropout 可以正式地 證明是一種自我調適的形式而不需要正則化 但 L2 懲罰在不同的權重是有所不同 它依據啟動值的大小來 用它的方法相乘 但總結來說, 是可能證明 dropout 跟 L2 正則化有類似的影響 只是 L2 正則化應用不同的方式可能 些微不同, 甚至於能適應於 不同比例的輸入 另一個細節當您建置 dropout 這裡有一個網路有三個輸入特徵 這裡有七個隱藏單元 七個, 三個, 兩個, 一個 我們需要選擇參數 其中之一是 keep_prob, 也就是保留 每一層的單元的機會 所以, 改變 keep_prob 在每一層也是可行的 所以對於第一層 您的矩陣會是 3 乘 7 您的第二個權重矩陣會是 7 乘 7 w[3] 會是 7 乘 3 等等 所以 w2 實際上是最大一個權重矩陣 因為它實際上是最大的參數集 在 w[2] 是 7 乘 7 所以為了避免, 為了減低那個矩陣過適 也許對於這一層 我猜這是第二層 您也許讓 keep_prob 相對低一點 假設說是 0.5 但對於不同層您或許比較不擔心過適 您可以有高一點的 keep_prob 也許就是 0.7 如果一些層我們一點都不擔心過適 您可以將 keep_prob 設為 1.0 為了清楚起見, 我用紫色框框畫起來的數字 這些可以是不同的 keep_prob 在不同層 請注意設 keep_prob 為 1.0 意思是 您將保留所有的單元 您實際上並不使用 dropout 在那一層 但對於那些您比較擔心會過適的層級 像是有很多參數的層級 您可以設 keep_prob 小一點來 應用 dropout 強而又力的形式 有點像是調整音量似的 正則化參數 lambda 在 L2 正則化您試著 正則化一些層比某些層多 技術上而言, 您可以應用 dropout 到輸入層 您可以有一些機會來丟掉一些輸入特徵 雖然實作上, 通常不這麼做 所以,在輸入層通常設 keep_prob 為 1.0 您也可以用很高的數字像是 0.9 但比較少看到您想去除一半的輸入特徵 所以 keep_prob, 如果您用這個法則 即使您應用 dropout 在輸入層 也會是一個接近於 1 的數字 總結一下 如果您比較擔心一些層會過適 比起其他層而言 您可以設低一點的 keep_prob 比起其他層 缺點是, 這會讓您 需要搜尋更多的超參數使用在交叉驗證集 另外一種方式是一些層您應用 dropout 而一些層您不用 dropout 然後只用一個超參數 也就是 keep_prob 對於 您想應用 dropout 的那些層 在結束之前, 一些建置的提示 很多第一個成功建置 dropout 是在電腦視覺 在電腦視覺裡 輸入大小是如此之大 輸入所有這些像素值 資料幾乎從來都不夠 (因為輸入特徵太多, 訓練例子會不夠) 所以 dropout 很常用於電腦視覺 有一些電腦視覺研究人員幾乎總是使用它 幾乎是預設 但請記得, dropout 是一種正則化技巧 來幫助避免過適 所以, 除非我們演算法過適 我不會麻煩用到 dropout 所以在其他應用領域用的比較少 只是在電腦視覺裡 您通常沒有足夠資料 所以您幾乎總是過適 這是為什麼一些電腦視覺研究者要用 dropout 但這樣的直觀並不總是一般化到其他領域 一個重大的缺點是 dropout 的成本函數 J 不再完整定義 在每一個循環中, 您隨機去掉一些節點 如果您重複檢查 梯度下降的表現 實際上比較難檢驗您有 定義良好的成本函數 J 在每一次循環時望下坡走 因為您的成本函數 J 在做 最佳化時實際上是比較小的 定義不明, 或者說很難去計算 您會失掉除錯工具來畫圖 像這樣圖形 我通常會將 dropout 關掉 您會設 keep_prob 等於 1 然後我跑程式,確定它是單調遞減的函數 J 然後將 dropout 開啟, 希望 我在使用 dropout 時 我的新程式不會有臭蟲 因為我想您需要其他方式(來除錯) 但不適用畫這圖來確定您的程式可行 來讓程式可行 即使使用 dropout 所以有了這個, 還有 一些更多的正則化技巧值得您知道 讓我們在下一段影片中談更多的技巧