與經(jīng)常作為分類器的神經(jīng)網(wǎng)絡(luò)相比,變分自編碼器是一種十分著名的生成模型,目前被廣泛用于生成偽造的人臉照片,甚至可以用于生成美妙的音樂(lè)。然而是什么讓變分自編碼器成為如此成功的多媒體生成工具呢?讓我們來(lái)一探其背后的究竟。
當(dāng)我們使用生成模型時(shí)也許只想生成隨機(jī)的和訓(xùn)練數(shù)據(jù)類似的輸出,但如果想生成特殊的數(shù)據(jù)或者在已有數(shù)據(jù)上進(jìn)行一定的探索那么普通的自動(dòng)編碼器就不一定能滿足了。而這正是變分自編碼器的獨(dú)特之處。
標(biāo)準(zhǔn)自編碼器
一個(gè)標(biāo)準(zhǔn)的自編碼器網(wǎng)絡(luò)實(shí)際上是一對(duì)兒相互連接的神經(jīng)網(wǎng)絡(luò),包括編碼器和解碼器。編碼器神經(jīng)網(wǎng)絡(luò)將輸入數(shù)據(jù)轉(zhuǎn)化為更小更緊湊的編碼表達(dá),而解碼器則將這一編碼重新恢復(fù)為原始輸入數(shù)據(jù)。下面我們用卷積神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)自編碼器進(jìn)行具體的說(shuō)明。
自編碼器中的CNNs
對(duì)于卷積神經(jīng)網(wǎng)絡(luò)CNNs來(lái)說(shuō),將輸入的圖像轉(zhuǎn)換為更為緊密的表達(dá)(ImageNet中通常為1000維的一階張量)。這一緊密的表達(dá)用于對(duì)輸入圖像進(jìn)行分類。編碼器的工作原理也與此類似,它將輸入數(shù)據(jù)轉(zhuǎn)換為十分小而緊湊的表達(dá)(編碼),其中包含了可供解碼器生成期望輸出的足夠信息。編碼器一般與網(wǎng)絡(luò)的其他部分一同訓(xùn)練并通過(guò)反向傳播的誤差進(jìn)行優(yōu)化從而生成有用的特殊編碼。對(duì)于CNNs來(lái)說(shuō),可以將其看做是特殊的編碼器。其輸出的1000維編碼便是用于分類的分類器。
自編碼器便是基于這樣的思想將編碼器輸出的編碼用作重建其輸入的特殊用途。
標(biāo)準(zhǔn)的自編碼器
整個(gè)自編碼器神經(jīng)網(wǎng)絡(luò)常常作為整體進(jìn)行訓(xùn)練,其損失函數(shù)則定義為重建輸出與原始輸入之間的均方差/交叉熵,作為重建損失函數(shù)來(lái)懲罰網(wǎng)絡(luò)生成與原始輸入不同的輸出。
中間的編碼作為隱藏層間鏈接的輸出,其維度遠(yuǎn)遠(yuǎn)小于輸出數(shù)據(jù)。編碼器必須選擇性的拋棄數(shù)據(jù),將盡可能多的相關(guān)信息包含到有限的編碼中,同時(shí)智能的去除不相關(guān)的信息。解碼器則需要從編碼中盡可能的學(xué)習(xí)如何重建輸入圖像。他們一起構(gòu)成了自編碼器的左膀右臂。
標(biāo)準(zhǔn)自編碼器面臨的問(wèn)題
標(biāo)準(zhǔn)自編碼器能學(xué)習(xí)生成緊湊的數(shù)據(jù)表達(dá)并重建輸入數(shù)據(jù),然而除了像去噪自編碼器等為數(shù)不多的應(yīng)用外,它的應(yīng)用卻極其有限。其根本原因在于自編碼器將輸入轉(zhuǎn)換為隱含空間中的表達(dá)并不是連續(xù)的,使得其中的插值和擾動(dòng)難以完成。
MNIST數(shù)據(jù)不同分類間的間隔造成了編碼器無(wú)法連續(xù)采樣
例如利用MNIST數(shù)據(jù)集訓(xùn)練的自編碼器將數(shù)據(jù)映射到2D隱含空間中,圖中顯示不同的分類之間存在著明顯的距離。這使得解碼器對(duì)于存在于類別之間的區(qū)域無(wú)法便捷的進(jìn)行解碼。如果你不想僅僅只是復(fù)現(xiàn)輸入圖像,而是想從隱含空間中隨機(jī)的采樣或是在輸入圖像上生成一定的變化,那此時(shí)一個(gè)連續(xù)的隱含空間就變得必不可少了。
如果隱含空間不連續(xù),那么在不同類別中間空白的地方采樣后解碼器就會(huì)生成非真實(shí)的輸出。因?yàn)榻獯a器不知道如何除了一片空白的隱含區(qū)域,它在訓(xùn)練過(guò)程中從未見(jiàn)到過(guò)處于這一區(qū)域的樣本。
變分自編碼器
變分自編碼器具有與標(biāo)準(zhǔn)自編碼器完全不同的特性,它的隱含空間被設(shè)計(jì)為連續(xù)的分布以便進(jìn)行隨機(jī)采樣和插值,這使得它成為了有效的生成模型。它通過(guò)很獨(dú)特的方式來(lái)實(shí)現(xiàn)這一特性,編碼器不是輸出先前的n維度向量而是輸出兩個(gè)n維矢量:分別是均值向量μ和標(biāo)準(zhǔn)差向量σ。
隨后通過(guò)對(duì)μ和σ作為均值和方差采樣得到了隨機(jī)變量Xi,n次采樣后形成了n維的采樣后結(jié)果作為編碼輸出,并送入后續(xù)的解碼器。
隨機(jī)生成編碼矢量
這一隨機(jī)生成意味著即使對(duì)于均值和方差相同的輸入,實(shí)際的編碼也會(huì)由于每一次采樣的不同而產(chǎn)生不同的編碼結(jié)果。其中均值矢量控制著編碼輸入的中心,而標(biāo)準(zhǔn)差則控制著這一區(qū)域的大小(編碼可以從均值發(fā)生變化的范圍)。
通過(guò)采樣得到的編碼可以是這一區(qū)域里的任意位置,解碼器學(xué)習(xí)到的不僅是單個(gè)點(diǎn)在隱含空間中的表示,而是整個(gè)鄰域內(nèi)點(diǎn)的編碼表示。這使得解碼器不僅僅能解碼隱含空間中單一特定的編碼,而且可以解碼在一定程度上變化的編碼,而這是由于解碼器通過(guò)了一定程度上變化的編碼訓(xùn)練而成。
所得到的模型目前就暴露在了一定程度局域變化的編碼中,使得隱含空間中的相似樣本在局域尺度上變得平滑。理想情況下不相似的樣本在隱含空間中存在一定重疊,使得在不同類別間的插值成為可能。但這樣的方法還存在一個(gè)問(wèn)題,我們無(wú)法對(duì)μ和σ的取值給出限制,這會(huì)造成編碼器在不同類別上學(xué)習(xí)出的均值相去甚遠(yuǎn),使它們間的聚類分開(kāi)。最小化σ使得相同的樣本不會(huì)產(chǎn)生太大差異。這使得解碼器可以從訓(xùn)練數(shù)據(jù)進(jìn)行高效重建。
我們希望得到盡量互相靠近但依然有一定距離的編碼,以便在隱含空間中進(jìn)行插值并重建出新的樣本。為了實(shí)現(xiàn)滿足要求的編碼需要在損失函數(shù)中引入Kullback-Leibler散度(KL散度)。KL散度描述兩個(gè)概率分布之間的發(fā)散程度。最小化KL散度在這里意味著優(yōu)化概率分布的參數(shù)(μ,σ)盡可能的接近目標(biāo)分布。
對(duì)于VAE來(lái)說(shuō)KL損失函數(shù)是X中所有元素Xi~N(μi, σi2)與標(biāo)準(zhǔn)正態(tài)分布的散度和。
這一損失函數(shù)將鼓勵(lì)所有編碼在圍繞隱藏層中心分布,同時(shí)懲罰不同分類被聚類到分離區(qū)域的行為。利用純粹KL散度損失得到的編碼是以隱藏空間中心隨機(jī)分布的。但從這些無(wú)意義的表達(dá)中解碼器卻無(wú)從解碼出有意義的信息。
純粹的KL散度優(yōu)化的隱含空間(左),結(jié)合了重建損失優(yōu)化的隱含空間
這是就需要將KL損失和重建損失結(jié)合起來(lái)。這使得在局域范圍內(nèi)的隱藏空間點(diǎn)維持了相同的類別,同時(shí)在全局范圍內(nèi)所有的點(diǎn)也被緊湊的壓縮到了連續(xù)的隱含空間中。這一結(jié)果是通過(guò)重建損失的聚類行為和KL損失的緊密分布行為平衡得到的,從而形成了可供解碼器解碼的隱含空間分布。這意味著可以隨機(jī)的采樣并在隱含空間中平滑的插值,得到的結(jié)果可控解碼器生成有意義的有效結(jié)果。
最終的損失函數(shù)
矢量運(yùn)算
那么現(xiàn)在我們?nèi)绾卧陔[含空間中得到平滑的插值呢?這主要通過(guò)隱含空間中的矢量運(yùn)算來(lái)實(shí)現(xiàn)。
例如想得到兩個(gè)樣本之間的新樣本,那么只需要計(jì)算出他們均值矢量之差,并以其一半加上原來(lái)的矢量。最后將得到的結(jié)果送入到解碼器即可。那對(duì)于特殊的特征也,比如生成眼鏡該如何操作呢?那就找到分別戴眼鏡和不戴眼鏡的樣本,并得到他們?cè)诰幋a器隱含空間中矢量之差,這就表示了眼鏡這一特征。將這新的“眼鏡”矢量加到任意的人臉矢量后進(jìn)行解碼即可得到戴眼鏡的人臉。
展望
對(duì)于變分自編碼來(lái)說(shuō),目前已經(jīng)出現(xiàn)了各種各樣的改進(jìn)算法。可以增加、替換標(biāo)準(zhǔn)的全連接編解碼器,并用卷積網(wǎng)絡(luò)來(lái)代替。有人利用它生成了各種各樣的人臉和著名的MNIST變化數(shù)據(jù)。
甚至可以用LSTM訓(xùn)練編解碼器訓(xùn)練時(shí)序離散數(shù)據(jù),從而生成文本和音樂(lè)等序列樣本。甚至可以模仿人類的簡(jiǎn)筆畫(huà)。
VAE對(duì)于各種各樣的數(shù)據(jù)都有很好的適應(yīng)性,無(wú)論序列或非序列、連續(xù)或離散、標(biāo)記或非標(biāo)記數(shù)據(jù)都是強(qiáng)大的生成工具。期待能在未來(lái)看到更多獨(dú)特矚目的應(yīng)用。
-
編碼器
+關(guān)注
關(guān)注
45文章
3655瀏覽量
134883 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100953
原文標(biāo)題:一篇文章告訴你「變分自編碼器 (VAE)」的優(yōu)秀
文章出處:【微信號(hào):thejiangmen,微信公眾號(hào):將門(mén)創(chuàng)投】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論