一、單層感知機(perceptron)
擁有輸入層、輸出層和一個隱含層。輸入的特征向量通過隱含層變換到達輸出層,在輸出層得到分類結果;
缺點:無法模擬稍復雜一些的函數(例如簡單的異或計算)。
解決辦法:多層感知機。
二、多層感知機(multilayer perceptron)
有多個隱含層的感知機。

多層感知機解決了之前無法模擬異或邏輯的缺陷,同時,更多的層數使得神經網絡可以模擬顯示世界中更加復雜的情形。
多層感知機給我們的啟示是,神經網絡的層數直接決定它的刻畫能力——利用每層更少的神經元擬合更復雜的函數;
缺點:網絡層數越多,優化函數越來越容易陷入局部最優解;利用有限數據訓練的深層網絡,性能可能還不如淺層網絡;“梯度消失”現象更加嚴重;
三、深度學習的起源及其與機器學習、神經網絡的區別:
淺層學習:
深度學習:
區別於傳統的淺層學習,深度學習的不同:
問題:
deep learning(neural network)的缺點:
神經網絡:
deep learning:
四、Deep learning訓練過程
難點:非凸目標函數中的局部極小值是訓練困難的主要來源。
BP算法存在的問題:
(1)梯度越來越稀疏;
(2)收斂到局部最小值;
(3)只能用有標簽的數據來訓練;
deep learning 訓練過程:
hinton提出在非監督數據上建立多層神經網絡:step1.layer-wise learning;step2.tuning;使得原始表示x向上生成的高級表示r和該高級表示r向下生成的x'盡可能一致。
wake-sleep算法:
1)wake階段:認知過程,通過外界的特征和向上的權重(認知權重)產生每一層的抽象表示(結點狀態),並且使用梯度下降修改層間的下行權重(生成權重)。也就是“如果現實跟我想象的不一樣,改變我的權重使我想象的東西就是這樣的”。
2)sleep階段:生成過程,通過頂層表示(醒時學得的概念)和向下權重,生成底層的狀態,同時修改層間向上的權重。也就是“如果夢中的景象不是我腦中的相應概念,改變我的認知權重使得這種景象在我看來就是這個概念”。
deep learning 具體訓練過程:
1)使用自下上升非監督學習(就是從底層開始,一層一層的往頂層訓練):
采用無標定數據(有標定數據也可)分層訓練各層參數,這一步可以看作是一個無監督訓練過程,是和傳統神經網絡區別最大的部分(這個過程可以看作是feature learning過程):
*問題:無標定數據怎么訓練第一層?
*答:這層可看作是得到一個使得輸出和輸入差別最小的三層神經網絡的隱層,訓練時只要保證訓練樣本的輸出和輸入差別最小,以此得到參數的權重;
由於模型容量的限制以及稀疏性約束,使得得到的模型能夠學習到數據本身的結構,從而得到比輸入更具有表示能力的特征;在學習得到第n-1層后,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的參數;
2)自頂向下的監督學習(就是通過帶標簽的數據去訓練,誤差自頂向下傳輸,對網絡進行微調):
基於第一步得到的各層參數進一步fine-tune整個多層模型的參數,這一步是一個有監督訓練過程;第一步類似神經網絡的隨機初始化初值過程,由於deep learning的第一步不是隨機初始化(也就是說,神經網絡訓練時,迭代的第一步是隨機初始化參數),而是通過學習輸入數據的結構得到的,因而這個初值更接近全局最優,從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功於第一步的feature learning過程。
五、深度學習具體模型及方法
一、基本結構——特征表示/學習
Deep Learning最簡單的一種應用就是進行特征表示。跟人工神經網絡(ANN)一樣,如果我們給定一個神經網絡,假設其輸出與輸入是相同的,然后訓練調整其參數,得到每一層中的權重。自然地,我們就得到了輸入i的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復現輸入信號的神經網絡。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入數據的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。
自動編碼器:
上圖就是自動編碼器的訓練原理。
這個auto-encoder還不能用來分類數據,因為它還沒有學習如何去連接一個輸入和一個類,它只是學會了如何去重構或者復現它的輸入而已。但是在這個過程中,神經網絡學會了一些抽象特征,我們最后只需要將輸入,以及最后一層的特征code輸入到最后的分類器(例如logistic regression,svm ……),通過有標簽的樣本,使用監督學習的方法進行微調。
有兩種方法:
1、只調整分類器:
2、通過有標簽樣本,微調整個系統:(如果有足夠多的數據,這是最好的方法,端對端學習)
研究發現,如果在原有的特征中加入這些自動學習得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還好。
注:
Fine-tuning的目的,是使得整個網絡系統達到全局的最優(end2end),而不是之前分段的局部最優。
二、其他模型結構及其演進版本
(1)稀疏自動編碼器
在auto-encoder的網絡使用加上L1的Regularity限制,(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder法。

如上圖,其實就是限制每次得到的表達code盡量稀疏。因為稀疏的表達往往比其他的表達要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經元,其他的大部分神經元是受到抑制的)。
(2)降噪自動編碼器
Denoising auto-encoder (DA)是在自動編碼器的基礎上,訓練數據加入噪聲,所以自動編碼器必須學習去去除這種噪聲而獲得真正的沒有被噪音污染過的輸入。因此,就迫使編碼器去學習輸入信號的更加魯棒的表達,這也是它的泛化能力比一般編碼器強的原因。DA可以通過梯度下降算法去訓練。

(3)sparse coding稀疏編碼
簡單來說,就是將輸入向量表示為一組基向量的線性組合。
Sparse coding:超完備基(基向量的個數比輸入向量的維數要大)
PCA:完備基 (降維)
Deep learning:Unsupervised Feature Learning
Image: pixcel -> basis -> high level basis -> learning
Doc: word -> term -> topic -> learning
特征表示的粒度:
a.不是特征越底層,粒度越細,學習算法的效果越好;
b.不是特征越多越好,探索的空間大,計算復雜,可以用來訓練的數據在每個特征上就會稀疏,帶來各種問題。
稀疏編碼算法:
稀疏編碼是一個重復迭代的過程,每次迭代分兩步:
1)選擇一組 S[k] (“基”),然后調整 a[k] (系數權重),使得Sum_k (a[k] * S[k]) 最接近 T(輸入)。
2)固定住 a[k],在 400 個碎片中,選擇其它更合適的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。
經過幾次迭代后,最佳的 S[k] 組合,被遴選出來了。令人驚奇的是,被選中的 S[k],基本上都是照片上不同物體的邊緣線,這些線段形狀相似,區別在於方向。
缺點:
稀疏編碼是有一個明顯的局限性的,這就是即使已經學習得到一組基向量,如果為了對新的數據樣本進行“編碼”,我們必須再次執行優化過程來得到所需的系數。這個顯著的“實時”消耗意味着,即使是在測試中,實現稀疏編碼也需要高昂的計算成本,尤其是與典型的前饋結構算法相比。
(4)限制玻耳茲曼機
a.二部圖:無向圖G為二分圖的充分必要條件是,G至少有兩個頂點,且其所有回路的長度均為偶數。
b.Restricted BoltzmannMachine(RBM) 玻耳茲曼機的定義:假設所有的節點都是隨機二值變量節點(只能取0或者1值),同時假設其全概率分布p(v,h)滿足Boltzmann分布;(Restricted在這里是指:這些網絡被“限制”為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接),隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
c.為什么說它是一個deep learning?
因為輸入層v(visible variables)和隱藏層h(hidden layer)都滿足Boltzmann分布,在二部圖模型中,通過調整參數,使得從隱藏層得到的可視層v1與原來的可視層v一樣,那么這時候得到的隱藏層就是可視層的另外一種表達,也就是隱藏層可以作為輸入層(可視層)輸入數據的特征表示,所以它就是一種deep learning方法。

d.訓練 (也就是確定可視層節點和隱藏層節點之間的權值)

定義:
:假設函數 (聯合組態的能量) (1)
Boltzmann:參數所服從的分布
(2)
:假設函數(1)的分布 (概率生成模型的聯合分布) (3)
將(2)帶入(3),定義
最優化函數Loss (4)
觀測樣本集 (5)
由(4)和(5),便可以學習到參數W.
如果把隱藏層的層數增加,我們可以得到Deep Boltzmann Machine(DBM);如果我們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,當然這里依然限制層中節點之間沒有鏈接),而在最遠離可視層的部分使用Restricted BoltzmannMachine,我們可以得到DeepBelief Net(DBN)。


(5)深信度網絡(Deep Belief Network)
1. Deep Belief Network網絡結構
DBNs是一個概率生成模型,與傳統的判別模型的神經網絡相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和P(Lable|Observation)都做了評估,而判別模型僅僅評估了后者。
DBNs在使用傳統的BP算法進行訓練的時候,遇到了如下問題:
1.1 需要為訓練提供一個有標簽的樣本集;
1.2 學習過程較慢;
1.3 不適當的參數選擇會導致學習收斂於局部最優解;

Figure 1.DBN的網絡結構
2. 訓練方法
2.1 預訓練
首先,通過一個非監督貪婪逐層方法去預訓練獲得生成模型的權值,非監督貪婪逐層方法被Hinton證明是有效的,並被其稱為對比分歧(contrastive divergence)。
具體過程參加Figure 2 。

Figure 2.DBN的訓練過程
a.訓練時間會顯著的減少,因為只需要單個步驟就可以接近最似然學習,而不是像BP訓練那樣需要反復迭代直到收斂。b.增加進網絡的每一層都會改進訓練數據的對數概率,我們可以理解為越來越接近能量的真實表達。這些優點,以及c.無標簽數據的使用,是深度學習被應用的決定性因素。

Figure 3. Illustration of the Deep Belief Network framework
在最高兩層,權值被連接到一起,這樣更底層的輸出將會提供一個參考的線索或者關聯給頂層,這樣頂層就會將其聯系到它的記憶內容。而我們最關心的,是其最后的判別性能,例如分類任務里面。
2.2 fine-tuning
在預訓練后,DBN可以通過利用帶標簽數據用BP算法去對判別性能做調整(即fine tuning)。在這里,一個標簽集將被附加到頂層(推廣聯想記憶),通過一個自下向上的,學習到的識別權值獲得一個網絡的分類面。這個分類器的性能會比單純的使用BP算法訓練的網絡好。這可以很直觀的解釋,DBNs預訓練后再加BP算法的方法,只需要對權值參數空間進行一個局部的搜索(就是局部fine-tune),這相比前向神經網絡來說,訓練是要快的,而且收斂的時間也少。
3、DBNs的缺點和不足
1)沒有考慮到圖像的高維結構信息;其拓展卷積DBNs就考慮了這個問題,它利用鄰域像素的空域關系,通過一個稱為卷積RBMs的模型區達到生成模型的變換不變性,而且可以容易地變換到高維圖像。
2)DBNs並沒有明確地處理對觀察變量的時間聯系的學習上;序列學習方法的研究和應用,給語音信號處理問題帶來了一個讓人激動的未來研究方向;
4、應用
堆疊自動編碼器
5、幾種編碼器的對比
1)自動編碼器
使用判別模型;
2)降噪自動編碼器
其訓練方法和RBMs訓練生成模型的過程一樣;
3)堆疊自動編碼器
它是通過用堆疊自動編碼器來替換傳統DBMs里面的RBMs;這就使得可以通過同樣的規則來訓練產生深度多層神經網絡架構,但它缺少層的參數化的嚴格要求。
參考:
https://www.cnblogs.com/sxron/articles/5836000.html
