天天看點

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模型對應的結構是這樣的:

3. DNN神經網絡的正則化

在對訓練集中的一批資料進行訓練時,我們随機去掉一部分隐藏層的神經元,并用去掉隐藏層的神經元的網絡來拟合我們的一批訓練資料。如下圖,去掉了一半的隐藏層神經元:

3. DNN神經網絡的正則化

然後用這個去掉隐藏層的神經元的網絡來進行一輪疊代,更新所有的\(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這本書中的第七章。

繼續閱讀