深入理解VAE(变分自编码器)
原文地址:https://pan.baidu.com/s/1LNolV-_SZcEhV0vz2RkDRQ?;
本文進行翻譯和總結。
VAE
VAE是兩種主要神經網絡生成模型中的一種,另一種典型的方法是GAN。VAE是一種自編碼器,在訓練時將數據編碼成正則化的隱層分布,該隱層分布可以生成新的數據。其中,"變分"一詞來自正則化和統計學中變分推斷的關系。
本文想要解決的問題:
1.什么是自編碼器?
2.什么是隱層空間,為什么需要正則化?
3.怎樣使用VAE生成新的數據?
4.VAE和變分推斷之間的關系?
自編碼器,降維,PCA
? ? ? ? 自編碼器(autoencoder)是一種降維的方法,一般的自編碼器框架包括了編碼器和解碼器。編碼器通過選擇和抽取特征將數據編碼到低維隱層特征空間中,解碼器則相反。自編碼器的損失函數就是編碼時最大化信息保留和解碼之后最小化重構損失。通過降低隱層特征空間(編碼空間)的維度,達到降維的作用。
? ? ? ? 說到降維就不得不說PCA(主成分分析)了。PCA中,新的特征是原特征的線性組合,且新特征是相互正交的,目的就是減少信息的丟失。所以pca的編碼過程就是求特征空間的特征向量和特征值。PCA也可以融入自編碼器框架,編碼過程中就是求解編碼矩陣,得到編碼空間特征向量;解碼過程就是進行特征還原,解碼矩陣為編碼矩陣的轉置。線性自編碼器其實就是神經網絡版的PCA。
? ? ? ? 自編碼器需要注意的點:①不考慮重構損失的降維,可能會導致缺乏解釋性和可開發性。②降維的目的不單單只是減少數據特征的維度,還要得到數據最重要的那些維度。所以最后隱層空間的維度和自編碼器的深度需要和降維的目的有關。
變分自編碼器
? ? ? ? 自編碼器和內容生成之間的聯系:隱層空間足夠“正則化”,就是在編碼器訓練時well organized。如果自編碼器在訓練時有足夠的自由,那么重構損失會變得很小,在網絡足夠深時達到0(造成過擬合)。
? ? ? ? 變分自編碼器的定義:訓練時加入正則化防止過擬合,保證隱層空間具有足夠的能力進行生成過程的自編碼器。所以對自編碼器進行了一些輕微的修改:編碼過程將輸入數據編碼成分布而不是一些點。
? ? ? ? 訓練過程:1.將數據編碼成分布;2.再從隱層分布中采樣數據點;3.解碼還原數據并計算重構損失;4.將重構損失反向傳播。
? ? ? ? 編碼器生成的分布被選為正態分布,那么編碼器就可以訓練返回描述這些正太分布的均值和協方差矩陣這些統計量就可以。為什么一個輸入被編碼成分布而不是一個唯一的一點是因為它可以很自然地表達潛在空間的全局正則化和局部正則化,后面會說明這一點:局部是因為方差的控制,全局是因為均值的控制。
? ? ? ? 變分自編碼器的損失函數由重構項(最后層)和正則項(隱層)組成。正則項為生成的分布和正太分布之間的KL散度來表示。
直覺上的正則項
? ? ? ? 正則化的作用是使隱層空間可以進行生成過程,所以需滿足以下兩個特點:連續性和完整性。連續性可以理解為隱層中兩個相近的點解碼后應該近似是一樣的;完整性理解為分布中采樣得到的點解碼后的內容應該是有具體意義的。如果單單是將隱層中的點變成分布是不足以滿足上面兩個特點。所以需要定義一個好的正則項,即編碼器生成的分布接近標準正太分布,協方差矩陣接近單位陣,均值為0。這個正則化項,可以防止模型在潛在空間中對數據進行遙遠的編碼,并鼓勵盡可能多的返回分布“重疊”,從而滿足預期的連續性和完整性條件。正則項會提高重構損失,所以訓練時需要權衡這兩個損失。
VAE的數學細節
? ? ? ? ? 前面的直覺上的總結:VAE是將輸入編碼成分布的自編碼器,并且隱層被規整為標準正太分布。下面從數學的角度來解釋這個正則化項的合理性。首先進行如下概率框架定義和假設:
? ? ? ? 1.隱層z是從p(z)中采樣而來。
? ? ? ? 2.數據x是從條件似然分布p(x|z)中采樣得到。
? ? ? ? 所以在編碼器框架中的解碼器"條件概率"可以定義為p(x|z),表示給出編碼器變量結果下的編碼結果的條件分布。編碼器“條件概率”p(z|x)。假設z的先驗分布p(z)為標準正太分布,那么根據貝葉斯定義:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 假設p(z)滿足標準正太分布,那么p(x|z)也可以表示為正太分布:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? p(z)和p(x|z)都是滿足正太分布的,所以p(z|x)也是滿足正太分布的。通過上面的貝葉斯公式,計算p(z|x)是一個標準的貝葉斯推導問題,但是這個計算是很棘手的,因為貝葉斯公式的分母上的積分求解很困難,所以我們需要優化方法,比如變分推斷。
變分推斷
? ? ? ? ? ? 變分推斷是一個近似復雜分布的技術手段,就是使用一個參數化的分布來尋找目標分布的最優近似。現在我們的目標是近似p(z|x)使用高斯分布q_x(z),它的均值和方差由兩個函數g,h定義參數為x。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 所以我們需要找到最優函數解g和h,使得近似分布和目標分布之間KL最小化。? ? ? ? ?
? ? ? ? 從這個倒數第二行的等式中可以看到,在求近似p(z|x)分布時,在可見數據的似然函數最大化(左邊項)和先驗分布的kl距離最小化(右邊項)。這兩個權衡項可以理解為對于數據的自信和對先驗的自信兩者之間的權衡。從倒數第一行的等式中,我們可以得到常數c是權衡左右兩項,c越大表示解碼器的方差越大,越傾向正則項。
神經網絡中變分推斷
? ? ? ? 從上面可以看出,在神經網絡中函數g和h共享同一個結構和權重。
? ? ? ??
? ? ? ? 上面兩個圖是自編碼器神經網絡的圖,但是訓練時變分推斷中需要在編碼得到的分布中采樣得到樣本點,但是這個采樣過程在訓練時無法進行損失的反響傳播,所以需要一個重采樣的技巧。左邊的情況是沒有重采樣技巧時無法進行反向傳播,右邊的圖表示引入重采樣。
? ? ? ? ?變分自編器的表示總體結構圖:
總結
? ? ? ? 本文的主要內容:
? ? ? ? ? ? ? ? 1.降維是將描述數據的特征維度數量降低的過程。
? ? ? ? ? ? ? ? 2.自編碼器是神經網絡架構,通過編碼解碼過程進行重構,并訓練使得重構損失最小。
? ? ? ? ? ? ? ? 3.由于過擬合,自編碼器的隱層沒有正則化,無法進行生成過程解碼得到新數據。
? ? ? ? ? ? ? ? 4.變分自編碼器可以解決隱層沒有正則化的問題,通過將隱層表示為分布為不是點,并且加入了正則損失。
? ? ? ? ? ? ? ? 5.自編碼器的損失由重構和正則損失組成,使用變分推斷的方法求解。
? ? ? ? ? ? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的深入理解VAE(变分自编码器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【WineHQ】Ubuntu 16.04
- 下一篇: 安利一个方便加载百度地图的js插件