生成模型
在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。它给观测值和标注数据序列指定一个联合概率分布。在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布(带标签的数据)。条件概率分布可以由生成模型根据贝叶斯定理形成[1]。
生成模型的定义与判别模型相对应:生成模型是所有变量的全概率模型,而判别模型是在给定观测变量值前提下目标变量的条件概率模型。因此生成模型能够用于模拟(即生成)模型中任意变量的分布情况,而判别模型只能根据观测变量得到目标变量的采样。判别模型不对观测变量的分布建模,它不能够表达观测变量与目标变量之间更复杂的关系。因此,生成模型更适用于无监督的任务,如分类和聚类[1]。
如果观测数据是由生成模型中采样的,那么最大化数据似然概率是一个常见的方法。但是,大部分统计模型只是近似于真实分布,如果任务的目标是在已知一部分变量的值的条件下,对另一部分变量的推断(例如图像分类问题,已知图像推断其标签),那么可以认为这种模型近似造成了一些对于当前任务来说不必要的假设。在这种情况下,使用判别模型对条件概率函数建模可能更准确,尽管具体的应用细节会最终决定哪种方法更为适用[1]。
典型的生成模型包括[1]:
- 高斯混合模型和其他混合模型;
- 隐马尔可夫模型;
- 随机上下文无关文法;
- 朴素贝叶斯分类器;
- AODE分类器;
- 潜在狄利克雷分配模型;
- 受限玻尔兹曼机.
为什么需要GAN[2]
GAN: Generative Adversarial Network,生成对抗网络。
对于生成模型,例如图像生成,模型通过学习一些数据,然后生成类似的数据,例如让机器看一些动物图片,然后自己来产生动物的图片,可以基于Auto-Encoder、VAE(实现很简单,推导很复杂)等。

(AutoEncoder,端到端训练。由于中间code的分布我们无法知道,因此难以直接在code的空间中采样,必须要特殊处理才行。)
然而,如果采用MSE(极大似然估计)作为loss,会导致生成的图像比较糊,这是因为我们人类对图像好坏的判断,与MSE是不一致的,例如下面两个图的MSE是一样的,但是我们认为第一个图会好一些(他们的区别是图像中多余的那个点的位置)。

GAN可以解决这个问题,它是基于MLE(极大似然估计)的,同时GAN还可以生成从来不存在的图像(通过采样),从而构造很多有趣的应用,例如图像复原、风格迁移、给人物加上眼镜什么的。VAE从另一个角度也实现了生成模型,且生成的效果更不容易发生混乱(逻辑错位等),但是VAE生成的图比较糊,如果把GAN和VAE结合,将取得更好的效果,本文只介绍GAN的数学原理。
GAN的结构
GAN 有两个网络,一个是生成器generator(G),一个是判别器discriminator(D),从二人零和博弈中受启发,通过两个网络互相对抗来达到最好的生成效果[2]。流程如下:

generator用来生成图片,discriminator用来判断图片是否是生成的。
训练是交替进行的,首先固定discriminator,训练generator,使discriminator无法区分generator生成的图片与样本集中的图片;然后固定generator,训练discriminator,使之能区分generator生成的图片与样本集中的图片,这样完成了第一代训练。然后仍然按照这个过程,反复交替训练generator和discriminator,直到算法收敛,此时generator生成的图像几乎就没法与样本图像区分了。
那么,generator与discriminator的结构是怎么样的呢?如下图所示[3]:
generator: 输入低维的随机噪声(先不要困惑,后面解释为什么),输出图像;
discriminator: 输入图像,输出一个标量,二分类,靠近1表示真,靠近0表示假。
GAN的数学推导过程
数据集中图像的密度函数(目标分布)为: P d a t a ( x ) P_{data}(x) Pdata(x);
生成器生成的图像分布: P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ), θ \theta θ是生成器的参数。
为了能够让我们生成各种图像X,我们需要依概率 P G ( x ; θ ) P_{G}(x; \theta) PG(x;θ)在图像空间采样,这是比较困难的,因为我们很难表示、求取、采样这么复杂的分布,但是我们可以这样操作:对于Encoder-Decoder结构,我们只保留Decoder部分。这样,Decoder输入code,我们记code为随机变量Y,输出X,就是我们生成器产生的图像;我们可以假定Y服从某简单分布,例如:标准高斯分布,这样我们可以依高斯分布的概率在Y空间中采样(分布已知、维度较低),然后由于X=G(Y),我们设G是这个Decoder所表示的函数,则X的分布由Y与G的参数决定,从数学上讨论,我们可以先写出分布函数 F G ( X < X 0 ) = F ( G ( Y ) < X 0 ) = F ( Y < G − 1 ( X 0 ) ) F_{G}(X<X_{0})=F(G(Y)<X_{0})=F(Y<G^{-1}(X_{0})) FG(X<X0)=F(G(Y)<X0)=F(Y<G−1(X0)),由于Y的分布是已知的,因此我们就得到了 F G ( X ) F_{G}(X) FG(X),然后对这个式子求导,我们就得到了 P G ( X ) P_G(X) P