• 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。一般将隐变量z可视为公式中的y。典型的生成模型如朴素贝叶斯。
  • 判别模型:数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。如k近邻、决策树、SVM直接面对预测,往往准确率较高。
1. AutoEncoder
  • 即N层的神经网络,输入数据和输出数据一致,将隐层设置为较低的维度,学习出原始数据的较低维的隐层特征,误差函数使用MSE。
  • 应用:
  1. 去噪(对输入加入随机噪声,对于的输出使用真实不加噪声的数据)
  2. 降维
2.Variational Autoencoder
  • 考虑AE的Decoder部分,如果我们已知一个数据的隐层表示,那么将这个表示送入Decoder网络,我们就可以生成一个样本。但是我们无法随意的生成一个符合要求的隐表示,因为隐表示的分布可能很复杂。
  • 现在我们通过Encoder网络不仅仅学习它的隐表示,而是要学习隐表示的分布。假定隐表示向量的每一维都服从一个高斯分布,那么学习的就是每个高斯分布的均值和方差。
  • 生成模型generative model 生成模型算法_方差

  • 通过重参技巧,可以从上述均值和方差组成的高斯分布中采样得到隐层节点,在用隐层节点向量输入Decoder网络,得到重构的图像。(重参:对标准高斯采样得到一个生成模型generative model 生成模型算法_GAN_02,对他进行线性变换生成模型generative model 生成模型算法_生成模型_03即可得到服从要求分布的隐层节点。)
  • 当我们的网络学习好了之后,每次采样得到一组生成模型generative model 生成模型算法_GAN_02,都可以生成一幅相应的图像,这就达到了生成图像的作用。
  • 损失函数推导
  • 模型的损失函数包括三部分:1.重构误差(MSE或交叉熵(即似然)) 2. 分布误差 3.正则项,现在主要推导第二项分布误差,最终的总LOSS就是三者之和。
  • 分布误差:假定生成模型generative model 生成模型算法_VAE_05的后验生成模型generative model 生成模型算法_数据_06服从高斯分布,但是这个高斯分布应该向标准高斯分布生成模型generative model 生成模型算法_GAN_07看齐。这是因为如果没有这项损失,模型会倾向于使得整个网络的重构误差趋于0,这必然导致隐变量生成模型generative model 生成模型算法_VAE_05失去随机性,在直白一点就是生成模型generative model 生成模型算法_VAE_05的方差会趋近于0,这样模型就会退化为AE。解决办法就是在损失函数中增加后验分布生成模型generative model 生成模型算法_数据_06与标准高斯分布的KL距离。这样,模型会自动的在重构与生成间平衡。
    多元高斯分布的pdf为:
    生成模型generative model 生成模型算法_生成模型_11
    假设各维度独立,则可分别为生成模型generative model 生成模型算法_VAE_12个一维的高斯分布,高斯分布的pdf为:
    生成模型generative model 生成模型算法_GAN_13
    KL距离公式为:
    生成模型generative model 生成模型算法_生成模型_14
    计算两个高斯分布的KL距离,其步骤如下

    注意最后一项积分结果就是方差

    模型假设生成模型generative model 生成模型算法_GAN_07服从标准高斯分布,即生成模型generative model 生成模型算法_方差_16代入上式,可得
    生成模型generative model 生成模型算法_数据_17
    将上式作为分布的距离损失加入到损失函数Loss中即可
  • Trick:
  • 学习方差时,由于方差必须非负,所以我们不直接计算方差生成模型generative model 生成模型算法_VAE_18,而是计算对数方差生成模型generative model 生成模型算法_GAN_19,然后重参数的时候,对他取指数生成模型generative model 生成模型算法_数据_20即可得到正常的方差。
3. GAN

生成模型generative model 生成模型算法_生成模型_21

  • 核心原理:
  • 假设数据生成模型generative model 生成模型算法_生成模型_22服从某个分布生成模型generative model 生成模型算法_方差_23,我们不知道这个分布是什么样子,但是我们可以用另一个分布生成模型generative model 生成模型算法_GAN_24和一个生成器生成模型generative model 生成模型算法_方差_25逼近这个分布,使得生成器的分布和数据的分布一致。
  • 正如图中数据分布是黑线不动,我们一直调整绿色的生成器分布,直到两个分布重合。当两个分布重合时,由生成器产生的数据可以认为就是真正的数据,我们便可以从中采样得到新的样本。
  • 图中的蓝线表示经过判别器生成模型generative model 生成模型算法_VAE_26后模型的判别结果,若认为是真实图片输出1,否则输出0。当判别结果无法正确区分样本来自真实数据还是由生成器产生的数据时认为模型训练完成。
  • 损失函数:
    生成模型generative model 生成模型算法_数据_27
  • 损失函数由两部分组成:
  • 从分类器生成模型generative model 生成模型算法_方差_28的角度来看,我们希望最大化区分样本来自真是分布还是虚假分布。(前一项来自真是分布–最大化;后一项是负的虚假分布,也是最大化)
  • 从生成器生成模型generative model 生成模型算法_数据_29角度来看,正好相反。
  • 生成模型generative model 生成模型算法_方差_30生成模型generative model 生成模型算法_VAE_31的实际组成:
  • 可根据要求使用任何的网络(CNN,MLP等),我们的目标是学习它的权系数。
  • 生成网络生成模型generative model 生成模型算法_方差_30的输入:
  • 一组从标准高斯采样得到的噪声向量。
  • 模型优点:
  • 基于BP反向传播
  • 不需要计算隐变量的分布(从标准高斯采样就行)
  • 增加D和G的深度可以增加性能
  • G的分布不依赖样本,依赖于判别器的误差传播
  • 模型缺点:
  • G分布没有显示的表达,仅仅是一个复杂的映射函数,可解释性差
  • 很难训练(不稳定),一般可设置D更新K次而G更新1次
4. 补充 VAEGAN

生成模型generative model 生成模型算法_方差_33

  • VAE:输入图像–高斯的隐层–重构回原始输入图像
  • GAN:
  • 随机噪声Z–(生成器G)–假的图像–判别器D判别
  • 真实图像–判别器D判别
  • 问题:VAE生成的图像模糊
  • VAEGAN:给VAE加上了GAN的架构,通过判别器D使得VAE产生的图片变得清晰。VAEGAN就是利用GANs去提升了VAE的图片生成质量。
  • 操作:真实图像生成模型generative model 生成模型算法_生成模型_34经过VAE得到重构的图像生成模型generative model 生成模型算法_生成模型_35,将生成模型generative model 生成模型算法_生成模型_35送入一个GAN网络的判别器(注意 不是整个GAN,只有判别器),让判别器判断输入图像来自真实分布还是生成分布。(此时GAN的生成器就相当于VAE的decoder部分)