深度學習常見算法的介紹


深度學習常見算法的介紹

好書推薦

深度學習算法實踐.pdf:
http://www.notescloud.top/cloudSearch/detail?id=2355

很多人都有誤解,以為深度學習比機器學習先進。其實深度學習是機器學習的一個分支。可以理解為具有多層結構的模型。具體的話,深度學習是機器學習中的具有深層結構的神經網絡算法,即機器學習>神經網絡算法>深度神經網絡(深度學習)。
關於深度學習的理論推導,太大太復雜,一些常見的深度學習算法本人也是模模糊糊的,看過好多次的,隔斷時間就會忘記,現在對其系統的整理一下(從歷史,致命問題出發,再看具體算法的思想,框架,優缺點和改進的方向,又總結了CNN和RNN的比較)。

一、歷史:多層感知機到神經網絡,再到深度學習

神經網絡技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特征向量通過隱含層變換達到輸出層,在輸出層得到分類結果。(扯一個不相關的:由於計算技術的落后,當時感知器傳輸函數是用線拉動變阻器改變電阻的方法機械實現的,腦補一下科學家們扯着密密麻麻的導線的樣子...)
心理學家Rosenblatt提出的單層感知機有一個嚴重得不能再嚴重的問題,即它對稍復雜一些的函數都無能為力(比如最為典型的"異或"操作)。
這個缺點直到上世紀八十年代才被Rumelhart、Williams、Hinton、LeCun等人發明的多層感知機解決,多層感知機解決了之前無法模擬異或邏輯的缺陷,同時更多的層數也讓網絡更能夠刻畫現實世界中的復雜情形。
多層感知機可以擺脫早期離散傳輸函數的束縛,使用sigmoid或tanh等連續函數模擬神經元對激勵的響應,在訓練算法上則使用Werbos發明的反向傳播BP算法。這就是我們現在所說的【神經網絡】,BP算法也叫BP神經網絡具體過程可參見我轉載的文章(http://blog.csdn.net/abc200941410128/article/details/78708319)。
但是BP神經網絡(多層感知機)面臨在致命問題(見下節)。隨着神經網絡層數的加深,有兩個重大問題:一是優化函數越來越容易陷入局部最優解,並且這個"陷阱"越來越偏離真正的全局最優。利用有限數據訓練的深層網絡,性能還不如較淺層網絡。同時,另一個不可忽略的問題是"梯度消失"現象更加嚴重。
2006年,Hinton利用預訓練方法緩解了局部最優解問題,將隱含層推動到了7層,神經網絡真正意義上有了"深度",由此揭開了深度學習的熱潮,隨后的DBN、CNN、RNN、LSTM等才逐漸出現。
這里的"深度"並沒有固定的定義------在語音識別中4層網絡就能夠被認為是"較深的",而在圖像識別中20層以上的網絡屢見不鮮。
為了克服梯度消失,ReLU、maxout等傳輸函數代替了sigmoid,形成了如今DNN的基本形式。單從結構上來說,全鏈接的多層感知機是沒有任何區別的。

二、深度神經網絡的致命問題

隨着神經網絡層數的加深,有三個重大問題:一是非凸優化問題,即優化函數越來越容易陷入局部最優解;二是(Gradient Vanish)梯度消失問題;三是過擬合問題。

2.1 非凸優化問題

線性回歸,本質是一個多元一次函數的優化問題,設f(x,y)=x+y
多層神經網絡,本質是一個多元K次函數優化問題,設f(x,y)=xy
在線性回歸當中,從任意一個點出發搜索,最終必然是下降到全局最小值附近的。所以置0也無妨(這也是為什么我們往往解線性回歸方程時初值為0)。
而在多層神經網絡中,從不同點出發,可能最終困在局部最小值。局部最小值是神經網絡結構帶來的揮之不去的陰影,隨着隱層層數的增加,非凸的目標函數越來越復雜,局部最小值點成倍增長,利用有限數據訓練的深層網絡,性能還不如較淺層網絡。。避免的方法一般是權值初始化。為了統一初始化方案,通常將輸入縮放到[−1,1],但是仍然無法保證能夠達到全局最優,其實這也是科學家們一直在研究而未解決的問題。
所以,從本質上來看,深度結構帶來的非凸優化仍然不能解決(包括現在的各類深度學習算法和其他非凸優化問題都是如此),這限制着深度結構的發展。

2.2 (Gradient Vanish)梯度消失問題

這個問題實際上是由激活函數不當引起的,多層使用Sigmoid系函數,會使得誤差從輸出層開始呈指數衰減。在數學上,激活函數的作用就是將輸入數據映射到0到1上(tanh是映射-1到+1上)。至於映射的原因,除了對數據進行正則化外,大概是控制數據,使其只在一定的范圍內。當然也有另外細節作用,例如Sigmoid(tanh)中,能在激活的時候,更關注數據在零(或中心點)前后的細小變化,而忽略數據在極端時的變化,例如ReLU還有避免梯度消失的作用。通常,Sigmoid(tanh)多用於全連接層,而ReLU多用於卷積層。

ReLU
"梯度消失"現象具體來說,我們常常使用sigmoid作為神經元的輸入輸出函數。對於幅度為1的信號,在BP反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25。層數一多,梯度指數衰減后低層基本上接受不到有效的訓練信號。
幸運的是,這個問題已經被Hinton在2006年提出的逐層貪心預訓練權值矩陣變向減輕,最近提出的ReLu則從根本上提出了解決方案。
2012年,Hinton組的Alex Krizhevsky率先將受到Gradient Vanish影響較小的CNN中大規模使用新提出的ReLu函數。
2014年,Google研究員賈揚清則利用ReLu這個神器,成功將CNN擴展到了22層巨型深度網絡,見知乎。
對於深受Gradient Vanish困擾的RNN,其變種LSTM也克服了這個問題。

2.3 過擬合問題

這就是神經網絡的最后一個致命問題:過擬合,龐大的結構和參數使得,盡管訓練error降的很低,但是test error卻高的離譜。
過擬合還可以和Gradient Vanish、局部最小值混合三打,具體玩法是這樣的:
由於Gradient Vanish,導致深度結構的較低層幾乎無法訓練,而較高層卻非常容易訓練。
較低層由於無法訓練,很容易把原始輸入信息,沒有經過任何非線性變換,或者錯誤變換推到高層去,使得高層解離特征壓力太大。
如果特征無法解離,強制性的誤差監督訓練就會使得模型對輸入數據直接做擬合。
其結果就是,A Good Optimation But a Poor Generalization,這也是SVM、決策樹等淺層結構的毛病。
Bengio指出,這些利用局部數據做優化的淺層結構基於先驗知識(Prior): Smoothness
即,給定樣本(xi,yi),盡可能從數值上做優化,使得訓練出來的模型,對於近似的x,輸出近似的y。
然而一旦輸入值做了泛型遷移,比如兩種不同的鳥,鳥的顏色有別,且在圖像中的比例不一,那么SVM、決策樹幾乎毫無用處。
因為,對輸入數據簡單地做數值化學習,而不是解離出特征,對於高維數據(如圖像、聲音、文本),是毫無意義的。
然后就是最后的事了,由於低層學不動,高層在亂學,所以很快就掉進了吸引盆中,完成神經網絡三殺。

三、深度學習里面的基本模型

深度學習里面的基本模型大致分為了3類:多層感知機模型;深度神經網絡模型和遞歸神經網絡模型。其代表分別是DBN(Deep belief network) 深度信念網絡、CNN(Convolution Neural Networks)卷積神經網絡、RNN(Recurrent neural network) 遞歸神經網絡。

3.1 DBN(Deep belief network) 深度信念網絡

2006年,Geoffrey Hinton提出深度信念網絡(DBN)及其高效的學習算法,即Pre-training+Fine tuning,並發表於《Science》上,成為其后深度學習算法的主要框架。DBN是一種生成模型,通過訓練其神經元間的權重,我們可以讓整個神經網絡按照最大概率來生成訓練數據。所以,我們不僅可以使用DBN識別特征、分類數據,還可以用它來生成數據。

3.1.1 網絡結構

深度信念網絡(DBN)由若干層受限玻爾茲曼機(RBM)堆疊而成,上一層RBM的隱層作為下一層RBM的可見層。
(1) RBM

一個普通的RBM網絡結構如上圖所示,是一個雙層模型,由m個可見層單元及n個隱層單元組成,其中,層內神經元無連接,層間神經元全連接,也就是說:在給定可見層狀態時,隱層的激活狀態條件獨立,反之,當給定隱層狀態時,可見層的激活狀態條件獨立。這保證了層內神經元之間的條件獨立性,降低概率分布計算及訓練的復雜度。RBM可以被視為一個無向圖模型,可見層神經元與隱層神經元之間的連接權重是雙向的,即可見層到隱層的連接權重為W,則隱層到可見層的連接權重為W'。除以上提及的參數外,RBM的參數還包括可見層偏置b及隱層偏置c。RBM可見層和隱層單元所定義的分布可根據實際需要更換,包括:Binary單元、Gaussian單元、Rectified Linear單元等,這些不同單元的主要區別在於其激活函數不同
(2) DBN

DBN模型由若干層RBM堆疊而成,如果在訓練集中有標簽數據,那么最后一層RBM的可見層中既包含前一層RBM的隱層單元,也包含標簽層單元。假設頂層RBM的可見層有500個神經元,訓練數據的分類一共分成了10類,那么頂層RBM的可見層有510個顯性神經元,對每一訓練數據,相應的標簽神經元被打開設為1,而其他的則被關閉設為0

3.1.2 訓練過程和優缺點

DBN的訓練包括Pre-training和Fine tuning兩步,其中Pre-training過程相當於逐層訓練每一個RBM,經過Pre-training的DBN已經可用於模擬訓練數據,而為了進一步提高網絡的判別性能, Fine tuning過程利用標簽數據通過BP算法對網絡參數進行微調。
對DBN優缺點的總結主要集中在生成模型與判別模型的優缺點總結上。
1、優點:

  • 生成模型學習聯合概率密度分布,所以就可以從統計的角度表示數據的分布情況,能夠反映同類數據本身的相似度;
  • 生成模型可以還原出條件概率分布,此時相當於判別模型,而判別模型無法得到聯合分布,所以不能當成生成模型使用。

2、缺點:

  • 生成模型不關心不同類別之間的最優分類面到底在哪兒,所以用於分類問題時,分類精度可能沒有判別模型高;
  • 由於生成模型學習的是數據的聯合分布,因此在某種程度上學習問題的復雜性更高。
  • 要求輸入數據具有平移不變性。

關於 判別模型與生成模型可以參看(http://blog.csdn.net/erlib/article/details/53585134)

3.1.3 改進模型

DBN的變體比較多,它的改進主要集中於其組成"零件"RBM的改進,有卷積DBN(CDBN)和條件RBM(Conditional RBM)等。
DBN並沒有考慮到圖像的二維結構信息,因為輸入是簡單的將一個圖像矩陣轉換為一維向量。而CDBN利用鄰域像素的空域關系,通過一個稱為卷積RBM(CRBM)的模型達到生成模型的變換不變性,而且可以容易得變換到高維圖像。
DBN並沒有明確地處理對觀察變量的時間聯系的學習上,Conditional RBM通過考慮前一時刻的可見層單元變量作為附加的條件輸入,以模擬序列數據,這種變體在語音信號處理領域應用較多。

3.2 CNN(Convolution Neural Networks)卷積神經網絡

卷積神經網絡是人工神經網絡的一種,已成為當前語音分析和圖像識別領域的研究熱點。它的權值共享網絡結構使之更類似於生物神經網絡,降低了網絡模型的復雜度,減少了權值的數量。該優點在網絡的輸入是多維圖像時表現的更為明顯,使圖像可以直接作為網絡的輸入,避免了傳統識別算法中復雜的特征提取和數據重建過程。
全鏈接DNN的結構里下層神經元和所有上層神經元都能夠形成連接,帶來了參數數量的膨脹問題。例如,1000*1000的像素圖像,光這一層就有10^12個權重需要訓練。此時我們可以用卷積神經網絡CNN,對於CNN來說,並不是所有上下層神經元都能直接相連,而是通過"卷積核"作為中介。同一個卷積核在所有圖像內是共享的,圖像通過卷積操作后仍然保留原先的位置關系。圖像輸入層到隱含層的參數瞬間降低到了100*100*100=10^6個
卷積網絡是為識別二維形狀而特殊設計的一個多層感知器,這種網絡結構對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。

3.2.1 網絡結構

卷積神經網絡是一個多層的神經網絡,其基本運算單元包括:卷積運算、池化運算、全連接運算和識別運算。

  • 卷積運算:前一層的特征圖與一個可學習的卷積核進行卷積運算,卷積的結果經過激活函數后的輸出形成這一層的神經元,從而構成該層特征圖,也稱特征提取層,每個神經元的輸入與前一層的局部感受野相連接,並提取該局部的特征,一旦該局部特征被提取,它與其它特征之間的位置關系就被確定。l
  • 池化運算:能很好的聚合特征、降維來減少運算量。它把輸入信號分割成不重疊的區域,對於每個區域通過池化(下采樣)運算來降低網絡的空間分辨率,比如最大值池化是選擇區域內的最大值,均值池化是計算區域內的平均值。通過該運算來消除信號的偏移和扭曲。
  • 全連接運算:輸入信號經過多次卷積核池化運算后,輸出為多組信號,經過全連接運算,將多組信號依次組合為一組信號。
    識別運算:上述運算過程為特征學習運算,需在上述運算基礎上根據業務需求(分類或回歸問題)增加一層網絡用於分類或回歸計算。

3.2.2 訓練過程和優缺點

卷積網絡在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關系,而不需要任何輸入和輸出之間的精確的數學表達式,只要用已知的模式對卷積網絡加以訓練,網絡就具有輸入輸出對之間的映射能力。卷積網絡執行的是有監督訓練,所以其樣本集是由形如:(輸入信號,標簽值)的向量對構成的。

1、優點:

  • 權重共享策略減少了需要訓練的參數,相同的權重可以讓濾波器不受信號位置的影響來檢測信號的特性,使得訓練出來的模型的泛化能力更強;
  • 池化運算可以降低網絡的空間分辨率,從而消除信號的微小偏移和扭曲,從而對輸入數據的平移不變性要求不高。

2、缺點:

  • 深度模型容易出現梯度消散問題。

3.2.3 改進模型

卷積神經網絡因為其在各個領域中取得了好的效果,是近幾年來研究和應用最為廣泛的深度神經網絡。比較有名的卷積神經網絡模型主要包括1986年Lenet,2012年的Alexnet,2014年的GoogleNet,2014年的VGG,2015年的Deep Residual Learning。這些卷積神經網絡的改進版本或者模型的深度,或者模型的組織結構有一定的差異,但是組成模型的機構構建是相同的,基本都包含了卷積運算、池化運算、全連接運算和識別運算。

3.3 RNN(Recurrent neural network) 遞歸神經網絡

全連接的DNN除了以上問題以外還存在着另一個問題------無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。對了適應這種需求,就出現了題主所說的另一種神經網絡結構------循環神經網絡RNN(不知道為什么很多叫循環的。計算機術語里循環一般是同一層次的,Recurrent 其實是時間遞歸,所以本文叫他遞歸神經網絡)。
在普通的全連接網絡或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網絡(Feed-forward Neural Networks)。而在RNN中,神經元的輸出可以在下一個時間戳直接作用到自身。
即:(t+1)時刻網絡的最終結果O(t+1)是該時刻輸入和所有歷史共同作用的結果。RNN可以看成一個在時間上傳遞的神經網絡,它的深度是時間的長度!正如我們上面所說,"梯度消失"現象又要出現了,只不過這次發生在時間軸上
為了解決時間上的梯度消失,機器學習領域發展出了長短時記憶單元(LSTM),通過門的開關實現時間上記憶功能,並防止梯度消失。

3.3.1 網絡結構

左側是遞歸神經網絡的原始結構,如果先拋棄中間那個令人生畏的閉環,那其實就是簡單"輸入層=>隱藏層=>輸出層"的三層結構,但是圖中多了一個非常陌生的閉環,也就是說輸入到隱藏層之后,隱藏層還會輸入給自己,使得該網絡可以擁有記憶能力。我們說遞歸神經網絡擁有記憶能力,而這種能力就是通過W將以往的輸入狀態進行總結,而作為下次輸入的輔助。可以這樣理解隱藏狀態:h=f(現有的輸入+過去記憶總結)

3.3.2 訓練過程和優缺點

遞歸神經網絡中由於輸入時疊加了之前的信號,所以反向傳導時不同於傳統的神經網絡,因為對於時刻t的輸入層,其殘差不僅來自於輸出,還來自於之后的隱層。通過反向傳遞算法,利用輸出層的誤差,求解各個權重的梯度,然后利用梯度下降法更新各個權重。
1、優點:

  • 模型是時間維度上的深度模型,可以對序列內容建模。

2、缺點:

  • 需要訓練的參數較多,容易出現梯度消散或梯度爆炸問題;
  • 不具有特征學習能力。

3.3.3 改進模型

遞歸神經網絡模型可以用來處理序列數據,遞歸神經網絡包含了大量參數,且難於訓練(時間維度的梯度消散或梯度爆炸),所以出現一系列對RNN優化,比如網絡結構、求解算法與並行化。
近年來bidirectional RNN (BRNN)與 LSTM在image captioning, language translation, and handwriting recognition這幾個方向上有了突破性進展 。

3.4 混合結構

除了以上三種網絡,和我之前提到的深度殘差學習、LSTM外,深度學習還有許多其他的結構。舉個例子,RNN既然能繼承歷史信息,是不是也能吸收點未來的信息呢?因為在序列信號分析中,如果我能預知未來,對識別一定也是有所幫助的。因此就有了雙向RNN、雙向LSTM,同時利用歷史和未來的信息。雙向RNN、雙向LSTM,同時利用歷史和未來的信息。
事實上,不論是那種網絡,他們在實際應用中常常都混合着使用,比如CNN和RNN在上層輸出之前往往會接上全連接層,很難說某個網絡到底屬於哪個類別。
不難想象隨着深度學習熱度的延續,更靈活的組合方式、更多的網絡結構將被發展出來。盡管看起來千變萬化,但研究者們的出發點肯定都是為了解決特定的問題。如果想進行這方面的研究,不妨仔細分析一下這些結構各自的特點以及它們達成目標的手段。

3.5 CNN和RNN的比較

RNN的重要特性是可以處理不定長的輸入,得到一定的輸出。當你的輸入可長可短, 比如訓練翻譯模型的時候, 你的句子長度都不固定,你是無法像一個訓練固定像素的圖像那樣用CNN搞定的。而利用RNN的循環特性可以輕松搞定。
在序列信號的應用上,CNN是只響應預先設定的信號長度(輸入向量的長度),RNN的響應長度是學習出來的。

CNN對特征的響應是線性的,RNN在這個遞進方向上是非線性響應的。這也帶來了很大的差別。

CNN 專門解決圖像問題的,可用把它看作特征提取層,放在輸入層上,最后用MLP 做分類。
RNN 專門解決時間序列問題的,用來提取時間序列信息,放在特征提取層(如CNN)之后。

RNN,遞歸型網絡,用於序列數據,並且有了一定的記憶效應,輔之以lstm。
CNN應該側重空間映射,圖像數據尤為貼合此場景。

CNN 卷積擅長從局部特征逼近整體特征,
RNN 擅長對付時間序列。

四、一些基本概念和知識

4.1 線性回歸、線性神經網絡、Logistic/Softmax回歸

這個參考http://blog.csdn.net/erlib/article/details/53585134
或者其他資料。

4.2 關於卷積、池化、激活函數等

入門參考:http://blog.csdn.net/u010859498/article/details/78794405
詳細了解可自己谷歌百度

4.3 推薦一個比較好的入門資料

台大電機系李宏毅教授的講義《一天搞懂深度學習》
有人做簡略的翻譯過
https://www.jianshu.com/p/c30f7c944b66

參考資料:
http://blog.csdn.net/erlib/article/details/53585134
https://www.zhihu.com/question/34681168/answer/156552873
http://blog.csdn.net/u010859498/article/details/78794405

原文鏈接: http://notescloud.top/cloudSearch/detail?id=2356


免責聲明!

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



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