自編碼器 Autoencoder


自監督模型
訓練一個ae的encoder,就能把code和object對應起來,獲得code。給定一個code,decoder就能輸出對應的object。
Autoencoder存在什么問題?
  因為作為訓練數據的object是有限的,導致decoder實際上只能把訓練過程中見過的code給還原成對應的object。如果隨機給一些code,它不會生成訓練集中沒有見過的object。
 
如何解決?
 
VAE:訓練decoder的時候給code加點噪聲,就能讓decoder在生成的時候可以克服一些帶噪聲的code,即使沒有在訓練中見過,也能生成比較合理的object(直覺上的理解,訓練的時候希望一定范圍內的code都能重構輸入)。
 
 
 

因此在VAE中,encoder輸出的不直接是code,而是一組m和一組σ,而向量c才是真正的加了噪聲的code,其中ci = exp(σi) x e+ mi。訓練過程中的優化目標也不僅是重構誤差,還有一項 Σ (exp(σi) - (1+σi) + (mi)2),要強迫加的噪聲的方差不能太小(因為是模型學習的參數,如果不做限制,為了能重構的更好,會越更新σ越使得噪聲方差接近0;而實際上我們希望σ接近0(真正的方差接近1),所以最小化exp(σi) - (1+σi),mi平方項可以理解為L2 norm正則)。

 

 
 
理論上分析 VAE
對 p(x) 的建模通過 p(x | z) * p(z) 來實現。對概率分布的pdf做密度估計很容易就想到用GMM。如何從GMM 中采樣數據?手里有一組高斯分布,先根據多項式分布p(m)決定要從第m個高斯分布中采樣,然后就根據對應的那組mean和variance決定的高斯pdf來采樣x。
 

VAE 實際上就是GMM的 distributed representation 的版本,先從一個高斯分布中采樣出一個向量 z, z 的每個維度就表示某一種特性,再根據 z 來決定高斯分布的 μ 和 σ。由於 z 是連續的,所以有無窮多個z,就有無窮多個高斯分布(在GMM中有幾個高斯就是固定的)。在z的空間中,每個點都可能被sample到,而每一個點都對應到一個不同的高斯分布。

那么如何得到 z 和高斯的 μ 和 σ之間的對應關系呢?干脆就用一個NN來描述 μ(z) 和 σ(z) 的函數關系。

所以在整個 VAE 模型中,關鍵不是使用 p(z)(先驗分布)是正態分布的假設(z服從別的分布也可以),而是假設 p(z | x)(后驗分布)是正態分布(GMM)。

 

但直接這樣處理的話會導致梯度更新出現問題。因為 z 要從后驗分布中 sampling 得到,這種隨機性會導致 encoder-decoder 不可微。所以采用 re-parameterization trick ,引入一個新的變量來表示不確定性,把采樣過程移出計算圖,就可以梯度更新了,而新引入的變量處理為一個 weight 固定的輸入。例如下圖,本來是想要從 N(x, Φ2) 中采樣 z ;現在從 N(0, 1) 中采樣得到 ε , 然后令 z = x + ε*Φ 即可。

 

  

回到 VAE 的目標函數。估計 μ(z) 和 σ(z) 的方法就是最大似然估計,令 μ(z) 和 σ(z) 的取值使得對手上所有的數據x的似然越大越好。

 

任務就是要通過極大似然估計來更新 μ(z) 和 σ(z) 這兩個函數,也就是更新對應的NN參數(decoder)。此外引入一個任意的分布 q(z | x),作用接下來再說,它也是由一個NN來表示。

 

接下來求解 log p(x),先引入一個任意的分布q(z | x)再把它積掉,其中 p(x) = p(x, z)/p(z | x),代入展開,發現對數似然函數的下界。

 

如果只是優化 p(x | z) 令 Lb 變大,雖然下界變大了,但 log p(x) 整體卻不一定變大,因為不知道log p(x) 和  Lb 之間的差距是多少。引入 q(z | x) 的目的就在於,如果固定 p(x | z) 優化 q(z | x) 令下界變大,由於 q(z | x) 和 p(x) 無關,所以 log p(x) 的值不會改變,那么當Lb 變大,q(z | x) 和 p(z | x) 的 KL散度就會變小,理想情況下 q(z | x) 和 p(z | x) 一致,Lb 變大到和 log p(x) 相等,這時候如果再優化 p(x | z) 令Lb 變大,那么 log p(x) 就一定會隨之變大。

然后展開 Lb 看如何最大化它,其中第一項為 - KL(q(z | x) || p(z)),最大化 L的過程中,q(z | x) 和 p(z) 的 KL散度會最小化(q(z | x) 會越來越接近 p(z)),這就是 VAE 目標函數中 Σ (exp(σi) - (1+σi) + (mi)2) 的作用。

而最大化第二項即為最大化 Eq(z | x)[logp(x | z )],也就是給定一個 x , 根據 q(z | x) 來 sample 一個 z,然后要最大化log p(x | z) 。這就是 autoencoder 的拓撲結構的作用。因為高斯分布在均值的位置采樣概率最大,所以就忽略σ(z),讓最后的 μ(z) 和 數據 x 越接近越好。

 

VAE 的問題就是不會生成新的數據,產生的數據是訓練集中已有的、最多可能也只是訓練集中已經有的數據的線性組合。這是被定義在 component 層面的目標函數所限制的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM