Deep Auto-encoder


autoencoder可以用於數據壓縮、降維,預訓練神經網絡,生成數據等等。

autoencoder的架構

autoencoder的架構是這樣的:

需要分別訓練一個Encoder和一個Decoder。

比如,一張數字圖片784維,放入Encoder進行壓縮,編程code,通常要小於原來的784維;

然后可以將壓縮后的code,放入Decoder進行reconsturct,產生和原來相似的圖片。

Encoder和Decoder需要一起進行訓練。

下面看看PCA對於數據的壓縮:

輸入同樣是一張圖片,通過選擇W,找到數據的主特征向量,壓縮圖片得到code,然后使用W的轉置,恢復圖片。

我們知道,PCA對數據的降維是線性的(linear),恢復數據會有一定程度的失真。上面通過PCA恢復的圖片也是比較模糊的。

所以,我們也可以把PCA理解成為一個線性的autoencoder,W就是encode的作用,w的轉置就是decode的作用,最后的目的是decode的結果和原始圖片越接近越好。

現在來看真正意義上的Deep Auto-encoder的結構。通常encoder每層對應的W和decoder每層對應的W不需要對稱(轉置)。

從上面可以看出,Auto-encoder產生的圖片,比PCA還原的圖片更加接近真實圖片。

上面是使用PCA和autoencoder對於數字圖片壓縮后的可視化結果,明顯autoencoder的區分度更高。

De-noising auto-encoder

為了讓aotoencoder訓練的更好,更加robust,我們在訓練的時候加入一些noise,這就是De-noising auto-encoder。

examples

接下來再看兩個例子。

文本檢索,簡單的詞袋模型,將文本轉化成詞向量。

當搜索的詞和文本向量角度越接近,就說明內容越相關。

將詞向量放入autoencoder中進行壓縮,得到code,內容相近的文本,code也越接近。

不同主題的文本被明顯的分開,得到右上的2維圖像。

搜索圖片的相似性。

搜索紅框中的邁克傑克遜的照片,下面是使用像素點之間的歐式距離得到的搜索結果。

下面使用autoencoder編碼后的code,進行相似性的搜索結果。

 

 

使用CNN實現autoencoder

經過多次convolution和pooling后的code,可以再經過deconvolution和unpooling恢復。

下面將如何實現unpooling和deconvolution。

在maxpooling時,需要記住max值在圖片中的位置。

當進行unpooling時,把小的圖片做擴展,先把max值恢復到之前的位置,然后在之前進行maxpooling的field內的像素都置為0.

接下來看Deconvolution

現在假設一個field里面有3個像素點,每個filter的3個weight作用下得到一個output,如圖左。

而deconvolution就是要讓這3個output復原成原來那么多的點,一個output變成3各點,把重疊的點加起來,如圖中。

現在,將3個output進行擴展,給擴展的點的值為0,然后就依然做convolution,還是可以得到和圖中相同的結果。

所以,deconvolution其實就是convolution。

最后,我們可以使用autoencoder壓縮后的code,輸入到decoder里,得到一張新的圖像,如下所示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM