變分推斷到變分自編碼器(VAE)


EM算法

EM算法是含隱變量圖模型的常用參數估計方法,通過迭代的方法來最大化邊際似然。

 帶隱變量的貝葉斯網絡

給定N 個訓練樣本D={x(n)},其對數似然函數為:

通過最大化整個訓練集的對數邊際似然L(D; θ),可以估計出最優的參數θ。然而計算邊際似然函數時涉及p(x) 的推斷問題,需要在對數函數的內部進行求和(或積分)

 

注意到,對數邊際似然log p(x; θ) 可以分解為

其中DKL(q(z)∥p(z|x; θ))為分布q(z)和后驗分布p(z|x; θ)的KL散度.

由於DKL(q(z)∥p(z|x; θ)) ≥ 0,並當且僅當q(z) = p(z|x; θ) 為0,因此 ELBO(q, x; θ) log p(x; θ) 的一個下界

 

EM算法具體分為兩個步驟:E步和M步。這兩步不斷重復,直到收斂到某個局部最優解。在第t 步更新時,E步和M步分別為

  • E步(Expectation Step):固定參數θt,找到一個分布使得ELBO(q, x; θt)最大,即等於log p(x; θt)

    • 所以我們希望q(z) = p(z|x, θt) ,這樣ELBO(q, x; θt)最大。而計算后驗分布p(z|x; θ)是一個推斷(Inference)問題。如果z是有限的一維離散變量 。(比如混合高斯模型),計算起來還比較容易。否則,p(z|x; θ) 一般情況下很難計算,需要通過變分推斷的方法來進行近似估計
  • M步(Maximization Step):固定qt+1(z),找到一組參數使得證據下界最大,即

 

 EM算法在第t 步迭代時的示例

變分自編碼

 

變分自編碼器

生成模型的聯合概率密度函數

 

給定一個樣本x,其對數邊際似然log p(x; θ) 可以分解為

 

其中q(z; ϕ)是額外引入的變分密度函數, 其參數為ϕELBO(q, x; θ, ϕ)為證據下界,

 最大化對數邊際似然log p(x; θ) 可以用EM算法來求解,具體可以分為兩步:

  E步:尋找一個密度函數q(z; ϕ) 使其等於或接近於后驗密度函數p(z|x; θ)
  M步:保持q(z; ϕ) 固定,尋找θ 來最大化ELBO(q, x; θ, ϕ)

 

PS: 當p(z|x; θ)比較復雜時,很難用簡單的變分分布q(z; ϕ)去近似,此時,q(z; ϕ)也相對比較復雜,除此之外,概率密度函數p(x|z; θ)一般也比較復雜。那怎么辦呢?很簡單,我們可以用神經網絡來近似這兩個復雜的概率必讀函數。這就是變分自編碼器(Variational AutoEncoder,VAE)的精髓。

  • 推斷網絡用神經網絡來估計變分分布q(z; ϕ)理論上q(z; ϕ) 可以不依賴x。但由於q(z; ϕ) 的目標是近似后驗分布p(z|x; θ),其和x相關,因此變分密度函數一般寫為q(z|x; ϕ)。推斷網絡的輸入為x,輸出為變分分布q(z|x; ϕ)
  • 生成網絡用神經來估計概率分布p(x|z; θ),生成網絡的輸入為z,輸出為概率分布p(x|z; θ)

 

變分自編碼器的網絡結構

推斷網絡

為了簡單起見,假設q(z|x; ϕ) 是服從對角化協方差的高斯分布

 均值和方程我們可以用推斷網絡fI(x; ϕ)來預測

目標q(z|x; ϕ) 盡可能接近真實的后驗p(z|x; θ)

然而,直接計算上面的KL散度是不可能的,因為p(z|x; θ) 一般無法計算。注意到,

所以,推斷網絡的目標函數為

生成網絡

生成模型的聯合分布p(x, z; θ) 可以分解為兩部分:隱變量z 的先驗分布p(z; θ) 和條件概率分布p(x|z; θ)

為了簡單起見,我們假設先驗分布

而條件概率分布p(x|z; θ)我們可以用生成網絡來建模,里面的參數可以用生成網絡計算得到。

 

根據變量x 的類型不同,可以假設p(x|z; θ) 服從不同的分布族

  • x in {0, 1}d, 可以假設log p(x|z; θ) 服從多變量的伯努利分布,即

  •  x in Rd, 可以假設p(x|z; θ) 服從對角化協方差的高斯分布,即

目標:找到一組θ 來最大化證據下界ELBO(q, x; θ, ϕ)

模型

總目標函數

 其中先驗分布p(z; θ) = N(z|0, I)θϕ 分別表示生成網絡推斷網絡的參數。

 

訓練

可以采用隨機梯度方法,每次從數據集中采集一個樣本x,然后根據q(z|x; ϕ)采集一個隱變量z,則目標函數為

此時,KL 散度可以直接計算出閉式解。對於d 維空間中的兩個正態分布N(μ11)N(μ22),其KL散度為

其中tr(·)表示矩陣的跡,| · |表示矩陣的行列式。具體可以看這個鏈接

 

所以,我們有

最后,VAE里面有一個非常重要的trick -- Reparameterization

 

再參數化

問題: 如何求隨機變量z 關於參數ϕ 的導數,。因為隨機變量z 采樣自后驗分布q(z|x; ϕ),和參數ϕ相關。但由於是采樣的方式,無法直接刻畫zϕ 之間的函數關系,因此也無法計算z 關於ϕ 的導數

假設q(z|x; ϕ) 為正態分布N(μII2I),其中μIσI 是推斷網絡fI (x; ϕ) 的輸出。我們可以采用下面方式來采樣z

 其中ϵ ∼ N(0, I)。這樣zμI ,σI 的關系從采樣關系變為函數關系,就可以求z關於ϕ 導數

 

通過再參數化,變分自編碼器可以通過梯度下降法來學習參數了。如果進一步假設p(x|z; θ) 服從高斯分布N(x|μG, I),其中μG = fG(z; θ) 是生成網絡的輸出,則目標函數可以簡化為

下面是整個變分自編碼器的訓練過程

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM