深度神經網絡結構以及Pre-Training的理解


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

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

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

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

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

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

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

經驗規則給出,WUniform(1LayerOut√,1LayerOut√),Uniform為均勻分布。

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

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

對於Tanh-Sigmoid:  [6√LayerInput+LayerOut√,6√LayerInput+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使得特征更加稀疏,稀疏特征具有更好的線性可分性,這意味着FC層的多余。[Xavier11]

實際上,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網絡:來自[Xavier11]提出了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),

左圖來自[Xavier11],使用比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~






免責聲明!

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



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