AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解讀

最近在研究編碼器,閱讀大量論文,歷程艱辛,特此記錄。如果博文有不妥之處,請告知,我一定及時修正!AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解讀


1、AE(Auto Encoder) 自動編碼器

在這裏插入圖片描述AE分爲兩個部分:編碼器和解碼器。編碼器可以是任意模型,現在一般都使用卷積神經網絡。輸入一張圖片經過編碼器得到潛變量(Latent Variable)(Latent \ Variable),類似於降維,得到這張圖片的主要成分,然後再通過解碼網絡進行恢復出原圖,所以判斷編碼和解碼網絡好壞的Loss1=MSE(inputoutput)Loss1=MSE(input,output)

那這個降維得到的潛變量代表什麼意思呢?以MNIST爲例, 潛變量ZZ就是一個內在的變量, 它在這張圖片生成之前先決定了要生成哪一張,這就是 P(XZ)P(X|Z)。比如輸入一張數字 “7”圖片,寫這個數字需要什麼元素呢?需要一橫一豎,橫豎之間需要一定的角度。這些元素就是該數字的潛變量。單個潛變量元素分析是沒有意義的,也是未知的,稍微改變這個潛變量或者不改變,都能得到數字 “7”,只不過會有偏移,比如粗細,胖瘦,傾斜角度。

對於AE,AE中學習的是encoderencoderdecoderdecoder,只能從一個XX,得到對應的重構XX。但是無法生成新的樣本。重建一張圖片是沒有什麼問題的,但是生成呢?AE無法無輸入有效生成,我們無法去構造隱藏向量,因爲我們是通過一張圖片輸入編碼得到隱向量的。

那生成如何解決呢?這時候就出現了VAE,簡單的說就在編碼過程給它增加一些限制,迫使其生成的隱含向量能夠粗略的遵循一個標準正態分佈


2、VAE(Variational AutoEncoder)

VAE結構圖:
在這裏插入圖片描述
設輸入的數據爲XX,其分佈爲P(X)P(X),這個分佈是未知的,難採樣,所以把P(X)P(X)改下:
P(X)=zP(X/Z)P(Z)P(X)=\sum_{z}P(X/Z)*P(Z)其中P(X/Z)P(X/Z)表示用ZZ來表示XX的模型。假設最後得到的這個潛變量ZZ服從正態分佈,也就是P(Z)=N(μ,σ2)P(Z)=N(\mu,\sigma^2)。如果滿足這個條件,我們就可以從滿足正態分佈的噪聲裏採樣,得到新的樣本。(上述公式可以看成生成便於我們理解)

那麼上面的公式目的就修改成爲:(下面可以看成編碼來看
P(Z)=xP(Z/X)P(X)P(Z)=\sum_{x}P(Z/X)*P(X)如果我們繼續假設P(Z/X)P(Z/X)爲正態分佈N(μ,σ2)N(\mu,\sigma^2),那麼上述公式就變爲:
P(Z)=xP(Z/X)P(X)=N(μ,σ)xP(X)=N(μ,σ2)P(Z)=\sum_{x}P(Z/X)*P(X)=N(\mu,\sigma)*\sum_{x}P(X)=N(\mu,\sigma^2)這就可以啦!這就是下面這張圖的思路:
在這裏插入圖片描述
這裏我們可以看出每一個樣本,都有其專屬的正態分佈。那麼有超多的樣本,就有超多的專屬分佈。正態分佈的兩組參數(均值μ\mu,方差σ\sigma)(所以這邊是個向量)。

VAEVAE裏面是使用神經網絡來計算均值和方差,詳細可以看代碼。爲什麼要使用均值和方差?因爲:從P(ZXk)P(Z∣X_k)中採樣一個ZkZ_k出來,這個P(ZXk)P(Z∣X_k)是正態分佈,需要可導便於反向傳播。所以利用均值方差,因爲均值和方差是靠模型算出來的,這邊利用了一個事實:

N(μ,σ2)N(\mu,\sigma^2)採樣一個ZZ,相當與從N(0,1)N(0,1)採樣一個β\beta,然後讓Z=μ+βσZ=\mu+\beta*\sigma
這就是論文中所說的:重參數技巧
在這裏插入圖片描述
那下面這種圖裏面爲什麼要將P(Z/X)P(Z/X)像標準正態看齊呢?

我個人的理解是:(μ,σ2)(\mu,\sigma^2)中,μ\mu爲圓點,σ\sigma爲半徑畫空間。這裏爲啥要σ\sigma不爲0,目的是防止了噪聲爲零,同時保證了模型具有生成能力。拿大牛的解釋是:VAE本質上就是在常規的自編碼器的基礎上,對EncoderEncoder的結果(在VAE中對應着計算均值的網絡)加上了“高斯噪聲”,使得結果DecoderDecoder能夠對噪聲有魯棒性;那另外一個EncoderEncoder(計算方差的網絡)的作用呢?用來動態調節噪聲的強度。
在這裏插入圖片描述
而怎麼將N(μ,σ2)N(\mu,\sigma^2)逼近N(0,1)N(0,1),論文中使用的是KLDKLD散度。
這個我前面的博客介紹了:(https://blog.csdn.net/qq_33948796/article/details/88723125)
總結一下:EncoderEncoder 從圖像中採樣,產生 Latent spaceLatent \ space 的概率分佈,the decoderthe \ decoderLatent spaceLatent \ space中採樣該點,然後返回一個生成的圖像。所以對於一張給定的圖像來說,EncoderEncoder 產生一個分佈,在Latent spaceLatent \ space 中該分佈中採樣出一個點出來,然後將該點輸入到 DecoderDecoder 當中,產生一個圖像。


3、CVAE(Conditional AutoEncoder)

上述生成是不能控制的,但是現實中很多情況往往是希望能夠實現控制某個變量來實現生成某一類圖像。CVAE可以實現這個:

在這裏插入圖片描述
訓練的時候,輸入給 EncoderEncoderDecoderDecoder 的圖像對應的數字是給定的。在這種情況下,這個標籤被表示成 onehot vectorone-hot \ vector


4、參考鏈接

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