模型学习 - VAE(变分自编码)专题
目錄
- 生成模型
- VAE模型
- 理解角度1
- 理解角度2
? ? ? ?理解出錯之處望不吝指正。
? ? ? ?今天聽師兄給我們講了VAE,覺得頗有收獲,分享一下,希望大家批評指正。
生成模型
? ? ? ?生成模型的目的是從一系列樣本x={x1,x2,...,xm}x=\{x_1,x_2,...,x_m\}x={x1?,x2?,...,xm?}中學習xxx的分布p(x)p(x)p(x),我們可以仿照EM算法,通過隱變量zzz和生成函數g()g()g()來得到x^=g(z)\hat x=g(z)x^=g(z),并盡可能的讓x^\hat {x}x^接近xxx。
? ? ? ?上述方法有一個弊端,我們首先依據全概率公式將p(x)p(x)p(x)寫成如下形式:
p(x)=∑p(x∣z)p(z)p(x)=\sum p(x|z)p(z)p(x)=∑p(x∣z)p(z)
? ? ? ?我們易獲取到p(z)p(z)p(z),但是在zzz確定的情況下,無法得知p(x∣z)p(x|z)p(x∣z),這意味著我們無法將?“利用g()g()g()函數生成的x^i\hat x_ix^i?”?與?“真實的xix_ixi?”?進行對應,如下圖所示:
? ? ? ?
? ? ? ?那么怎么解決這個問題呢,接著往下看~
VAE模型
? ? ? ?在VAE模型中,我們解決了上述問題。我們可以從兩個角度理解VAE模型,首先是角度1。
理解角度1
? ? ? ?為了解決上述問題,將學習p(x)p(x)p(x)改為學習p(z∣x)p(z|x)p(z∣x)即可!
? ? ? ?我們令p(z∣x)~N(μ,σ2)p(z|x)\sim N(\mu,\sigma^2)p(z∣x)~N(μ,σ2)(ps:為什么這個先驗分布是正態分布呢?因為若是其他分布,后面計算KL散度的時候會導致分母為0)。則VAE的編碼解碼過程如下圖所示:
? ? ? ?
? ? ? ?更具體的,我們假設p(z∣x)~N(0,1)p(z|x)\sim N(0,1)p(z∣x)~N(0,1),即:我們在編碼過程中期望學到μi=0,σi=1\mu_i=0,\sigma_i=1μi?=0,σi?=1,則VAE的訓練過程中會產生以下兩種情況(類似于對抗):
? ? ? ?1.若σi2→1\sigma_i^2\rightarrow1σi2?→1,此時加在xix_ixi?上的噪聲大,會導致已有的解碼能力效果變差,通過反向傳播會使得σi2→0\sigma_i^2\rightarrow0σi2?→0;
? ? ? ?2.若σi2→0\sigma_i^2\rightarrow0σi2?→0,此時加在xix_ixi?上的噪聲小,會導致已有的解碼能力效果變好,通過反向傳播會使得σi2→1\sigma_i^2\rightarrow1σi2?→1;
? ? ? ?
? ? ? ?VAE模型的損失函數如下:
Lvaep(z∣x)=loss(x,x^)+KL[N(μ,σ2)∣∣N(0,1)]L_{vae}^{p(z|x)}=loss(x,\hat x)+KL[N(\mu,\sigma^2)||N(0,1)]Lvaep(z∣x)?=loss(x,x^)+KL[N(μ,σ2)∣∣N(0,1)]
? ? ? ?損失函數中第一部分loss(x,x^)loss(x,\hat x)loss(x,x^)代表真實數據xxx與生成數據x^\hat xx^之間的誤差,可以使用簡單的logistics損失或者MSE損失。
? ? ? ?損失函數中第二部分是一個KL散度,用于衡量編碼過程中得到的分布是否接近我們設置的先驗分布N(0,1)N(0,1)N(0,1),下面對這部分進行詳細的剖析。
? ? ? ? ? ? ? ?KL[N(μ,σ2)∣∣N(0,1)]KL[N(\mu,\sigma^2)||N(0,1)]KL[N(μ,σ2)∣∣N(0,1)]
? ? ? ?? ?=∫12πσexp{?(x?μ)22σ2}?log?12πσexp{?(x?μ)22σ2}12πexp{?x22}dx=\int \frac{1}{\sqrt{2\pi}\sigma}exp\{\frac{-(x-\mu)^2}{2\sigma^2}\}\centerdot\log \frac{\frac{1}{\sqrt{2\pi}\sigma}exp\{\frac{-(x-\mu)^2}{2\sigma^2}\}}{\frac{1}{\sqrt{2\pi}}exp\{\frac{-x^2}{2}\}}dx=∫2π?σ1?exp{2σ2?(x?μ)2?}?log2π?1?exp{2?x2?}2π?σ1?exp{2σ2?(x?μ)2?}?dx
? ? ? ?? ?=12∫12πσexp{?(x?μ)22σ2}?[?log?σ2+x2?(x?μ)2σ2]dx=\frac{1}{2}\int \frac{1}{\sqrt{2\pi}\sigma}exp\{\frac{-(x-\mu)^2}{2\sigma^2}\}\centerdot[-\log \sigma^2+x^2-\frac{(x-\mu)^2}{\sigma^2}]dx=21?∫2π?σ1?exp{2σ2?(x?μ)2?}?[?logσ2+x2?σ2(x?μ)2?]dx
? ? ? ?? ?=12(?log?σ2+μ2+σ2?1)=\frac{1}{2}(-\log \sigma^2+\mu^2+\sigma^2-1)=21?(?logσ2+μ2+σ2?1)
? ? ? ?? ?=12μ2+12(σ2?log?σ2?1)=\frac{1}{2}\mu^2+\frac{1}{2}(\sigma^2-\log \sigma^2-1)=21?μ2+21?(σ2?logσ2?1)
理解角度2
? ? ? ?在理解角度1中,我們由于不能計算p(x∣z)p(x|z)p(x∣z),所以將學習p(x)p(x)p(x)改為了學習p(z∣x)p(z|x)p(z∣x),但是我們忽略了p(x)p(x)p(x)不僅可以使用全概率公式分解為p(x)=∑p(x∣z)p(z)p(x)=\sum p(x|z)p(z)p(x)=∑p(x∣z)p(z),還可將p(x)p(x)p(x)寫為p(x)=∫p(x,z)dzp(x)=\int p(x,z)dzp(x)=∫p(x,z)dz,在這種情況下,我們假設先驗分布為q(x,z)q(x,z)q(x,z),則我們的學習目標變為:令p(x,z)p(x,z)p(x,z)無限趨近q(x,z)q(x,z)q(x,z),如下所示:
? ? ? ? ? ? ? ?KL[p(x,z)∣∣q(x,z)]KL[p(x,z)||q(x,z)]KL[p(x,z)∣∣q(x,z)]
? ? ? ?? ?=∫∫p(x,z)log?p(x,z)q(x,z)dzdx=\int\int p(x,z)\log \frac{p(x,z)}{q(x,z)} dz dx=∫∫p(x,z)logq(x,z)p(x,z)?dzdx
? ? ? ?? ?將p(x,z)=p^(x)p(z∣x)p(x,z)=\hat p(x)p(z|x)p(x,z)=p^?(x)p(z∣x)帶入上式,其中p^(x)\hat p(x)p^?(x)代表利用已有的xxx值通過估計得到的分布,可得:
? ? ? ?? ?=∫p^(x)[∫p(z∣x)log?p^(x)p(z∣x)q(x,z)dz]dx=\int \hat p(x)[ \int p(z|x) \log \frac{\hat p(x)p(z|x)}{q(x,z)}dz] dx=∫p^?(x)[∫p(z∣x)logq(x,z)p^?(x)p(z∣x)?dz]dx
? ? ? ?? ?=Ex~p^(x)[∫p(z∣x)log?p^(x)p(z∣x)q(x,z)dz]=E_{x\sim\hat p(x)}[\int p(z|x) \log \frac {\hat p(x)p(z|x)}{q(x,z)}dz]=Ex~p^?(x)?[∫p(z∣x)logq(x,z)p^?(x)p(z∣x)?dz]
? ? ? ?? ?將q(x,z)=q(z)q(x∣z)q(x,z)=q(z)q(x|z)q(x,z)=q(z)q(x∣z)和p(z∣x)log?p(z∣x)q(z)=KL[p(z∣x)∣∣q(z)]p(z|x)\log \frac {p(z|x)}{q(z)}=KL[p(z|x)||q(z)]p(z∣x)logq(z)p(z∣x)?=KL[p(z∣x)∣∣q(z)]帶入上式,可得:
? ? ? ?? ?=Ex~p^(x){Ez~p(z∣x)[?log?q(x∣z)]+KL[p(z∣x)∣∣q(z)]}=E_{x\sim\hat p(x)}\{E_{z\sim p(z|x)}[-\log q(x|z)] + KL[p(z|x)||q(z)]\}=Ex~p^?(x)?{Ez~p(z∣x)?[?logq(x∣z)]+KL[p(z∣x)∣∣q(z)]}
? ? ? ?我們可以發現,這樣計算得到的公式中每一項可以和Lvaep(z∣x)L_{vae}^{p(z|x)}Lvaep(z∣x)?中的每一項對應:
? ? ? ?? ??log?q(x∣z)?loss(x,x^)-\log q(x|z)\longleftrightarrow loss(x,\hat x)?logq(x∣z)?loss(x,x^)
? ? ? ?? ?KL[p(z∣x)∣∣q(z)]?KL[N(μ,σ2)∣∣N(0,1)]KL[p(z|x)||q(z)]\longleftrightarrow KL[N(\mu,\sigma^2)||N(0,1)]KL[p(z∣x)∣∣q(z)]?KL[N(μ,σ2)∣∣N(0,1)]
? ? ? ?原文中說q(x∣z)q(x|z)q(x∣z)可以為兩種分布:1.伯努利分布(B);2.正態分布(N)
? ? ? ?1.當q(x∣z)~Bq(x|z)\sim Bq(x∣z)~B時,容易看出這是交叉熵損失:
?log?q(x∣z)=∑{xklog?pk(z)+(1?xk)log?[1?pk(z)]}-\log q(x|z) = \sum \{x_k\log p_k(z)+(1-x_k)\log [1-p_k(z)]\}?logq(x∣z)=∑{xk?logpk?(z)+(1?xk?)log[1?pk?(z)]}
? ? ? ?2.當q(x∣z)~Nq(x|z)\sim Nq(x∣z)~N時,容易看出這是均方誤差損失:
?log?q(x∣z)=12σ2∣∣x?μk∣∣2-\log q(x|z) = \frac {1}{2\sigma_2}||x-\mu_k||^2?logq(x∣z)=2σ2?1?∣∣x?μk?∣∣2
總結
以上是生活随笔為你收集整理的模型学习 - VAE(变分自编码)专题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ECCV 2018 StructSiam
- 下一篇: 腾讯2019暑期实习生提前批CV岗笔试题