【AI数学】变分自编码器(VAE)

我这篇文章主要以通俗语言讲解VAE背后的数学原理,有几个简化公式是自己理解总结而得,没有经过严密的数学推导。原论文中一大波贝叶斯方面数理推到,在我的博文里也看不到,一方面因为我不是一个粘贴公式的博主,另一方面是贴上来你也看不懂。其实要想掌握VAE的工程操作和数学思想,看这篇文章是够够的了
想了解VAE,首先要知道AE是什么。没有AE基础的,可以看我的上一篇博文《自编码器》。


网上有大量关于VAE的解释,事实上都没把VAE讲清楚。或者说,有的博客只把代码讲出来了,对于数理方面的推导,全部都是黏贴公式,翻译论文,并没有把更深层的原理讲清楚。其实AEVB这篇论文是数学性超强的论文,先放论文链接:

Auto-Encoding Variational Bayes
https://arxiv.org/abs/1312.6114.pdf

你要是能在一周内,把上面这篇文章的数学原理搞懂,那你就是骨骼清奇了。


看论文可以知道,VAE(变分自编码器)只是AEVB(自编码变分贝叶斯)的一个应用而已。
如果你只是想懂VAE的话,还是比较简单滴。
对于AEVB更深层的原理,在这里不去讨论,因为我的水平也不够讨论。在这里只说与VAE有关的原理。
图片名称

图1

相比于自编码器AE,VAE在结构上的改变“好像”只在z处注射一点噪音。要明白三点:这串噪声怎么注射注射噪声的理由是什么噪声注射后有什么效果。此外还有一个问题,这个玩意儿怎么训练?


图片名称

图2

上图的红色部分就表示注入随机变量的过程。
从直观的角度来讲,输入X经过编码之后,维度降低,然后让X有点波动再去解码,就可以重构出与 x 相似但又合理的 x ^
事实上,原论文给了很多的数学论证,证明为什么加入随机波动在系统重构之后的 x ^ 与原输入 x 是大同小异的,这也是VAE能够进行生成数据的基本原因。
在2016年的VAE综述上,可以更清楚的理解这个操作的基本原理:
综述链接如下:Tutorial on variation autoencoders
这里写图片描述

图3

“通过函数将一种随机分布转换成另一种随机分布”,大概就是VAE数学原理的通俗解释吧。在编码的时候,编码器将输入数据编码成两部分(如图2所示):一部分决定 b a s e ,另一部分决定变分( v a r i a t i o n )。
解码器的输入
z = b a s e + v a r i a t i o n

变分(variation) = 变分基数 随机数

为什么变分要以乘积项来表示呢? 综述里面是给了解释的:这样可导,可以直接梯度反传来训练。

z经过解码器就可以生成和原输入x很相似但是又不同的各种数据,相似是由 b a s e 决定的,而不同是由 v a r i a t i o n 决定的。
这样一来,VAE就可以进行数据增强:用少量的数据喂进VAE,会生成很多相似但又细节不同的数据。
同时,VAE也是无监督学习常用的方法,比AE更能掌握数据的流型结构,这是一种很玄学的玩意儿(期待本人之后深入研究这一领域)。


具体生成效果呢,可以看看下图:
这里写图片描述

可以看出,生成数据也是多,但是很多都比较奇怪,千万不要认为这是VAE的极限。这里还没加入condition,也没进行各种优化。目前的VAE生成效果还是很强大的,感兴趣可以看一些VAE和GAN结合的文章。

除了生成效果之外,VAE还可以进行想象补全,总的来说,VAE的功能和GAN是高度重合,只是作用域不一样。
这里写图片描述 补全的效果,还是可以的。