介紹
? Variational Auto-encoder(VAE)變分自編碼器赏参,是無(wú)監(jiān)督復(fù)雜概率分布學(xué)習(xí)的最流行的方法之一。
? VAE的最大特點(diǎn)是模仿自動(dòng)編碼機(jī)的學(xué)習(xí)預(yù)測(cè)機(jī)制韭脊,在可測(cè)函數(shù)之間進(jìn)行編碼、解碼单旁。同GAN類似沪羔,其最重要的idea是基于一個(gè)令人驚嘆的數(shù)學(xué)事實(shí):
對(duì)于一個(gè)目標(biāo)概率分布,給定任何一種概率分布慎恒,總存在一個(gè)可微的可測(cè)函數(shù)任内,將其映射到另一種概率分布,使得這種概率分布與目標(biāo)的概率分布任意的接近融柬。
? 可測(cè)函數(shù)是測(cè)度論中的概念死嗦,它是真實(shí)世界的隨機(jī)事件到數(shù)學(xué)世界的隨機(jī)事件的映射。
? VAE的一個(gè)重要的哲學(xué)思想是粒氧,我們希望生成的樣本是由某些隱含變量所構(gòu)造出來(lái)的越除。舉個(gè)例子,比如我們想要生成0-9的手寫體外盯,影響生成這些數(shù)字的樣式可能有很多因素摘盆,比如筆畫粗細(xì)、筆尖的角度饱苟、寫者的書寫習(xí)慣孩擂、天氣好壞(天氣會(huì)影響寫者的心情,進(jìn)而影響書寫方式箱熬。根據(jù)蝴蝶效應(yīng)类垦,初始條件的微小變化會(huì)影響最終的結(jié)果)。這些因素不勝枚舉城须,一些看似不相關(guān)的因素蚤认,都有可能影響最終的結(jié)果。一個(gè)直接的方法是顯示地構(gòu)造出這些隱含因素的概率分布糕伐,但是這些因素實(shí)在是太多了砰琢,無(wú)窮多個(gè),我們顯然不能手工構(gòu)造良瞧。VAE巧妙地避開(kāi)了這個(gè)問(wèn)題陪汽,利用一個(gè)聯(lián)合高斯分布作為隱含可測(cè)函數(shù)的分布(這個(gè)隱含可測(cè)函數(shù)將上面所說(shuō)的所有現(xiàn)實(shí)世界影響寫字樣式的隱含因素映射到歐式空間中去了),隨即將問(wèn)題轉(zhuǎn)化為學(xué)習(xí)一個(gè)從隱含可測(cè)函數(shù)(隱含變量)到一個(gè)所希望生成樣本的映射褥蚯。后面我們會(huì)看到掩缓,這個(gè)過(guò)程就是解碼過(guò)程∽裱遥可以想象你辣,這個(gè)映射會(huì)極為復(fù)雜巡通。我們自然會(huì)想到利用深度學(xué)習(xí)強(qiáng)大的函數(shù)擬合能力來(lái)學(xué)習(xí)這個(gè)映射。
模型設(shè)計(jì)
目的
? VAE的核心目的是希望構(gòu)建一個(gè)從隱變量Z生成目標(biāo)數(shù)據(jù)X的模型舍哄。更準(zhǔn)確地講宴凉,它們是假設(shè)了Z服從某些常見(jiàn)的分布(比如正態(tài)分布或均勻分布),然后希望訓(xùn)練一個(gè)模型表悬,這個(gè)模型能夠?qū)⒃瓉?lái)的概率分布映射到訓(xùn)練集的概率分布弥锄,也就是說(shuō),它們的目的都是進(jìn)行分布之間的變換蟆沫。
難點(diǎn)
? 那現(xiàn)在假設(shè)Z服從某個(gè)已知分布籽暇,那么我就可以從中采樣得到若干個(gè),然后對(duì)它做變換得到饭庞,但是我們無(wú)法判斷這個(gè)轉(zhuǎn)換得到的分布跟我們目標(biāo)的數(shù)據(jù)集分布是不是一樣的戒悠。一般計(jì)算兩個(gè)不同的分布的差異是通過(guò)KL散度,但是這里我們實(shí)際上沒(méi)有兩個(gè)分布的表達(dá)式舟山,我們只有一批從構(gòu)造的分布采樣而來(lái)的數(shù)據(jù)绸狐,還有一批從真實(shí)的分布采樣而來(lái)的數(shù)據(jù)(也就是我們希望生成的訓(xùn)練集)。我們只有樣本本身累盗,沒(méi)有分布表達(dá)式寒矿,當(dāng)然也就沒(méi)有方法算KL散度。
從后驗(yàn)估計(jì)入手
? 首先我們有一個(gè)數(shù)據(jù)x若债,x服從于某未知分布符相,與x對(duì)應(yīng)的有一個(gè)隱變量z,服從于某一已知先驗(yàn)分布,用表示似然概率蠢琳,用表示后驗(yàn)概率啊终。顯然這里除了z的先驗(yàn)分布是我們指定的,其余的概率分布我們一無(wú)所知挪凑。
? 假設(shè)數(shù)據(jù)集中的數(shù)據(jù)都是獨(dú)立同分布的孕索,那么對(duì)于數(shù)據(jù)集中的數(shù)據(jù)就有如下的最大似然概率估計(jì)
不過(guò)我們沒(méi)有的分布表示形式逛艰,所以沒(méi)法直接計(jì)算躏碳。
VAE從后驗(yàn)估計(jì)入手,利用一個(gè)編碼器去擬合其后驗(yàn)概率散怖,最終目標(biāo)是讓兩個(gè)分布的KL散度最小化菇绵。因此有如下公式
于是我們的對(duì)數(shù)似然概率就可以表示為
其中就是對(duì)數(shù)似然函數(shù)變分推斷的下界,ELBO镇眷,全稱是Evidence Lower Bound
因?yàn)镵L散度的非負(fù)性咬最,所以,因此我們可以用優(yōu)化下界的方式去優(yōu)化欠动。
顯然這里的是包含期望的永乌,因此我們需要使用蒙特卡洛方法去估計(jì)期望惑申。假定編碼器可以寫作可微函數(shù),其中是噪聲翅雏,服從.
其中
實(shí)際試驗(yàn)時(shí)圈驼,如果樣本量N很大,我們一般采用minibatch的方法進(jìn)行學(xué)習(xí)望几,對(duì)數(shù)似然函數(shù)的下界可以通過(guò)minibatch來(lái)估計(jì)绩脆,假設(shè)minibatch為K個(gè),則
可以看到橄抹,為了計(jì)算靴迫,我們用了兩層估計(jì)。當(dāng)K較大時(shí)楼誓,內(nèi)層蒙特卡洛估計(jì)可以由外層估計(jì)來(lái)完成玉锌,也就是說(shuō),取M=1即可慌随。實(shí)際計(jì)算中芬沉,作者取K=100,M=1阁猜。由上述推導(dǎo)得到AEVB算法:
現(xiàn)在我們需要給定一些具體的分布來(lái)啟動(dòng)算法丸逸,
而則依據(jù)z是二值或者是實(shí)值來(lái)制定不同的分布,二值則采用伯努利分布來(lái)估計(jì)剃袍,而實(shí)值則使用正太分布來(lái)估計(jì)
作者采用多層感知機(jī)來(lái)估計(jì)上述和,
若為二維數(shù)據(jù)黄刚,則
若為實(shí)值數(shù)據(jù),則
對(duì)數(shù)似然函數(shù)的第一項(xiàng)的推導(dǎo)過(guò)程:
整個(gè)結(jié)果分為三項(xiàng)積分民效,第一項(xiàng)實(shí)際上就是乘以概率密度的積分(也就是1)憔维,所以結(jié)果是;第二項(xiàng)實(shí)際是正態(tài)分布的二階矩畏邢,熟悉正態(tài)分布的朋友應(yīng)該都清楚正態(tài)分布的二階矩為业扒;而根據(jù)定義,第三項(xiàng)實(shí)際上就是“-方差除以方差=-1”舒萎。所以總結(jié)果就是
因此可以啟動(dòng)優(yōu)化過(guò)程了程储。
蘇劍林的用了另一個(gè)思路來(lái)描述這個(gè)過(guò)程以下內(nèi)容摘錄自變分自編碼器(一):原來(lái)是這么一回事
解決方案
? 我們最終目標(biāo)是想要生成屬于的分布的數(shù)據(jù),但我們現(xiàn)在只有一批數(shù)據(jù)樣本臂寝,其整體用來(lái)描述章鲤,假如我們能夠根據(jù)得到X的分布,那我直接根據(jù)來(lái)采樣咆贬,就可以得到所有可能的X了(包括以外的)败徊,這是一個(gè)終極理想的生成模型了。當(dāng)然掏缎,這個(gè)理想很難實(shí)現(xiàn)皱蹦,于是我們將分布改一改
? 此時(shí)就描述了一個(gè)由Z來(lái)生成X的模型煤杀,而我們假設(shè)Z服從標(biāo)準(zhǔn)正態(tài)分布,也就是沪哺。如果這個(gè)理想能實(shí)現(xiàn)怜珍,那么我們就可以先從標(biāo)準(zhǔn)正態(tài)分布中采樣一個(gè)Z,然后根據(jù)Z來(lái)算一個(gè)X凤粗,也是一個(gè)很棒的生成模型酥泛。接下來(lái)就是結(jié)合自編碼器來(lái)實(shí)現(xiàn)重構(gòu),保證有效信息沒(méi)有丟失嫌拣,再加上一系列的推導(dǎo)柔袁,最后把模型實(shí)現(xiàn)。
? 如果像這個(gè)圖的話异逐,我們其實(shí)完全不清楚:究竟經(jīng)過(guò)重新采樣出來(lái)的捶索,是不是還對(duì)應(yīng)著原來(lái)的,所以我們?nèi)绻苯幼钚』?img class="math-inline" src="https://math.jianshu.com/math?formula=D(%7B%5Chat%20X_k%7D%2CX_k)%5E2" alt="D({\hat X_k},X_k)^2" mathimg="1">(這里D代表某種距離函數(shù))是很不科學(xué)的
? 其實(shí)灰瞻,在整個(gè)VAE模型中腥例,我們并沒(méi)有去使用 (隱變量空間的分布)是正態(tài)分布的假設(shè),我們用的是假設(shè)(后驗(yàn)分布)是正態(tài)分布T腿蟆燎竖!
? 具體來(lái)說(shuō),給定一個(gè)真實(shí)樣本要销,我們假設(shè)存在一個(gè)專屬于的分布(學(xué)名叫后驗(yàn)分布)构回,并進(jìn)一步假設(shè)這個(gè)分布是(獨(dú)立的、多元的)正態(tài)分布疏咐。為什么要強(qiáng)調(diào)“專屬”呢纤掸?因?yàn)槲覀兒竺嬉?xùn)練一個(gè)生成器,希望能夠把從分布采樣出來(lái)的一個(gè)還原為浑塞。如果假設(shè)是正態(tài)分布借跪,然后從中采樣一個(gè)Z,那么我們?cè)趺粗肋@個(gè)Z對(duì)應(yīng)于哪個(gè)真實(shí)的X呢酌壕?現(xiàn)在專屬于掏愁,我們有理由說(shuō)從這個(gè)分布采樣出來(lái)的Z應(yīng)該要還原到中去。
? 回到本文仅孩,這時(shí)候每一個(gè)都配上了一個(gè)專屬的正態(tài)分布托猩,才方便后面的生成器做還原印蓖。但這樣有多少個(gè)X就有多少個(gè)正態(tài)分布了辽慕。我們知道正態(tài)分布有兩組參數(shù):均值μ和方差(多元的話,它們都是向量)赦肃,那我怎么找出專屬于的正態(tài)分布的均值和方差呢溅蛉?好像并沒(méi)有什么直接的思路公浪。那好吧,那我就用神經(jīng)網(wǎng)絡(luò)來(lái)擬合出來(lái)吧船侧!這就是神經(jīng)網(wǎng)絡(luò)時(shí)代的哲學(xué):難算的我們都用神經(jīng)網(wǎng)絡(luò)來(lái)擬合欠气。
于是我們構(gòu)建兩個(gè)神經(jīng)網(wǎng)絡(luò),來(lái)算它們了袁梗。我們選擇擬合而不是直接擬合宜鸯,是因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%CF%83%5E2_k" alt="σ^2_k" mathimg="1">總是非負(fù)的,需要加激活函數(shù)處理遮怜,而擬合不需要加激活函數(shù)即碗,因?yàn)樗烧韶?fù)。到這里陌凳,我能知道專屬于的后驗(yàn)分布的均值和方差了剥懒,也就知道它的正態(tài)分布長(zhǎng)什么樣了,然后從這個(gè)專屬分布中采樣一個(gè)出來(lái)合敦,然后經(jīng)過(guò)一個(gè)生成器得到蕊肥,現(xiàn)在我們可以放心地最小化,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=Z_k" alt="Z_k" mathimg="1">是從專屬的分布中采樣出來(lái)的蛤肌,這個(gè)生成器應(yīng)該要把開(kāi)始的還原回來(lái)壁却。于是可以畫出VAE的示意圖
? 考慮一下上述的模型展东,首先,我們希望重構(gòu)X炒俱,也就是最小化盐肃,但是這個(gè)重構(gòu)過(guò)程受到噪聲的影響,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=Z_k" alt="Z_k" mathimg="1">是通過(guò)重新采樣過(guò)的权悟,不是直接由encoder算出來(lái)的砸王。顯然噪聲會(huì)增加重構(gòu)的難度,不過(guò)好在這個(gè)噪聲強(qiáng)度(也就是方差)通過(guò)一個(gè)神經(jīng)網(wǎng)絡(luò)算出來(lái)的峦阁,所以最終模型為了重構(gòu)得更好谦铃,肯定會(huì)想盡辦法讓方差為0。而方差為0的話榔昔,也就沒(méi)有隨機(jī)性了驹闰,所以不管怎么采樣其實(shí)都只是得到確定的結(jié)果(也就是均值)瘪菌,只擬合一個(gè)當(dāng)然比擬合多個(gè)要容易,而均值是通過(guò)另外一個(gè)神經(jīng)網(wǎng)絡(luò)算出來(lái)的嘹朗。
說(shuō)白了师妙,模型會(huì)慢慢退化成普通的AutoEncoder,噪聲不再起作用屹培。
這樣不就白費(fèi)力氣了嗎默穴?說(shuō)好的生成模型呢?
別急別急褪秀,其實(shí)VAE還讓所有的都向標(biāo)準(zhǔn)正態(tài)分布看齊壁顶,這樣就防止了噪聲為零,同時(shí)保證了模型具有生成能力溜歪。怎么理解“保證了生成能力”呢若专?如果所有的都很接近標(biāo)準(zhǔn)正態(tài)分布,那么根據(jù)定義
這里的可以是積分或者求和蝴猪,總之概率和為一调衰,這樣我們就能達(dá)到我們的先驗(yàn)假設(shè):是標(biāo)準(zhǔn)正態(tài)分布。然后我們就可以放心地從中采樣來(lái)生成圖像了自阱。
為了使模型具有生成能力,vae要求每個(gè)都向正態(tài)分布看齊
那怎么讓所有的p(Z|X)都向N(0,I)看齊呢沛豌?如果沒(méi)有外部知識(shí)的話趋箩,其實(shí)最直接的方法應(yīng)該是在重構(gòu)誤差的基礎(chǔ)上中加入額外的loss:
因?yàn)樗鼈兎謩e代表了均值和方差的對(duì)數(shù),達(dá)到就是希望二者盡量接近于0了加派。不過(guò)叫确,這又會(huì)面臨著這兩個(gè)損失的比例要怎么選取的問(wèn)題,選取得不好芍锦,生成的圖像會(huì)比較模糊竹勉。所以,原論文直接算了一般(各分量獨(dú)立的)正態(tài)分布與標(biāo)準(zhǔn)正態(tài)分布的KL散度作為這個(gè)額外的loss娄琉,計(jì)算結(jié)果為
這里的d是隱變量Z的維度,因?yàn)榧僭O(shè)各分變量獨(dú)立所以每個(gè)變量獨(dú)立計(jì)算KL散度次乓,然后再求和。其中μ(i)和σ2(i)分別代表一般正態(tài)分布的均值向量和方差向量的第i個(gè)分量孽水。直接用這個(gè)式子做補(bǔ)充loss票腰,就不用考慮均值損失和方差損失的相對(duì)比例問(wèn)題了。
重參數(shù)技巧
由于這里我們需要從正態(tài)分布中采樣出來(lái)一個(gè)女气,但是分布的均值和方差都是神經(jīng)網(wǎng)絡(luò)算出來(lái)的杏慰,現(xiàn)在我們要利用采樣出來(lái)的結(jié)果去在損失函數(shù)中計(jì)算loss,然后反過(guò)來(lái)優(yōu)化這個(gè)分布的均值和方差√幽可是采樣的這個(gè)操作是不可導(dǎo)的,所以要利用一個(gè)重參數(shù)的技巧簇搅,英文名是reparameterization trick完域。我們利用如下公式
這說(shuō)明是服從均值為0、方差為1的標(biāo)準(zhǔn)正態(tài)分布的瘩将,要同時(shí)把dz考慮進(jìn)去吟税,是因?yàn)槌松蟙z才算是概率,去掉dz是概率密度而不是概率姿现。這時(shí)候我們得到:
從中采樣一個(gè)Z肠仪,相當(dāng)于從中采樣一個(gè)ε,然后讓备典。
于是异旧,我們將從采樣變成了從中采樣,然后通過(guò)參數(shù)變換得到從中采樣的結(jié)果提佣。這樣一來(lái)吮蛹,“采樣”這個(gè)操作就不用參與梯度下降了,改為采樣的結(jié)果參與拌屏,使得整個(gè)模型可訓(xùn)練了潮针。