Press enter to see results or esc to cancel.

VAE

本来准备明天再弄VAE的,不过今天下午好像提前写完了VI,所以就写一些,不知道今天写不写得完。

终于来到VAE了,昨天写了GAN,要是今天写完了VAE明天我就把Flow也写了,再写个总结。(立Flag)

Introduction

VAE的形状可能大家都有看过

那么这个整个模型的概率也就是

$$p(x,z;\theta) = p(x|z; \theta)p(z;\theta)$$

对于某一个给定的样本$x$,其对数的似然函数可以写成是

$$\log p(x) = ELBO + KL$$

这个我们在VI – Variational Inference说的非常的清楚明白了。

通过EM算法对于上式进行优化。

E-STEP : 当$q= p_{\theta}(z|x)$是,$KL= 0$, Exception 就是 ELBO

M-STEP:$ \theta  = \arg \max_{\theta} EBLO = \arg \max E_{z\sim q(z,\phi)}[\log \frac{p(x,z,\theta)}{q(z,\phi)}]$

但是在这个时候$p_{\theta}(z|x)$非常的复杂,也就是Intractable的。所以在E-Step里面无法计算KL散度达成目标,那么退而求其次,找一个尽量接近的神经网络进行代替,既然已经拿神经网络替代$q$了,干脆一不做二不休,把$p$也给替换了。这时候,我们将$q$称之为推断网络,而将$p$称之为是生成网络。

推断网络从$x$之中获得$z$的特性的推断,而生成网络从$z$之中生成$x$,这就是一个Encoder – Decoder模型,其中的推断网络就是Encoder,而生成网络就是Decoder。

可以看到图中的左边与$z$相连接的是两个神经元,这里为什么是两个不是三个呢?肯定是有原因的,两个神经元代表着有两个输出,也就是两个值,这两个值对应着前面的$x_1$以及$x_2$,而这个输出的结果是位置参数$\mu$以及形状参数$\sigma$,如果$z$是一个服从标准正态分布$N(0,I)$的多元分布,经过前面的神经网络送来的参数$\mu$和$\sigma$,就可以得到一个不那么标准的正态分布$N(\mu,\sigma^2)$.那么也就是说,为前面的$x_1$构造了一个专属的正态分布$N(\mu_1,\sigma_1^2)$,为$x_2$构造了一个专属的正态分布$N(\mu_2,\sigma_2^2)$.而由于这些正态分布是专属于$x_i$的,那么从正态分布之中的采样自然也是与$x_i$息息相关的,也就是说,将这样的一个采样的结果丢进生成器之中,生成的结果是可以找到他的源头的,而不是一团乱麻。有点抽象,打一个不恰当的比喻,好比在城市里面养狗,之前不规范的时候很有可能狗咬了人不知道主人是谁,不好算账,现在每一条狗都有主人的标签,如果咬人了,那就冤有头债有主,直接找主人就行了。

但是如果根据上面的过程的话,我们所训练的目标是$\hat{x}$与$x$的差距尽量的小,而从$x$到$\hat{x}$的过程会受到$\sigma$的影响,因为$\sigma$代表了一种不确定性,神经网络这个鸡贼的东西肯定会倾向于使得$\sigma$变成0,以让他的发挥余地更大,更容易过拟合。但是如果方差变成0的话,那也就不存在随机性了。不存在随机性那还搞毛,我怎么生成plmm的照片?那么这时候我们肯定要采取行动,什么行动呢?就是保证其方差不至于变成0.那就变成1吧,根据下面的简单的数学推导

$$p(z) = \sum_{X}p(Z|X)p(X) = \sum_{X}N(0,1) p(X) = N(0,1)\sum_{X}p(X) = N(0,1)$$

也就是说,如果$p(Z|X)$都接近正态分布$N(0,1)$的话,我们就可以也使得$p(Z)$变成标准正态分布,也就不至于导致方差变成0了,也就可以放心的生成plmm的照片了。那么怎么使得$p(Z|X)$都接近正态分布呢?加正则项

$$L_{\mu} = ||f_1(X_{k})||^{2}\quad L_{\sigma^2} = ||f_2(X_{k})||^{2}$$

上面的分别代表了$\mu$以及$\log \sigma^2$,如果都趋近0,那么自然接近标准正态分布了。但是正则项的比例也是一个很主观的事情,没弄好就又要开始炼丹了,所以原论文之中计算了生成的正态分布与标准正态分布的KL散度作为Loss而避免了上面的炼丹的问题

$$L_{\mu,\sigma^2} = \frac{1}{2} \sum_{i=1}^{d}(\mu_{(i)}^{2}+\sigma_{(i)}^{2} – \log \sigma_{(i)}^{2} – 1)

而模型的训练之中也有Trick,在文中称为是Reparameterization Trick ,中文的常见的翻译叫做重参数技巧。

什么意思呢?由于所获得的$z$是从正态分布之中采样出来的,采样本身是一个不可导的过程,所以利用了一个小技巧就是:从$N(\mu,\sigma^2)$之中采样一个$z$,相当于从$N(0,I)$ 之中采样一个$\epsilon$然后使得$Z = \mu + \epsilon\times \sigma$.

通过这样的一个操作,采样的操作就不用参与梯度的下降,而是采样的结果参与,那么整个模型就可以跑起来了。

整个模型真的是非常的漂亮,其中的数学理论和Trick都非常的干净优雅,也很直观(好像理解之后看什么模型都挺直观的(捂脸)),里面也其实是有一个对抗的过程,Decoder倾向于稳定,而加了正则项的Encoder倾向于波动,这两两个是在共同对抗共同进化。比GAN之中的八戒一直不变看起来要厉害一些。

好啦,虽然今晚出去吃烧烤喝酒了,不过回来还是肝掉了这篇VAE的,明天的目标就是Flow了!Flow自己还没了解过,看来也会是一场硬仗呀。

 

 

 

 

 

 

 

 

 

Comments

Leave a Comment