当我们在谈论 Deep Learning:AutoEncoder 及其相关模型
引言
AutoEncoder 是 Feedforward Neural Network 的一種,曾經(jīng)主要用于數(shù)據(jù)的降維或者特征的抽取,而現(xiàn)在也被擴(kuò)展用于生成模型中。與其他 Feedforward NN 不同的是,其他 Feedforward NN 關(guān)注的是 Output Layer 和錯誤率,而 AutoEncoder 關(guān)注的是 Hidden Layer;其次,普通的 Feedforward NN 一般比較深,而 AutoEncoder 通常只有一層 Hidden Layer。
本篇文章會主要介紹傳統(tǒng)的 AutoEncoder 相關(guān)模型、以及生成模型 Variational AutoEncoder。為了方便講述,以下主要以單層 Hidden Layer 的 AutoEncoder 為例。
AutoEncoder
原始 AutoEncoder
原始的 AutoEncoder 結(jié)構(gòu)很簡單:Input Layer、Hidden Layer、Output Layer。此網(wǎng)絡(luò)的約束有:
于是,可以用 Hidden Layer 中神經(jīng)元組成的向量(這里我們稱為 Code)來表示 Input,就達(dá)到了對 Input 壓縮的效果。AutoEncoder 的訓(xùn)練方式就是普通的 BP。其中,將 Input 壓縮為 Code 的部分稱為 encoder,將 Code 還原為 Input 的部分稱為 decoder。于是,AutoEncoder 的結(jié)構(gòu)可以表示為
其數(shù)學(xué)表達(dá)式如下,其中、分別表示 encoder 和 decoder
可以看出,AutoEncoder 其實是增強的 PCA:AutoEncoder 具有非線性變換單元,因此學(xué)出來的 Code 可能更精煉,對 Input 的表達(dá)能力更強。
雖然用 AutoEncoder 來壓縮理論上看起來很智能,但是實際上并不太好用:
下面再簡要介紹一些 AutoEncoder 的擴(kuò)展。
Sparse AutoEncoder
Sparse 本身已經(jīng)被研究了很多年了,比如曾輝煌一時的 Sparse Representation。Sparse AutoEncoder(SAE)其實就是對 AutoEncoder 的 Code 增加了稀疏的約束。而稀疏具有很多良好的性質(zhì),如:
- 有降維的效果,可以用于提取主要特征
- 由于可以抓住主要特征,故具有一定抗噪能力
- 稀疏的可解釋性好,現(xiàn)實場景大多滿足這種約束(如“奧卡姆剃刀定律”)
增加了稀疏約束后的 AutoEncoder 的損失函數(shù)定義如下:
其中,表示 KL散度,表示網(wǎng)絡(luò)中神經(jīng)元的期望激活程度(若 Activation 為 Sigmoid 函數(shù),此值可設(shè)為 0.05,表示大部分神經(jīng)元未激活),表示第個神經(jīng)元的平均激活程度。在此處,KL散度 定義如下
其中,定義為訓(xùn)練樣本集上的平均激活程度,公式如下。其中表示第個訓(xùn)練樣本
Denoising AutoEncoder
Denoising AutoEncoder(DAE)是在“Vincent Extracting and composing robust features with denoising autoencoders, 2008”中提出的。本質(zhì)就是在原樣本中增加噪聲,并期望利用 DAE 將加噪樣本來還原成純凈樣本。
在文章中,作者以圖像為例,對圖像中的像素以一定概率遮擋,作為輸入。隨后利用 DAE 進(jìn)行恢復(fù)。由于增加了噪聲,因此學(xué)習(xí)出來的 Code 會更加穩(wěn)健。其次,論文中還從各種方面(流形、生成模型、信息論等等)對 DAE 進(jìn)行了解釋。但是由于 DAE 應(yīng)用不多,這里就不展開了,有興趣的同學(xué)可以參考原文。
其他 AutoEncoder
除了上述的 AutoEncoder,為了學(xué)習(xí)出更加穩(wěn)健,表達(dá)能力更強的 Code,還有其他的 AutoEncoder,如:
Contrative AutoEncoder(CAE),在文章"Contractive auto-encoders: Explicit invariance during feature extraction, 2011"中提出。其與 DAE 的區(qū)別就在于約束項進(jìn)行了修改,意在學(xué)習(xí)出更加緊湊穩(wěn)健的 Code。
Stacked AutoEncoder(SAE),在文章“Greedy Layer-Wise Training of Deep Networks, 2007”中提出。作者對單層 AutoEncoder 進(jìn)行了擴(kuò)展,提出了多層的 AutoEncoder,意在學(xué)習(xí)出對輸入更抽象、更具擴(kuò)展性的 Code 的表達(dá)。
除此之外,還有將傳統(tǒng) FNN 網(wǎng)絡(luò)中的結(jié)構(gòu)融入到 AutoEncoder 的,如:Convolutional Autoencoder、 Recursive Autoencoder、 LSTM Autoencoder 等等。
Autoencoder 期望利用樣本自適應(yīng)學(xué)習(xí)出穩(wěn)健、表達(dá)能力強、擴(kuò)展能力強的 Code 的設(shè)想很好,但是實際中應(yīng)用場景卻很有限。一般可以用于數(shù)據(jù)的降維、或者輔助進(jìn)行數(shù)據(jù)的可視化分析。有學(xué)者另辟蹊徑,借鑒了 Autoencoder 的思想,將其用于數(shù)據(jù)的生成,取得到驚人的效果,如下面會介紹的 Variational AutoEncoder。
Variational AutoEncoder
Variational AutoEncoder(VAE)是由 Kingma 和 Welling 在“Auto-Encoding Variational Bayes, 2014”中提出的一種生成模型。VAE 作為目前(2017)最流行的生成模型之一,可用于生成訓(xùn)練樣本中沒有的樣本,讓人看到了 Deep Learning 強大的無監(jiān)督學(xué)習(xí)能力。
如下圖這張廣為人知的“手寫數(shù)字生成圖”,就是由 VAE 產(chǎn)生的。
判別模型 與 生成模型
我們都知道一般有監(jiān)督學(xué)習(xí)可以分為兩種模型:判別模型(DM,Discriminative Model)和生成模型(GM,Generative Model)。下面我們以分類問題為例,簡單回顧一下其概念。
對于分類問題,本質(zhì)需要解決的其實就是最大化后驗概率,即
于是,可以衍生出兩種方案。第一種方法如下:
由于
原問題就轉(zhuǎn)化為了求和,這就是生成模型特點:需要直接或間接對建模。常見的生成模型有隱馬爾可夫模型(HMM)、樸素貝葉斯、高斯混合模型(GMM)等等。
形象一點地表達(dá),即為了求樣本屬于每一類的概率,我們先求解每一類出現(xiàn)的概率;并對每一類分別建模,求出樣本在該類發(fā)生的概率。最后利用貝葉斯公式算出。
其二種方法即,我們可以直接對后驗建模,顯性或隱形地求出其表達(dá)式。對樣本,代入公式求解出每一類的后驗概率,取其中最大值即可。這就是判別模型。常見的判別模型有線性回歸模型、支持向量機(jī)(SVM)、神經(jīng)網(wǎng)絡(luò)等等,
VAE
VAE 跟傳統(tǒng) AutoEncoder 關(guān)系并不大,只是思想及架構(gòu)上也有 Encoder 和 Decoder 兩個結(jié)構(gòu)而已。跟 AutoEncoder 不同,VAE 理論跟實際效果都非常驚艷,理論上涉及到的主要背景知識也比較多,包括:隱變量(Latent Variable Models)、變分推理(Variational Inference)、Reparameterization Trick 等等。
由于涉及到的知識較多,本部分只會對 VAE 進(jìn)行簡要介紹,省略很多證明。本部分講解思路參考論文"Tutorial on Variational Autoencoders"和博客“Tutorial - What is a variational autoencoder??”。
首先,先定義問題:我們希望學(xué)習(xí)出一個模型,能產(chǎn)生訓(xùn)練樣本中沒有,但與訓(xùn)練集相似的數(shù)據(jù)。換一種說法,對于樣本空間,當(dāng)以抽取數(shù)據(jù)時,我們希望以較高概率抽取到與訓(xùn)練樣本近似的數(shù)據(jù)。對于手寫數(shù)字的場景,則表現(xiàn)為生成像手寫數(shù)字的圖像。
對于我們期望獲取的數(shù)據(jù),其不同維度之間可能存在特定的聯(lián)系。將這些聯(lián)系對應(yīng)的因素單獨抽取出來作為特征,即隱變量(Latent Variables),寫作。則原來對建模轉(zhuǎn)為對進(jìn)行建模,同時有
其中,是隱變量空間中的點,是模型參數(shù)空間中的點。此時可以分別對和建模,這就與上面提到的生成模型是一致的,因此 VAE 是無監(jiān)督的生成模型。對于手寫數(shù)字的場景,隱變量可以理解成圖像對應(yīng)的真實數(shù)字、書寫的角度、筆尖寬度等等方面。
為了計算這個積分,首先需要給出的表達(dá)形式。在 VAE 中,作者選擇高斯分布,即
其中,表示單位矩陣,為超參數(shù)。為將映射到的函數(shù),即。
此時,還需要給出的表達(dá)式。不過,其中隱變量到底代表什么(對應(yīng)的數(shù)字、書寫的角度、筆尖寬度等等,難以人工窮舉),以及它們對應(yīng)的表達(dá)式都是很難人工定義的。這里,作者給出一個很巧妙的解決方法,即取,同時利用多層 DNN 來學(xué)習(xí)。當(dāng)然,真實的隱變量不可能是簡單的。巧妙之處在于,由于任何維的分布,都可以利用維的高斯分布經(jīng)過某種復(fù)雜函數(shù)變換得到。因此,對應(yīng)的多層 DNN,前幾層負(fù)責(zé)將高斯分布的映射到真正的隱變量,后幾層負(fù)責(zé)將這個隱變量映射到。
接下來我們可以開始解決最大化的問題,公式為
如果的數(shù)量較少,我們就可以利用采樣來計算積分,即
但若現(xiàn)在隱變量維度很大時,就會需要極大量的樣本,幾乎是不可能計算的。但是根據(jù)經(jīng)驗可以得知,對大多數(shù)來說,,對估計沒有幫助。于是只需要采樣那些對有貢獻(xiàn)的。此時,就需要知道,但是這個無法直接求取。VAE 中利用 Variational Inference,引入來近似。
關(guān)于 Variational Inference,鑒于篇幅不會展開講,有需要了解的同學(xué)的請參考《PRML》第10章、《Deep Learning》第19章、以及其他教材。
最終,可以得到需要優(yōu)化的目標(biāo) ELBO(Evidence Lower BOund),此處其定義為
其中,第一項是我們希望最大化的目標(biāo);第二項是在數(shù)據(jù)下真實分布與假想分布的距離,當(dāng)?shù)倪x擇合理時此項會接近為0。但公式中含有,無法直接求解,于是將其化簡后得到
上述公式中每一項的分布如下。其中中參數(shù)和依然利用 DNN 來學(xué)習(xí)
由于兩個高斯分布的 KL 距離可以直接計算,故當(dāng)與中參數(shù)已知時(通過 DNN 學(xué)習(xí)),就能求解。當(dāng)與很接近時,接近于0,優(yōu)化此式就相當(dāng)于在優(yōu)化我們期望的目標(biāo)。
概率視角講的差不多了,我們回到 DNN 視角。上述文章已經(jīng)說明了我們需要最大化的目標(biāo)是
于是,對于某個樣本,其損失函數(shù)可以表示為
其中,意味著將樣本編碼為隱變量,對應(yīng)于 AutoEncoder 中的 Encoder;意味著將隱變量恢復(fù)成,對應(yīng)著 Decoder。于是,的意義就可以這樣理解
第一項,表示隱變量對樣本的重構(gòu)誤差,并在空間內(nèi)取期望,即平均的重構(gòu)誤差。我們的目標(biāo)就是使誤差最小化
第二項,可以理解為正則項。其計算的是與真實的差異,表示我們用近似帶來的信息損失。我們也希望這個信息損失項盡可能的小
于是,VAE 的結(jié)構(gòu)可以表示為
但是,上面這種方式需要在 FF 時進(jìn)行采樣,而這種采樣操作是無法進(jìn)行 BP 的。于是,作者提出一種“Reparameterization Trick”:將對采樣的操作移到輸入層進(jìn)行。于是就有了下面的 VAE 最終形式
采樣時,先對輸入的進(jìn)行采樣,然后計算間接對采樣。通過這種方式,就可以利用 BP 來優(yōu)化損失函數(shù)了。
我們再結(jié)合兩個圖梳理一下 VAE 的過程。
下圖表示了 VAE 整個過程。即首先通過 Encoder 得到的隱變量分布參數(shù);然后采樣得到隱變量。接下來按公式,應(yīng)該是利用 Decoder 求得的分布參數(shù),而實際中一般就直接利用隱變量恢復(fù)。
下圖展示了一個具有3個隱變量的 VAE 結(jié)構(gòu)示意圖,是對上面抽象描述的一個補充說明,不再贅述。
尾巴
前幾周由于個人原因無暇他顧,使本篇拖更良久。近期更新可能仍會比較緩慢,但我還是會保持更新,畢竟值得寫的東西太多太多。
最后關(guān)于 VAE 部分,限于個人水平、VAE 的難度、篇幅等,本篇未能完全做到足夠清晰明了,其中省略了不少的證明及推理過程。有需要深入研究的同學(xué)建議看完本篇后,再深入閱讀下文中提到的 Paper,才能對 VAE 有更系統(tǒng)的理解。
Reference:
原文地址:?https://zhuanlan.zhihu.com/p/27865705
總結(jié)
以上是生活随笔為你收集整理的当我们在谈论 Deep Learning:AutoEncoder 及其相关模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow Day17 Spa
- 下一篇: Keras Tutorial: Deep