
簡單講解一下三個主要的自動編碼器主要思路都是采用一個編碼器和一個解碼器。輸入內容經過編碼器編碼為潛變量zzz,潛變量zzz經過解碼器解碼為輸出內容。AEAuto Encoder這是最簡單的自動編碼器其潛變量是一種低維編碼也就是一個確定的值訓練損失是最小化輸入與輸出的差異。這種設定存在問題由于低維編碼是一個確定的值而且我們的訓練目標是最小化輸入與輸出的差異因此會導致過擬合也就是輸入某個特定的圖片只能得到對應的輸出圖片泛化性也不好如果輸入其他未經訓練過的圖片輸出只能是未知的內容。為什么AE效果不好呢本質上是由于潛變量zzz是一個確定的值整個過程中并沒有加入隨機性。理想條件下我們可以想象一個擁有世界上所有輸入和輸出數據而訓練的AE這肯定是囊括了所有的圖像此時的潛空間是一個一對一的映射。但是實際中我們并沒有全部的數據為了泛化性我們希望構建一對多或者多對多的映射。如何實現這點呢VAE就是分析這點而得到的。我們將潛變量構造成一個分布而不是一對一的對應關系這樣囊括了更多的對應關系從而提高泛化性并且實現了生成的靈活性不再輸入一張圖只生成一張固定的圖具體地說我們將編碼器的輸出設定為一個正態分布對應輸出一個μ和一個σ然后從這個分布中隨機采樣得到潛變量z然后解碼器根據這個潛變量生成對應的輸出內容。我們希望通過梯度更新來優化VAE但是剛才描述的過程中存在隨機采樣也就是?z?sample(N(?μ?,?σ?))*z*sample(N(*μ*,*σ*))?z?sample(N(?μ?,?σ?))這個過程是個黑盒的我們可以前向傳播但是后向就無法更新參數了因此我們在這里引入重參數化將隨機信息提取到分布外。zμσ×?zμσ×?zμσ×?,其中?代表了隨機性從一個正態分布中抽取得到的。在VAE中我們的訓練損失包括兩部分一部分是最小化輸入與重建的差異但是如果只包括這個同樣會導致過擬合會讓σ趨于0因此需要加入對這部分的限制我們加入KL損失限制編碼器輸出的μ和σ接近正態分布。CVAE則和VAE沒有什么太大的區別只是在編碼器和解碼器加入了標簽信息剩下的內容和AE是一樣的。