深度學(xué)習(xí)入門自編碼器到變分自編碼器
自編碼器(autoencoder, AE)是一類在半監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)中使用的人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks, ANNs),屬于深度學(xué)習(xí)領(lǐng)域的范疇,其功能是通過將輸入信息作為學(xué)習(xí)目標(biāo),對輸入信息進行表征學(xué)習(xí)。通常用于壓縮降維,風(fēng)格遷移和離群值檢測等等。對于圖像而言,圖像的數(shù)據(jù)分布信息可以高效表示為編碼,但是其維度和數(shù)據(jù)信息一般遠小于輸入數(shù)據(jù),可作為強大的特征提取器,適用于深度神經(jīng)網(wǎng)絡(luò)的預(yù)訓(xùn)練,此外它還可以隨機生成與訓(xùn)練數(shù)據(jù)類似的數(shù)據(jù),以此來高效率的表達原數(shù)據(jù)的重要信息,因此通常被看作是生成模型。
自編碼器在深度學(xué)習(xí)的發(fā)展過程中出現(xiàn)了很多變體,比如演化出去噪自編碼器再到變分自編碼器(Denoising Autoencoder,DAE),再到變分自編碼器(Variational auto-encoder,VAE),最后到去耦變分自編碼,隨著時代的發(fā)展,往后會出現(xiàn)更多優(yōu)秀的模型,但它的原理從數(shù)學(xué)角度都是從輸入空間和特征空間開始,自編碼器求解兩者的映射的相似性誤差,通過以下公式使其最小化.
求解完成之后,自編碼器輸出計算后的特征h,即編碼特征,但在自編碼運算過程中,容易混入一些隨機性,在公式中標(biāo)識為高斯噪聲,然后將編碼器的輸出作為下一道解碼器的輸入特征,最終得到一個生成后的數(shù)據(jù)分布信息。
簡單的架構(gòu)如下所示,以變分自編碼器(Variational auto-encoder,VAE)為例。
接下來,按照條理邏輯分別介紹。
1.自編碼器(AE):
自編碼器分成兩個部分,第一個部分是encoder,一般是多層網(wǎng)絡(luò),將輸入的數(shù)據(jù)壓縮成為一個向量,變成低維度,而該向量就稱之為瓶頸。第二個部分是decoder,灌之以瓶頸,輸出數(shù)據(jù),我們稱之為重建輸入數(shù)據(jù)。我們的目的是要讓重建數(shù)據(jù)和原數(shù)據(jù)一樣,以達到壓縮還原的作用。損失函數(shù)就是讓重建數(shù)據(jù)和原數(shù)據(jù)距離最小即可。損失函數(shù)參考圖3。
下圖是一次訓(xùn)練一個淺層自編碼器
首先,第一個自編碼器學(xué)習(xí)去重建輸入。然后,第二個自編碼器學(xué)習(xí)去重建第一個自編碼器隱層的輸出。最后,這兩個自編碼器被整合到一起。缺點:低維度的瓶頸顯然丟失了很多有用的信息,重建的數(shù)據(jù)效果并不好。
2.去噪自編碼器(DAE)
這里要講的是,我們拿到一張干凈的圖片,想象一下比如是干凈的原始minst數(shù)據(jù)集,此時我們給原來干凈的圖片集加上很多噪聲,灌給編碼器,我們希望可以還原成干凈的是圖片集,以和AE相同的方式去訓(xùn)練,得到的網(wǎng)絡(luò)模型便是DAE.
如上圖,去噪編碼器一般對最初輸入增加噪聲,通過訓(xùn)練之后得到無噪聲的輸出。這防止了自編碼器簡單的將輸入復(fù)制到輸出,從而提取出數(shù)據(jù)中有用的模式。增加噪聲方式可以通過圖6左側(cè)增加高斯噪聲,或者通過圖6右側(cè)的droupout,直接丟棄掉一層特征。
3.變分自編碼器VAE
VAE和AE,DAE不同的是,原先編碼器是映射成一個向量,現(xiàn)在是映射成兩個向量,一個向量表示分布的平均值,另外一個表示分布的標(biāo)準(zhǔn)差,兩個向量都是相同的正太分布?,F(xiàn)在從兩個向量分別采樣,采樣的數(shù)據(jù)灌給解碼器。于是我們得到了損失函數(shù):
損失函數(shù)的前部分和其他自編碼器函數(shù)一樣是重建loss損失,后部分是KL散度。KL散度是衡量兩個不同分布的差異,有個重要的性質(zhì)是總是非負(fù)的。僅當(dāng)兩個分布式完全相同的時候才是0。所以后部分的作用就是控制瓶頸處的兩個向量處于正態(tài)分布。(均值為0,標(biāo)準(zhǔn)差為1)。這里有一個問題,從兩個分布采樣數(shù)據(jù),BP時候怎么做?所以有一個技巧叫做參數(shù)重現(xiàn)(Reparameterization Trick),前向傳播的時候,我們是通過以上公式得到z,BP的時候是讓神經(jīng)網(wǎng)絡(luò)去擬合μ和σ,一般我們很難求的參數(shù)都丟給神經(jīng)網(wǎng)絡(luò)就好,就像Batch Normonization的γ和β一樣。缺點效果還是比較模糊。
4.去耦變分自編碼
我們希望瓶頸處的向量,即低維度的向量把編碼過程中有用的維度保留下來,把沒有用的維度用正態(tài)分布的噪聲替代,可以理解為學(xué)習(xí)不同維度的特征,只是這些特征有好壞之分而已。我們僅需在loss function中加上一個β即可達到目的。
最后實驗表明,VAE在重建圖片時候?qū)D片的<長度,寬度,大小,角度>四個值時候是混亂的,而去耦變分自編碼器是能比較清晰的展示,最后生成的圖片效果也更銳利清楚。至此,非常簡單明了的介紹完了自編碼到去噪自編碼器到變分自編碼器到去耦變分自編碼。