一文看懂AutoEncoder模型演進圖譜

本文來自“深度推薦系統”專欄,這個系列將介紹在深度學習的強力驅動下,給推薦系統工業界所帶來的最前沿的變化。本文則結合作者在工作中的經驗總結,着重於串講AutoEncoder模型框架的演進圖譜。

AutoEncoder作爲NN裏的一類模型,採用無監督學習的方式對高維數據進行高效的特徵提取和特徵表示,並且在學術界和工業界都大放異彩。本文主要介紹AutoEncoder系列模型框架的演進,旨在梳理AutoEncoder的基本原理。首先上圖,然後再對他們進行逐一介紹。

AutoEncoder的思想最早被提出來要追溯到1988年[1],當時的模型由於數據過於稀疏高維計算複雜度高很難優化,沒能得到廣泛的引用。直到2006年,Hinton等人[2]採用梯度下降來逐層優化RBM從而實現對原始樣本/特徵的抽象表示,並在特徵降維上取得顯著效果。這才使得采用神經網絡來構建AutoEncoder的方法得到廣泛關注。

AutoEncoder

在介紹經典的基於神經網絡的AutoEncoder模型之前,先來整體看一下AutoEncoder框架的基本思想,如下圖所示。AutoEncoder框架包含兩大模塊:編碼過程和解碼過程。通過encoder(g)將輸入樣本x映射到特徵空間z,即編碼過程;然後再通過decoder(f)將抽象特徵z映射回原始空間得到重構樣本x’,即解碼過程。優化目標則是通過最小化重構誤差來同時優化encoder和decoder,從而學習得到針對樣本輸入x的抽象特徵表示z。

這裏我們可以看到,AutoEncoder在優化過程中無需使用樣本的label,本質上是把樣本的輸入同時作爲神經網絡的輸入和輸出,通過最小化重構誤差希望學習到樣本的抽象特徵表示z。這種無監督的優化方式大大提升了模型的通用性。

對於基於神經網絡的AutoEncoder模型來說,則是encoder部分通過逐層降低神經元個數來對數據進行壓縮;decoder部分基於數據的抽象表示逐層提升神經元數量,最終實現對輸入樣本的重構。

這裏指的注意的是,由於AutoEncoder通過神經網絡來學習每個樣本的唯一抽象表示,這會帶來一個問題:當神經網絡的參數複雜到一定程度時AutoEncoder很容易存在過擬合的風險。

Denoising AutoEncoder

爲了緩解經典AutoEncoder容易過擬合的問題,一個辦法是在輸入中加入隨機噪聲;Vincent等人[3]提出了Denoising AutoEncoder,在傳統AutoEncoder輸入層加入隨機噪聲來增強模型的魯棒性。另一個辦法就是結合正則化思想,Rifai等人[4]提出了Contractive AutoEncoder,通過在AutoEncoder目標函數中加上encoder的Jacobian矩陣範式來約束使得encoder能夠學到具有抗干擾的抽象特徵。

下圖是Denoising AutoEncoder的模型框架。目前添加噪聲的方式大多分爲兩種:添加服從特定分佈的隨機噪聲;隨機將輸入x中特定比例置爲0。有沒有覺得第二種方法跟現在廣泛石紅的Dropout很相似,但是Dropout方法是Hinton等人在2012年才提出來的,而第二種加噪聲的方法在08年就已經被應用了。這其中的關係,就留給你思考一下。

Denoising AutoEncoder模型框架

Sparse AutoEncoder

爲了在學習輸入樣本表示的時候可以得到稀疏的高維抽象特徵表示,Ng等人[5]在原來的損失函數中加入了一個控制稀疏化的正則項。稀疏約束能迫使encoder的各層只有部分神經元被激活,從而將樣本映射成低維稀疏特徵向量。

具體來說,如果單個神經元被激活的概率很小,則可認爲該網絡具有稀疏性。神經元是否被激活可以看做服從概率的伯努利分佈。因此可以使用KL散度來衡量神經元被激活的概率ρ^與期望概率ρ之間的loss:

通過將D_KL加入到AutoEncoder的目標函數中,即可實現對神經網絡稀疏性的約束。另外,還有一種方法就是對神經網絡各層的輸出加入L1約束。

CNN/LSTM AutoEncoder

其實無論是Convolutional Autoencoder[6]、 Recursive Autoencoder還是LSTM Autoencoder[7]等等,思路都是將傳統NN網絡的結構融入到AutoEncoder中。

以LSTM AutoEncoder爲例,目標是針對輸入的樣本序列學習得到抽象特徵z。因此encoder部分是輸入一個樣本序列輸出抽象特徵z,採用如下的Many-to-one LSTM;而decoder部分則是根據抽象特徵z,重構出序列,採用如下的One-to-many LSTM。

將傳統NN網絡的結構引入AutoEncoder其實更多是一個大概的思想,具體實現的時候,編碼器和解碼器都是不固定的,可選的有CNN/RNN/雙向RNN/LSTM/GRU等等,而且可以根據需要自由組合。

Variational AutoEncoder

Vairational AutoEncoder(VAE)是Kingma等人與2014年提出。VAE比較大的不同點在於:VAE不再將輸入x映射到一個固定的抽象特徵z上,而是假設樣本x的抽象特徵z服從(μ,σ^2)的正態分佈,然後再通過分佈生成抽象特徵z。最後基於z通過decoder得到輸出。模型框架如下圖所示:

由於抽象特徵z是從正態分佈採樣生成而來,因此VAE的encoder部分是一個生成模型,然後再結合decoder來實現重構保證信息沒有丟失。VAE是一個里程碑式的研究成果,倒不是因爲他是一個效果多麼好的生成模型,主要是提供了一個結合概率圖的思路來增強模型的魯棒性。後續有很多基於VAE的擴展,包括infoVAE、betaVAE和factorVAE等。

Adversarial AutoEncoder

既然說到生成模型引入AutoEncoder,那必定也少不了將GAN的思路引入AutoEncoder[9],也取得了不錯的效果。

對抗自編碼器的網絡結構主要分成兩大部分:自編碼部分(上半部分)、GAN判別網絡(下半部分)。整個框架也就是GAN和AutoEncoder框架二者的結合。訓練過程分成兩個階段:首先是樣本重構階段,通過梯度下降更新自編碼器encoder部分、以及decoder的參數、使得重構損失函數最小化;然後是正則化約束階段,交替更新判別網絡參數和生成網絡(encoder部分)參數以此提高encoder部分混淆判別網絡的能力。

一旦訓練完畢,自編碼器的encoder部分便學習到了從樣本數據x到抽象特徵z的映射關係。

參考文獻

[1] Auto-association by multilayer perceptrons and singular value decomposition, Bourlard etc, 1988

[2] Reducing the dimensionality of data with neural networks, Geoffrey Hinton etc, 2006

[3] Extracting and composing robust features with denoising autoencoders, Pascal Vincent etc, 2008

[4] Contractive auto-encoders: Explicit invariance during feature extraction, Rifai S etc, 2011

[5] Sparse autoencoder, Andrew Ng, etc, 2011

[6] Stacked Convolutional Auto-Encoders for Hierarchical Feature, Jonathan Masci, Jurgen Schmidhuber etc, 2011

[7] Unsupervised Learning of Video Representations using LSTMs, Nitish Srivastava etc, 2015

[8] Auto-encoding variational bayes, Diederik Kingma etc, ICLR 2014

[9] Adversarial Autoencoders, Alireza Makhzani, Ian Goodfellow etc, 2015

本文授權轉載自知乎專欄“深度推薦系統”。原文鏈接:https://zhuanlan.zhihu.com/p/68903857

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