深層神經網絡結構及可能存在的致命問題詳解

原文鏈接: http://blog.csdn.net/erlib/article/details/53585134

Logistic迴歸、傳統多層神經網絡

1.1 線性迴歸、線性神經網絡、Logistic/Softmax迴歸

線性迴歸是用於數據擬合的常規手段,其任務是優化目標函數:h(θ)=θ+θ1x1+θ2x2+....θnxn

線性迴歸的求解法通常爲兩種:

①解優化多元一次方程(矩陣)的傳統方法,在數值分析裏通常被稱作”最小二乘法",公式θ=(XTX)1XTY

②迭代法:有一階導數(梯度下降)優化法、二階導數(牛頓法)。

方程解法侷限性較大,通常只用來線性數據擬合。而迭代法直接催生了用於模式識別的神經網絡誕生。

最先提出Rosenblatt的感知器,借用了生物神經元的輸入-激活-傳遞輸出-接受反饋-矯正神經元的模式,將數學迭代法抽象化。

並且在線性迴歸輸出的基礎上,添加了輸出校正,通常爲階躍函數,將回歸的數值按正負劃分。

爲了計算簡單,此時梯度下降優化法被廣泛採用,梯度優化具有計算廉價,但是收斂慢的特點(一次收斂,而牛頓法是二次收斂)。

爲了應對精確的分類問題,基於判別概率模型P(Y|X)被提出,階躍輸出被替換成了廣義的概率生成函數Logistic/Softmax函數,從而能平滑生成判別概率。

這三個模型,源於一家,本質都是對輸入數據進行線性擬合/判別,當然最重要的是,它們的目標函數是多元一次函數,是凸函數

1.2 雙層經典BP神經網絡

由Hinton協提出多層感知器結構、以及Back-Propagation訓練算法,在80年代~90年代鼎盛一時。

經過近20年,即便是今天,也被我國各領域的CS本科生、研究生,其他領域(如機械自動化)學者拿來嚇唬人。

至於爲什麼是2層,因爲3層效果提升不大,4層還不如2層,5層就太差了。[Erhan09]

這是讓人大跌眼鏡的結果,神經網絡,多麼高大上的詞,居然就兩層,這和生物神經網絡不是差遠了?

所以在90年代後,基於BP算法的MLP結構被機器學習界遺棄。一些新寵,如決策樹/Boosing系、SVM、RNN、LSTM成爲研究重點。

1.3 多層神經網絡致命問題:非凸優化

這個問題得從線性迴歸一族的初始化Weight說起。線性家族中,W的初始化通常被置爲0。

如果你曾經寫過MLP的話,應該犯過這麼一個錯誤,將隱層的初始化設爲0。

然後,這個網絡連基本的異或門函數[參考]都難以模擬。先來看看,線性迴歸和多層神經網絡的目標函數曲面差別。

線性迴歸,本質是一個多元一次函數的優化問題,設f(x,y)=x+y

多層神經網絡(層數K=2),本質是一個多元K次函數優化問題,設f(x,y)=xy

值得一提的是,SVM是個K=2的神經網絡,但是Vapnik轉換了目標函數,將二次優化變成了二次規劃。

相對於盲目搜索的優化問題,規劃問題屬於凸優化,容易搜到精確解。但是缺陷是,沒人能將三次優化變成三次規劃。

也就是說,K>=3的神經網絡,如果訓練到位,是可以輕鬆超越SVM的。

在線性迴歸當中,從任意一個點出發搜索,最終必然是下降到全局最小值附近的。所以置0也無妨。

而在多層神經網絡中,從不同點出發,可能最終困在(stuck)這個點所在的最近的吸引盆(basin of attraction)。[Erhan09, Sec 4.2]

吸引盆一詞非常蹩腳,根據百度的解釋:它像一個匯水盆地一樣,把處於山坡上的雨水都集中起來,使之流向盆底。

其實就是右圖凹陷的地方,使用梯度下降法,會不自覺的被周圍最近的吸引盆拉近去,達到局部最小值。此時一階導數爲0。從此訓練停滯。

