Learning Notes变分自编码(Variational Auto-Encoder,VAE)

Posted MoussaTintin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Learning Notes变分自编码(Variational Auto-Encoder,VAE)相关的知识,希望对你有一定的参考价值。

近年,随着有监督学习的低枝果实被采摘的所剩无几,无监督学习成为了研究热点。VAE(Variational Auto-Encoder,变分自编码器)[1,2] 和 GAN(Generative Adversarial Networks) 等模型,受到越来越多的关注。

笔者最近也在学习 VAE 的知识(从深度学习角度)。首先,作为工程师,我想要正确的实现 VAE 算法,以及了解 VAE 能够帮助我们解决什么实际问题;作为人工智能从业者,我同时希望在一定程度上了解背后的原理。

作为学习笔记,本文按照由简到繁的顺序,首先介绍 VAE 的具体算法实现;然后,再从直观上解释 VAE 的原理;最后,对 VAE 的数学原理进行回顾。我们会在适当的地方,对变分、自编码、无监督、生成模型等概念进行介绍。

我们会看到,同许多机器算法一样,VAE 背后的数学比较复杂,然而,工程实现上却非常简单。

这篇 Conditional Variational Autoencoders 也是 by intuition 地介绍 VAE,几张图也非常用助于理解。

1. 算法实现

这里介绍 VAE 的一个比较简单的实现,尽量与文章[1] Section 3 的实验设置保持一致。完整代码可以参见 repo

1.1 输入:

数据集 XRn

做为例子,可以设想 X MNIST 数据集。因此,我们有六万张 0~9 的手写体 的灰度图(训练集), 大小为 28×28。进一步,将每个像素归一化到 [0,1] ,则 X[0,1]784

MNIST
图1. MNIST demo (图片来源)

1.2 输出:

一个输入为 m 维,输出为 n 维的神经网络,不妨称之为 decoder [1](或称 generative model [2])(图2)。

decoder
图 2. decoder