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)值矩陣∩肀祝……
正文簡單翻譯
……我們簡述一種非線性的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”郎任⊙砗模……
這篇論文中,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é)的一次實驗中直接受啟發(fā),我只是按照自己的理解實現(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
因為所有的input只有這4種葫慎,因此其實用4個bit是不經(jīng)濟(jì)的衔彻,存在壓縮表示的可能性,比如2個bit就可以表示這4個不同的數(shù)偷办。
那么我們設(shè)計了輸入層是4+1(4個腳接受4bit編碼的input艰额,1個腳是常數(shù)項,這個用來做先驗的)椒涯;隱藏層2+1(因為我們實現(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)的偏置項b1娃属,b2……等六荒;若用普通的3層神經(jīng)網(wǎng)絡(luò)(input—hiden—ouput)網(wǎng)絡(luò)則學(xué)習(xí)到一個權(quán)值矩陣W1和偏置項b1。
最后矾端,輸入數(shù)據(jù)掏击,通過神經(jīng)網(wǎng)絡(luò)的前饋計算就可以把數(shù)據(jù)重構(gòu)為其他維度的數(shù)據(jù),來實現(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á)如下:
通俗的說,就是將一個信號表示為一組基的線性組合沐寺,而且要求只需要較少的幾個基就可以將信號表示出來林艘。“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠(yuǎn)大于零的元素混坞。要求系數(shù)ai是稀疏的意思就是說:對于一組輸入向量狐援,我們只想有盡可能少的幾個系數(shù)遠(yuǎn)大于零。選擇使用具有稀疏性的分量來表示我們的輸入數(shù)據(jù)是有原因的究孕,因為絕大多數(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ù)最泄4(即解LASSO問題)。
b)然后固定住a [k]绣溜,調(diào)整Φ [k]慷彤,使得上式,即目標(biāo)函數(shù)最胁烙鳌(即解凸QP問題)底哗。
不斷迭代,直至收斂锚沸。這樣就可以得到一組可以良好表示這一系列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。