局部最小值是神經網絡結構帶來的揮之不去的陰影,隨着隱層層數的增加,非凸的目標函數越來越複雜,局部最小值點成倍增長。[Erhan09, Sec 4.1]

因而,如何避免一開始就吸到一個倒黴的超淺的盆中呢,答案是權值初始化。爲了統一初始化方案,通常將輸入縮放到[1,1]

經驗規則給出,WUniform(1N,1N)

,Uniform爲均勻分佈。

Bengio組的Xavier在2010年推出了一個更合適的範圍,能夠使得隱層Sigmoid系函數獲得最好的激活範圍。[Glorot10]

對於Log-Sigmoid:   [46LayerInput+LayerOut,46LayerInput+LayerOut]

對於Tanh-Sigmoid:  [6LayerInput+LayerOut,6LayerInput+LayerOut]

這也是爲什麼多層神經網絡的初始化隱層不能簡單置0的原因,因爲0很容易陷進一個非常淺的吸引盆,意味着局部最小值非常大。

糟糕的是,隨機均勻分佈儘管獲得了一個稍微好的搜索起點,但是卻又更高概率陷入到一個稍小的局部最小值中。[Erhan10, Sec 3]

所以,從本質上來看,深度結構帶來的非凸優化仍然不能解決,這限制着深度結構的發展。

1.4 多層神經網絡致命問題:Gradient Vanish

這個問題實際上是由激活函數不當引起的,多層使用Sigmoid系函數,會使得誤差從輸出層開始呈指數衰減。見[ReLu激活函數]

因而,最滑稽的一個問題就是,靠近輸出層的隱層訓練的比較好,而靠近輸入層的隱層幾乎不能訓練。

以5層結構爲例,大概僅有第5層輸出層,第4層,第3層被訓練的比較好。誤差傳到第1、2層的時候,幾乎爲0。

這時候5層相當於3層,前兩層完全在打醬油。當然,如果是這樣,還是比較樂觀的。

但是,神經網絡的正向傳播是從1、2層開始的,這意味着,必須得經過還是一片混亂的1、2層。(隨機初始化,亂七八糟)

這樣,無論你後面3層怎麼訓練,都會被前面兩層給搞亂,導致整個網絡完全退化,真是連雞肋都不如。

幸運的是,這個問題已經被Hinton在2006年提出的逐層貪心預訓練權值矩陣變向減輕,最近提出的ReLu則從根本上提出瞭解決方案。

2012年,Hinton組的Alex Krizhevsky率先將受到Gradient Vanish影響較小的CNN中大規模使用新提出的ReLu函數。

2014年,Google研究員賈揚清則利用ReLu這個神器,成功將CNN擴展到了22層巨型深度網絡,見知乎

對於深受Gradient Vanish困擾的RNN,其變種LSTM也克服了這個問題。

1.5 多層神經網絡致命問題:過擬合

Bengio在Learning Deep Architectures for AI 一書中舉了一個有趣的例子。

他說:最近有人表示,他們用傳統的深度神經網絡把訓練error降到了0,也沒有用你的那個什麼破Pre-Training嘛!

然後Bengio自己試了一下,發現確實可以,但是是建立在把接近輸出層的頂隱層神經元個數設的很大的情況下。

於是他把頂隱層神經元個數限到了20,然後這個模型立馬露出馬腳了。

無論是訓練誤差、還是測試誤差,都比相同配置下的Pre-Training方法差許多。

也就是說,頂層神經元在對輸入數據直接點對點記憶,而不是提取出有效特徵後再記憶。

這就是神經網絡的最後一個致命問題:過擬合,龐大的結構和參數使得,儘管訓練error降的很低,但是test error卻高的離譜。

過擬合還可以和Gradient Vanish、局部最小值混合三打,具體玩法是這樣的:

由於Gradient Vanish,導致深度結構的較低層幾乎無法訓練,而較高層卻非常容易訓練。

較低層由於無法訓練,很容易把原始輸入信息,沒有經過任何非線性變換,或者錯誤變換推到高層去,使得高層解離特徵壓力太大。

如果特徵無法解離,強制性的誤差監督訓練就會使得模型對輸入數據直接做擬合。

其結果就是,A Good Optimation But a Poor Generalization,這也是SVM、決策樹等淺層結構的毛病。

Bengio指出,這些利用局部數據做優化的淺層結構基於先驗知識(Prior): Smoothness

即,給定樣本(xi,yi),儘可能從數值上做優化,使得訓練出來的模型,對於近似的x,輸出近似的y。

然而一旦輸入值做了泛型遷移,比如兩種不同的鳥,鳥的顏色有別,且在圖像中的比例不一,那麼SVM、決策樹幾乎毫無用處。

因爲,對輸入數據簡單地做數值化學習,而不是解離出特徵,對於高維數據(如圖像、聲音、文本),是毫無意義的。

然後就是最後的事了,由於低層學不動,高層在亂學,所以很快就掉進了吸引盆中,完成神經網絡三殺。

 

特徵學習與Pre-Training

2.1 Local Represention VS Distrubuted Represention

經典的使用Local Represention算法有:

①在文本中常用的:One-Hot Represention,這種特徵表達方式只是記錄的特徵存在過,

而不能體現特徵之間的關聯( 比如從語義、語法、關聯性上)。且特徵表示過於稀疏,帶來維數災難。

②高斯核函數:看起來要高明一些,它將輸入懸浮在覈中心,按照距離遠近來決定哪些是重要的,哪些是不重要的。

將特徵轉化成了連續的數值,避免了表達特徵需要的維數過高。但是正如KNN一樣,片面只考慮重要的,忽視不重要的,

會導致較差的歸納能力,而對於高度特徵稠密的數據(如圖像、聲音、文本),則可能都無法學習。

③簇聚類算法:將輸入樣本劃分空間,片面提取了局部空間特徵,導致較差的歸納能力。

④決策樹系:同樣的將輸入樣本劃分空間問題。

以上,基本概括了數據挖掘十大算法中核心角色,這說明,數據挖掘算法基本不具備挖掘深度信息的能力。

相比之下,處理經過人腦加工過的統計數據,則更加得心應手。

因而,模式識別與數據挖掘的偏重各有不同,儘管都屬於機器學習的子類。

爲了提取出輸入樣本模式中的泛型關聯特徵,一些非監督學習算法在模式識別中被廣泛使用,如PCA、ICA。

PCA的本質是:[Input]=>(Decompose)[Output][LinearBase]

即線性分解出特徵向量,使得輸入->輸出之間做了一層線性變換,有用的關聯特徵信息被保留,相當於做了一個特徵提取器。

分解出來的特徵稱之爲Distrubuted Represention,NLP中詞向量模型同樣屬於這類特徵。

而RBM、AutoEncoder的本質是:[Input]=>(Decompose)[Output][NonLinearBase]

顯而易見,非線性變換要比線性變換要強大。

2.2 判別模型與生成模型

這是個經典問題,非監督學習的生成模型P(X)

和監督學習的判別模型P(Y|X)

之間的關係,到底是親兄弟,還是世仇呢?

這個問題目前沒有人能給出數學上解釋,但是從生物學上來講,肯定是關係很大的。

儘管CNN目前取得了很大的成功,但是也帶來的很大憂慮,[知乎專欄]的評論區,看到有人這麼評論:

Ng說,你教一個小孩子認一個蘋果,是不會拿幾百萬張蘋果的圖給他學的

如果兩者之間沒有關係,那麼P(X)

初始化得出的參數,會被之後P(Y|X)改的一團糟,反之,則只是被P(Y|X)

進行小修小改。

Hinton在DBN(深信度網絡)中,則是利用此假設,提出了逐層貪心初始化的方法,進行實驗:

①Stage 1:先逐層用RBM使得參數學習到有效從輸入中提取信息。進行生成模型P(X)。(Pre-Training)。

②Stage 2:  利用生成模型得到的參數作爲搜索起點,進行判別模型P(Y|X)。(Fine-Tuning)。

[Erhan10 Sec6.4]將Stage1、Stage2、純監督學習三種模型訓練到完美之後的參數可視化之後,是這個樣子:

可以看到,由於Gradient Vanish影響,較高層比較低層有更大的變動。

但是從整體上,Fine-Tuning沒有太大改變Pre-Training的基礎,也就是說P(Y|X)

的搜索空間是可以在P(X)

上繼承的。

2.3 殊途同歸的搜索空間

神經網絡的目標函數到底有多複雜,很難去描述,大家只知道它是超級非凸的,超級難優化。

但是,帶來的一個好處就是,搜索到終點時,可能有幾百萬個出發起點,幾百萬條搜索路徑,路徑上的權值有幾百萬種組合。

[Erhan09 Sec4.6]給出了基於Pre-Training和非Pre-Training的各400組隨機初始化W,搜索輸出降維後的圖示,他指出:

①Pre-Training和非Pre-Training的模型參數,在搜索空間中,從不同點出發,最後停在了不同的搜索空間位置。

②散開的原因,是由於陷入的吸引盆的局部最小值中,明顯不做Pre-Training,散開的範圍更廣,說明非常危險。

可以看到,儘管兩種模型取得了近似的train error和test error,但是搜索空間是完全不同的,參數形成也不同的。

從圖論的網絡流角度,多層神經網絡,構成了一個複雜的有向無環流模型:

原本最大流模型下,每個結點的流量就有不同解。但是神經網絡的要求的流是近似流,也就是說,近似+不同衍生出更多不同的解。

目前關於Pre-Training的最好的理解是,它可以讓模型分配到一個很好的初始搜索空間,按照[Erhan09, Sec 4.2]中說法:

The advantage of pre-training could be that it puts us in a region of parameter space

where basins of attraction run deeper than when picking starting parameters

at random. The advantage would be due to a better optimization.

來自Bengio的採訪稿的一段,~Link~

通常來講,我所知道的模型都會受到不可計算性的影響(至少從理論上看,訓練過程非常困難)。

SVM之類的模型不會受到此類影響,但是如果你沒有找到合適的特徵空間,這些模型的普適性會受到影響。

(尋找是非常困難的,深度學習正是解決了尋找特徵空間的問題)。

從Bengio的觀點來看,Pre-Training帶來的搜索空間,不僅有更好的計算(Optimation)性,還有更好的普適(Generalization)性。

2.4 特殊的特徵學習模型——卷積神經網絡

CNN經過20年發展,已經是家喻戶曉了,即便你不懂它的原理,你一樣可以用強大的Caffe框架做一些奇怪的事情。

Bengio指出,CNN是一種特殊的神經網絡,參數少,容易層疊出深度結構。

最重要的是,它根據label,就能有效提取出稀疏特徵,將其卷積核可視化之後,居然達到了近似生成模型的效果,確實可怕。

 

(CNN第一層卷積核可視化 by AlexNet)                      (DBN第二層可視化)

上面是對自然圖片的學習結果,Hinton指出,自然圖片的參數可視化後,應該近似Gabor特徵。

CNN的強大,歸結起來有四大創新點:

①塊狀神經元局部連接:CNN的神經元比較特殊,它是一個2D的特徵圖,這意味着每個像素點之間是沒有連接的。

全連接的只是特徵圖,特徵圖是很少的。由於這種特殊的連接方式,使得每個神經元連接着少量上一層經過激活函數的神經元。

減輕了Gradient Vanish問題。使得早期CNN在非ReLU激活情況下,就能構建不退化的深度結構。

其中,降採樣層、爲非全連接的"虛層",也就是說,真正構成壓力的只有卷積層。

Hinton的Dropout觀點來看,塊狀神經元使得一個卷積核在一張feature map中固定學習一部分輸入,而不依賴全部輸入。

這是爲什麼卷積核的可視化效果較好的原因。因爲它模仿出了輸入的局部特徵。

左圖是FC網絡非Dropout,右圖是Dropout。[Hinton12]

