Autoencoder ,Sparse Coding ,Sparse autoencoder 簡介
最近剛剛運(yùn)行完成sparse coding;才解決了自己的困惑,以前學(xué)習(xí)完Sparse autoencoder從感覺這兩個東西是“一丘之貉”;但是運(yùn)行完成之后才發(fā)現(xiàn)他們兩個有很大的不同,雖然都是對數(shù)據(jù)進(jìn)行變換,但是二者的變換原理是完全不同的。詳細(xì)的下面纖細(xì)介紹。
1.Autoencoder介紹
Autoencdoer這個概念最早應(yīng)該是出自hinton在science雜志上發(fā)表的哪一篇開啟深度學(xué)習(xí)的曠世之作“rerducing thedimensionality of data with neural network”上,提取重點(diǎn)簡單翻譯之。
摘要簡單翻譯
……通過訓(xùn)練一個中心層有少數(shù)隱層節(jié)點(diǎn)的多層的神經(jīng)網(wǎng)絡(luò),來重構(gòu)高維輸入數(shù)據(jù),高維輸入數(shù)據(jù)可以轉(zhuǎn)換到一個低維數(shù)據(jù)。在這個“Autoencdoer”中,梯度下降算法可以用來fine_tuning權(quán)值矩陣?!?/p>
正文簡單翻譯
……我們簡述一種非線性的PCA方法,這種方法應(yīng)用自適應(yīng),多層編碼(encoder)網(wǎng)絡(luò)來轉(zhuǎn)換高維數(shù)據(jù)到一個低維編碼,并且架構(gòu)一個相似的反編碼“decoder”網(wǎng)絡(luò)來復(fù)原低維編碼到原始數(shù)據(jù)。在兩層網(wǎng)絡(luò)結(jié)構(gòu)中,通過隨機(jī)初始化權(quán)值矩陣,通過訓(xùn)練,最小化重構(gòu)數(shù)據(jù)和原始數(shù)據(jù)的差異;通過鏈?zhǔn)椒▌t反向傳播誤差,首先通過反編碼網(wǎng)絡(luò)部分,在通過編碼網(wǎng)絡(luò)部分,所需要的梯度可以很容易的獲得。整個網(wǎng)絡(luò)叫做“Autoencdoer”?!?/p>
這篇論文中,hinton通過RBM來訓(xùn)練每一層的初始權(quán)值,然后堆疊多個RBM得到一個中心層網(wǎng)絡(luò)節(jié)點(diǎn)少,encoder和decoder部分對稱的DBN網(wǎng)絡(luò)來進(jìn)行“Autoencdoer”。
Autoencoder介紹:(網(wǎng)上看到的梁斌博客,一個比較好的介紹就copy過來了)
copy自http://blog.sina.com.cn/s/blog_593af2a70101endk.html
簡單來說autoencoder是一個壓縮編碼器,也就是對input的一坨東西通過變換,輸出和input一樣的東西。例如input是一個雞,ouput也是一個雞,input是一個鴨,output也是一個鴨。學(xué)術(shù)一點(diǎn)說就是找到一個函數(shù)能夠使得Function(input) = input,叫做identity function。即學(xué)習(xí)Hw,b(x)=x。
但這和深度學(xué)習(xí)有什么關(guān)系呢? 這就要說到壓縮編碼,我們都知道input需要有一種編碼形式,如果我們能在函數(shù)內(nèi)部找到一個更簡潔的編碼形式,那么這個變換過程就等價于學(xué)習(xí)到了一種壓縮表示的函數(shù),能夠少量的存儲形式來表示原本較復(fù)雜的但信息冗余較大的表示形式。
我們下面的代碼中舉了一個精彩的例子(這個例子是從同學(xué)的一次實(shí)驗(yàn)中直接受啟發(fā),我只是按照自己的理解實(shí)現(xiàn)了一把,例子非原創(chuàng))。在這個例子中,input是4個不同的數(shù)字,分別是
(0,0,0,1)可以看作1
(0,0,1,0)可以看作2
(0,1,0,0)可以看作3
(1,0,0,0)可以看作4
因?yàn)樗械膇nput只有這4種,因此其實(shí)用4個bit是不經(jīng)濟(jì)的,存在壓縮表示的可能性,比如2個bit就可以表示這4個不同的數(shù)。
那么我們設(shè)計(jì)了輸入層是4+1(4個腳接受4bit編碼的input,1個腳是常數(shù)項(xiàng),這個用來做先驗(yàn)的);隱藏層2+1(因?yàn)槲覀儗?shí)現(xiàn)已經(jīng)知道2個bit就夠了,所以2個隱藏層,具有足夠的表達(dá)能力);輸出層4(為了能讓輸出和輸入保持一致)
通過數(shù)輪迭代,我們看到如下的情況
(0,0,0,1)->(0.99,0.09)->(0.06,0.00,0.01,0.91)
(0,0,1,0)->(0.85,0.99)->(0.00,0.07,0.90,0.07)
(0,1,0,0)->(0.01,0.67)->(0.06,0.87,0.11,0.00)
(1,0,0,0)->(0.12,0.00)->(0.89,0.10,0.00,0.02)
input_layer?hidden_layer ????output_layer
hidden層的編碼恰好可以看作是
(0.99,0.09) ?1,0
(0.85,0.99) ?1,1
(0.01,0.67) ?0,1
(0.12,0.00) ?0,0
也就是說輸入的(0,0,0,1)可以被1,0 壓縮表示,最終4bit的信息,可以用2bit表示,當(dāng)然還需要保持邊的權(quán)重,但這些邊權(quán)重只需要一份,在輸入足夠復(fù)雜的時候,壓縮表示是有價值的。
若用RBM堆疊的DBM來學(xué)習(xí)Autoencoder,最后fine_tuning結(jié)束之后學(xué)習(xí)到的是幾個權(quán)值矩陣W1,W2……和相應(yīng)的偏置項(xiàng)b1,b2……等;若用普通的3層神經(jīng)網(wǎng)絡(luò)(input—hiden—ouput)網(wǎng)絡(luò)則學(xué)習(xí)到一個權(quán)值矩陣W1和偏置項(xiàng)b1。
最后,輸入數(shù)據(jù),通過神經(jīng)網(wǎng)絡(luò)的前饋計(jì)算就可以把數(shù)據(jù)重構(gòu)為其他維度的數(shù)據(jù),來實(shí)現(xiàn)特征提取。
其他相關(guān)可參見美軍參考資料:
http://ufldl.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity
2.Sparse Coding介紹
稀疏編碼算法是一種無監(jiān)督學(xué)習(xí)方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數(shù)據(jù)。雖然形如主成分分析技術(shù)(PCA)能使我們方便地找到一組“完備”基向量,但是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數(shù)比輸入向量的維數(shù)要大)。超完備基的好處是它們能更有效地找出隱含在輸入數(shù)據(jù)內(nèi)部的結(jié)構(gòu)與模式。然而,對于超完備基來說,系數(shù)ai不再由輸入向量唯一確定。
sparse coding是將輸入的樣本集X分解為多個基元的線性組合,然后這些基前面的系數(shù)表示的是輸入樣本的特征。其分解公式表達(dá)如下:

通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來?!跋∈栊浴倍x為:只有很少的幾個非零元素或只有很少的幾個遠(yuǎn)大于零的元素。要求系數(shù)ai是稀疏的意思就是說:對于一組輸入向量,我們只想有盡可能少的幾個系數(shù)遠(yuǎn)大于零。選擇使用具有稀疏性的分量來表示我們的輸入數(shù)據(jù)是有原因的,因?yàn)榻^大多數(shù)的感官數(shù)據(jù),比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經(jīng)元,但對于某些圖像或者邊緣只有很少的神經(jīng)元興奮,其他都處于抑制狀態(tài))。
Sparse coding分為兩個部分:
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學(xué)習(xí)得到一組基[Φ1, Φ2, …],也就是字典A。
訓(xùn)練過程就是一個重復(fù)迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標(biāo)函數(shù)最小。

每次迭代分兩步:
a)固定字典Φ[k],然后調(diào)整a[k],使得上式,即目標(biāo)函數(shù)最?。唇釲ASSO問題)。
b)然后固定住a [k],調(diào)整Φ [k],使得上式,即目標(biāo)函數(shù)最?。唇馔筈P問題)。
不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。
2)Coding階段:給定一個新的圖片x,由上面得到的字典A,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達(dá)了。

例如:

參考文獻(xiàn):http://blog.csdn.net/zouxy09/article/details/8777094;
http://www.cnblogs.com/tornadomeet/archive/2013/04/16/3024292.html
和autoencoder不同的是,當(dāng)sparse coding完成訓(xùn)練過程后,只是完成了字典A,也就是超完備基的學(xué)習(xí),和訓(xùn)練數(shù)據(jù)稀疏系數(shù)的學(xué)習(xí);對于給定的新數(shù)據(jù)還需要coding過程,去“求解”系數(shù)。
3 ?Sparse Autoencoder =sparse coding + autoencoder
對autoencoder中權(quán)值矩陣加上稀疏性限制的autoencoder。