Deeplearning——自編碼器(Autoencoder)

前言

自編碼器(autoencoder, AE)是一類在半監督學習和非監督學習中使用的人工神經網絡(Artificial Neural Networks, ANNs),其功能是通過將輸入信息作爲學習目標,對輸入信息進行表徵學習(representation learning)。其結構圖如下圖1所示

圖1 自編碼器結構圖

一.生成模型
  1.1.什麼是生成模型
  1.2.生成模型的類型
二.自編碼器(Autoencoder)
  2.1.自編碼器的定義
  2.2.自編碼器分類
  2.3自編碼器的應用
  2.4自編碼器與PCA的比較

在瞭解自編碼器之前我們首先來說說生成模型

一.生成模型

1.1.什麼是生成模型

我們從概率統計和機器學習兩個方面給出生成模型的定義:
1.概率統計層面:能夠在給定某一些隱含參數的條件下,隨機生成觀測數據的這樣一種模型,稱之爲“生成模型”。
2.機器學習層面:直接對數據進行建模,比如根據某個變量的概率密度函數進行數據採樣。在貝葉斯算法中,直接對聯合概率分佈P(x,y)P(x,y)進行建模,然後利用貝葉斯公式進行求解P(yx)P(y|x)

1.2.生成模型的類型

我們將生成模型分爲兩大類:
第一類:完全表示出數據確切的分佈函數
第二類:沒有辦法完全表示出確切的分佈函數,但是,能夠做到的新的數據的生成,而具體的分佈函數是模糊的。
在機器學習中,不管是自編碼器AE、變分自編碼器VAE、還是生成對抗網路GAN,都是屬於第二類。生成新數據,也是大部分生成模型的核心目標。

二.自編碼器(Autoencoder)

2.1.自編碼器的定義

自編碼器是一種無監督的學習任務,利用神經網絡來進行表徵學習。
在我們設計一個神經網絡的時候,在其中加入一個"瓶頸(bottleneck)",那麼將會迫使網絡壓縮原始輸入數據的知識表徵。如果輸入的數據個特徵之間相互獨立,那這個壓縮和之後的重建將會非常的困難。但是,如果數據中存在着某種結構(也就是在輸入數據的特徵之間存在着某種聯繫),並且當促使輸入通過網絡的"瓶頸",那麼這種結構將會被學習並被利用。

圖2 編碼器神經網絡

如圖2所示。給定一個無標籤數據集,是一個將原始輸入xx重建爲x^\hat x輸出的無監督學習任務。我們訓練過程中的要減小重建損失L(x,x^)L(x,\hat x)。可以說"瓶頸"層是我們整個網絡的一個關鍵屬性,如果沒有這個信息瓶頸的存在,那麼網絡將只會簡單的"記憶"數據的值,然後,將這些值通過網絡(並沒有學習到數據的隱含分佈)來重建數據。效果如圖3所示

圖3
瓶頸層限制了可以傳遍整個網絡的大量信息,使的網絡去學習輸入數據的壓縮表示。

  在自動編碼器中,需要輸入一張圖片,然後將一張圖片編碼之後得到一個隱含向量,這比隨機取一個隨機向量好,因爲這包含着原圖片的信息,然後將隱含向量解碼得到與原圖片對應的照片。但是這樣其實並不能任意生成圖片,因爲沒辦法自己去構造隱藏向量,需要通過一張圖片輸入編碼才知道得到的隱含向量是什麼,這時就可以通過變分自動編碼器解決這個問題。其實原理特別簡單,只需要在編碼過程給它增加一些限制,迫使它生成的隱含向量能夠粗略地遵循一個標準正態分佈,這就是它與一般的自動編碼器最大的不同。這樣生成一張新圖片就很簡單了,只需要給它一個標準正態分佈的隨機隱含向量,通過解碼器就能夠生成想要的圖片,而不需要先給它一張原始圖片編碼。

2.2.自編碼器分類

  自編碼器輸出數據的維度其維度一般遠小於輸入數據,使得自編碼器可用於降維。更重要的是,自編碼器可作爲強大的特徵檢測器(feature detectors),應用於深度神經網絡的預訓練。自編碼器可以限制內部表示的尺寸(這就實現降維了),或者對訓練數據增加噪聲並訓練自編碼器使其能恢復原有。這些限制條件防止自編碼器機械地將輸入複製到輸出,並強制它學習數據的高效表示。簡而言之,編碼(就是輸入數據的高效表示)是自編碼器在一些限制條件下學習恆等函數(identity function)的副產品。
  自編碼器通常包括兩部分:encoder(也稱爲識別網絡)將輸入轉換成內部表示,decoder(也稱爲生成網絡)將內部表示轉換成輸出。由於內部表示(也就是隱層的輸出)的維度小於輸入數據(用2D取代了原來的3D),這稱爲不完備自編碼器(undercomplete autoencoder)
  自編碼器可以有多個隱層,這被稱作**棧式自編碼器(或者深度自編碼器)**如圖4。增加隱層可以學到更復雜的編碼,但千萬不能使自編碼器過於強大。想象一下,一個encoder過於強大,它僅僅是學習將輸入映射爲任意數(然後decoder學習其逆映射)。很明顯這一自編碼器可以很好的重建數據,但它並沒有在這一過程中學到有用的數據表示。

圖4 棧式自編碼器
(而且也不能推廣到新的實例)基本意思就是一個隱藏層的神經網絡,輸入輸出都是x,並且輸入維度一定要比輸出維度大,屬於無監督學習。一種利用反向傳播算法使得輸出值等於輸入值的神經網絡,它先將輸入壓縮成潛在空間表徵,然後通過這種表徵來重構輸出。

2.3自編碼器的應用

由於自編碼器強大的功能,其在實際中存在着以下幾個方面的應用:
  第一是數據去噪。
  第二是爲進行可視化而降維。
  第三是進行圖像壓縮。
  第四是傳統自編碼器被用於降維或特徵學習。

2.4自編碼器與PCA的比較

如果自編碼器使用線性激活函數並且損失函數是均方差(Mean Squared Error,MSE),那它就可以用來實現主成分分析(PCA)。由於兩者有着在某一方面有着共同的作用,下面我們對其進行比較。 
1)自編碼器是一種類似於 PCA 的無監督機器學習算法。大體上,AutoEncoder可以看作是PCA的非線性補丁加強版,PCA的取得的效果是建立在降維基礎上的。
2)自編碼器要最小化和 PCA 一樣的目標函數。自動編碼器的目標是學習函數 h(x)xh(x) \approx x。換句話說,它要學習一個近似的恆等函數,使得輸出 x^\hat x 近似等於輸入xx
3)它是一種神經網絡,這種神經網絡的目標輸出就是其輸入。自動編碼器屬於神經網絡家族,但它們也和 PCA(主成分分析)緊密相關。
總之,儘管自動編碼器與 PCA 很相似,但自動編碼器比 PCA 靈活得多。在編碼過程中,自動編碼器既能表徵線性變換,也能表徵非線性變換;而 PCA 只能執行線性變換。因爲自動編碼器的網絡表徵形式,所以可將其作爲層用於構建深度學習網絡。設置合適的維度和稀疏約束,自編碼器可以學習到比PCA等技術更有意思的數據投影。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章