Tutorial on Variational AutoEncoders
本文是《Tutorial on Variational AutoEncoders》一文部分翻譯的內容。
1.介紹
generative model,學習高維數據的概率分布P(X)P(X)。學習到不同維度之間的相互依賴關系,比如手寫數字的生成模型如果生成了8的左邊一半像素,那么剩下的像素也就能夠隨之確定。
latent variable,給予生成模型一些信息用來生成數據。比如一個生成手寫數字的生成模型,隱變量z就可以是從[0,…,9]中隨機采樣的整型,確定了隱變量模型才能生成像素點。
但是隱變量又不可能那么簡單,因為對于一個能夠表達出數據集特性的生成模型,對于每個數據點,生成模型都要能夠產生出一個隱變量來生成一個非常相似的東西。對手寫數字數據集來說,同樣的一個8,可能大一點或者小一點,往左歪一點或者往右歪一點,字跡是粗一點還是細一點。所以,生成模型中隱變量需要表達更多的信息,需要一個高維度的向量來表示隱變量z∈RZz∈RZ,隱變量要能夠自動的學習到這些信息的表示,而且這些影響手寫數字生成的信息之間的相互影響和依賴,即隱變量的latent structure,也應該自動的學習。
2.目標函數
VAE的過程是:從概率密度函數P(z)中采樣隱變量z之后,從確定性函數f(z;θ)f(z;θ)得到的值,這個值要大概率和數據集中的數據很相似。
所以我們的目標是對數據集中的所有數據x,最大化:
P(X)=∫P(X|z;θ)P(z)dzP(X)=∫P(X|z;θ)P(z)dz其中的條件概率P(X|z;θ)P(X|z;θ)等于N(X|f(z;θ),σI)N(X|f(z;θ),σI),也就是在標準VAE中,如果輸出是實數向量,通常輸出的分布是均值為f(z;θ)f(z;θ)方差為σIσI的高斯分布。
VAE要最大化P(x),就要解決兩個問題:
- 隱變量z如何表示?
使用標準正態分布N(0,I)N(0,I),因為只要有一個n維標準正態分布的z,再找到一個足夠復雜的函數g,那么g(z)就可以表示任意一個n維分布。
對上面的公式而言,f(z;θ)f(z;θ)就是一個多層神經網絡組成的函數逼近器。可以將將隱變量映射到最后的輸出。
- P(X)P(X)的積分如何計算?
現在我們得到了P(z)=N(0,I)P(z)=N(0,I),可以直接計算P(X)P(X)了嗎?還是不行,假如采用抽樣的方式抽樣出很多z來計算P(X)P(X)的話就會發現,對于絕大多數z來說,P(X|z)P(X|z)都接近于0(因為z是標準正態分布的采樣),這種方式非常低效。
VAE的解決這個問題的核心思想就是,試圖抽樣出有更大可能性產生X的z。而做到這一點是通過另一個分布Q(z|X)Q(z|X)來實現的,這個分布產生的Q能夠以較大的可能產生X。
但是我們使用了Q分布后,P(X)P(X)積分公式就變成了Ez~QP(X|z)Ez~QP(X|z),我們要找到后者和P(X)P(X)之間的關系。根據P(z|X)和Q(z|X)P(z|X)和Q(z|X)的KL散度的公式進行推導,可以推出:
其中左側的部分就是目標函數,我們要最大化這個目標函數就是在最大化對數似然概率的同時,最小化我們預測的分布Q和真實分布P之間的差異。
3.目標函數優化
那么Q(z|X)Q(z|X)是一個什么分布呢?通常的選擇是,也是一個多元高斯分布N(z|μ(X),σ(X))N(z|μ(X),σ(X)),其中的μ和σμ和σ都是由神經網絡學習到的映射。
所以目標函數等號右側的最后一項就變成了兩個多元高斯分布的KL散度,因為我們假定P(z)P(z)是標準多元高斯分布。在得到了Q分布之后,這一項是能夠計算出來的(當然也能夠利用梯度下降來優化)。
而右側的第一項,也就是Ez~Q[logP(X|z)]Ez~Q[logP(X|z)],通過當前時刻的Q分布,從中采樣出若干個z,然后從這若干個z中計算出P(X|z)P(X|z)作為期望的逼近值。
但是這樣做的話,由于采樣操作對μμ和σσ不可導,反向傳播無法進行,因此,實際的VAE中使用了一個叫做reparameterization的改進,以從N(0,I)N(0,I)中抽樣出數值??后,用??乘以方差再加上均值的結果代替從N(z|μ(X),σ(X))N(z|μ(X),σ(X))中抽樣,如下圖。
所以最終,VAE的優化目標就是,讓最終的輸出f(z)f(z)與目標xx足夠接近的同時,隱變量的分布Q~N(μ,σ2)Q~N(μ,σ2)接近真實先驗分布P~N(0,I2)P~N(0,I2)。
4.條件變分自編碼器
為了解決某種問題,比如說給定某個人的手跡,要求生成另一些與他的手跡很像的手跡。這時候需要制定輸入計算輸出P(Y|X)P(Y|X),為了解決這類問題,從變分自編碼器衍生出條件變分自編碼器。
模型在Encoder和Decoder的輸入中,增加了條件輸入X,如上圖。當然這張圖只是一個簡化版本,實際的CVAE有很多論文提出了很多不同的版本。
原文地址:?http://cairohy.github.io/2017/11/17/deeplearning/Tutorial%20on%20Variational%20AutoEncoders/
總結
以上是生活随笔為你收集整理的Tutorial on Variational AutoEncoders的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GAN原理潜析
- 下一篇: David Silver强化学习公开课】