②參數權值共享: 直觀上理解是一個小型卷積核(如5x5)在30x30的圖上掃描,30x30像素用的都是5x5參數。

實際原因是1D連接變成了2D連接,原來的點對點參數現在變成了塊對塊參數,且卷積核塊較小。更加容易提取出魯棒性特徵。

當然,局部最小值問題也被減輕,因爲參數量的減少,使得目標函數較爲簡單。

③卷積計算:對比原來的直接點對點乘,卷積方法能快速響應輸入中的關鍵部分。

④降採樣計算:添加了部分平移縮放不變性。

Alex Krizhevsky在[Krizhevsky12]對傳統CNN提出的幾點改進,使得CNN結構變得更加強大:

①將Sigmoid系激活函數全部換成ReLu,這意味着多了稀疏性,以及超深度結構成爲可能(如GoogleNet)

②添加局部響應歸一化層,在計算神經學上被稱作神經元的側抑制,根據賈揚清說法,暫時似乎沒發現有什麼大作用。[知乎]

Caffe中之所以保留着,是爲了尊敬長輩遺留的寶貴成果。

③弱化FC層神經元數:ReLu使得特徵更加稀疏,稀疏特徵具有更好的線性可分性。[Glorot11]

這意味着FC層的多餘?GoogleNet移除了FC層,根據賈揚清大牛的說法:[知乎]

因爲全連接層(Fully Connected)幾乎佔據了CNN大概90%的參數,但是同時又可能帶來過擬合(overfitting)的效果。

這意味着,CNN配SVM完全成爲雞肋的存在,因爲FC層+Softmax≈SVM

④爲卷積層添加Padding,使得做了完全卷積,又保證維度不會變大。

⑤使用重疊降採樣層,並且在重疊降採樣層,用Avg Pooling替換Max Pooling(第一仍然是Max Pooling)獲得了5%+的精度支持。

⑥使用了Hinton提出的DropOut方法訓練,減輕了深度結構帶來的過擬合問題。

2.5 Pre-Training

Pre-Training的理論基石是生成模型P(X)

Hinton提出了對比重構的方法,使得參數W可以通過重構,實現argmaxWvϵVP(v)

生成模型的好處在於,可以自適應從輸入中獲取信息,儘管可能大部分都是我們不想要的。

這項專長,可以用來彌補某些模型很難提取特徵的不足,比如滿城盡是FC的傳統全連接神經網絡。

FC神經網絡最大的缺陷在於很難提取到有用的特徵,這點上最直觀的反應就是 A Good Optimation But a Poor Generalization。

最近刷微博看到有人貼1993年的老古董[論文],大概內容就是:

證明神經網絡只需1個隱藏層和n個隱藏節點,即能把任意光滑函數擬合到1/n的精度。

然而並沒有什麼卵用,這是人工智能,不是數學函數模擬。你把訓練函數擬合的再好,歸納能力如此之差,仍然會被小朋友鄙視的。

爲了證明FC網絡和CNN的歸納能力之差,我用了Cifar10數據集做了測試,兩個模型都沒有加L1/L2。

FC網絡:來自[Glorot11]提出了ReLU改進FC網絡,預訓練:正向ReLU,反向Softplus,數據縮放至[0,1]

網絡[1000,1000,1000],lr三層都是0.01,pre-lr:0.005,0.005,0.0005。

CNN:來自Caffe提供的Cifar10快速訓練模型,[參考]

FC

負似然函數 1.69 1.55 1.49 1.44 1.32 1.25 1.16 1.07 1.05 1.00
驗證集錯誤率 55% 53% 52% 51% 49% 48%

49%

49% 49% 49%

 

 

 







CNN

負似然函數 1.87 1.45 1.25 1.15 1.05 0.98 0.94 0.89 0.7 0.63
驗證集錯誤率 55% 50% 44% 43% 38% 37%

35%

34% 32% 31%

 

 

 






可以看到,儘管已經做了Pre-Training,在相同似然函數值情況下,FC網絡的Generalization能力真是比CNN差太多。

這也是爲什麼要使用多層網絡,而不是1層網絡的原因,爲了得到更好的歸納。根據人視覺皮層的機理,多層次組合特徵。

