Conditional Variational Autoencoders --- 條件式變換自編碼機
Goal of a Variational Autoencoder:
一個 VAE(variational autoencoder)是一個產生式模型,意味着我們可以產生看起來像我們的訓練數據的 samples。以 mnist 數據集為例,這些偽造的樣本可以看做是手寫字體的合成圖像。我們的 VAE 將會提供我們一個空間,我們稱之為 latent space (潛在空間),我們可以從這里采樣出 points。任何這些點都可以 decoded into 一個合理的手寫字體的圖像。
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