閱讀785 返回首頁    go 阿裏雲 go 技術社區[雲棲]


激活引入非線性,池化預防過擬合(深度學習入門係列之十二)

係列文章:

一入侯門似海,深度學習深幾許(深度學習入門係列之一)

神經網絡不勝語,M-P模型似可尋(深度學習入門係列之三)

機器學習三重門,中庸之道趨若人(深度學習入門係列之四)

Hello World感知機,懂你我心才安息 (深度學習入門係列之五)

BP算法雙向傳,鏈式求導最纏綿(深度學習入門係列之八)

 

12.1 兩個看似閑扯的問題

如果你不是抬杠的話,我想你第一個問題的答案,應該是不能。因為直線的表現力非常有限,隻有曲線才能畫出更美的線條。因此,才有英國畫家和美學家威廉•荷加茲(William Hogarth,1697~1764)這個的結論:“世界上最美的線條是曲線”。

a0f4ebdbd6708d2a80863eeeb3610f4353e66d57

1 諸葛亮的“過度擬合”

12.2 追尋問題的本質

前麵我們提了兩個問題,看似閑扯,其實不然。因為它們的答案都和今天的主題相關。問題一的答案其實是想說明一個結論,就是線性的事物,表達能力不強,而非線性則相反。我們知道,從宏觀來將,在本質上,人工神經網絡就分為兩大類層:顯層和隱層。“顯層”就是我們能感知到的輸入層和輸出層,而“隱層”則是除了輸入輸出之外的無法被我們感知的層,它可以理解為數據的內在表達[1]

在第二章中,我們已經提到,如果“隱層”有足夠多的神經元,那麼神經網絡能夠以任意精度逼近任意複雜度的連續函數,這就是大名鼎鼎的通用近似定理(Universal Approximation Theorem[2]。通過在第八章BP算法的講解中,我們可以看到,神經元與神經元的連接都是基於權值的線性組合。我們知道,線性的組合依然是線性的,那網絡的表達能力就非常有限了。這樣一來,通用近似定理又是如何起作用的呢?這就得請“激活”函數出馬了?神經元之間的連接是線性的,但激活函數可不一定是線性的啊,有了非線性的激活層在,多麼玄妙的函數,我們都能近似表征出來。所以,在卷積神經網絡中,激活層是必須保留的。

第二個問題的答案,其實是想說明深度學習訓練的兩大難點:過擬合(overfitting)和欠擬合(underfitting)。那什麼是過擬合和欠擬合呢?圖12-2可形象地說明這兩個概念的差別。

03b3249c96724ffe0417ee8fa0e81fd6c6790b93

12-2 過擬合與欠擬合的直觀類比

“欠擬合”比較容易理解,就是樣本不夠,或學習算法不精,連已有數據中的特征都沒有學習好,自然當麵對新樣本做預測時,效果肯定也好不到哪裏去。比如說,在圖12-2中(右下圖),若果僅僅把樣本中的“四條腿”當作青蛙的特征,這“欠缺”的特征,就會把一隻四條腿的壁虎也當作青蛙。其實,欠擬合比較容易克服,比如在決策樹算法中擴展分枝,再比如在神經網絡中增加訓練的輪數,從而可以更加“細膩”地學習樣本種的特征。

這是因為,所謂的“已知”數據,其實也是有誤差的!精準的擬合會把這些數據的誤差給放大。從而導致,擬合得越精確,麵對新樣本時,預測的效果反而會更加糟糕。比如說圖12-2中(右上圖),誤把背上斑點當做青蛙的特征,當新來的樣本青蛙,僅僅由於背上沒有斑點(不同於樣本數據),就被判定為非青蛙,這豈不是很荒誕?“諸葛一生唯謹慎”,說的就是諸葛亮陷入“過擬合”狀態,他容易被很多細節所迷惑,自然決策的質量就會受到影響。

那該如何降低數據量呢?最簡單的策略自然就是“采樣(sampling)”了。其實,采樣的本質就是力圖以合理的方式“以偏概全”。這樣一來,數據量自然就降低了。

在卷積神經網絡中,采樣是針對若幹個相鄰的神經元而言的,因此也稱為“亞采樣(Subsampling)”。可能是“亞采樣”這個詞的逼格不夠高吧,於是研究者們又給它取了個更難懂的詞:“池化(Pooling)”。“池化”其實僅僅是個字麵的翻譯,遠沒達不到“信達雅”的要求,如果非要向“采樣”的含義靠攏,中國那句古話,“弱水三千隻取一瓢”,似乎更有韻味。南京大學周誌華老師就將其的意譯為“匯合”,這樣的翻譯似乎更加傳神。但拗不過太多人都把“Pooling”翻譯成“池化”,那我們也就“池化”叫下去吧。

12.3 細說激活層

這時,選取合適的“激活函數”就顯得非常重要了。在前麵的章節中,我們提到了常用的激活函數Sigmoid(或tanh函數),也是可用的(如圖12-3所示)。

                                                             1d3fed3cd800355141f95429a25aacb66d2a9fc8            


12-3 激活函數Sigmoid

Sigmoid之類激活函數有個很大的缺點,就是它的導數值很小。比如說,Sigmoid的導數取值範圍僅為[0, 1/4]。且當輸入數據(x)很大或者很小的時候,其導數趨都近於0。這就意味著,很容易產生所謂的梯度消失(vanishing gradient)現象。沒有了梯度的指導,那麼神經網絡的參數訓練,就如同“無頭的蒼蠅”,毫無方向感。

因此,如何防止深度神經網絡陷入梯度消失,或說如何提升網絡的訓練效率,一直都是深度學習非常熱門的研究課題。目前,在卷積神經網絡中,最常用的激活函數久是修正線性單元(Rectified Linear Unit,簡稱ReLU)。這個激活函數是由Hinton等人2010年提出來的[3]。標準的ReLU函數為f(x)=max(x,0),即當x>0時,輸出x; x<=0時,輸出0。如圖12-4所示,請注意,這是一條曲線啊,隻不過它在原點處不夠那麼圓潤而已。


408e87fe4d45b8e71c7b733df1a81bff9d1f1f05

12-4 激活函數ReLU

不要小看這個看起來有點簡陋的模型,其實它的優點還不少。相比於Sigmoid類激活函數,ReLU激活函數的優點主要體現在如下三點。

1)單側抑製。觀察圖12-4可見,當輸入小於0時,神經元處於抑製狀態。反之,當輸入大於0,神經元處於激活狀態。

2)相對寬闊的興奮邊界。觀察圖12-3和圖12-4可見,Sigmoid的激活態(即f(x)的取值)集中在中間的狹小空間,而ReLU這不同,隻要輸入大於0,神經元一直都處於激活狀態。

3)稀疏激活性。相比於Sigmoid之類的激活函數,稀疏性是ReLU的優勢所在[4]Sigmoid把抑製狀態的神經元設置一個非常小的值,但即使這個值再小,後續的計算還少不了它們的參與,計算負擔很大。但考察圖12-4可知,ReLU直接把抑製態的神經元“簡單粗暴”地設置為0,這樣一來,就使得這些神經元不再參與後續的計算,從而造成網絡的稀疏性,如圖12-5所示。

920c739f81f619d532db6776fbb7289f56c95890

12-5  ReLU激活函數產生稀疏連接關係

這個細小的變化,讓ReLU在實際應用中大放異彩,除了減少了計算量,還減少了參數的相互依存關係(網絡瘦身了不少),使其收斂速度遠遠快於其他激活函數,最後還在一定程度上緩解了過擬合問題的發生(對Dropout機製比較熟悉的讀者可能會發現,圖12-5Dropout的迭代過程何其神似!)。ReLU的卓越表現,讓深度學習的三位大咖Yann LeCunYoshua BengioGeoffery Hinton2015年表示,ReLU是深度學習領域最受歡迎的激活函數。

前麵的描述可能還過於抽象,下麵我們再用一個更為生動的案例來理解ReLU的操作,圖12-6演示了ReLU“修正”前後的特征圖譜。

5ea58de0b74115f7533689c01eb8d75a971b6d7d

12-6  ReLU“修正”前後的特征圖譜

說到ReLU激活函數有如此神奇作用,其實還有一個原因,那就是這樣的模型正好“暗合”生物神經網絡工作機理。2003年紐約大學教授Peter Lennie的研究發現[5],大腦同時被激活的神經元隻有1~4%,即神經元同時隻對輸入信號的少部分選擇性響應,大量信號被刻意地屏蔽了,這進一步表明神經元工作的稀疏性。其實,這是容易理解的,因為生物運算也是需要成本的。進化論告訴我們,作為人體最為耗能的器官,大腦盡要可能節能,才能在惡劣的環境中“適者生存”。

當然,LeRU的這種簡單直接的處理方式,也帶來一些副作用。最突出的問題就是,會導致網絡在訓練後期表現得非常脆弱,以至於這時的ReLU也被戲稱為“死掉的ReLUdying ReLU)”。目前,也有一些對研究工作對ReLU實施改進,分別提出了一係列諸如leaky-ReLUrandom ReLUPReLU[6]等優化方案,有興趣的讀者可自行前往查閱相關文獻。

12.4 詳解池化層

池化層函數實際上是一個統計函數。以如圖12-7所示的二維數據為例,如果輸入數據的維度大小為W×H,給定一個池化過濾器,其大小為w×h。池化函數考察的是在輸入數據中,大小為w×h的子區域之內,所有元素具有的某一種特性。常見的統計特性包括最大值、均值、累加和及L2範數等。池化層函數力圖用統計特性反應出來的1個值,來代替原來w×h的整個子區域。

c77299ce46fbcfa930549ce4de9a1477b7fd8557

12-7 池化操作:將池化濾波器內的所有元素用某個統計量來代替

因此,可以這麼說,池化層設計的目的主要有兩個。最直接的目的,就是降低了下一層待處理的數據量。比如說,當卷積層的輸出大小是32×32時,如果池化層過濾器的大小為2×2時,那麼經過池化層處理後,輸出數據的大小為16×16,也就是說現有的數據量一下子減少到池化前的1/4。當池化層最直接的目的達到了,那麼它的間接目的也達到了:減少了參數數量,從而可以預防網絡過擬合。

下麵我們舉例說明常用的池化策略最大化和平均化是如何工作的。我們以一維向量數據[1, 2, 3, 2]為例,來說明兩種不同的池化策略在正向傳播和方向傳播中的差異[7]

1)最大池化函數(max pooling

前向傳播操作:取濾波器最大值作為輸出結果,因此有forward(1, 2, 3, 2) = 3.

反向傳播操作:濾波器的最大值不變,其餘元素置0。因此有backward(3) = [0, 0, 3, 0]

2)平均池化函數(average pooling

前向傳播操作:取濾波器範圍所有元素的平均值作為數據結果,因此有forward(1, 2, 3, 2) = 2.

後向傳播操作:濾波器中所有元素的值,都取平均值,因此有backward(2) = [2, 2, 2, 2]

有了上麵的解釋,我們很容易得出圖12-7中所示的池化策略前向傳播結果,如圖12-8所示。

08210bb388f27d72fff82a1f543679d8eb25ae7c

12-8 兩種不同的池化策略結果比對圖

閱讀到此,讀者可能會有個疑問?對於處理圖片而言,如果池化層的過濾器2×2,就相當於將上一層4個像素合並到一個1像素。如果過濾器的大小是6×6,那就相當於將上一層36個像素合並到一個1像素,這也豈不是讓圖像更加模煳了。的確是這樣,通過池化操作後,原始圖像就好像被打上了一層馬賽克,如圖12-9所示。對池化如何影響可視化圖像的理論分析,感興趣的讀者可參閱LeCun團隊的論文[8]

5d4e01fc38ccdc9afffaae29b567b1eeac1a97e2

12-9  池化前後的特征圖譜變化(繪圖參考了Facebook團隊的資料

12-9給出了池化之後的“馬賽克”類的圖片,很顯然,人類是不喜歡這樣模煳圖片的。但請注意,計算機的“視界”和人類完全不同,池化後的圖片,絲毫不會影響它們對圖片的特征提取。

這麼說是有理論支撐的。這個理論就是局部線性變換的不變性(invariant)。它說的是,如果輸入數據的局部進行了線性變換操作(如平移或旋轉等),那麼經過池化操作後,輸出的結果並不會發生變化。局部平移“不變性”特別有用,尤其是我們關心某個特征是否出現,而不關心它出現的位置時。例如,在模式識別場景中,當我們檢測人臉時,我們隻關心圖像中是否具備人臉的特征,而並不關心人臉是在圖像的左上角和右下角。

因為池化綜合了(過濾核範圍內的)全部鄰居的反饋,即通過k個像素的統計特性而不是單個像素來提取特征,自然這種方法能夠大大提高神經網絡的性能[9]

12.5 勿忘全連接層

前麵我們講解了卷積層、激活層和池化層。但別忘了,在卷積神經網絡的最後,還有一個至關重要的“全連接層(Fully Connected Layer,簡稱FC)”。“全連接”意味著,前層網絡中的所有神經元都與下一層的所有神經元連接。全連接層設計目的在於,它將前麵各個層學習到的“分布式特征表示”,映射到樣本標記空間,然後利用損失函數來調控學習過程,最後給出對象的分類預測。

實際上,全連接層是就是傳統的多層感知器(類似於我們在第八章學過的BP網絡,不熟悉的讀者可以前往查閱)。不同於BP全連接網絡的是,卷積神經網絡在輸出層使用的激活函數不同,比如說它可能會使用Softmax函數。

這裏,我們簡單介紹一下這個Softmax函數。在數學上,Softmax函數又稱歸一化指數函數,它是邏輯函數的一種推廣,其公式如(12-2)所示。

1a43cbf62ea565dbcac409fc16fc97538cb4da7c                                                                        12-2

我們常用SVM(支持向量機)來做分類器,SVM在分類的最後,會給一係列的標簽如“貓”“狗”“船”等打一個具體分值,如[4, 1, -2],而Softmax函數有所不同,它把這些分值實施規則化(regularization),也就是說,將這些實分值轉換為一係列的概率值(信任度),如[0.95, 0.04, 0.0],如圖12-10所示。由此可見,其實SVMSoftmax是高度相互兼容的,不過是表現形式不同而已。

8d018fd077098a57b2590036e937eb9f8c79bdee

12-10  Softmax輸出層示意圖(繪圖參考了台灣大學李宏毅博士的工作

12.7 小結與思考

1)由於全連接層因為參數個數太多,容易出現過擬合的現象,你知道Hinton教授的團隊是采取的是什麼措施來弱化這樣現象嗎?(提示:Dropout

2)全連接層的性能不甚如人意,很多研究人員做了改進。比如,現任360公司首席科學家顏水成博士團隊曾發表了論文“網中網(Network In NetworkNIN[10]”。文中提出了用全局均值池化策略(Global Average PoolingGAP),取代全連接層,你知道它的工作原理是什麼嗎?

此外,向推薦讀者學習李飛飛(Feifei Li)教授團隊在斯坦福大學開設的公開課:麵向可視化識別的卷積神經網絡(CS231n: Convolutional Neural Networks for Visual Recognition),課程極其精彩。毫不誇張地說,比Ian Goodfellow等人所著的《深度學習》可讀性要高很多[9]

參考文獻

[1] 周誌華.機器學習.清華大學出版社.2016.1

[2] Hornik K, Stinchcombe M, White H. Multilayer feedforward networks are universal approximators[J]. Neural networks, 1989, 2(5): 359-366.

[3] Nair V, Hinton G E. Rectified linear units improve restricted boltzmann machines[C]// International Conference on International Conference on Machine Learning. Omnipress, 2010:807-814.

[4] Glorot X, Bordes A, Bengio Y. Deep Sparse Rectifier Neural Networks[C]// International Conference on Artificial Intelligence and Statistics. 2011.

[5] Lennie P. The Cost of Cortical Computation[J]. Current Biology Cb, 2003, 13(6):493-7.

[6] He K, Zhang X, Ren S, et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification[C]// IEEE International Conference on Computer Vision. IEEE, 2015:1026-1034.

[7] 黃安埠. 深入淺出深度學習.中國工信出版社.2017.6

[8] Boureau Y L, Ponce J, Lecun Y. A Theoretical Analysis of Feature Pooling in Visual Recognition[C]// International Conference on Machine Learning. DBLP, 2010:111-118.

[9] Ian Goodfellow, Yoshua Bengio, Aaron Courville. 深度學習.人民郵電出版社。 2017.8

[10] Lin M, Chen Q, Yan S. Network In Network[J]. Computer Science, 2013.

文章作者:張玉宏,著有《品味大數據》一書。審校:我是主題曲哥哥。

(未完待續)

 

最後更新:2017-08-13 22:22:57

  上一篇:go  MongoDb
  下一篇:go  龍果支付開源項目對賬接口說明