变分自编码器
CS231n推导
推导方式聚焦于后验分布的描述。最近在研读苏剑林的文章Variational Inference: A Unified Framework of Generative Models and Some Revelations,文章对VAE的描述很简单,直接用一个联合分布做了一个近似,没有上图那么多转换,因此好好的研究了一番。
说在前头
数值计算
已知概率密度函数,那的期望可以定义成:
如果要对它进行数值积分,做法就是选取若干个有代表性的点:
采样计算
从中采样若干个点,则:
为什么采样计算没有乘以概率?因为在中是从中依概率采样出来的,概率大的出现的次数也多,所以可以说采样的结果已经包含了 在里边,就不用再乘以了。这就是蒙特卡洛模拟的基础。
VAE采样流程
VAE采样是为每个样本构造专属的正态分布,然后采样来重构,为使模型具有生成能力,VAE要求每个都向正态分布看齐。
参考变分自编码器(一):原来是这么一回事
直面联合分布
有一批数据样本,一般我们会借助隐变量 z描述x的分布p(x):
这样,式子就既描述了也描述了生成模型。由此可以得出,其实不需要近似,直接对近似是最干脆的。即直接用一个新的联合分布来逼近:
由此得到最终Loss为:
重参数技巧
关于
此处涉及到重参数化技巧
基于变分推断的GAN
GAN的主要思想也是
通过训练一个生成模型,将映射为数据集分布,VAE中将选择为狄拉克函数(rua!这是什么东西???我只理解成一种描述单点分布的函数,即认为与关系一一对应,在GAN中不再是隐变量,无需再考虑后验分布)
根据直面联合分布,在GAN中仅仅引入了一个二元隐变量来构成联合分布
mode collapse新解
可以看到基于变分推断得到的GAN 生成器loss与标准的GAN相差一个,这个式子可以给我们一些启发。假设模型参数改变量为,展开到二阶得:
因此GAN在训练时会有各种trick使不会过大,如:梯度裁剪、用adam优化器、BN为了稳定梯度,按照上述的理解实际上就都可以解释得通了(实际上都保证了不至于过大)。还有GAN在实际训练时的迭代次数也不能过多,过多也同样会使得过大。
加入正则项
实际上直接为GAN的生成器loss加入正则项就行:
实验结果表明正则项生效。
小结
用变分推断去理解GAN使得GAN训练中的很多trick都得到了理论的解释,作者将VAE和GAN统一到了一个框架,那是不是许多用于提升VAE训练的trick可以运用到GAN上?
原文还将EM,AAE,ALI也纳入了变分的框架下形成了一个大一统,待我以后再细看。数学真是神奇啊。。。
参考
Variational Inference: A Unified Framework of Generative Models and Some Revelations
用变分推断统一理解生成模型(VAE、GAN、AAE、ALI)