3. DNN神經網絡的正則化


1. DNN神經網絡的前向傳播(FeedForward)

2. DNN神經網絡的反向更新(BP)

3. DNN神經網絡的正則化

1. 前言

和普通的機器學習算法一樣,DNN也會遇到過擬合的問題,需要考慮泛化,這里我們就對DNN的正則化方法做一個總結。

2. DNN的L1和L2正則化

想到正則化,我們首先想到的就是L1正則化和L2正則化。L1正則化和L2正則化原理類似,這里重點講述DNN的L2正則化。

而DNN的L2正則化通常的做法是只針對與線性系數矩陣\(W\),而不針對偏倚系數\(b\)。利用我們之前的機器學習的知識,我們很容易可以寫出DNN的L2正則化的損失函數。

假如我們的每個樣本的損失函數是均方差損失函數,則所有的m個樣本的損失函數為:

\[J(W,b) = \frac{1}{2m}\sum\limits_{i=1}^{m}||a^L-y||_2^2 \]

則加上了L2正則化后的損失函數是

\[J(W,b) = \frac{1}{2m}\sum\limits_{i=1}^{m}||a^L-y||_2^2 + \frac{\lambda}{2m}\sum\limits_{l=2}^L||w||_2^2 \]

其中,$\lambda\(1即我們的正則化超參數,實際使用時需要調參。而\)w\(為所有權重矩陣\)W$的所有列向量。

如果使用上式的損失函數,進行反向傳播算法時,流程和沒有正則化的反向傳播算法完全一樣,區別僅僅在於進行梯度下降法時,W的更新公式。

回想我們在DNN神經網絡的反向更新(BP)中,\(W\)的梯度下降更新公式為:

\[W^l = W^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}(a^{x, l-1})^T \]

則加入L2正則化以后,迭代更新公式變成:

\[W^l = W^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}(a^{i, l-1})^T -\alpha \lambda W^l \]

注意到上式中的梯度計算中\(\frac{1}{m}\)我忽略了,因為\(\alpha\)是常數,而除以\(m\)也是常數,所以等同於用了新常數\(\alpha\)來代替\(\frac{\alpha}{m}\)。進而簡化表達式,但是不影響損失算法。

類似的L2正則化方法可以用於交叉熵損失函數或者其他的DNN損失函數,這里就不累述了。

3. DNN通過集成學習的思路正則化

除了常見的L1和L2正則化,DNN還可以通過集成學習的思路正則化。在集成學習原理中,我們講到集成學習有Boosting和Bagging兩種思路。而DNN可以用Bagging的思路來正則化。常用的機器學習Bagging算法中,隨機森林是最流行的。它 通過隨機采樣構建若干個相互獨立的弱決策樹學習器,最后采用加權平均法或者投票法決定集成的輸出。在DNN中,我們一樣使用Bagging的思路。不過和隨機森林不同的是,我們這里不是若干個決策樹,而是若干個DNN的網絡。

首先我們要對原始的\(m\)個訓練樣本進行有放回隨機采樣,構建\(N\)\(m\)個樣本的數據集,然后分別用這\(N\)組數據集去訓練我們的DNN。即采用我們的前向傳播算法和反向傳播算法得到N個DNN模型的\(W,b\)參數組合,最后對\(N\)個DNN模型的輸出用加權平均法或者投票法決定最終輸出。

不過用集成學習Bagging的方法有一個問題,就是我們的DNN模型本來就比較復雜,參數很多。現在又變成了\(N\)個DNN模型,這樣參數又增加了\(N\)倍,從而導致訓練這樣的網絡要花更加多的時間和空間。因此一般N的個數不能太多,比如5-10個就可以了。

4. DNN通過Dropout正則化

這里我們再講一種和Bagging類似但是又不同的正則化方法:Dropout。

所謂的Dropout指的是在用前向傳播算法和反向傳播算法訓練DNN模型時,一批數據迭代時,隨機的從全連接DNN網絡中去掉一部分隱藏層的神經元。

比如我們本來的DNN模型對應的結構是這樣的:

image

在對訓練集中的一批數據進行訓練時,我們隨機去掉一部分隱藏層的神經元,並用去掉隱藏層的神經元的網絡來擬合我們的一批訓練數據。如下圖,去掉了一半的隱藏層神經元:

image

然后用這個去掉隱藏層的神經元的網絡來進行一輪迭代,更新所有的\(W,b\)。這就是所謂的dropout。

當然,dropout並不意味着這些神經元永遠的消失了。在下一批數據迭代前,我們會把DNN模型恢復成最初的全連接模型,然后再用隨機的方法去掉部分隱藏層的神經元,接着去迭代更新\(W,b\)。當然,這次用隨機的方法去掉部分隱藏層后的殘缺DNN網絡和上次的殘缺DNN網絡並不相同。

總結下dropout的方法: 每輪梯度下降迭代時,它需要將訓練數據分成若干批,然后分批進行迭代,每批數據迭代時,需要將原始的DNN模型隨機去掉部分隱藏層的神經元,用殘缺的DNN模型來迭代更新\(W,b\)。每批數據迭代更新完畢后,要將殘缺的DNN模型恢復成原始的DNN模型。

從上面的描述可以看出dropout和Bagging的正則化思路還是很不相同的。dropout模型中的W,b是一套,共享的。所有的殘缺DNN迭代時,更新的是同一組\(W,b\);而Bagging正則化時每個DNN模型有自己獨有的一套\(W,b\)參數,相互之間是獨立的。當然他們每次使用基於原始數據集得到的分批的數據集來訓練模型,這點是類似的。

使用基於dropout的正則化比基於bagging的正則化簡單,這顯而易見,當然天下沒有免費的午餐,由於dropout會將原始數據分批迭代,因此原始數據集最好較大,否則模型可能會欠擬合。

5. DNN通過增強數據集正則化

增強模型泛化能力最好的辦法是有更多更多的訓練數據,但是在實際應用中,更多的訓練數據往往很難得到。有時候我們不得不去自己想辦法能無中生有,來增加訓練數據集,進而得到讓模型泛化能力更強的目的。

對於我們傳統的機器學習分類回歸方法,增強數據集還是很難的。你無中生有出一組特征輸入,卻很難知道對應的特征輸出是什么。但是對於DNN擅長的領域,比如圖像識別,語音識別等則是有辦法的。以圖像識別領域為例,對於原始的數據集中的圖像,我們可以將原始圖像稍微的平移或者旋轉一點點,則得到了一個新的圖像。雖然這是一個新的圖像,即樣本的特征是新的,但是我們知道對應的特征輸出和之前未平移旋轉的圖像是一樣的。

6. 總結

DNN的正則化的方法是很多的,還是持續的研究中。在Deep Learning這本書中,正則化是洋洋灑灑的一大章。里面提到的其他正則化方法有:Noise Robustness, Adversarial Training,Early Stopping等。如果大家對這些正則化方法感興趣,可以去閱讀Deep Learning這本書中的第七章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM