擁有輸入層、輸出層和一個隱含層。輸入的特徵向量經過隱含層變換到達輸出層,在輸出層獲得分類結果;php
缺點:沒法模擬稍複雜一些的函數(例如簡單的異或計算)。html
解決辦法:多層感知機。算法
有多個隱含層的感知機。網絡
多層感知機解決了以前沒法模擬異或邏輯的缺陷,同時,更多的層數使得神經網絡能夠模擬顯示世界中更加複雜的情形。架構
多層感知機給咱們的啓示是,神經網絡的層數直接決定它的刻畫能力——利用每層更少的神經元擬合更復雜的函數;機器學習
缺點:網絡層數越多,優化函數愈來愈容易陷入局部最優解;利用有限數據訓練的深層網絡,性能可能還不如淺層網絡;「梯度消失」現象更加嚴重;分佈式
難點:非凸目標函數中的局部極小值是訓練困難的主要來源。函數
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過程。
1、基本結構——特徵表示/學習
Deep Learning最簡單的一種應用就是進行特徵表示。跟人工神經網絡(ANN)同樣,若是咱們給定一個神經網絡,假設其輸出與輸入是相同的,而後訓練調整其參數,獲得每一層中的權重。天然地,咱們就獲得了輸入i的幾種不一樣表示(每一層表明一種表示),這些表示就是特徵。自動編碼器就是一種儘量復現輸入信號的神經網絡。爲了實現這種復現,自動編碼器就必須捕捉能夠表明輸入數據的最重要的因素,就像PCA那樣,找到能夠表明原信息的主要成分。
自動編碼器:
上圖就是自動編碼器的訓練原理。
這個auto-encoder還不能用來分類數據,由於它尚未學習如何去鏈接一個輸入和一個類,它只是學會了如何去重構或者復現它的輸入而已。可是在這個過程當中,神經網絡學會了一些抽象特徵,咱們最後只須要將輸入,以及最後一層的特徵code輸入到最後的分類器(例如logistic regression,svm ……),經過有標籤的樣本,使用監督學習的方法進行微調。
有兩種方法:
一、只調整分類器:
二、經過有標籤樣本,微調整個系統:(若是有足夠多的數據,這是最好的方法,端對端學習)
研究發現,若是在原有的特徵中加入這些自動學習獲得的特徵能夠大大提升精確度,甚至在分類問題中比目前最好的分類算法效果還好。
注:
Fine-tuning的目的,是使得整個網絡系統達到全局的最優(end2end),而不是以前分段的局部最優。
2、其餘模型結構及其演進版本
(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),這相比前向神經網絡來講,訓練是要快的,並且收斂的時間也少。
三、DBNs的缺點和不足
1)沒有考慮到圖像的高維結構信息;其拓展卷積DBNs就考慮了這個問題,它利用鄰域像素的空域關係,經過一個稱爲卷積RBMs的模型區達到生成模型的變換不變性,並且能夠容易地變換到高維圖像。
2)DBNs並無明確地處理對觀察變量的時間聯繫的學習上;序列學習方法的研究和應用,給語音信號處理問題帶來了一個讓人激動的將來研究方向;
四、應用
堆疊自動編碼器
五、幾種編碼器的對比
1)自動編碼器
使用判別模型;
2)降噪自動編碼器
其訓練方法和RBMs訓練生成模型的過程同樣;
3)堆疊自動編碼器
它是經過用堆疊自動編碼器來替換傳統DBMs裏面的RBMs;這就使得能夠經過一樣的規則來訓練產生深度多層神經網絡架構,但它缺乏層的參數化的嚴格要求。
參考: