VAE背后的哲学思想及数学原理
来源:互联网 发布:ubuntu看存储空间 编辑:程序博客网 时间:2024/05/16 19:24
作者:李乐——CSDN AI专栏作家
引言
短短三年时间,变分编码器VAE(Variational Auto-encoder)同GAN一样,成为无监督复杂概率分布学习的最流行的方法。VAE之所以流行,是因为它建立在标准函数逼近单元,即神经网络,此外它可以利用随机梯度下降进行优化。本文将解释重点介绍VAE背后的哲学思想和直观认识及其数学原理。
VAE的最大特点是模仿自动编码机的学习预测机制,在可测函数之间进行编码、解码。同GAN类似,其最重要的idea是基于一个令人惊叹的数学事实:对于一个目标概率分布,给定任何一种概率分布,总存在一个可微的可测函数,将其映射到另一种概率分布,使得这种概率分布与目标的概率分布任意的接近。
看到这里读者可能会一头雾水。下面我们来一一阐明其中的含义。
可测函数之间的编解码?什么样的可测函数?可测函数是测度论中的概念,它是真实世界的随机事件到数学世界的随机事件的映射。当然,在形式化问题过程中我们需要对这里面的所有事件进行量化,于是我们自然地会将这个数学世界选取为欧式空间,相应的
模型推导
因此,我们希望得到这样一个生成模型,如下图所示。
其中
但是如何通过学习得到这样的解码器呢?
这就需要我们回归到目标函数中去考虑问题了。我们仅仅已知一些现成的样本
不失一般性,我们下面只针对单样本
其中
这一步变换值得深思,为什么选用一个条件概率分布呢,而不选用
因为
我们继续进行推导,
我们考查其中的第一项,利用贝叶斯公式
这样我们就推导出VAE的一个核心等式,
下面可以开始建模了。由前面的讨论(利用一个联合高斯分布作为隐含可测函数的分布),
同样,
自然地,问题就转化成了用神经网络学习四种映射关系。但是,即使做了这样的建模,对于
对对数似然的下界进行最大化。
进一步推导,我们将前面建模的概率模型带入这个下界中去。注意到在实际实现过程中,为了简化起见,
最大化这个下界等价于最小化
其中
至此,整个的学习框架就清晰了,如下图所示。
总结起来,整个训练框架就是在对样本
关注具体实现的读者可能会发现在“解码器Decoder到
重参数化这个名字听起来很神秘,其实就是基于下面的一个简单的数学事实:
如果
其中
利用重参数化这个trick,我们成功地规避了这个问题。
讨论
A. 既然任意概率分布都可以作为隐变量的分布,为什么都用高斯分布去建模呢?
这个问题的答案可能在于两个方面。一方面是,建模高斯分布给我们带来了良好的可计算性,能得到一些解析的结果。另一方面,可能是基于下面的数学事实,
这个问题的解是
即给定概率分布的均值和方差,使得信息熵最大的概率分布是高斯分布。
B. 我们虽然退而求其次地仅仅最大化对数似然的下界,但如果网络实际的合理,我们实际上是在最大化
C. 联合高斯分布之间的KL散度
根据上一篇关于GAN的“模拟上帝之手,对抗博弈——GAN背后的数学原理”一文,我们很容易得到两个联合高斯
caffe_code:https://github.com/cdoersch/vae_tutorial
参考文献
Tutorial on Variational Autoencoders. Carl Doersch. arXiv:1606.05908, 2016.
- VAE背后的哲学思想及数学原理
- VAE背后的哲学思想及数学原理
- 只知道GAN你就OUT了——VAE背后的哲学思想及数学原理
- 只知道GAN你就OUT了——VAE背后的哲学思想及数学原理
- RESTful API 背后的哲学思想
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- 论---价值投资背后的数学原理
- CSS3:transform与transition背后的数学原理
- CSS3:transform与transition背后的数学原理
- 索引背后的数据结构及算法原理
- PageRank背后的数学
- 谷歌背后的数学
- 谷歌背后的数学
- Hadoop背后的数学问题
- 谷歌背后的数学
- redis 数据类型
- C++:cin\cin.getline()\getline()用法:
- 矩阵的螺旋排列 Python实现
- Numpy-shape函数
- SQL文件导入MySQL数据库
- VAE背后的哲学思想及数学原理
- 牛客练习赛7 B
- Python入门之一:list列表
- 【转载】SciPy for .NET & IronPython
- ssm项目一直报错,陷入死循环,解决办法
- 论文阅读笔记-Siamese instance search for tracking(转)
- 基于Python的nessus API简析——监听&获取扫描结果
- spring动态加载时间表达式并生成定时任务
- 卷积神经网络Quiz4