前面兩部分我們已經(jīng)掃除了一些基本概念上的障礙,下面我們來(lái)直奔主題——VAE! 由于文章是一篇一篇寫(xiě)的,所以照顧到大家觀看的情況,我們把前面介紹過(guò)的一些重要公式搬過(guò)來(lái)。 首先是系列第一篇的公式——多維高斯分布的KL散度計(jì)算公式: 希望大家還有印象,如果沒(méi)有印象就趕緊翻回去看看吧! 然后是上一回有關(guān)variational inference的推導(dǎo)公式: “VAE也是利用了這個(gè)特點(diǎn),我們用深度模型去擬合一些復(fù)雜的函數(shù)” 好吧……專欄寫(xiě)成我這樣也是醉了。為了保證每一篇文章的字?jǐn)?shù)不要太長(zhǎng)以至于讓大家失去了看下去的耐心,這篇文章光是回顧已經(jīng)花去了好大的篇幅。 好了,下面就是見(jiàn)證奇跡的時(shí)刻。 終于要見(jiàn)到正主了。讓我們關(guān)注一下variational inference公式的右邊,在此之前我們要對(duì)公式進(jìn)行一定的變化,然后給出我們的詳細(xì)建模過(guò)程。 為了更加方便地求解上面的公式,這里我們需要做一點(diǎn)小小的trick工作。上面提到了Q'(z|X)這個(gè)變分函數(shù),它代表了當(dāng)我們給定某個(gè)X的情況下z的分布情況。我們可以想象這里的z是滿足某種分布的。那么我們從數(shù)值上可以把X抽離出來(lái)呢? 比方說(shuō)我們有一個(gè)隨機(jī)變量a服從高斯分布N(1,1),根據(jù)定理我們可以定義一個(gè)隨機(jī)變量b=a-1,那么它將服從高斯分布N(0,1),換句話說(shuō),我們可以用一個(gè)均值為0,方差為1的隨機(jī)變量加上1來(lái)表示現(xiàn)在的隨機(jī)變量a。這樣我們就把一個(gè)隨機(jī)變量分成了兩部分——一部分是確定的,一部分是隨機(jī)的。 對(duì)于上面的Q'(z|X),我們同樣可以采用上面的方法完成。我們可以把一個(gè)服從這個(gè)條件概率的z拆分成兩部分,一部分是一個(gè)復(fù)雜的函數(shù) 它解決了確定部分的問(wèn)題,我們?cè)俣x另外一個(gè)隨機(jī)變量 它負(fù)責(zé)隨機(jī)的部分。為了書(shū)寫(xiě)的一致性,我們用 來(lái)表示服從條件概率的z。 這樣做有什么好處呢?現(xiàn)在我們知道了z條件概率值完全取決于生成它所使用的 那么上面關(guān)于變分推導(dǎo)的公式也就變成了下面的公式: 這就是替換的一小步,求解的一大步!實(shí)際上到了這里,我們已經(jīng)接近問(wèn)題最終的答案了,剩下的只是我們的臨門一腳——我們可不可以假設(shè)這個(gè)隨機(jī)部分服從什么樣的分布呢? 當(dāng)然能!不過(guò)由于我們一般把z的先驗(yàn)假設(shè)成一個(gè)多維的獨(dú)立高斯分布,為了KL計(jì)算的方便,也為了我們?cè)谇懊娴恼鹿?jié)推導(dǎo)2個(gè)多維高斯分布的KL散度這件事情沒(méi)有白做,我們決定在這里讓這個(gè)替換后的隨機(jī)部分同樣服從多維的獨(dú)立高斯分布。 下面我們來(lái)看看這個(gè)公式的兩部分具體該如何計(jì)算。 右邊的第二項(xiàng),KL散度部分——encoder 首先來(lái)看看公式右邊的第二項(xiàng)。剛才我們提到我們一般把z的先驗(yàn)假設(shè)成一個(gè)多維的獨(dú)立高斯分布,這里我們可以給出一個(gè)更強(qiáng)的假設(shè),那就是這個(gè)高斯分布的均值為0,方差為單位矩陣,那么我們前面提到的KL散度公式就從: 真的有種世界清靜了的感覺(jué)……我們下面的目標(biāo)就是利用encoder的部分根據(jù)X求解z的均值方差。這部分我們采用一個(gè)深度的神經(jīng)網(wǎng)絡(luò)就可以了。由于實(shí)際訓(xùn)練過(guò)程中我們采用的是batch的訓(xùn)練方法,因此我們需要輸入一個(gè)batch的X信息,然后進(jìn)行模型的計(jì)算和優(yōu)化。 如果我們用一個(gè)向量 來(lái)表示上面協(xié)方差矩陣的主對(duì)角線,情況將會(huì)更加美好: 到這里,關(guān)于這一部分的函數(shù)擬合已經(jīng)比較清晰了,我們的函數(shù)輸入輸出已經(jīng)非常清楚,我們的loss也化簡(jiǎn)到了一個(gè)比較簡(jiǎn)單的狀態(tài),下面就是具體的計(jì)算了。 右邊的第一項(xiàng),期望部分——decoder 從前面的KL散度公式優(yōu)化中,我們可以看到,如果兩個(gè)概率分布的KL散度值為0時(shí),實(shí)際上就說(shuō)明我們的隨機(jī)部分的分布和我們z的先驗(yàn)分布相同了。 這帶來(lái)一個(gè)好消息,就是我們可以直接使用上一步encoder得到的均值方差。這樣,我們就需要另外一個(gè)深度函數(shù)decoder,幫助我們從z再變回X。前面我們說(shuō)了我們的目標(biāo)是最大化似然的期望,實(shí)際上就可以轉(zhuǎn)換為采樣一批X,先用encoder生成z‘的分布,然后通過(guò)優(yōu)化使得p(X|z)的似然最大化。 關(guān)于如何最大化似然,我們有很多辦法,這一部分將在實(shí)踐的環(huán)節(jié)詳細(xì)給出。 好了,到這里,實(shí)際上VAE的核心計(jì)算推導(dǎo)就結(jié)束了。我們已經(jīng)花了3篇文章的時(shí)間把這個(gè)模型講完了,怎么可以就這樣結(jié)束呢?下一回我們來(lái)看看一個(gè)實(shí)現(xiàn)的代碼,同時(shí)來(lái)看看基于經(jīng)典VAE演變的一些模型是什么樣子。
|