2.1.2 Dropout正则化以及其他正则化
Dropout正則化
Dropout介紹
除了L2正則化之外,還有一個很重要的正則化方法叫隨機失活(Dropout),下面,我們來了解一下。
如圖所示,假設網絡中的每一層的節(jié)點都以拋硬幣的形式來設置概率,每一個節(jié)點得以保留和消除的概率都是0.5。
設置完節(jié)點之后,我們會刪除得分是0分節(jié)點,然后刪除從該節(jié)點進出的連線。最后得到一個節(jié)點更少,規(guī)模更小的網絡。之后我們用反向傳播算法進行訓練。
其他樣本,我們也按照這個方法進行訓練,即刪除一些節(jié)點,然后用一些精簡的網絡進行訓練。對于每一個樣本,我們都用精簡的網絡進行訓練。
如何實施Dropout
實施Dropout的方法有很多,最常見的是反向隨機失活(Inverted Dropout)
如圖所示,我們使用三層神經網絡舉例。
d3表示一個三層的Dropout向量,keep-prob是一個具體的數,比如說上個例子中的0.5,這個例子我們用0.8來表示。這個數表示的是保留某個隱藏單元的概率
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep-prob這行代碼表示的是它消除任意一個隱藏單元的概率是0.2,它的作用就是生成一個隨機矩陣。也就是對于每一個隱藏單元而言,d3的值是1的概率都是0.8,而對應的值是0的概率是0.2。
接下來我們要做的是從第三層獲取激活函數。
a3 = np.multiply(a3, d3)他的作用就是過濾d3中所有等于0的元素。乘法運算最終把d3中的相應元素歸零。
最后,我們進行
a3 /= keep-prob他的功能是比如就像圖中下面部分說的
z[4]=w[4]a[3]+b[4]
如果a3的值減少了20%,那么直接計算的話z的值一定會受到影響。為了不影響這個z的值得話,我們對a3除以一個keep-prob。
這個就是Dropout的反向隨機失活(Inverted Dropout)實現,不管keep-prob的值是多少,確保a3的期望值不變
在測試階段進行預測
在測試階段,我們不使用Dropout,因為在測試階段,我們不希望輸出的值是隨機的。如果在測試階段使用Dropout函數,那么預測值就會收到干擾。
理解Dropout
Dropout可以隨機的刪除神經網絡中的節(jié)點,這一做法實在是有點瘋狂。但是為什么正則化可以發(fā)揮這么大的作用,我們一起來了解一下。
如圖所示,神經網絡下面的每一個參數是keep-prob的不同的數值,他代表了每一層保留單元的概率。所以不同層的keep-prob值是可以變化的。對于第二層而言,w的矩陣比較大,所以我們可以把keep-prob的值設置的低一些。
因此,如果你擔心某些層可能比其他的層更容易發(fā)生過擬合,那么你可以把這個層的參數設置的更低一些。
但是我們要注意的是,除非算法發(fā)生了過擬合,一般不建議使用Dropout。Dropout的一大缺點就是cost function不再明確定義了,每次迭代都會隨機的移除一些節(jié)點。這樣就不太容易去檢查梯度下降的性能了。通常不移除節(jié)點的話cost function的值是在不斷下降的,但是移除了節(jié)點之后就不好說了。不一定可以保證J單調遞減。
其他正則化方法
我們先來介紹一下early stopping的概念。
如圖所示,梯度下降過程中cost function的值在不斷減小。然而驗證集的誤差可能會像紫色曲線。
early stopping的概念就是說,一個神經網絡在這一點之前迭代的很好,我們在此刻停止訓練吧,得到的驗證集誤差。
這是什么原因呢?
因為你的神經網絡在還沒有迭代很多次的時候,你的參數w的值接近于0。而在迭代過程中w的值會逐漸變得越來越大。
因此early stopping要的就是我們在此刻停止迭代過程,得到一個較小的w。避免了神經網絡的過擬合。
但是early stopping也有不足之處。
我們在訓練一個機器學習模型的時候,通常希望他的成本函數(cost function)盡可能的小,同時又不要過擬合,然而early stopping因為早早的就停止了迭代過程,所以他無法保證我的J盡可能的小。
總結
以上是生活随笔為你收集整理的2.1.2 Dropout正则化以及其他正则化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.1.1 正则化基本介绍
- 下一篇: 2.1.3 正则化(归一化)的用处以及何