條件式變分自編碼機(Conditional Variational Autoencoders)

Conditional Variational Autoencoders 條件式變換自編碼機

摘要:  html

Conditional Variational Autoencoders --- 條件式變換自編碼機      git

Goal of a Variational Autoencoder:    github

一個 VAE(variational autoencoder)是一個產生式模型,意味着咱們能夠產生看起來像咱們的訓練數據的 samples。算法

 

 Conditional Variational Autoencoders --- 條件式變換自編碼機 markdown

 

  Goal of a Variational Autoencoder: 網絡

  一個 VAE(variational autoencoder)是一個產生式模型,意味着咱們能夠產生看起來像咱們的訓練數據的 samples。以 mnist 數據集爲例,這些僞造的樣本能夠看作是手寫字體的合成圖像。咱們的 VAE 將會提供咱們一個空間,咱們稱之爲 latent space (潛在空間),咱們能夠從這裏採樣出 points。任何這些點均可以 decoded into 一個合理的手寫字體的圖像。app

 

  Structure of a VAE : 函數

  任何自編碼機的目標都是重建其輸入。一般,自編碼機首先講 input 壓縮爲一個小的 form,而後將其轉換成 input的一個估計。這個被用於壓縮圖像的函數,稱爲 "encoder",解壓該數據的函數稱爲 「decoder」。這些函數均可以是神經網絡,咱們這個文檔中考慮的都是這種狀況。 工具

 

 

 

  標準的自編碼機能夠工做的很好,若是你的目標是簡單的重建你的輸入,可是做爲產生式模型,其效果並非很好,由於隨機的採樣一個輸入 V 給 decoder,並不能使得 decoder 產生合理的圖像。 V 可能距離任何輸入都很遠,因此 decoder 可能永遠都不會訓練獲得合理的數字圖像,當給定的輸入像 V 的時候。 學習

  

  咱們須要一些方法來確認 the decoder 已經準備好了能夠去 decode 出任何咱們給定的合理的數字圖像。爲了達到這個目的,咱們將會須要預先定義 decoder 但願看到的 輸入的分佈 (the distribution of inputs)。咱們將會使用一種標準的 正態分佈 來定義 decoder 將會接收到的 輸入的分佈。 

  

  

    咱們想要訓練 the decoder 從這個分佈中隨機的採樣一個點,而且能夠恢復出合理的 數字圖像。 

  

  咱們如今須要一個 encoder。在傳統的自編碼機當中,the encoder 從數據中採樣出一個樣本,而且在 latent space 中返回給一個點,而後將其傳給 decoder。在一個 Variational autoencoder 中,編碼機在 latent space 中產生一個機率分佈。 

  

    The latent distributions 其輸出是和 latent space 相同緯度的高斯 (gaussians of the same dimensionality as the latent space)。The encoder 產生這些高斯的參數。

  因此咱們有一個 encoder 從圖像中採樣,產生 latent space 的機率分佈,the decoder 在 latent space 中採樣該點,而後返回一個僞造的圖像。因此對於一張給定的圖像來講,the  encoder 產生一個分佈,在 latent space 中該分佈中採樣出一個點出來,而後將該點輸入到 decoder 當中,產生一我的造圖像。 

  

  

    The Structure of the Latent Space. 

    咱們看到了以前 the decoder 應該指望看到從標準正態分佈中採樣的點。可是,如今咱們已經代表,decoder 接收到的 samples 並不是是標準的正態分佈。這兩個東西都不是很是的奇怪,即便,當從 encoder 中採樣出的 points 仍然近似的擬合一個標註的正態分佈的狀況。咱們想要這樣的狀況:

    

 

    其中,不一樣分佈的平均值 對應了 不一樣訓練訓練樣本估計的標準正態 (a standard normal)。如今的假設是 the decoder 看到的 points, drawn from a standard normal distribution holds. 

  很明顯,咱們須要一些方法來衡量是否 the encoder 產生的分佈的和 (sum)能夠估計 (approximat)標準的正太分佈。咱們能夠利用KL-散度(Kullback-Leibler divergence)衡量該估計的質量。KL-散度 衡量了兩個分佈的差別程度 (measures how different two probability distributions are)。

 

  Training a VAE with The Representrization Trick. 

  在上述討論的 VAE 當中,網絡的輸入和輸出之間,有一個隨機的變量。經過一個隨機變量是沒法後向傳播的,其表明了一個很明顯的問題是:你如今沒法訓練 the encoder。爲了解決這個問題,the VAE 被表達成不一樣的方式,使得 the latent distribution 的參數能夠分解爲隨機變量的參數,使得後向傳播能夠沿着latent distribution 的參數繼續傳播。

  具體來講,就是。可是,一個很重要的啓發是:一個 VAE 能夠利用 BP 算法進行 end-to-end 的訓練。可是,因爲仍然存在一些隨機的元素,因此不被稱爲隨機梯度降低,該訓練過程被稱爲:隨機梯度變化的貝葉斯(stochastic gradient variational Bayes (SGVB))。 

  

  Conditional Variational Autoencoder : 

  到目前爲止,咱們已經創造了一個 autoencoder 能夠重建起輸入,而且 decoder 也能夠產生一個合理的手寫字體識別的圖像。該產生器,可是,仍然沒法產生一個須要的特定數字的圖像。進入 the conditional variational auroencoder (CVAE)。該條件式變換自編碼機 有一個額外的輸入給 encoder 和 decoder。 

 

  

  在訓練的時候,輸入給 encoder and decoder 的圖像對應的數字是給定的。在這種狀況下,將會被表示成 one-hot vector. 

  爲了產生一個特定數字的圖像,將該數字輸入給 the decoder 以及服從標準正態分佈採樣出的 latent space 中的一個隨機點。儘管 一樣的點 被輸入進來來產生呢兩個不一樣的數字,這個過程將會正確的工做,由於系統不在依賴於 the latent space 來編碼你要處理的數字。相反的,the latent space 編碼了其餘的信息,像 stroke width 或者說 the angle。

  

  下面的這些數字圖像就是經過固定所須要的數字輸入給 the decoder,而後從 the latent space 中取一些隨機的樣原本產生一些有用的,不一樣版本的那個數字。像您所看到的那樣,這些數字在類型上有所不一樣,可是同一行的數字,很明顯是同一個數字。

 

  Conclusion 

  VAEs 是很是有效的無監督學習工具。標準 VAE 的 latent space 應該捕獲到你的數據中有用的模式。例如,咱們能夠看到,一個 VAE 在沒有任何 label 的狀況下訓練,能夠成功的分類出 mnist 圖像,分爲 latent space 中 10個具備區分度的區域,每一個區域包含幾乎某個數字全部的圖像。 CVAEs 對於產生匹配 某些 labels 的僞造樣原本說,是很是有用的。對於處理 時序數據,VAEs 也很是有用,只需將 the encoder and the decoder 替換爲 RNNs 便可。 

 

  (完畢)

 

  ----------------------------------------------------------------------------

  原文連接: http://ijdykeman.github.io/ml/2016/12/21/cvae.html

相關文章
相關標籤/搜索