机器学习之生成模型(GAN&VAE)综述

Posted by grt1stnull on 2017-10-09

0x00.前言

一次偶然的机会(上课没事做),在知乎上刷到了一个dalao写的关于生成模型的一些小思考

首先说,我只了解GAN的简单基本结构,知道它可以拿来做什么,也跑过一个失败的小例子。而对于变分自编码器(VAE),我也只停留在听过的水平。并且因为研究过自编码器,但是我却对变分自编码器一点都不了解。(这篇文章之后,经过主动了解,原来他俩不一样!)

从文章中我们了解到GAN与VAE两类主要的生成模型。作者将其与自编码器(AE)做了对比,因为二者结构类似,但是功能表现有什么区别呢。经过实验对比,作者发现,AE在重构样本上做的更好,但是对于随机的输入,却无法产生更好的结果。而GAN与VAE却可以,并且拥有更好的泛化能力。

之后作者给出了结论,是

  1. 自编码器虽然有考虑样本的分布应该能够引导重构误差向更小的方向发展,但是,神经网络具有非常多的鞍点,算法完全可能陷入了其他局部最优解。
  1. GAN优化的散度,也是对分布之间相似性的一种度量。

0x01.GAN简单介绍

不得不推荐这篇文章,通俗易懂,这里我们也会援引里面的内容:GAN学习指南:从原理入门到制作生成Demo,总共分几步?

生成式对抗网络GAN(Generative Adversarial Networks),结构通常由两个网络构成,即生成网络G(Generator)和判别网络D(Discriminator)。

在训练过程中,生成网络G的目标就是尽量生成真实的样本去欺骗判别网络D。而D的目标就是尽量把G生成的样本和真实的样本分别开来。这样,G和D构成了一个动态的“博弈过程”。

最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的样本G(z)。对于D来说,它难以判定G生成的样本究竟是不是真实的,因此D(G(z)) = 0.5。

generative-adversarial-network

同时,上文推荐的文章中也给出了一个可以运行的例子。在本地和云服务器上都跑过几epoch,效果并没有很理想。并且计算量很大,在服务器上跑了快一个月,最后的结果还是面目全非的。

0x02.VAE简单介绍

变分自编码器VAE(Variational Autoencoders),结构与自编码器类似,也是编码与解码结构。

我们从自动编码器开始学习VAE。

如下图。这是一个基本的自编码器结构,图像数据经编码层编码得到中间向量,再通过解码层还原。

auto-encoder

但是这种结构只能说是对图像特征的提取,并不能生成图像。我们需要用另一种方式来生成中间变量。

于是,我们在编码网络中增加了一个约束,迫使它产生大致遵循单位高斯分布潜在向量。这种约束将变分自动编码器与标准自动编码器分割开。

所以我们生成服从高斯分布的中间向量,并将它传递给解码器。实际上,我们的神经网络多准确与中间向量多匹配单位高斯分布有一个折中。

并且对于损失机制,我们总结了两个单独的损失:生成损失,这是一个均方误差,用于衡量网络重建图像的准确程度;以及潜在损失,这是KL散度,其衡量潜在变量匹配的密切程度单位高斯。

vae

下图也是一个简单基本的VAE结构。

variational-autoencoders

(翔实的数学公式可以看这个Variational Autoencoder: Intuition and Implementation

0x03.生成模型

机器学习主要分为两类,有监督学习与无监督学习。有监督学习指的是已知数据集类别(label),用来训练分类器。而无监督学习是说在不知道数据集类别(label)的情况下进行分类器训练。

分类任务训练出的模型,可以看作对输入X,预测输出Y,模型通常有两种形式:

  1. 判别函数Y=f(X)
  2. 条件概率分布P(Y|X)

而训练模型的方法可以分为生成方法与判别方法两类。判别函数模型Y=f(X)采用的是典型的判别方法,而条件概率的不同,分为生成方法判别方法

判别模型与生成模型的差异在于判别模型不会去考虑测试数据与各个类别的内在关系,不会模拟利用类别概率分布来生成数据。

生成方法学习的是联合概率密度分布P(X,Y),从统计的角度表示分布情况,能够反映同类数据本身的相似度。
而判别方法不能反映数据本身的性质。但它寻找不同类别之间的最优分割面,反映了异类数据的差异。

0x04.总结

我觉得在企业生产实践中,有准确的标记数据只占少数,这时就凸显出无监督学习的优势。让我们的神经网络模型自动的去学习样本的特征,我觉得这也是未来的一种趋势。

而VAE和GAN都是无监督的,正是看完知乎那篇文章后,我对这个生成模型有了兴趣。

送上一篇扩展阅读文献浅析 Hinton 最近提出的 Capsule 计划

0x05.参考

关于生成模型的一些小思考

GAN学习指南:从原理入门到制作生成Demo,总共分几步?

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

变分自编码(VAE)及代码解读

VAE(Variational Autoencoder)的原理

Variational Autoencoders Explained

kvfrans/variational-autoencoder

Variational Autoencoder in TensorFlow

机器学习:分类问题的两种模型