1. 程式人生 > >【機器學習】神經網路DNN的正則化

【機器學習】神經網路DNN的正則化

和普通的機器學習演算法一樣,DNN也會遇到過擬合的問題,需要考慮泛化,之前在【Keras】MLP多層感知機中提到了過擬合、欠擬合等處理方法的問題,正則化是常用的手段之一,這裡我們就對DNN的正則化方法做一個總結。

1. DNN的L1&L2正則化

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

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

假如我們的每個樣本的損失函式是均方差損失函式,則所有的m個樣本的損失函式為:這裡寫圖片描述


則加上了L2正則化後的損失函式是:這裡寫圖片描述

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

如果使用上式的損失函式,進行反向傳播演算法時,流程和沒有正則化的反向傳播演算法完全一樣,區別僅僅在於進行梯度下降法時,W的更新公式,W的梯度下降更新公式為:這裡寫圖片描述

則加入L2正則化以後,迭代更新公式變成:這裡寫圖片描述
注意到上式中的梯度計算中1/m我忽略了,因為α是常數,而除以m也是常數,所以等同於用了新常數α來代替α/m。進而簡化表示式,但是不影響損失演算法。

2. 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個就可以了

3. DNN通過dropout 正則化

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

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

比如我們本來的DNN模型對應的結構是這樣的:
這裡寫圖片描述

在對訓練集中的一批資料進行訓練時,我們隨機去掉一部分隱藏層的神經元,並用去掉隱藏層的神經元的網路來擬合我們的一批訓練資料。如下圖,去掉了一半的隱藏層神經元:
這裡寫圖片描述

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

比如Dropout的引數設定為0.25,在啟用層之後,Dropout層會隨機抽出1/4的資料集的啟用值更改為0,雅思託福gre同時將剩餘神經元的輸出值等比放大4/3,使得輸出整體維持量級恆定。相當於使剩餘的神經元負責被扔掉部分神經元的工作,學習了冗餘的表示式。

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

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

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

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

4. DNN通過增強資料集正則化

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

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