AutoEncoder (一)-認識與理解

Moris
NLP & Speech Recognition Note
Jun 15, 2019

--

構想 :

在處理異常偵測時。可以像PCA一樣,可以從input擷取重要特徵,代表全體。當新的測試資料進來,和這樣的代表特徵比對,就可以判斷是不是異常。

因此設計了一個非監督式學習的神經網路,其中中間的Internal Representation可以看做是對輸入的資料做壓縮(維度限制)或是加入雜訊到輸入資料

Internal Representation又稱為Bottleneck

Internal Representation = Bottleneck!

AutoEncoder四大類型

AutoEncoder(AE)

AutoEncoder 是多層神經網絡的一種非監督式學習算法,稱為自動編碼器,它可以幫助資料分類、視覺化、儲存。

其架構中可細分為 Encoder(編碼器)和 Decoder(解碼器)兩部分,它們分別做壓縮與解壓縮的動作,讓輸出值和輸入值表示相同意義

透過重建輸入的神經網路訓練過程,隱藏層的向量具有降維的作用。特點是編碼器會建立一個隱藏層(或多個隱藏層)包含了輸入資訊的低維向量。然後有一個解碼器,會通過隱藏層的低維向量重建輸入資料。通過神經網路的訓練最後AE會在隱藏層中得到一個代表輸入資料的低維向量。

https://blog.keras.io/building-autoencoders-in-keras.html

Variational Autoencoder(VAE)

VAE 是 AutoEncoder 的進階版,結構上也是由 Encoder 和 Decoder 所構成

http://mlexplained.com/2017/12/28/an-intuitive-explanation-of-variational-autoencoders-vaes-part-1/

可以看出與 AutoEncoder 不同之處在於 VAE 在編碼過程增加了一些限制,迫使生成的向量遵從高斯分佈。由於高斯分佈可以通過其meanstandard deviation 進行參數化,因此 VAE 理論上是可以讓你控制要生成的圖片。

http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2017/Lecture/GAN%20(v3).pdf

VAE 的內部做法:
1. 先輸出兩個向量:meanstandard deviation
2. 用normal distribution產生第三個向量
3. 把第二個向量做 exponential,之後跟第三個向量做相乘後,把它跟第一個向量相加,即成為中間層的隱含向量

總之,VAE 可以解讀隱含向量中的每一個維度(dimension)分別代表什麼意思,也因此理想上可以調整想要生成的圖片。

Denoising AE(DAE)

Denoising AE 是一種學習對圖片去噪(denoise)的神經網絡,它可用於從類似圖像中提取特徵到訓練集。實際做法是在 input 加入隨機 noise,然後使它回復到原始無噪聲的資料,使模型學會去噪的能力。

https://blog.sicara.com/keras-tutorial-content-based-image-retrieval-convolutional-denoising-autoencoder-dc91450cc511

Sparse AE(SAE)

Sparse AE 的作法是在 AutoEncoder 基礎上加上 L1 正則化,限制每次得到的 representation 盡量稀疏,迫使自動編碼器將每個輸入表示為少量節點的組合,只有一小部分節點具有非零值,稱為活動節點。

為什麼要盡量稀疏呢?事實上在特徵稀疏的過程裡可以過濾掉無用的訊息,每個神經元都會訓練成辨識某些特定輸入的專家,因此 Sparse AE 可以給出比原始資料更好的特徵描述。

http://www.ericlwilkinson.com/blog/2014/11/19/deep-learning-sparse-autoencoders

訓練方式

無監督的分類任務

自動編碼器AutoEncoder中將輸入input輸入一個編碼器encoder,得到一個中間的向量表示code,這個code也就是輸入的一個表示

為了取得中間的code輸入表示,我們將code輸入到解碼器decoder中,得到一個輸出,如果這個輸出與輸入input很像的話,那我們就可以相信這個中間向量code跟輸入是存在某種關係的,也就是存在某種映射。

那麼這個中間向量code就可以作為輸入的一個特徵向量。我們通過調整encoder和decoder的參數,使得輸入和最後的輸出之間的誤差最小,這時候code就是輸入input的一個表示。

將自動編碼器應用到有監督的分類任務:

不管是「Encoder」還是「Decoder」他們的權重是可以調整的,所以如果你將Encoder+Decoder的結構建立好並搭配Input當作Output的目標答案,它在Training的過程,Autoencoder會試著找出最好的權重來使得資訊可以盡量完整還原回去,所以Autoencoder可以自行找出了Encoder和Decoder。

Encoder的效果等同於做Dimension Reduction,Encoder轉換原本數據到一個新的空間,這個空間可以比原本Features描述的空間更能精簡的描述這群數據,而中間這層Layer的數值Embedding Code就是新空間裡頭的座標,有些時候我們會用這個新空間來判斷每筆Data之間彼此的接近程度。

--

--

Moris
NLP & Speech Recognition Note

An AI engineer who loves deep learning technology and is willing to share resources and learn new technologies