可以獲得更好的歸納效果,而不是就爲了那點訓練error,那點函數優化擬合。

來自Bengio的採訪稿的一段,~Link~

全局逼近器並不會告訴你需要多少個隱含層。對於不確定的函數,增加深度並不會改進效果。

然而,如果函數能夠拆分成變量組合的形式,深度能夠起到很大作用。

無論從統計意義(參數少所需訓練數據就少)來講,還是從計算意義(參數少,計算量小)來講。

模式識別三大領域:Speech,CV,NLP都已經被證明了,其高級特徵可以由低級特徵組合得到。

所以,在這些領域當中,使用深度結構多層疊加低級特徵,以獲取高級特徵,會得到更好的Generalization

訓練error代表着樣本的損耗度,一旦error逼近0,那麼說明這個數據集已經玩完了。

如果此時仍然Generalization很差,真是神仙也救不了你。

 

深度學習,真的是很深度嘛?

3.1 DBN & Stack AutoEncoder

先讓我們來看看百度詞條是怎麼解釋[深度學習]的:

深度學習的概念由Hinton等人於2006年提出。基於深信度網(DBN)提出非監督貪心逐層訓練算法,爲解決深層結構相關的優化難題帶來希望

隨後提出多層自動編碼器深層結構。此外Lecun等人提出的卷積神經網絡是第一個真正多層結構學習算法,它利用空間相對關係減少參數數目以提高訓練性能。

DBN和SAE是原型結構都是基於FC網絡的,使用的訓練算法稱爲 "Greedy Layer-Wise Training”

然而,如果你仔細翻翻DBN和SAE的論文,發現其隱層結構不過就3~4層,和我們理解中的“深度”不知差了多遠。

然而,最重要的是,通過Pre-Training之後,也就在FC網絡基礎上改進2~3%的錯誤率(Cifar10、MNIST),

左圖來自[Glorot11],使用比DBN更優良的Stacked Denoising Autoencoder,對於Cifar10和MNIST依然是慘不忍睹。

右圖來自[Erhan09, Sec 4.1], 即便Pre-Training,在加上第五隱層之後,網絡也開始退化。

看來,FC結構真是禍害不淺,除了很難提取特徵外,還給訓練帶來災難,和CNN對抗?想得美!

所以說,Pre-Training給  解決深層結構相關的優化難題帶來希望   而CNN纔是  第一個真正多層結構。

至於基於FC結構的默認DBN和SAE,只能說不要想太多。

3.2 CNN倒是挺深度的

改進CNN在超深度方面確實驚人。[Going deeper with convolutions By GoogleNet]

儘管外界質疑超深度CNN是一種過擬合[知乎專欄],但我們起碼離生物神經網絡進了一步。

3.3 混合CNN與SDAE

DBN訓練比SDAE慢(主要體現在GPU無法生成隨機數,反覆跑Gibbs Sampling很慢),而SDAE又比DBN效果好。

忘掉俗套的FC結構吧。我們有更先進的CNN結構。

 

最新進展

來自Hinton、Bengio、Lecun三位大師在Nature雜誌AI開版的慶賀科普文[Deep Learning]

其中提到了現在有不少人正在解決深度結構帶來的局部最小值問題。如果數學上能夠有突破,

能夠有取代梯度下降,而且更加廉價、容易的訓練算法,那麼恐怕又是一個浪潮之巔。

這三位大師在DL的代表作品分別是,DBN&DBM,SAE&SDAE,CNN。

分別代表着深度學習的三大重鎮:多倫多大學(Hinton組)、蒙特利爾大學(Bengio組)、紐約大學(Lecun組)。

還有一個比較容易忽視的大師是 Jürgen Schmidhuber來自慕尼黑工大。

代表作是1997年提出的LSTM,一種解決了Gradient Vanish的深度RNN結構,在NLP、Speech領域非常火熱。

他的學生Alex Graves最近加入了Hinton組,並且貢獻出了預出版的RNN&LSTM的學習資料。~Link~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章