變分自編碼器VAE:這樣做為什麼能成?

2021-02-20 PaperWeekly
採樣之惑

在這部分內容中,我們試圖對 VAE 的原理做細緻的追問,以求能回答 VAE 為什麼這樣做,最關鍵的問題是,為什麼這樣做就可行。 

採樣一個點就夠

對於 (3) 式,我們後面是這樣處理的:

1. 留意到正好是 p(z|x) 和 q(z) 的散度 KL(p(z|x)‖q(z)),而它們倆都被我們都假設為正態分布,所以這一項可以算出來;

2. 𝔼z∼p(z|x)[−lnq(x|z)] 這一項我們認為只採樣一個就夠代表性了,所以這一項變成了 −lnq(x|z),z∼p(z|x)。

經過這樣的處理,整個 loss 就可以明確寫出來了:


等等,可能有讀者看不過眼了:KL(p(z|x)‖q(z)) 事先算出來,相當於是採樣了無窮多個點來估算這一項;而 𝔼z∼p(z|x)[−lnq(x|z)] 卻又只採樣一個點,大家都是 loss 的一部分,這樣不公平待遇真的好麼?

事實上,也可以只採樣一個點來算,也就是說,可以通過全體都只採樣一個點,將 (3) 式變為:

這個 loss 雖然跟標準的 VAE 有所不同,但事實上也能收斂到相似的結果。

為什麼一個點就夠?

那麼,為什麼採樣一個點就夠了呢?什麼情況下才是採樣一個點就夠?

首先,我舉一個「採樣一個點不夠」的例子,讓我們回頭看 (2) 式,它其實可以改寫成:

如果採樣一個點就夠了,不,這裡還是謹慎一點,採樣 k 個點吧,那麼我們可以寫出:

然後就可以梯度下降訓練了。

然而,這樣的策略是不成功的。實際中我們能採樣的數目 k,一般要比每個 batch 的大小要小,這時候最大化就會陷入一個「資源爭奪戰」的境地。

每次迭代時,一個 batch 中的各個 xi 都在爭奪 z1,z2,…,zk,誰爭奪成功了,q(x|z) 就大。說白了,哪個 xi 能找到專屬於它的 zj,這意味著 zj 只能生成 xi,不能生成其它的,那麼 z(xi|zj) 就大),但是每個樣本都是平等的,採樣又是隨機的,我們無法預估每次「資源爭奪戰」的戰況。這完全就是一片混戰

如果數據集僅僅是 mnist,那還好一點,因為 mnist 的樣本具有比較明顯的聚類傾向,所以採樣數母 k 超過 10,那麼就夠各個 xi 分了。

但如果像人臉、imagenet 這些沒有明顯聚類傾向、類內方差比較大的數據集,各個 z 完全是不夠分的,一會 xi 搶到了 zj,一會 xi+1 搶到了 zj,訓練就直接失敗了。

因此,正是這種「僧多粥少」的情況導致上述模型 (7) 訓練不成功。可是,為什麼 VAE 那裡採樣一個點就成功了呢?

一個點確實夠了

這就得再分析一下我們對 q(x|z) 的想法了,我們稱 q(x|z) 為生成模型部分,一般情況下我們假設它為伯努利分布或高斯分布,考慮到伯努利分布應用場景有限,這裡只假設它是正態分布,那麼:

其中 μ(z) 是用來計算均值的網絡,σ^2(z)是用來計算方差的網絡,很多時候我們會固定方差,那就只剩一個計算均值的網絡了。

注意,q(x|z) 只是一個概率分布,我們從q(z)中採樣出 z 後,代入 q(x|z) 後得到 q(x|z) 的具體形式,理論上我們還要從 q(x|z) 中再採樣一次才得到 x。但是,我們並沒有這樣做,我們直接把均值網絡 μ(z) 的結果就當成 x

而能這樣做,表明 q(x|z) 是一個方差很小的正態分布(如果是固定方差的話,則訓練前需要調低方差,如果不是正態分布而是伯努利分布的話,則不需要考慮這個問題,它只有一組參數),每次採樣的結果幾乎都是相同的(都是均值 μ(z)),此時 x 和 z 之間「幾乎」具有一一對應關係,接近確定的函數 x=μ(z)。

▲ 標準正態分布(藍)和小方差正態分布(橙)

而對於後驗分布 p(z|x) 中,我們假設了它也是一個正態分布。既然前面說 z 與 x 幾乎是一一對應的,那麼這個性質同樣也適用驗分布 p(z|x),這就表明後驗分布也會是一個方差很小的正態分布(讀者也可以自行從 mnist 的 encoder 結果來驗證這一點),這也就意味著每次從 p(z|x) 中採樣的結果幾乎都是相同的。

既然如此,採樣一次跟採樣多次也就沒有什麼差別了,因為每次採樣的結果都基本一樣。所以我們就解釋了為什麼可以從 (3) 式出發,只採樣一個點計算而變成 (4) 式或 (5) 式了。

後驗之妙

前面我們初步解釋了為什麼直接在先驗分布 q(z) 中採樣訓練不好,而在後驗分布中 p(z|x) 中採樣的話一個點就夠了。

事實上,利用 KL 散度在隱變量模型中引入後驗分布是一個非常神奇的招數。在這部分內容中,我們再整理一下相關內容,並且給出一個運用這個思想的新例子。 

後驗的先驗 

可能讀者會有點邏輯混亂:你說 q(x|z) 和 p(z|x) 最終都是方差很小的正態分布,可那是最終的訓練結果而已,在建模的時候,理論上我們不能事先知道  q(x|z) 和 p(z|x) 的方差有多大,那怎麼就先去採樣一個點了? 

我覺得這也是我們對問題的先驗認識。當我們決定用某個數據集 X 做 VAE 時,這個數據集本身就帶了很強的約束。

比如 mnist 數據集具有 784 個像素,事實上它的獨立維度遠少於 784,最明顯的,有些邊緣像素一直都是 0,mnist 相對於所有 28*28 的圖像來說,是一個非常小的子集.

再比如筆者前幾天寫的作詩機器人,「唐詩」這個語料集相對於一般的語句來說是一個非常小的子集;甚至我們拿上千個分類的 imagenet 數據集來看,它也是無窮盡的圖像中的一個小子集而已。 

這樣一來,我們就想著這個數據集 X 是可以投影到一個低維空間(隱變量空間)中,然後讓低維空間中的隱變量跟原來的 X 集一一對應

讀者或許看出來了:這不就是普通的自編碼器嗎?

是的,其實意思就是說,在普通的自編碼器情況下,我們可以做到隱變量跟原數據集的一一對應(完全一一對應意味著 p(z|x) 和 q(x|z) 的方差為 0),那麼再引入高斯形式的先驗分布 q(z) 後,粗略地看,這只是對隱變量空間做了平移和縮放,所以方差也可以不大。 

所以,我們應該是事先猜測出 p(z|x) 和 q(x|z) 的方差很小,並且讓模型實現這個估計。說白了,「採樣一個」這個操作,是我們對數據和模型的先驗認識,是對後驗分布的先驗,並且我們通過這個先驗認識來希望模型能靠近這個先驗認識去。 

整個思路應該是:

有了原始語料集

觀察原始語料集,推測可以一一對應某個隱變量空間

通過採樣一個的方式,讓模型去學會這個對應

這部分內容說得有點凌亂,其實也有種多此一舉的感覺,希望讀者不要被我搞糊塗了。如果覺得混亂的話,忽視這部分吧。

耿直的IWAE

接下來的例子稱為「重要性加權自編碼器(Importance Weighted Autoencoders)」,簡寫為「IWAE」,它更加乾脆、直接地體現出後驗分布的妙用,它在某種程度上它還可以看成是 VAE 的升級版。 

IWAE 的出發點是 (2) 式,它引入了後驗分布對 (2) 式進行了改寫:

這樣一來,問題由從 q(z) 採樣變成了從 p(z|x) 中採樣。我們前面已經論述了 p(z|x) 方差較小,因此採樣幾個點就夠了:

代入 (2) 式得到:

這就是 IWAE。為了對齊 (4),(5) 式,可以將它等價地寫成:

當 k=1 時,上式正好跟 (5) 式一樣,所以從這個角度來看,IWAE 是 VAE 的升級版。 

從構造過程來看,在 (8) 式中將 p(z|x) 替換為 z 的任意分布都是可以的,選擇 p(z|x) 只是因為它有聚焦性,便於採樣。而當 k 足夠大時,事實上 p(z|x) 的具體形式已經不重要了。

這也就表明,在 IWAE 中削弱了 encoder 模型 p(z|x) 的作用,換來了生成模型 q(x|z) 的提升

因為在 VAE 中,我們假設 p(z|x) 是正態分布,這只是一種容易算的近似,這個近似的合理性,同時也會影響生成模型 q(x|z) 的質量。可以證明,Lk能比 更接近下界 −𝔼x∼p(x)[lnp(x)],所以生成模型的質量會更優。 

