作者:李乐——CSDN AI专栏作家

引言

短短三年时间,变分编码器VAE(Variational Auto-encoder)同GAN一样,成为无监督复杂概率分布学习的最流行的方法。VAE之所以流行,是因为它建立在标准函数逼近单元,即神经网络,此外它可以利用随机梯度下降进行优化。本文将解释重点介绍VAE背后的哲学思想和直观认识及其数学原理。

VAE的最大特点是模仿自动编码机的学习预测机制,在可测函数之间进行编码、解码。同GAN类似,其最重要的idea是基于一个令人惊叹的数学事实:对于一个目标概率分布,给定任何一种概率分布,总存在一个可微的可测函数,将其映射到另一种概率分布,使得这种概率分布与目标的概率分布任意的接近。

看到这里读者可能会一头雾水。下面我们来一一阐明其中的含义。

可测函数之间的编解码?什么样的可测函数?可测函数是测度论中的概念,它是真实世界的随机事件到数学世界的随机事件的映射。当然,在形式化问题过程中我们需要对这里面的所有事件进行量化,于是我们自然地会将这个数学世界选取为欧式空间,相应的σ-代数也就是Borel σ-代数了。回到选取可测函数的问题。VAE的一个重要的哲学思想是,遵从图模型,我们希望生成的样本是由某些隐含变量所构造出来的。举个例子,比如我们想要生成0-9的手写体,影响生成这些数字的样式可能有很多因素,比如笔画粗细、笔尖的角度、写者的书写习惯、天气好坏(天气会影响写者的心情,进而影响书写方式。根据蝴蝶效应,初始条件的微小变化会影响最终的结果)。这些因素不胜枚举,一些看似不相关的因素,都有可能影响最终的结果。一个直接的方法是显示地构造出这些隐含因素的概率分布,但是这些因素实在是太多了,无穷多个,我们显然不能手工构造。VAE巧妙地避开了这个问题,利用一个联合高斯分布作为隐含可测函数的分布(这个隐含可测函数将上面所说的所有现实世界影响写字样式的隐含因素映射到欧式空间中去了),随即将问题转化为学习一个从隐含可测函数(隐含变量)到一个所希望生成样本的映射。后面我们会看到,这个过程就是解码过程。可以想象,这个映射会极为复杂。我们自然会想到利用深度学习强大的函数拟合能力来学习这个映射。

模型推导

因此,我们希望得到这样一个生成模型,如下图所示。

其中z是隐含变量(隐含可测函数),将其输入到某种解码器,输出f(z),使得f(z)尽可能在保证样本多样性的同时与真实样本相似。

但是如何通过学习得到这样的解码器呢?

这就需要我们回归到目标函数中去考虑问题了。我们仅仅已知一些现成的样本S={x(i),i=1,...,m},比如,回到我们的例子,我们仅仅已知0-9这些手写体图片的样本,希望生成一些具有多样性类似的样本。那么自然会想到利用极大似然法来估计可学习的参数Θ,即

Θ∗=argmaxL(x(1),...,x(m);Θ)=argmax∏ip(x(i);Θ)=argmax∑ilog(p(x(i);Θ))

不失一般性,我们下面只针对单样本x进行讨论(略去其指标和可学习参数)。上面的似然函数仅仅是关于x的函数,我们需要想办法凑出隐变量z来。

logL=logp(x)=logp(x)⋅1=logp(x)∫zq(z|x)dz

其中q(z|x)是给定样本下z的某一个条件概率分布。

这一步变换值得深思,为什么选用一个条件概率分布呢,而不选用q(z)或者p(z|x)呢?

因为q(z)的选取范围太大,我们更感兴趣的是那些更有可能生成x的隐变量z;关于p(z|x),p(⋅)可以认为是真实的概率分布,我们很难得到,我们希望做的是通过q(⋅)去逼近p(⋅),因此前者可以理解为某一种近似的概率分布。

我们继续进行推导,

logL=logp(x)∫zq(z|x)dz=∫zq(z|x)logp(x,z)p(z|x)dz=∫zq(z|x)[logp(x,z)q(z|x)−logp(z|x)q(z|x)]dz=∫zq(z|x)logp(x,z)q(z|x)dz+∫zq(z|x)logq(z|x)p(z|x)dz=∫zq(z|x)logp(x,z)q(z|x)dz+DKL(q(z|x)||p(z|x))

我们考查其中的第一项,利用贝叶斯公式

∫zq(z|x)logp(x,z)q(z|x)dz=∫zq(z|x)logp(x|z)dz+∫zq(z|x)logp(x)q(z|x)dz=Ez∼q[logp(x|z)]−DKL(q(z|x)||p(z))

这样我们就推导出VAE的一个核心等式,

logp(x)=Ez∼q[logp(x|z)]−DKL(q(z|x)||p(z))+DKL(q(z|x)||p(z|x))

下面可以开始建模了。由前面的讨论(利用一个联合高斯分布作为隐含可测函数的分布),

p(z)=N(0,I)

同样,q(z|x)和p(x|z)用联合高斯去建模,

q(z|x)=N(μ(x),Σ(x))

p(x|z)=N(f(z),Λ(z))

自然地,问题就转化成了用神经网络学习四种映射关系。但是,即使做了这样的建模,对于DKL(q(z|x)||p(z|x)),我们仍然难以给出其闭式解(归一化因子是一个复杂的多重积分)。因此只能退而求其次,我们对其做缩放

logp(x)=Ez∼q[logp(x|z)]−DKL(q(z|x)||p(z))+DKL(q(z|x)||p(z|x))≥Ez∼q[logp(x|z)]−DKL(q(z|x)||p(z))

对对数似然的下界进行最大化。

进一步推导,我们将前面建模的概率模型带入这个下界中去。注意到在实际实现过程中,为了简化起见,Λ(z)取与z无关的单位阵I,于是有

Ez∼q[logp(x|z)]−DKL(q(z|x)||p(z))=Ez∼q[C−12∥X−f(z)∥2]−12(tr(Σ(x))+μ(x)Tμ(x)−k−logdet(Σ(x)))

最大化这个下界等价于最小化

minΘ∥X−f(z)∥2+12(tr(Σ(x))+μ(x)Tμ(x)−k−logdet(Σ(x)))

其中Θ为四个待学习映射的可学习参数集合。

至此,整个的学习框架就清晰了,如下图所示。

总结起来,整个训练框架就是在对样本x进行编解码。q是将样本x编码为隐变量z,而p又将隐含变量z解码成f(z),进而最小化重构误差。训练的目的是学习出编码器的映射函数和解码器的映射函数,所以训练过程实际上是在进行变分推断,即寻找出某一个函数来优化目标。因此取名为变分编码器VAE(Variational Auto-encoder).

关注具体实现的读者可能会发现在“解码器Decoder到μ(x)和Σ(x)”这个阶段从技术上没办法进行梯度反传。的确如此,上图只是作为帮助大家理解的示意图,而真正实现过程中,我们需要利用重参数化这个trick,如下图所示。

重参数化这个名字听起来很神秘,其实就是基于下面的一个简单的数学事实: 
如果z∼N(μ,Σ),那么随机变量z可以写成

z=μ+Σ12ϵ

其中ϵ∼N(0,I).

利用重参数化这个trick,我们成功地规避了这个问题。

讨论

A. 既然任意概率分布都可以作为隐变量的分布,为什么都用高斯分布去建模呢? 
这个问题的答案可能在于两个方面。一方面是,建模高斯分布给我们带来了良好的可计算性,能得到一些解析的结果。另一方面,可能是基于下面的数学事实,

maxf−∫f(x)lnf(x)dxs.t.∫f(x)dx∫(x−μ)2f(x)dxf(x)=1=σ2>0

这个问题的解是

f∗=N(μ,σ2)

即给定概率分布的均值和方差,使得信息熵最大的概率分布是高斯分布。

B. 我们虽然退而求其次地仅仅最大化对数似然的下界,但如果网络实际的合理,我们实际上是在最大化logp(x)−DKL(q(z|x)||p(z|x)),这意味着训练过程中一方面最大化对数似然(我们的终极目标),另一方面最小化q和p的KL散度,即两者的概率分布距离。这样我们就一举两得:一方面完成了终极目标,另一方面使得原来不可计算的p(z|x)可计算,将q(z|x)最为其良好的近似。

C. 联合高斯分布之间的KL散度

根据上一篇关于GAN的“模拟上帝之手,对抗博弈——GAN背后的数学原理”一文,我们很容易得到两个联合高斯p1=N(μ1,Σ1)和p2=N(μ2,Σ2)之间的KL散度

DKL(p1||p2)=12[logdetΣ2detΣ1−d+tr(Σ−12Σ1)+(μ2−μ1)TΣ−12(μ2−μ1)]

caffe_code:https://github.com/cdoersch/vae_tutorial

参考文献

Tutorial on Variational Autoencoders. Carl Doersch. arXiv:1606.05908, 2016.

VAE背后的哲学思想及数学原理相关推荐

  1. 只知道GAN你就OUT了——VAE背后的哲学思想及数学原理

    短短三年时间,变分编码器VAE(Variational Auto-encoder)同GAN一样,成为无监督复杂概率分布学习的最流行的方法.VAE之所以流行,是因为它建立在标准函数逼近单元,即神经网络, ...

  2. 透彻理解高斯核函数背后的哲学思想与数学思想

    https://www.toutiao.com/a6653427986718523917/ 数据点转换到高维空间后,原始特征无关紧要.仅仅计算测试数据与支持向量的点积,支持向量由SVM优化算法选择的特 ...

  3. 刷脸背后,卷积神经网络的数学原理原来是这样的

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|深度学习这件小事 计算机视觉技术在日常生活中有着非常普遍 ...

  4. 以XGBoost为代表的集成算法体现的哲学思想与数学技巧

    目录 哲学思想一:抓住主要矛盾 为什么AdaBoost要增加前一次错分样本的权重? 为什么lightGBM可以忽略梯度小的样本? 哲学思想二: 矛盾在一定条件下是可以相互转化的. 为什么随机森林比单一 ...

  5. 【科普】刷脸背后,卷积神经网络的数学原理

    (给机器学习算法与Python学习加星标,提升AI技能) 选自:towardsdatascience 作者:Piotr Skalski 编译:机器之心(almosthuman2014) 原文:http ...

  6. unity调整旋转需要传什么参数?参数在数学上叫做什么?_人脸识别背后,卷积神经网络的数学原理原来是这样的...

    在自动驾驶.医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情.卷积神经网络可能是这一巨大成功背后的关键组成模块.这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工 ...

  7. 卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的

    在自动驾驶.医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情.卷积神经网络可能是这一巨大成功背后的关键组成模块.这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工 ...

  8. 线性回归算法数学原理_线性回归算法-非数学家的高级数学

    线性回归算法数学原理 内部AI (Inside AI) Linear regression is one of the most popular algorithms used in differen ...

  9. 打卡Linux哲学思想 and 命令

    打卡Linux哲学思想 and 命令 只想做一个让大家都看得懂看的明白的博客 (第一天写博客不太会用这个编辑器,很尴尬.) [有些概念直接引用的互联网,如有侵权一类的事情,麻烦各位大佬告知!不过很多都 ...

  10. 使用(VAE)生成建模,理解可变自动编码器背后的数学原理

    理解可变自动编码器背后的原理 ​ 生成模型是机器学习中一个有趣的领域,在这个领域中,网络学习数据分布,然后生成新的内容,而不是对数据进行分类.生成建模最常用的两种方法是生成对抗网络(GAN)和可变自编 ...

最新文章

  1. 数据分析师常用的十种数据分析思路,你都知道吗?
  2. Makefile写法
  3. 首个金融领域的开源中文预训练语言模型FinBERT了解下
  4. 网络爱好者必知的国内十大知名Linux系统版本
  5. vs 编译错误 The name 'InitializeComponent' does not exist in the current context in WPF application...
  6. ArcGIS API for JavaScript:Layer之间那点儿事
  7. python在工程管理专业的应用_专业篇丨建筑环境与能源应用工程专业和建筑电气与智能化专业...
  8. ELK快速搭建日志平台(基于7.9.3)
  9. SQL Server 2005的Resource数据库
  10. html+表格+左侧表头,HTML多表头表格代码
  11. PMP-变更控制流程图详解
  12. LynxFly科研小四轴横空出世,开源,F4,WIFI
  13. 使用画图软件更改图片大小
  14. 机器学习笔试题精选(六)
  15. Word文档人民币符号怎么打出来
  16. 条形码扫描器会受到光波和无线电波的影响吗?
  17. java 解析器_高性能Java解析器实现过程详解
  18. Compressor.js 图片压缩及方向修正
  19. 导数的奇偶性(含证明)
  20. HTTP断点续传原理 状态码206 Partial Content

热门文章

  1. 基于java springboot仓库管理微信小程序源码
  2. PTC Creo 8最新版下载
  3. Python贴吧爬虫
  4. zemax输出ies_基于ZEMAX的光学设计教程(第2版)
  5. ubuntu查看像素坐标和像素值GUI工具 【 mtpaint 】
  6. yolov3模型训练——使用yolov3训练自己的模型
  7. .chm电子书转换为.pdf的方法
  8. oracle12c分片应用场景,Oracle 12cR2数据库(Oracle12.2)新特性之四:Sharding 的增强...
  9. 【设计鉴赏】精选字体设计鉴赏(二)
  10. 堰流实验报告思考题_创新实验之一:桥墩冲刷实验