深度學習與神經網絡(十四)—— VAE變分自編碼器

VAE

Variational Autoencoder 變分自編碼器

通常我們會拿 VAE 跟 GAN 比較,的確,它們兩個的目標基本是一致的——希望構建一個從隱變量 Z 生成目標數據 X 的模型,但是實現上有所不同

 

VAE作爲一個生成模型,其基本思路是很容易理解的:把一堆真實樣本通過編碼器網絡變換成一個理想的數據分佈,然後這個數據分佈再傳遞給一個解碼器網絡,得到一堆生成樣本,生成樣本與真實樣本足夠接近的話,就訓練出了一個自編碼器模型。

那VAE(變分自編碼器)就是在自編碼器模型上做進一步變分處理,使得編碼器的輸出結果能對應到目標分佈的均值和方差

 

VAE的設計思路

      VAE最想解決的問題是什麼?當然是如何構造編碼器和解碼器,使得圖片能夠編碼成易於表示的形態,並且這一形態能夠儘可能無損地解碼回原真實圖像。
  這似乎聽起來與PCA(主成分分析)有些相似,而PCA本身是用來做矩陣降維的:
在這裏插入圖片描述

          
  現在我們需要對這一雛形進行改進。首先一個最明顯能改進的地方是用神經網絡代替W變換和WT變換,就得到了如下Deep Auto-Encoder模型:
          

  這一替換的明顯好處是,引入了神經網絡強大的擬合能力,使得編碼(Code)的維度能夠比原始圖像(X)的維度低非常多。在一個手寫數字圖像的生成模型中,Deep Auto-Encoder能夠把一個784維的向量(28*28圖像)壓縮到只有30維,並且解碼回的圖像具備清楚的辨認度

在這裏插入圖片描述
          
  至此我們構造出了一個重構圖像比較清晰的自編碼模型,但是這並沒有達到我們真正想要構造的生成模型的標準,因爲,對於一個生成模型而言,解碼器部分應該是單獨能夠提取出來的,並且對於在規定維度下任意採樣的一個編碼,都應該能通過解碼器產生一張清晰且真實的圖片。
  我們先來分析一下現有模型無法達到這一標準的原因。

在這裏插入圖片描述
          
  如上圖所示,假設有兩張訓練圖片,一張是全月圖,一張是半月圖,經過訓練我們的自編碼器模型已經能無損地還原這兩張圖片。接下來,我們在code空間上,兩張圖片的編碼點中間處取一點,然後將這一點交給解碼器,我們希望新的生成圖片是一張清晰的圖片(類似3/4全月的樣子)。但是,實際的結果是,生成圖片是模糊且無法辨認的亂碼圖。一個比較合理的解釋是,因爲編碼和解碼的過程使用了深度神經網絡,這是一個非線性的變換過程,所以在code空間上點與點之間的遷移是非常沒有規律的。
  如何解決這個問題呢?我們可以引入噪聲,使得圖片的編碼區域得到擴大,從而掩蓋掉失真的空白編碼點。
在這裏插入圖片描述
  如上圖所示,現在在給兩張圖片編碼的時候加上一點噪音,使得每張圖片的編碼點出現在綠色箭頭所示範圍內,於是在訓練模型的時候,綠色箭頭範圍內的點都有可能被採樣到,這樣解碼器在訓練時會把綠色範圍內的點都儘可能還原成和原圖相似的圖片。然後我們可以關注之前那個失真點,現在它處於全月圖和半月圖編碼的交界上,於是解碼器希望它既要儘量相似於全月圖,又要儘量相似於半月圖,於是它的還原結果就是兩種圖的折中(3/4全月圖)。
  由此我們發現,給編碼器增添一些噪音,可以有效覆蓋失真區域。不過這還並不充分,因爲在上圖的距離訓練區域很遠的黃色點處,它依然不會被覆蓋到,仍是個失真點。爲了解決這個問題,我們可以試圖把噪音無限拉長,使得對於每一個樣本,它的編碼會覆蓋整個編碼空間,不過我們得保證,在原編碼附近編碼的概率最高,離原編碼點越遠,編碼概率越低。在這種情況下,圖像的編碼就由原先離散的編碼點變成了一條連續的編碼分佈曲線,如下圖所示。
在這裏插入圖片描述
  那麼上述的這種將圖像編碼由離散變爲連續的方法,就是變分自編碼的核心思想。下面就會介紹VAE的模型架構,以及解釋VAE是如何實現上述構思的。

 

VAE的模型架構
在這裏插入圖片描述

        在auto-encoder中,編碼器是直接產生一個編碼的,但是在VAE中,爲了給編碼添加合適的噪音,編碼器會輸出兩個編碼,一個是原有編碼(m1,m2,m3),另外一個是控制噪音干擾程度的編碼(σ1,σ2,σ3),第二個編碼其實很好理解,就是爲隨機噪音碼(e1,e2,e3)分配權重,然後加上exp(σi)的目的是爲了保證這個分配的權重是個正值,最後將原編碼與噪音編碼相加,就得到了VAE在code層的輸出結果(c1,c2,c3)。其它網絡架構都與Deep Auto-encoder無異。
  損失函數方面,除了必要的重構損失外,VAE還增添了一個損失函數(見上圖Minimize2內容),這同樣是必要的部分,因爲如果不加的話,整個模型就會出現問題:爲了保證生成圖片的質量越高,編碼器肯定希望噪音對自身生成圖片的干擾越小,於是分配給噪音的權重越小,這樣只需要將(σ1,σ2,σ3)賦爲接近負無窮大的值就好了。所以,第二個損失函數就有限制編碼器走這樣極端路徑的作用,這也從直觀上就能看出來,exp(σi)-(1+σi)在σi=0處取得最小值,於是(σ1,σ2,σ3)就會避免被賦值爲負無窮大。

 

從神經網絡的角度來理解VAE變分自編碼器

中間神經元的連接方式也是不太一樣的

 

 

VAE vs GAN

GAN的效果要更好

 

 

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