1. AutoEncoder介紹
2. Applications of AutoEncoder in NLP
3. Recursive Autoencoder(遞歸自動編碼器)
4. Stacked AutoEncoder(堆棧自動編碼器)
1. 前言
AutoEncoder(后面用AE簡稱)是一個自動編碼器,它是通過重建輸入的神經網絡訓練過程,它的隱藏成層的向量具有降維的作用。它的特點是編碼器會創建一個隱藏層(或多個隱藏層)包含了輸入數據含義的低維向量。然后有一個解碼器,會通過隱藏層的低維向量重建輸入數據。通過神經網絡的訓練最后AE會在隱藏層中得到一個代表輸入數據的低維向量。它可以幫助數據分類、可視化、存儲。AE是一個自動編碼器是一個非監督的學習模式,只需要輸入數據,不需要label或者輸入輸出對的數據。
雖然AE是一個非監督學習算法,如果它的解碼器是線性重建數據,可以用MSE來表示它的損失函數:
如果解碼器用Sigmoid的激活函數,那主要用交叉上損失函數:
3. AE的歷史發展
AE的思想是在1986年被提出來的,在接下來的幾年,AE的思想席卷了個大研究論文。關於AE比較有代表性的模型有一下幾種:
- Denoising AutoEncoder
- Sparse AutoEncoder
- Contractive AutoEncoder
- Variational AutoEncoder
4. Denoising AutoEncoder
DAE的主要做法是,輸入數據加入了噪聲,輸出的數據是完整的數據。DAE會強制隱藏層只去學習主要的特征,輸出的數據就會是更好的魯棒性。
DAE的一種方式是隨機的刪除數據集中的某些數據,然后用完整的數據去評判,DAE會嘗試去預測恢復缺失的部分。
一個關於手寫數字集的DAE的展示圖如下:
5. Sparse AutoEncoder
AE一般的方式是通過隱藏層中的少數的隱藏單元去發現有用的信息,但是AE也可以通過大量的隱藏單元去發現有用信息。SAE的做法是把輸入數據轉化為高緯度的中間層,然后引入一個稀疏限制的規則。稀疏限制是在大部分時間,大部分的神經元的平均輸出比較低。如果使用Sigmoid的激活函數,我們會盡量把輸出變為0,如果是tanh的激活函數,我們會盡量把輸出變為-1。
\(a_j\)是神經元的激活后的輸出,\(p_j\)是所有神經元輸出的平均值,我們的目標是去最小化\(p_j\)。
K-Sparse AutoEncoder是SAE提升版本,KSAE是本身的隱藏神經元非常多,但只選擇k個神經元是激活的,其他都是dropout狀態,通過選擇不同的激活函數和調整不同的k的閾值去訓練。下面是通過調整k值,生成不同的手寫數字的輸出值。
6. Contractive AutoEncoder
CAE的主要目標是使得隱藏層向量對輸入數據的微小的變動能夠有更強的魯棒性。CAE的做法是在普通AE的基礎上加上一個懲罰項。公式如下:
CAE和DAE目標是相似的,DAE是通過加入噪聲,重構來提升模型的魯棒性,CAE是通過增加雅克比矩陣的懲罰項來提高模型魯棒性。
7. Variational AutoEncoder
VAE結構是一個經典的autocoder模型,網絡的組成也是編碼器、解碼器、loss。VAE的機構和普通的AE結構有所不同。
普通的AE結構如下,解碼器直接使用編碼器的輸出向量。
上面的模型已經可以訓練任意圖片了。但是,我們想建一個產生式模型,而不是一個只是儲存圖片的網絡。現在我們還不能產生任何未知的東西,因為我們不能隨意產生合理的潛在變量。因為合理的潛在變量都是編碼器從原始圖片中產生的。這里有個簡單的解決辦法。我們可以對編碼器添加約束,就是強迫它產生服從單位高斯分布的潛在變量。正是這種約束,把VAE和標准自編碼器給區分開來了。
不像標准自編碼器那樣產生實數值向量,VAE的編碼器會產生兩個向量:一個是均值向量,一個是標准差向量。
VAE除了能讓我們能夠自己產生隨機的潛在變量,這種約束也能提高網絡的產生圖片的能力。
另外,VAE的一個劣勢就是沒有使用對抗網絡,所以會更趨向於產生模糊的圖片
8. 總結
AE算法的壓縮數據的方式,可以運用的地方是很多的,圖像和自然語言處理都是有很大的發揮空間。現在的VAE也可以用來生成圖片。后面會再分別介紹AE再圖像和自然語言處理中的應用。