变分自编码器VAE:这样做为什么能成?
作者丨蘇劍林
單位丨廣州火焰信息科技有限公司
研究方向丨NLP,神經(jīng)網(wǎng)絡(luò)
個(gè)人主頁丨kexue.fm
話說我覺得我自己最近寫文章都喜歡長篇大論了,而且扎堆地來。之前連續(xù)寫了三篇關(guān)于 Capsule 的介紹,這次輪到 VAE 了。本文是 VAE 的第三篇探索,說不準(zhǔn)還會(huì)有第四篇。不管怎么樣,數(shù)量不重要,重要的是能把問題都想清楚。尤其是對(duì)于 VAE 這種新奇的建模思維來說,更加值得細(xì)細(xì)地?fù)浮?/span>
這次我們要關(guān)心的一個(gè)問題是:VAE 為什么能成?
估計(jì)看 VAE 的讀者都會(huì)經(jīng)歷這么幾個(gè)階段。第一個(gè)階段是剛讀了 VAE 的介紹,然后云里霧里的,感覺像自編碼器又不像自編碼器的,反復(fù)啃了幾遍文字并看了源碼之后才知道大概是怎么回事。
第二個(gè)階段就是在第一個(gè)階段的基礎(chǔ)上,再去細(xì)讀 VAE 的原理,諸如隱變量模型、KL 散度、變分推斷等等,細(xì)細(xì)看下去,發(fā)現(xiàn)雖然折騰來折騰去,最終居然都能看明白了。
這時(shí)候讀者可能就進(jìn)入第三個(gè)階段了。在這個(gè)階段中,我們會(huì)有諸多疑問,尤其是可行性的疑問:“為什么它這樣反復(fù)折騰,最終出來模型是可行的?我也有很多想法呀,為什么我的想法就不行?”
前文之要
讓我們?cè)俨粎捚錈┑鼗仡櫼幌虑懊骊P(guān)于 VAE 的一些原理。
VAE 希望通過隱變量分解來描述數(shù)據(jù) X 的分布。
然后對(duì) p(x,z) 用模型 q(x|z) 擬合,p(z) 用模型 q(z) 擬合,為了使得模型具有生成能力,q(z) 定義為標(biāo)準(zhǔn)正態(tài)分布。
理論上,我們可以使用邊緣概率的最大似然來求解模型:
但是由于圓括號(hào)內(nèi)的積分沒法顯式求出來,所以我們只好引入 KL 散度來觀察聯(lián)合分布的差距,最終目標(biāo)函數(shù)變成了:
通過最小化 L 來分別找出 p(x|z) 和 q(x|z)。前一文再談變分自編碼器VAE:從貝葉斯觀點(diǎn)出發(fā)也表明?L?有下界 ??x~p(x)[lnp(x)],所以比較?L?與???x~p(x)[lnp(x)]?的接近程度就可以比較生成器的相對(duì)質(zhì)量。
采樣之惑
在這部分內(nèi)容中,我們?cè)噲D對(duì) VAE 的原理做細(xì)致的追問,以求能回答 VAE 為什么這樣做,最關(guān)鍵的問題是,為什么這樣做就可行。?
采樣一個(gè)點(diǎn)就夠
對(duì)于 (3) 式,我們后面是這樣處理的:
1. 留意到正好是 p(z|x) 和 q(z) 的散度 KL(p(z|x)‖q(z)),而它們倆都被我們都假設(shè)為正態(tài)分布,所以這一項(xiàng)可以算出來;
2. ?z~p(z|x)[?lnq(x|z)]?這一項(xiàng)我們認(rèn)為只采樣一個(gè)就夠代表性了,所以這一項(xiàng)變成了 ?lnq(x|z),z~p(z|x)。
經(jīng)過這樣的處理,整個(gè) loss 就可以明確寫出來了:
等等,可能有讀者看不過眼了:KL(p(z|x)‖q(z)) 事先算出來,相當(dāng)于是采樣了無窮多個(gè)點(diǎn)來估算這一項(xiàng);而 ?z~p(z|x)[?lnq(x|z)] 卻又只采樣一個(gè)點(diǎn),大家都是 loss 的一部分,這樣不公平待遇真的好么?
事實(shí)上,也可以只采樣一個(gè)點(diǎn)來算,也就是說,可以通過全體都只采樣一個(gè)點(diǎn),將 (3) 式變?yōu)?#xff1a;
這個(gè) loss 雖然跟標(biāo)準(zhǔn)的 VAE 有所不同,但事實(shí)上也能收斂到相似的結(jié)果。
為什么一個(gè)點(diǎn)就夠?
那么,為什么采樣一個(gè)點(diǎn)就夠了呢?什么情況下才是采樣一個(gè)點(diǎn)就夠?
首先,我舉一個(gè)“采樣一個(gè)點(diǎn)不夠”的例子,讓我們回頭看 (2) 式,它其實(shí)可以改寫成:
如果采樣一個(gè)點(diǎn)就夠了,不,這里還是謹(jǐn)慎一點(diǎn),采樣 k 個(gè)點(diǎn)吧,那么我們可以寫出:
然后就可以梯度下降訓(xùn)練了。
然而,這樣的策略是不成功的。實(shí)際中我們能采樣的數(shù)目 k,一般要比每個(gè) batch 的大小要小,這時(shí)候最大化就會(huì)陷入一個(gè)“資源爭奪戰(zhàn)”的境地。
每次迭代時(shí),一個(gè) batch 中的各個(gè) xi 都在爭奪 z1,z2,…,zk,誰爭奪成功了,q(x|z) 就大。說白了,哪個(gè) xi 能找到專屬于它的 zj,這意味著 zj 只能生成 xi,不能生成其它的,那么 z(xi|zj) 就大),但是每個(gè)樣本都是平等的,采樣又是隨機(jī)的,我們無法預(yù)估每次“資源爭奪戰(zhàn)”的戰(zhàn)況。這完全就是一片混戰(zhàn)。
如果數(shù)據(jù)集僅僅是 mnist,那還好一點(diǎn),因?yàn)?mnist 的樣本具有比較明顯的聚類傾向,所以采樣數(shù)母 k 超過 10,那么就夠各個(gè) xi 分了。
但如果像人臉、imagenet 這些沒有明顯聚類傾向、類內(nèi)方差比較大的數(shù)據(jù)集,各個(gè) z 完全是不夠分的,一會(huì) xi 搶到了 zj,一會(huì) xi+1 搶到了 zj,訓(xùn)練就直接失敗了。
因此,正是這種“僧多粥少”的情況導(dǎo)致上述模型 (7) 訓(xùn)練不成功。可是,為什么 VAE 那里采樣一個(gè)點(diǎn)就成功了呢?
一個(gè)點(diǎn)確實(shí)夠了
這就得再分析一下我們對(duì) q(x|z) 的想法了,我們稱?q(x|z)?為生成模型部分,一般情況下我們假設(shè)它為伯努利分布或高斯分布,考慮到伯努利分布應(yīng)用場景有限,這里只假設(shè)它是正態(tài)分布,那么:
其中 μ(z) 是用來計(jì)算均值的網(wǎng)絡(luò),σ^2(z)是用來計(jì)算方差的網(wǎng)絡(luò),很多時(shí)候我們會(huì)固定方差,那就只剩一個(gè)計(jì)算均值的網(wǎng)絡(luò)了。
注意,q(x|z) 只是一個(gè)概率分布,我們從q(z)中采樣出 z 后,代入 q(x|z)?后得到?q(x|z) 的具體形式,理論上我們還要從 q(x|z)?中再采樣一次才得到 x。但是,我們并沒有這樣做,我們直接把均值網(wǎng)絡(luò) μ(z)?的結(jié)果就當(dāng)成 x。
而能這樣做,表明 q(x|z)?是一個(gè)方差很小的正態(tài)分布(如果是固定方差的話,則訓(xùn)練前需要調(diào)低方差,如果不是正態(tài)分布而是伯努利分布的話,則不需要考慮這個(gè)問題,它只有一組參數(shù)),每次采樣的結(jié)果幾乎都是相同的(都是均值 μ(z)),此時(shí) x 和 z 之間“幾乎”具有一一對(duì)應(yīng)關(guān)系,接近確定的函數(shù) x=μ(z)。
▲?標(biāo)準(zhǔn)正態(tài)分布(藍(lán))和小方差正態(tài)分布(橙)
而對(duì)于后驗(yàn)分布 p(z|x) 中,我們假設(shè)了它也是一個(gè)正態(tài)分布。既然前面說 z 與 x 幾乎是一一對(duì)應(yīng)的,那么這個(gè)性質(zhì)同樣也適用驗(yàn)分布 p(z|x),這就表明后驗(yàn)分布也會(huì)是一個(gè)方差很小的正態(tài)分布(讀者也可以自行從 mnist 的 encoder 結(jié)果來驗(yàn)證這一點(diǎn)),這也就意味著每次從 p(z|x) 中采樣的結(jié)果幾乎都是相同的。
既然如此,采樣一次跟采樣多次也就沒有什么差別了,因?yàn)槊看尾蓸拥慕Y(jié)果都基本一樣。所以我們就解釋了為什么可以從 (3) 式出發(fā),只采樣一個(gè)點(diǎn)計(jì)算而變成 (4) 式或 (5) 式了。
后驗(yàn)之妙
前面我們初步解釋了為什么直接在先驗(yàn)分布 q(z) 中采樣訓(xùn)練不好,而在后驗(yàn)分布中 p(z|x) 中采樣的話一個(gè)點(diǎn)就夠了。
事實(shí)上,利用 KL 散度在隱變量模型中引入后驗(yàn)分布是一個(gè)非常神奇的招數(shù)。在這部分內(nèi)容中,我們?cè)僬硪幌孪嚓P(guān)內(nèi)容,并且給出一個(gè)運(yùn)用這個(gè)思想的新例子。?
后驗(yàn)的先驗(yàn)?
可能讀者會(huì)有點(diǎn)邏輯混亂:你說 q(x|z) 和 p(z|x)?最終都是方差很小的正態(tài)分布,可那是最終的訓(xùn)練結(jié)果而已,在建模的時(shí)候,理論上我們不能事先知道 ?q(x|z) 和?p(z|x)?的方差有多大,那怎么就先去采樣一個(gè)點(diǎn)了??
我覺得這也是我們對(duì)問題的先驗(yàn)認(rèn)識(shí)。當(dāng)我們決定用某個(gè)數(shù)據(jù)集 X 做 VAE 時(shí),這個(gè)數(shù)據(jù)集本身就帶了很強(qiáng)的約束。
比如 mnist 數(shù)據(jù)集具有 784 個(gè)像素,事實(shí)上它的獨(dú)立維度遠(yuǎn)少于 784,最明顯的,有些邊緣像素一直都是 0,mnist 相對(duì)于所有 28*28 的圖像來說,是一個(gè)非常小的子集.
再比如筆者前幾天寫的作詩機(jī)器人,“唐詩”這個(gè)語料集相對(duì)于一般的語句來說是一個(gè)非常小的子集;甚至我們拿上千個(gè)分類的 imagenet 數(shù)據(jù)集來看,它也是無窮盡的圖像中的一個(gè)小子集而已。?
這樣一來,我們就想著這個(gè)數(shù)據(jù)集 X 是可以投影到一個(gè)低維空間(隱變量空間)中,然后讓低維空間中的隱變量跟原來的 X 集一一對(duì)應(yīng)。
讀者或許看出來了:這不就是普通的自編碼器嗎?
是的,其實(shí)意思就是說,在普通的自編碼器情況下,我們可以做到隱變量跟原數(shù)據(jù)集的一一對(duì)應(yīng)(完全一一對(duì)應(yīng)意味著 p(z|x)?和 q(x|z)?的方差為 0),那么再引入高斯形式的先驗(yàn)分布 q(z) 后,粗略地看,這只是對(duì)隱變量空間做了平移和縮放,所以方差也可以不大。?
所以,我們應(yīng)該是事先猜測出 p(z|x)?和?q(x|z)?的方差很小,并且讓模型實(shí)現(xiàn)這個(gè)估計(jì)。說白了,“采樣一個(gè)”這個(gè)操作,是我們對(duì)數(shù)據(jù)和模型的先驗(yàn)認(rèn)識(shí),是對(duì)后驗(yàn)分布的先驗(yàn),并且我們通過這個(gè)先驗(yàn)認(rèn)識(shí)來希望模型能靠近這個(gè)先驗(yàn)認(rèn)識(shí)去。?
整個(gè)思路應(yīng)該是:
有了原始語料集
觀察原始語料集,推測可以一一對(duì)應(yīng)某個(gè)隱變量空間
通過采樣一個(gè)的方式,讓模型去學(xué)會(huì)這個(gè)對(duì)應(yīng)
這部分內(nèi)容說得有點(diǎn)凌亂,其實(shí)也有種多此一舉的感覺,希望讀者不要被我搞糊涂了。如果覺得混亂的話,忽視這部分吧。
耿直的IWAE
接下來的例子稱為“重要性加權(quán)自編碼器(Importance Weighted Autoencoders)”,簡寫為“IWAE”,它更加干脆、直接地體現(xiàn)出后驗(yàn)分布的妙用,它在某種程度上它還可以看成是 VAE 的升級(jí)版。?
IWAE 的出發(fā)點(diǎn)是 (2) 式,它引入了后驗(yàn)分布對(duì) (2) 式進(jìn)行了改寫:
這樣一來,問題由從 q(z) 采樣變成了從 p(z|x) 中采樣。我們前面已經(jīng)論述了 p(z|x) 方差較小,因此采樣幾個(gè)點(diǎn)就夠了:
代入 (2) 式得到:
這就是 IWAE。為了對(duì)齊 (4),(5) 式,可以將它等價(jià)地寫成:
當(dāng) k=1 時(shí),上式正好跟 (5) 式一樣,所以從這個(gè)角度來看,IWAE 是 VAE 的升級(jí)版。?
從構(gòu)造過程來看,在 (8) 式中將 p(z|x) 替換為 z 的任意分布都是可以的,選擇 p(z|x)?只是因?yàn)樗芯劢剐?#xff0c;便于采樣。而當(dāng) k 足夠大時(shí),事實(shí)上 p(z|x)?的具體形式已經(jīng)不重要了。
這也就表明,在 IWAE 中削弱了 encoder 模型 p(z|x)?的作用,換來了生成模型 q(x|z) 的提升。
因?yàn)樵?VAE 中,我們假設(shè) p(z|x) 是正態(tài)分布,這只是一種容易算的近似,這個(gè)近似的合理性,同時(shí)也會(huì)影響生成模型?q(x|z)?的質(zhì)量。可以證明,Lk能比 L?更接近下界 ??x~p(x)[lnp(x)],所以生成模型的質(zhì)量會(huì)更優(yōu)。?
直覺來講,就是在 IWAE 中,p(z|x)?的近似程度已經(jīng)不是那么重要了,所以能得到更好的生成模型。
不過代價(jià)是生成模型的質(zhì)量就降低了,這也是因?yàn)?p(z|x)?的重要性降低了,模型就不會(huì)太集中精力訓(xùn)練 p(z|x)?了。所以如果我們是希望獲得好的 encoder 的話,IWAE 是不可取的。?
還有一個(gè)工作 Tighter Variational Bounds are Not Necessarily Better,據(jù)說同時(shí)了提高了 encoder 和 decoder 的質(zhì)量,不過我還沒看懂。
重參之神
如果說后驗(yàn)分布的引入成功勾畫了 VAE 的整個(gè)藍(lán)圖,那么重參數(shù)技巧就是那“畫龍點(diǎn)睛”的“神來之筆”。
前面我們說,VAE 引入后驗(yàn)分布使得采樣從寬松的標(biāo)準(zhǔn)正態(tài)分布 q(z) 轉(zhuǎn)移到了緊湊的正態(tài)分布 p(z|x)。然而,盡管它們都是正態(tài)分布,但是含義卻大不一樣。我們先寫出:
也就是說,p(z|x) 的均值和方差都是要訓(xùn)練的模型。
讓我們想象一下,當(dāng)模型跑到這一步,然后算出了 μ(x) 和 σ(x),接著呢,就可以構(gòu)建正態(tài)分布然后采樣了。
可采樣出來的是什么東西?是一個(gè)向量,并且這個(gè)向量我們看不出它跟 μ(x) 和?σ(x)?的關(guān)系,所以相當(dāng)于一個(gè)常向量,這個(gè)向量一求導(dǎo)就沒了,從而在梯度下降中,我們無法得到任何反饋來更新 μ(x) 和?σ(x)。
這時(shí)候重參數(shù)技巧就閃亮登場了,它直截了當(dāng)?shù)馗嬖V我們:
▲?重參數(shù)技巧
沒有比這更簡潔了,看起來只是一個(gè)微小的變換,但它明確地告訴了我們 z 跟 μ(x) 和?σ(x)?的關(guān)系。于是 z 求導(dǎo)就不再是 0,μ(x),?σ(x)?終于可以獲得屬于它們的反饋了。至此,模型一切就緒,接下來就是寫代碼的時(shí)間了。
可見,“重參數(shù)”簡直堪稱絕殺。
本文之水
本文大概是希望把 VAE 后續(xù)的一些小細(xì)節(jié)說清楚,特別是 VAE 如何通過巧妙地引入后驗(yàn)分布來解決采樣難題(從而解決了訓(xùn)練難題),并且順道介紹了一下 IWAE。
要求直觀理解就難免會(huì)失去一點(diǎn)嚴(yán)謹(jǐn)性,這是二者不可兼得的事情。所以,對(duì)于文章中的毛病,望高手讀者多多海涵,也歡迎批評(píng)建議。
點(diǎn)擊以下標(biāo)題查看相關(guān)內(nèi)容:?
變分自編碼器VAE:原來是這么一回事
再談變分自編碼器VAE:從貝葉斯觀點(diǎn)出發(fā)
PaperWeekly 第二十七期 | VAE for NLP
End-to-End任務(wù)驅(qū)動(dòng)對(duì)話與數(shù)據(jù)庫的銜接
#作 者 招 募#
讓你的文字被很多很多人看到,喜歡我們不如加入我們
? ? ? ? ??
?我是彩蛋
?解鎖新功能:熱門職位推薦!
PaperWeekly小程序升級(jí)啦
今日arXiv√猜你喜歡√熱門職位√
找全職找實(shí)習(xí)都不是問題
?
?解鎖方式?
1. 識(shí)別下方二維碼打開小程序
2. 用PaperWeekly社區(qū)賬號(hào)進(jìn)行登陸
3. 登陸后即可解鎖所有功能
?職位發(fā)布?
請(qǐng)?zhí)砑有≈治⑿?#xff08;pwbot02)進(jìn)行咨詢
?
長按識(shí)別二維碼,使用小程序
*點(diǎn)擊閱讀原文即可注冊(cè)
關(guān)于PaperWeekly
PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點(diǎn)擊 |?閱讀原文?| 進(jìn)入作者博客
總結(jié)
以上是生活随笔為你收集整理的变分自编码器VAE:这样做为什么能成?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复旦大学肖仰华教授:知识图谱与认知智能
- 下一篇: 直播预告 | 基于多智能体交流游戏的零资