AutoEncoder、RBM、DBM、DBN
AutoEncoder自動編碼器
??????? Deep Learning最簡單的一種方法是利用人工神經網絡的特點,人工神經網絡(ANN)本身就是具有層次結構的系統,如果給定一個神經網絡,我們假設其輸出與輸入是相同的,然后訓練調整其參數,得到每一層中的權重。自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復現輸入信號的神經網絡。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入數據的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。
?????? 具體過程簡單的說明如下:
1)給定無標簽數據,用非監督學習學習特征:
?
?????? 在我們之前的神經網絡中,如第一個圖,我們輸入的樣本是有標簽的,即(input, target),這樣我們根據當前輸出和target(label)之間的差去改變前面各層的參數,直到收斂。但現在我們只有無標簽數據,也就是右邊的圖。那么這個誤差怎么得到呢?
????????如上圖,我們將input輸入一個encoder編碼器,就會得到一個code,這個code也就是輸入的一個表示,那么我們怎么知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個信息,那么如果輸出的這個信息和一開始的輸入信號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調整encoder和decoder的參數,使得重構誤差最小,這時候我們就得到了輸入input信號的第一個表示了,也就是編碼code了。因為是無標簽數據,所以誤差的來源就是直接重構后與原輸入相比得到。
2)通過編碼器產生特征,然后訓練下一層。這樣逐層訓練:
?????? 那上面我們就得到第一層的code,我們的重構誤差最小讓我們相信這個code就是原輸入信號的良好表達了,或者牽強點說,它和原信號是一模一樣的(表達不一樣,反映的是一個東西)。那第二層和第一層的訓練方式就沒有差別了,我們將第一層輸出的code當成第二層的輸入信號,同樣最小化重構誤差,就會得到第二層的參數,并且得到第二層輸入的code,也就是原輸入信息的第二個表達了。其他層就同樣的方法炮制就行了(訓練這一層,前面層的參數都是固定的,并且他們的decoder已經沒用了,都不需要了)。
3)有監督微調:
????? 經過上面的方法,我們就可以得到很多層了。至于需要多少層(或者深度需要多少,這個目前本身就沒有一個科學的評價方法)需要自己試驗調了。每一層都會得到原始輸入的不同的表達。當然了,我們覺得它是越抽象越好了,就像人的視覺系統一樣。
?????? 到這里,這個AutoEncoder還不能用來分類數據,因為它還沒有學習如何去連結一個輸入和一個類。它只是學會了如何去重構或者復現它的輸入而已。或者說,它只是學習獲得了一個可以良好代表輸入的特征,這個特征可以最大程度上代表原輸入信號。那么,為了實現分類,我們就可以在AutoEncoder的最頂的編碼層添加一個分類器(例如羅杰斯特回歸、SVM等),然后通過標準的多層神經網絡的監督訓練方法(梯度下降法)去訓練。
??????? 也就是說,這時候,我們需要將最后層的特征code輸入到最后的分類器,通過有標簽樣本,通過監督學習進行微調,這也分兩種,一個是只調整分類器(黑色部分):
?????? 另一種:通過有標簽樣本,微調整個系統:(如果有足夠多的數據,這個是最好的。end-to-end learning端對端學習)
?????? 一旦監督訓練完成,這個網絡就可以用來分類了。神經網絡的最頂層可以作為一個線性分類器,然后我們可以用一個更好性能的分類器去取代它。
?????? 在研究中可以發現,如果在原有的特征中加入這些自動學習得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還要好!
??????? AutoEncoder存在一些變體,這里簡要介紹下兩個:
Sparse AutoEncoder稀疏自動編碼器:
????? 當然,我們還可以繼續加上一些約束條件得到新的Deep Learning方法,如:如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder法。
?????? 如上圖,其實就是限制每次得到的表達code盡量稀疏。因為稀疏的表達往往比其他的表達要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經元,其他的大部分的神經元是受到抑制的)。
Denoising AutoEncoders降噪自動編碼器:
????????降噪自動編碼器DA是在自動編碼器的基礎上,訓練數據加入噪聲,所以自動編碼器必須學習去去除這種噪聲而獲得真正的沒有被噪聲污染過的輸入。因此,這就迫使編碼器去學習輸入信號的更加魯棒的表達,這也是它的泛化能力比一般編碼器強的原因。DA可以通過梯度下降算法去訓練。
?
Sparse Coding稀疏編碼
?????? 如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數中基的概念,即O = a1*Φ1?+ a2*Φ2+….+ an*Φn, Φi是基,ai是系數,我們可以得到這樣一個優化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
???????通過求解這個最優化式子,我們可以求得系數ai和基Φi,這些系數和基就是輸入的另外一種近似表達。
???????因此,它們可以用來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|a1| + |a2| + … + |an?|)
??????? 這種方法被稱為Sparse Coding。通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來。“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠大于零的元素。要求系數 ai?是稀疏的意思就是說:對于一組輸入向量,我們只想有盡可能少的幾個系數遠大于零。選擇使用具有稀疏性的分量來表示我們的輸入數據是有原因的,因為絕大多數的感官數據,比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經元,但對于某些圖像或者邊緣只有很少的神經元興奮,其他都處于抑制狀態)。
???????? 稀疏編碼算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數據。雖然形如主成分分析技術(PCA)能使我們方便地找到一組“完備”基向量,但是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入數據內部的結構與模式。然而,對于超完備基來說,系數ai不再由輸入向量唯一確定。因此,在稀疏編碼算法中,我們另加了一個評判標準“稀疏性”來解決因超完備而導致的退化(degeneracy)問題。(詳細過程請參考:UFLDL Tutorial稀疏編碼)
???????比如在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然后給定一個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱“sparse”。
???????這里可能大家會有疑問,為什么把底層作為Edge Detector呢?上層又是什么呢?這里做個簡單解釋大家就會明白,之所以是Edge Detector是因為不同方向的Edge就能夠描述出整幅圖像,所以不同方向的Edge自然就是圖像的basis了……而上一層的basis組合的結果,上上層又是上一層的組合basis……(就是上面第四部分的時候咱們說的那樣)
???????Sparse coding分為兩個部分:
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學習得到一組基[Φ1, Φ2, …],也就是字典。
?????? 稀疏編碼是k-means算法的變體,其訓練過程也差不多(EM算法的思想:如果要優化的目標函數包含兩個變量,如L(W, B),那么我們可以先固定W,調整B使得L最小,然后再固定B,調整W使L最小,這樣迭代交替,不斷將L推向最小值。EM算法可以見我的博客:“從最大似然到EM算法淺解”)。
?????? 訓練過程就是一個重復迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標函數最小。
??????每次迭代分兩步:
a)固定字典Φ[k],然后調整a[k],使得上式,即目標函數最小(即解LASSO問題)。
b)然后固定住a [k],調整Φ [k],使得上式,即目標函數最小(即解凸QP問題)。
????? 不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。
2)Coding階段:給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。
例如:
Restricted Boltzmann Machine (RBM)限制波爾茲曼機
? ? ? ?假設有一個二部圖,每一層的節點之間沒有鏈接,一層是可視層,即輸入數據層(v),一層是隱藏層(h),如果假設所有的節點都是隨機二值變量節點(只能取0或者1值),同時假設全概率分布p(v,h)滿足Boltzmann 分布,我們稱這個模型是Restricted BoltzmannMachine (RBM)。
? ? ? ?下面我們來看看為什么它是Deep Learning方法。首先,這個模型因為是二部圖,所以在已知v的情況下,所有的隱藏節點之間是條件獨立的(因為節點之間不存在連接),即p(h|v)=p(h1|v)…p(hn|v)。同理,在已知隱藏層h的情況下,所有的可視節點都是條件獨立的。同時又由于所有的v和h滿足Boltzmann 分布,因此,當輸入v的時候,通過p(h|v) 可以得到隱藏層h,而得到隱藏層h之后,通過p(v|h)又能得到可視層,通過調整參數,我們就是要使得從隱藏層得到的可視層v1與原來的可視層v如果一樣,那么得到的隱藏層就是可視層另外一種表達,因此隱藏層可以作為可視層輸入數據的特征,所以它就是一種Deep Learning方法。
? ? ? ?如何訓練呢?也就是可視層節點和隱節點間的權值怎么確定呢?我們需要做一些數學分析。也就是模型了。
? ? ? ? 聯合組態(jointconfiguration)的能量可以表示為:
? ? ? ? 而某個組態的聯合概率分布可以通過Boltzmann 分布(和這個組態的能量)來確定:
? ? ? 因為隱藏節點之間是條件獨立的(因為節點之間不存在連接),即:
? ? ? 然后我們可以比較容易(對上式進行因子分解Factorizes)得到在給定可視層v的基礎上,隱層第j個節點為1或者為0的概率:
? ? ? ?同理,在給定隱層h的基礎上,可視層第i個節點為1或者為0的概率也可以容易得到:
? ? ? ?給定一個滿足獨立同分布的樣本集:D={v(1),?v(2),…,?v(N)},我們需要學習參數θ={W,a,b}。
? ? ? ?我們最大化以下對數似然函數(最大似然估計:對于某個概率模型,我們需要選擇一個參數,讓我們當前的觀測樣本的概率最大):
? ? ? ? 也就是對最大對數似然函數求導,就可以得到L最大時對應的參數W了。
?
? ? ? ?如果,我們把隱藏層的層數增加,我們可以得到Deep Boltzmann Machine(DBM);如果我們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,當然這里依然限制層中節點之間沒有鏈接),而在最遠離可視層的部分使用Restricted Boltzmann Machine,我們可以得到DeepBelief Net(DBN)。
?
Deep Belief Networks深信度網絡
? ? ? ? DBNs是一個概率生成模型,與傳統的判別模型的神經網絡相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了后者,也就是P(Label|Observation)。對于在深度神經網絡應用傳統的BP算法的時候,DBNs遇到了以下問題:
(1)需要為訓練提供一個有標簽的樣本集;
(2)學習過程較慢;
(3)不適當的參數選擇會導致學習收斂于局部最優解。
? ? ? ?DBNs由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網絡類型如圖三所示。這些網絡被“限制”為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
? ? ? ?首先,先不考慮最頂構成一個聯想記憶(associative memory)的兩層,一個DBN的連接是通過自頂向下的生成權值來指導確定的,RBMs就像一個建筑塊一樣,相比傳統和深度分層的sigmoid信念網絡,它能易于連接權值的學習。
? ? ? ?最開始的時候,通過一個非監督貪婪逐層方法去預訓練獲得生成模型的權值,非監督貪婪逐層方法被Hinton證明是有效的,并被其稱為對比分歧(contrastive divergence)。
? ? ? ?在這個訓練階段,在可視層會產生一個向量v,通過它將值傳遞到隱層。反過來,可視層的輸入會被隨機的選擇,以嘗試去重構原始的輸入信號。最后,這些新的可視的神經元激活單元將前向傳遞重構隱層激活單元,獲得h(在訓練過程中,首先將可視向量值映射給隱單元;然后可視單元由隱層單元重建;這些新可視單元再次映射給隱單元,這樣就獲取新的隱單元。執行這種反復步驟叫做吉布斯采樣)。這些后退和前進的步驟就是我們熟悉的Gibbs采樣,而隱層激活單元和可視層輸入之間的相關性差別就作為權值更新的主要依據。
? ? ? ?訓練時間會顯著的減少,因為只需要單個步驟就可以接近最大似然學習。增加進網絡的每一層都會改進訓練數據的對數概率,我們可以理解為越來越接近能量的真實表達。這個有意義的拓展,和無標簽數據的使用,是任何一個深度學習應用的決定性的因素。
? ? ? ?在最高兩層,權值被連接到一起,這樣更低層的輸出將會提供一個參考的線索或者關聯給頂層,這樣頂層就會將其聯系到它的記憶內容。而我們最關心的,最后想得到的就是判別性能,例如分類任務里面。
? ? ? ?在預訓練后,DBN可以通過利用帶標簽數據用BP算法去對判別性能做調整。在這里,一個標簽集將被附加到頂層(推廣聯想記憶),通過一個自下向上的,學習到的識別權值獲得一個網絡的分類面。這個性能會比單純的BP算法訓練的網絡好。這可以很直觀的解釋,DBNs的BP算法只需要對權值參數空間進行一個局部的搜索,這相比前向神經網絡來說,訓練是要快的,而且收斂的時間也少。
? ? ? ?DBNs的靈活性使得它的拓展比較容易。一個拓展就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs并沒有考慮到圖像的2維結構信息,因為輸入是簡單的從一個圖像矩陣一維向量化的。而CDBNs就是考慮到了這個問題,它利用鄰域像素的空域關系,通過一個稱為卷積RBMs的模型區達到生成模型的變換不變性,而且可以容易得變換到高維圖像。DBNs并沒有明確地處理對觀察變量的時間聯系的學習上,雖然目前已經有這方面的研究,例如堆疊時間RBMs,以此為推廣,有序列學習的dubbed temporal convolutionmachines,這種序列學習的應用,給語音信號處理問題帶來了一個讓人激動的未來研究方向。
? ? ? ?目前,和DBNs有關的研究包括堆疊自動編碼器,它是通過用堆疊自動編碼器來替換傳統DBNs里面的RBMs。這就使得可以通過同樣的規則來訓練產生深度多層神經網絡架構,但它缺少層的參數化的嚴格要求。與DBNs不同,自動編碼器使用判別模型,這樣這個結構就很難采樣輸入采樣空間,這就使得網絡更難捕捉它的內部表達。但是,降噪自動編碼器卻能很好的避免這個問題,并且比傳統的DBNs更優。它通過在訓練過程添加隨機的污染并堆疊產生場泛化性能。訓練單一的降噪自動編碼器的過程和RBMs訓練生成模型的過程一樣。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的AutoEncoder、RBM、DBM、DBN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 16(矩形嵌套)
- 下一篇: qt学习之路3 ---信号与槽机制