極簡筆記 VAE(變分自編碼器)


極簡筆記 VAE(變分自編碼器)

論文原文:Auto-Encoding Variational Bayes

這是一篇極其拗口的文章,但是文章從變分推斷一路延伸到自編碼器的構造,過程一氣呵成,和當下DL領域的灌水之風形成鮮明對比,是難得的佳作。為了能夠從理論到實現融會貫通地理解,本篇筆記會更加偏向於思路解讀而非原文復述。

VAE是一個生成模型,對於生成模型,我們希望求得的都是原始數據分布 p ( x ) 。但是我們有的只是離散的對真實分布的采樣 { x 1 , x 2 , x 3 , . . . , x n } ,這就是我們的數據集。這時候我們常常會先假設分布的類型(e.g. 高斯分布,均勻分布),然后用最大似然(ML)來做,計算參數 θ = arg max θ i log p ( x i ) ,從而求得 p θ ( x ) 。但是 p ( x ) 可能是一個很復雜的難以表達的分布,難以選擇合適的假設分布來計算最大似然。

於是假設除了可見變量 x ,還存在着潛變量 z ,且 z 滿足某個簡單的分布 p ( z ) 。那么原始數據分布可以按照后驗概率公式分解成 p ( x ) = p ( x | z ) p ( z ) d z ,但是在離散數據情況下邊緣化 z 是非常費時的,於是我們想到了變分推斷。

log p θ ( x i ) 有下界 L ( θ , ϕ ; x i ) , 這個下界可以進一步拆分:

L ( θ , ϕ ; x i ) = D K L ( q ϕ ( z | x i ) | | p θ ( z ) ) + E q ϕ ( z | x i ) [ log p θ ( x i | z ) ]

這里非常重要,為了提升下界,等價於減小第一項的KL散度,增加第二項的期望。那么第一項可以看做是對 q ϕ ( z | x i ) 的正則項,使其更加接近於先驗分布 p θ ( z ) ;第二項可以看做是負重構誤差項,當 z 滿足 q 分布時, log p θ ( x i | z ) 越來越接近 log p θ ( x i ) (輸出越來越接近輸入)。因為別忘了 L ( θ , ϕ ; x i ) 就是 log p θ ( x i ) 的下界啊,前面KL散度趨近於0,下界就只有后一項了,又要接近於原來的 log p θ ( x i ) ,所以可以認為要求 log p θ ( x i | z ) 越來越接近 log p θ ( x i )

提到重構誤差有沒有想起啥?就是auto-encoder!如果對原始的自編碼器中間的潛變量 z 加上上文的正則化約束,就建立了理論到模型的橋梁!既然這么相似,那么我們確認一個目標,就是要用AE來完成下界 L ( θ , ϕ ; x i ) 的提升。

其實到目前為止理論和模型的橋梁並沒有完全打通,因為AE作為神經網絡靠隨機梯度下降可以做到最優化某個函數。且AE對於一個確定的輸入 x i ,只會有一個確定的 z 的分布(即分布參數是確定的)產生,而上面這個下界 L ( θ , ϕ ; x i ) 里第二項還有對 z 采樣的部分。這里文章提出了一個神奇的trick——重參數化(reparameterization)。

在重參數化之前,回顧一下初衷,即得到 p ( x ) 。但 p ( x ) 分布可能太復雜,希望有一個簡單的潛變量分布 p ( z ) ,通過迂回的方式學到 p ( x ) 。那么我們就假設這個簡單的潛變量分布的先驗是個標准正態分布 z N ( 0 , 1 ) 。同時中間的正則化項不是要讓 q ϕ ( z | x i ) 逼近先驗 p θ ( z ) 嘛,如果不是同一個分布簇的話怎么逼近(文章提到有相關證明,KL散度逼近0必定是同分布簇),所以假設分布 q ϕ ( z | x i ) 也是高斯分布,但是一開始他的參數 ϕ (包含期望和方差)並不是0和1,而是 μ i σ i 2 。那么下界第一項的KL散度就可以簡化成

K L ( N ( μ , σ 2 ) | | N ( 0 , 1 ) )

= 1 2 π σ 2 e ( x μ ) 2 / 2 σ 2 ( log e ( x μ ) 2 / 2 σ 2 / 2 π σ 2 e x 2 / 2 σ 2 / 2 π ) d x

= 1 2 π σ 2 e ( x μ ) 2 / 2 σ 2 log ( 1 σ 2 e x p ( 1 2 [ x 2 ( x μ ) 2 / σ 2 ] ) ) d x

= 1 2 1 2 π σ 2 e ( x μ ) 2 / 2 σ 2 [ log σ 2 + x 2 ( x μ ) 2 / σ 2 ] d x

= 1 2 ( log σ 2 + μ 2 + σ 2 1 )

從這個簡化結果可以看出,AE的encoder可以回歸 μ σ 2 ,然后通過計算上式進行約束即可。

在訓練過程中,AE的decoder需要對 z p θ ( z | x i ) = N ( μ i , σ i 2 ) 進行采樣,這里文章對 z 進行重參數化操作使得 z = g ϕ ( ϵ , x ) ,其中 ϵ N ( 0 , 1 ) , 於是對 z 采樣等價於對 μ i + ϵ σ i N ( μ i , σ i 2 ) ,兩者的分布是完全相同的。 μ i , σ i 對每個 x i 是確定的,引入的 ϵ 在AE的支路上,在BP時不會對encoder部分產生影響。
圖片來源見[2]

采樣的問題解決了,相應的decoder部分化為

E q ϕ ( z | x i ) [ log p θ ( x i | z ) ] = 1 L l = 1 L ( log p θ ( x i | z i , l ) )

where  z i , l = g ϕ ( ϵ i , l , x i ) and  ϵ l p ( ϵ )

最終VAE的loss,其中 j 表示向量的各個分量索引, 表示逐元素乘法:
L ( θ , ϕ ; x i ) 1 2 j = 1 J ( 1 + log ( ( σ i j ) 2 ) ( μ i j ) 2 ( σ i j ) 2 ) + 1 L l = 1 L log p θ ( x i | z i , l )

where  z i , l = μ i + σ i ϵ l , ϵ l N ( 0 , I )

從變分推斷理論到VAE網絡模型的路徑完全打通,完結撒花!

參考閱讀:
[1]https://kexue.fm/archives/5253
[2]https://zhuanlan.zhihu.com/p/25401928


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com