直覺來講,就是在 IWAE 中,p(z|x) 的近似程度已經不是那麼重要了,所以能得到更好的生成模型。

不過代價是生成模型的質量就降低了,這也是因為 p(z|x) 的重要性降低了,模型就不會太集中精力訓練 p(z|x) 了。所以如果我們是希望獲得好的 encoder 的話,IWAE 是不可取的。 

還有一個工作 Tighter Variational Bounds are Not Necessarily Better,據說同時了提高了 encoder 和 decoder 的質量,不過我還沒看懂。

重參之神

如果說後驗分布的引入成功勾畫了 VAE 的整個藍圖,那麼重參數技巧就是那「畫龍點睛」的「神來之筆」。

前面我們說,VAE 引入後驗分布使得採樣從寬鬆的標準正態分布 q(z) 轉移到了緊湊的正態分布 p(z|x)。然而,儘管它們都是正態分布,但是含義卻大不一樣。我們先寫出:

也就是說,p(z|x) 的均值和方差都是要訓練的模型。

讓我們想像一下,當模型跑到這一步,然後算出了 μ(x) 和 σ(x),接著呢,就可以構建正態分布然後採樣了。

可採樣出來的是什麼東西?是一個向量,並且這個向量我們看不出它跟 μ(x) 和 σ(x) 的關係,所以相當於一個常向量,這個向量一求導就沒了,從而在梯度下降中,我們無法得到任何反饋來更新 μ(x) 和 σ(x)。

這時候重參數技巧就閃亮登場了,它直截了當地告訴我們:

▲ 重參數技巧

沒有比這更簡潔了,看起來只是一個微小的變換,但它明確地告訴了我們 z 跟 μ(x) 和 σ(x) 的關係。於是 z 求導就不再是 0,μ(x), σ(x) 終於可以獲得屬於它們的反饋了。至此,模型一切就緒,接下來就是寫代碼的時間了。

可見,「重參數」簡直堪稱絕殺。

本文之水

本文大概是希望把 VAE 後續的一些小細節說清楚,特別是 VAE 如何通過巧妙地引入後驗分布來解決採樣難題(從而解決了訓練難題),並且順道介紹了一下 IWAE。

要求直觀理解就難免會失去一點嚴謹性,這是二者不可兼得的事情。所以,對於文章中的毛病,望高手讀者多多海涵,也歡迎批評建議。

點擊以下標題查看相關內容: 

#作 者 招 募#


讓你的文字被很多很多人看到,喜歡我們不如加入我們

          

 我是彩蛋

 解鎖新功能:熱門職位推薦!

PaperWeekly小程序升級啦

今日arXiv√猜你喜歡√熱門職位

找全職找實習都不是問題

 

 解鎖方式 

1. 識別下方二維碼打開小程序

2. 用PaperWeekly社區帳號進行登陸

3. 登陸後即可解鎖所有功能

 職位發布 

請添加小助手微信(pwbot02)進行諮詢

 

長按識別二維碼,使用小程序

*點擊閱讀原文即可註冊

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

▽ 點擊 | 閱讀原文 | 進入作者博客

相關焦點

  • 變分自編碼器VAE面臨的挑戰與發展方向
    變分自編碼器(VAE)與生成對抗網絡(GAN)一樣,是無監督學習最具前景的方法之一。本文中,牛津大學統計系在讀博士 Adam Kosiorek 從原理上向我們介紹了 VAE 目前面臨的挑戰。同時,文中也提出了對於該方法的幾種改進方向。
  • 【乾貨】一文讀懂什麼是變分自編碼器
    我們知道,變分自編碼器是一種生成模型,在文本生成、圖像風格遷移等諸多任務中有顯著的效果,那麼什麼是變分自編碼器?它存在什麼問題?它有什麼改進算法?本文較為全面地講解了變分自編碼器的相關內容,分別介紹:標準變分自編碼器的結構、存在的問題以及相關的解決思路,並預測了變分自編碼器的改進方向,相信能給您的研究帶來一些啟發。
  • 再談變分自編碼器VAE:從貝葉斯觀點出發
    但我一直搞不明白的是,為什麼從原作 Auto-Encoding Variational Bayes 開始,VAE 的教程就聚焦於後驗分布 p(z|x) 的描述?再回顧一下整個過程,我們幾乎都沒做什麼「讓人難以想到」的形式變換,但 VAE 就出來了。所以,沒有必要去對後驗分布進行分析,直面聯合分布,我們能更快捷地到達終點。
  • 使用PyTorch從理論到實踐理解變分自編碼器VAE
    在訓練過程中,我們通過優化參數θ來使得根據P(z)抽取出的z具有更高的概率,從而通過f(z;θ)函數得到的數據能更加接近真實樣本X中的數據。總之為了實現這一目的,我們需要去找到這樣的參數θ:在上式中,為了使得X與z的關係更加直觀,我們使用了總體概率密度進行計算,即採用P(X|z;θ)分布來替換f(z;θ)分布。
  • 變分自編碼器如何淘汰經典的推薦系統
    隨著推薦系統的日益普及,出現了這樣的問題:哪些新的模型和算法可以將推薦提升到一個新的水平?與矩陣分解等更經典的方法相比,它們的性能如何?為了回答這些問題,我決定比較九種方法,並專注於兩個指標:NDCG和個性化指數,使用MovieLens數據集進行實驗。
  • 哈佛大學提出變分注意力:用VAE重建注意力機制
    來自哈佛大學的研究人員提出了將注意力建模成隱變量,應用變分自編碼器(Variational Auto-Encoder,VAE)和梯度策略來訓練模型,在不使用 kl annealing 等訓練技巧的情況下進行訓練,目前在 IWSLT German-English 上取得了非常不錯的成果。
  • 晶瑩剔透的白糖,為什麼能拉成棉花?
    白糖為什麼能拉成棉花糖呢?為什麼一洗就沒了呢? 白糖是顆粒狀的晶體,其分子排列是非常整齊的,每個分子都有固定的位置,就像停車場裡停放整齊的汽車一樣。這樣光線很容易透過分子之間縫隙,因而白糖看起來晶瑩剔透。然而晶體按規則整齊排列生長是需要足夠的時間慢慢生長的。如果時間不夠,白糖分子就凝固,那麼分子就會不規則排列,也就不容易透光了。
  • 磁鐵為什麼能吸住不鏽鋼材質?答案是這樣的
    我們在日常生活中經常會聽到,「練鐵成鋼」「恨鐵不成鋼」等話語。那鐵與鋼到底有什麼區別呢?是這樣的,鐵與鋼的區別在含碳量,。含碳量在2%以下的鐵碳合金是鋼,含碳量在2%以上的則稱之為鐵。對於不鏽鋼來說,不管磁鐵吸得上與否,只要符合質量標準,都是不鏽鋼。    首先我們來說,不鏽鋼為什麼不生鏽呢?它的抗腐蝕的主要元素是鉻。鉻元素含量在11%以上的鋼就不生鏽。
  • 表面焊成這樣的焊工,出去能拿多少錢一天
    達不到就找不到工作,不具備這個水平,活該在家呆著,是這樣的嗎?手工電弧焊不鏽鋼搖把焊漂亮的焊縫,確實能為焊工帶來更多的機會和榮譽。表面成型沒有這麼好,是不是意味著沒有工作可做呢,答案是否定的。厚壁管多層多道焊焊工結構同樣呈金字塔結構,在金字塔頂端的焊工畢竟是少數,能焊漂亮的焊縫也是少數,95%焊工在金字塔下部,努力在向頂端前進,窮其一生都不一定能到達頂部,焊縫表面始終沒有那麼漂亮,但拍片合格率很高,一直沒影響賺錢。焊成這樣中不中?
  • 為什麼要這樣做?
    大家最近幾天應該一直都處於這樣的模式中,並且也能看到app界面上的架構遷移提示公告,大家只要正常將灰色點綠即可,其他的不需要擔心,因為大家都一樣的。 為什麼官方會遷移架構,其實這個公告裡也說明的很好了,就是更好的支持伺服器擴展性;我在這裡簡單的說明下,app作為常見的網際網路產品,大家應該都比較熟悉,但是可能很多人不知道,作為app類的產品,不同的架構可以負擔的用戶數量是很不同的,比如一個簡單的幾萬,十幾萬人使用的app無論核心架構還是用於支撐伺服器的數量都不難
  • 母螳螂在交配時,會殘忍的吃掉雄螳螂,它為什麼會這樣做?
    例如螳螂,雌螳螂在交配後,會吃掉愛上自己的雄螳螂,那麼它為什麼會這樣做?螳螂交配大多數昆蟲的生命一般都很短暫,不會超過一年,有些甚至幾個月的時間就完成了從出生到死亡的整個過程。螳螂就是如此,據稱它們的生命只有半年到8個月的壽命。
  • 能燃燒的粉絲是塑料做的?真相是這樣的
    近日,在網上流傳了一段視頻,是說一位女性消費者「手撕龍口粉絲」,說這個粉絲居然可以用打火機點著,而且越燒越旺,更聲稱能燃燒的龍口粉絲是「讓人不敢吃的」、「塑料做的」等。  實驗器材:龍口粉絲、粉幹、掛麵、番薯粉、塑料、酒精燈、微波爐、電熱爐、水等  -實驗①燃燒法  粉絲等燃燒無刺鼻性氣味  塑料產生油滴有刺鼻氣味  網上流傳的視頻中,該名女性消費者用打火機點燃了某品牌龍口粉絲,由此稱該龍口粉絲是「塑料做的
  • 這樣做既能收納又擋油煙
    對小戶型來說,開放式廚房絕對能讓整個空間變得更加通透,視覺上變大了許多。隨著年輕人的觀念改變,原本密封式的廚房正在逐漸改變,轉化為開放式廚房。要問為什麼開放式廚房更受歡迎?年輕人一定會這樣告訴你,密封式的廚房又熱又煎熬,做飯的時候,由於廚房油煙大,基本上是關門做飯,或是密不透風,夏天的時候簡直是一種煎熬。
  • 在危險的工作一年能掙1000多萬,為什麼很少有人敢做卻?
    在世界最危險的工作一年能掙1000多萬,為什麼很少有人敢做卻?當今社會競爭壓力巨大,每個人都忙於生活貧困和工作,有些人離開家鄉到北上廣努力工作,一旦有人在寒冷中呆了十年,他們就只有一個美好的未來,現在社會上有一個職業叫職業挖屍工,他們的工作是以挖猛獁象象牙為生。
  • 為什麼要做私域流量?私域流量池能幫我們解決什麼問題?
    提到「私域流量池」,每個人的理解都不太了解一樣,有的人把它理解成一種新的流量方式,有的人把它理解成一個企業用戶池。我們給「私域流量池」做了這樣一個企業比較寬泛的界定:私域流量的本質問題不是流量,而是根據用戶的精細化運營。私域流量池裡的用戶是自己的,可以通過反覆進行利用,可以提供免費觸達。
  • 為了能讓孩子「長壽」,女人需要這樣做,因紐特人的悲傷故事
    為了能讓孩子「長壽」,女人需要這樣做,因紐特人的悲傷故事在這個發張迅速的年代,很多人都喜歡外出旅遊,畢竟旅遊也是一种放松自己,增加閱歷的方式。正是這樣一些獨特的風土人情,也吸引了很多遊客前往。今天就為大家介紹一個獨特的民族,在這個民族中,他們為了讓孩子能「長壽」,女人只能選擇這樣做,到底他們做了什麼事呢?讓我們一起來了解一下因紐特人的悲傷故事。
  • 愛滋病患者也能做老師?七成網友反對
    近日公布的《廣東省教師資格申請人員體格檢查標準(2013年修訂)》的通知,將「性病、愛滋病,不合格」一項刪除,意味著在廣東愛滋病患者也能申請當老師,今年9月1日起將開始實行。對此,深圳七成網友投票表示反對。  學校不歧視 家長有顧慮  深圳市民治中學的田國寶老師十分贊成這樣的新標準。
  • 可愛的小貓為什麼會這樣?
    貓為什麼會這樣? 貓是不能用理性理解的動物。用人類的眼光來看,只能看到無法理解的鬥志。用人類的思考來判斷貓咪,認為"貓咪為什麼會這樣"是完全不理解貓咪的意思。看著下面這些樣子,自己也會知道原來自己真的不理解貓咪。
  • 為什麼玩嘻哈的人都要穿成這樣?|意外
    通常情況下,我們可以直接從外表認出玩嘻哈的人來,他們可能有著以下特徵:可能很多人會有這樣的疑惑:他們為什麼要戴這麼多黃金的東西?他們幹嘛把頭髮弄成這樣?他們這樣穿,真的覺得自己好看嗎?窮的話,就是能省就省。爸爸媽媽的大衣服拿給兒子女兒穿。要買衣服的話,也是買大好幾個號,可以穿上好多年,哥哥穿完了,還可以拿給弟弟穿。而且他們很愛打籃球、棒球、橄欖球......總之很愛運動。閒來無事就打打街頭籃球啥的,大號的衣服也方便手腳活動。