简介
文献Auto-encoding variational bayes的理解。截至本文,。相关开源:https://github.com/L1aoXingyu/pytorch-beginner/blob/master/08-AutoEncoder/README.md
关键字
变分自编码,VAE,生成模型,深度学习,机器学习
正文
1. 理解VAE的思路
1)VAE有两个损失项(KL,重构损失),为什么是这两个损失?
2)这两个损失项怎么表达和近似?
3)为什么使用AE的结构来实现?
4)怎么训练,即怎么反向传播损失?
2. 学习目标和变分下界
假设为观测数据,
为不可观测的隐变量,VAE要学习的目标是
在
下的后验概率:
。
实际真实的难以直接学习,VAE使用
来近似
,此时目标为:
由于
这里的为常数,其中:
上面的一般称为变分下界ELOB,问题转换为:
现在问题可以分为两部分来看待:
a. 最大化
b. 最小化
3. 借用AE结构求解
首先解决最大化,其中
可以视作由观测变量
得到隐变量
的过程:
,其中
是函数
的参数;
可以视作由隐变量
得到生成样本
的过程:
,其中
是函数
的参数,整个过程恰好就是
的过程,可以看成是由观测变量
生成一个
的分布,然后这个
的分布生成大量的样本
再求均值的过程。
这个过程可以通过AE的结构来实现,AE即自编码器,包含编码器(encoder)和解码器(decoder),encoder把压缩成
,decoder把
解压成
,不同的是AE编码的是一个固定的
,而VAE是一个
的分布。回到上面问题,把
当做encoder,把
当作decoder,就可以使用AE结构计算出
,其中
分别为encoder、decoder的网络参数。那怎么最大化,就是
这个过程中前后的
越接近越好,参考资料[1]中使用了AE常用的重构损失。
其次是最小化,这边给了个先验
为标准正态分布,参考资料[2]解释为正态分布具备通过函数可以变换为其他分布,所以使用正态分布就够了。那么
需要拟合这个先验,即标准正态分布。
是由
生成
分布的过程,由于是正态分布,故只要使用参数
来表示就行了,为了简化运算,参考资料[1]假设
是各向同性的,各个维度的值为
。
此时最小化的目标如下,其中j是维度:
4. 重参数技巧
在的过程中,需要在
的分布中采样多个
,再由
生成的
求平均得到,由于采样这个操作不可导,所以,这里从标准正态分布中采样一个
,再由这个
来计算
,这样由这个可导的计算过程代替采样就可以求导了。具体过程可以看下图,图片来源于参考资料[2]。

5. 实验效果
最后放点实验效果,图片来自参考资料[1]。


参考资料
[1] Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013).
[2] Doersch, Carl. "Tutorial on variational autoencoders." arXiv preprint arXiv:1606.05908 (2016).
[3] https://spaces.ac.cn/archives/5253