简介
文献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