條件變分自動編碼器CVAE:基本原理簡介和keras實現

變分自動編碼器(VAE)是一種有方向的圖形生成模型,已經取得了很好的效果,是目前生成模型的最先進方法之一。它假設數據是由一些隨機過程,涉及一個未被注意的連續隨機變量z假設生成的z是先驗分佈P_θ(z)和條件生成數據分佈P_θ(X | z),其中X表示這些數據。z有時被稱爲數據X的隱藏表示。

像任何其他自動編碼器架構一樣,它有一個編碼器和一個解碼器。編碼器部分試圖學習q_φ(z | x),相當於學習數據的隱藏表示x或者x編碼到隱藏的(概率編碼器)表示。解碼器部分試圖學習P_θ(X | z)解碼隱藏表示輸入空間。圖形化模型可以表示爲下圖。

對模型進行訓練,使目標函數最小化

這種損失的第一項是重建錯誤或數據點的預期負對數可能性。期望是關於編碼器的分佈在表示通過採取一些樣本。這個術語鼓勵解碼器在使用來自潛在分佈的樣本時學會重構數據。較大的錯誤表示解碼器無法重構數據。

第二項是Kullback-Leibler編碼器之間的分佈q_φ(z | x)和p (z)。這個散度度量了在使用q表示z上的先驗時損失了多少信息,並鼓勵其值爲高斯分佈。

在生成過程中,來自N(0,1)的樣本被簡單地輸入解碼器。訓練和生成過程可以表示爲以下

一種訓練時變分自編碼器實現爲前饋神經網絡,其中P(X|z)爲高斯分佈。紅色表示不可微的採樣操作。藍色表示損失計算

測試時變分的“自動編碼器”,它允許我們生成新的樣本。“編碼器”路徑被簡單地丟棄。

對VAE進行如此簡要的描述,其原因在於,VAE並不是本文的主要關注對象,而是與本文的主要主題緊密相關的。

用VAE生成數據的一個問題是,我們對生成的數據類型沒有任何控制。例如,如果我們用MNIST數據集訓練VAE,並嘗試通過向解碼器輸入Z ~ N(0,1)來生成圖像,它也會產生不同的隨機數字。如果我們訓練好,圖像會很好,但我們將無法控制它會產生什麼數字。例如,你不能告訴VAE生成一個數字“2”的圖像。

爲此,我們需要對VAE的體系結構進行一些修改。假設給定一個輸入Y(圖像的標籤),我們希望生成模型生成輸出X(圖像)。所以,VAE的過程將被修改爲以下:鑑於觀察y, z是來自先驗分佈P_θ(z | y)和輸出分佈P_θ產生的x (x | y, z)。請注意,對於簡單的VAE,之前是P_θ(z)和輸出是由P_θ(x | z)。

VAE中的可視化表示任務

這裏編碼器部分試圖學習q_φ(z | x, y),相當於學習隱藏的代表數據或編碼x到y條件。解碼器部分試圖隱藏表示學習P_θ(x | z, y)解碼隱藏表示輸入空間條件的y。圖形化模型可以表示爲如下圖所示。


條件VAE (Conditional VAE)的神經網絡結構可以表示爲如下圖。

X是像。Y是圖像的標籤,它可以用一個離散向量表示。

CVAE的一個keras實現:https://github.com/nnormandin/Conditional_VAE/blob/master/Conditional_VAE.ipynb

作者:Md Ashiqur Rahman

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