文章目录

  • 生成模型
  • 生成模型和判别模型的区别
  • 我对于生成模型的理解
  • Gan的思想
  • Generator
  • Discriminator
  • Generator和Discriminator相互作用
  • 问题
  • Gan算法
  • 结构学习
  • 结构学习的应用
  • 输出序列
  • 输出矩阵
  • 为什么结构学习有难度
  • 结构学习的方法
  • 生成器之为什么不能自我学习
  • Generator的学习
  • Generator的优化
  • Generator的输入
  • auto-encoder回顾
  • Auto-Encoder的问题
  • 解决方案——VAE(Variational Aoto-encoder)
  • Generator的输出(解答)
  • 判别器之为什么不能自我生成
  • Discriminator的生成(解答)
  • Discriminator的训练
  • 对比Generator和Discriminator
  • Gan的优势


生成模型

一系列用于随机生成可观察数据的模型。
训练阶段,使模型学习训练数据的真实分布生成式深度学习pdf 深度生成模型_生成图片;
测试阶段,学好的模型能够随机生成新的数据。
我们希望的结果是:模型生成的新数据和训练数据分布尽可能地相似。

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_02


生成模型是一个密度估计问题,即数据分布的估计。

关于密度估计问题,又分为了:

  1. 显式密度估计:明确地定义模型,直接从样本集中估计概率分布;
  2. 隐式密度估计:不直接估计概率分布,通过拟合模型生成式深度学习pdf 深度生成模型_生成图片_03,使其能够生成符合数据分布生成式深度学习pdf 深度生成模型_生成模型_04的样本。

生成模型和判别模型的区别

我们首先介绍一下生成模型和判别模型的区别。

  1. 两者所处的研究范围不一样。判别模型常见于监督学习,解决的是回归和分类问题;而生成模型常见于无监督学习,解决的是密度估计问题。
  2. 两者的概率模型不一样。判别模型的概率模型是生成式深度学习pdf 深度生成模型_生成式深度学习pdf_05:根据得到的特征x推断标签为y的可能性;生成模型的概率模型是生成式深度学习pdf 深度生成模型_生成图片_06或者生成式深度学习pdf 深度生成模型_生成式深度学习pdf_07,根据标签或无标签地从庞大的特征空间选择合适的特征组合成数据。

我对于生成模型的理解

假设我们在二维空间有一组点,假设他们满足某种概率分布于这个空间中。这是我们的数据集,为了便于解释,我把他们画的满足一个类高斯分布:

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_08


我们能从这个数据集当中,学习到一个高斯分布,以第一象限的某个点为中心,向周围,出现的概率衰减。

有了这个分布,我们就可以生成一些点,使其混入数据集中,大概率不会出现红色点这样的奇葩位置。

Gan的思想

Generator

应用:

  1. 生成图片:
  2. 生成句子:

    在实际应用中,我们可以根据图片生成文字或由文字联想相关的图片,这可以通过Generator实现,只要提取特征矩阵即可。

由此可知,我们给予Generator一个向量,它可以返回一个高维向量(对应着图片/句子),通过控制输入向量的某一维度数据,得到的图片/句子的某一特征也会随之发生变化。

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_09

Discriminator

接收图像,吐出评分。

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_10

Generator和Discriminator相互作用

生成式深度学习pdf 深度生成模型_生成图片_11

  1. Generator生成图片;
  2. Discriminator与真实图片比较,给予Generator反馈;
  3. Generator、Discriminator提升,并重复以上操作。

Dv1给予Gv1色彩反馈,于是Gv2为图片着色;
Dv2给予Gv2嘴巴反馈,于是Gv3为人物加上嘴巴。

问题

  1. Generator为什么不自己学?
  2. Discriminator为什么不自己生成?
  3. 两者具体是如何提升的?

Gan算法

  1. 随机初始化
  2. 训练过程——在每次迭代中:
    Step-1 :固定Generator G,更新Discriminator D。
    学习Discriminator,为真实的图像分配高分,为生成的图像分配低分。
    Step-2 :固定Discriminator D,更新Generator G。
    学习Generator,使Discriminator的分提高。

生成式深度学习pdf 深度生成模型_生成图片_12

结构学习

Gan的原理,为什么它是这样运作的。

对于机器学习而言,我们的目的是为了找到一个函数生成式深度学习pdf 深度生成模型_生成图片_13,根据一些输入得到一些输出。

在我们已经接触的一些问题种类当中,
回归:输出一个标量;
分类:输出一个类别。
对于结构学习而言,输出的是一个序列、矩阵、图、树…而且,输出结果的各成分之间是有相互依赖关系的。
剧透:以图片为例,像素与像素之间的相关性,只靠Generator把握不住,需要Discriminator把握。

结构学习的应用

输出序列

生成式深度学习pdf 深度生成模型_生成模型_14

输出矩阵

生成式深度学习pdf 深度生成模型_生成图片_15

为什么结构学习有难度

核心:它是一个one-shot/zero-shot问题。
以人脸识别为例,模型的学习样本就只有一张,它需要凭借着这一张图片去识别出这个人。这就是ont-shot问题。
以自然语言处理为例,我们的语料库容量有限,输入的单词也许模型不认识,但它依旧要做出正确的判断,这就是zero-shot问题。

自然语言处理与人脸识别都属于结构学习问题。

综上所述,对于结构学习而言:

  1. 将每一个可能的输出都视为一个类别。这样的模式会造成训练集和测试集会出现不共有的类别;
  2. 输出空间很大,大多数类别都没有训练样本;
  3. 在测试过程中,要求模型会创造新的东西,需要更加智能化;

以生成图片为例,结构学习模型生成的是一个个像素点,因此,这要求模型要具有大局观,保证输出的成分间的相关行与依赖性。

总结一下,结构学习的两个要求:

  1. 智能化;
  2. 大局观。

结构学习的方法

生成式深度学习pdf 深度生成模型_生成模型_16

生成器之为什么不能自我学习

Generator的学习

与分类问题的训练很相似。

给一个向量,Generator生成的图片与真实图片越接近越好;分类问题的输入和输出则截然相反。

生成式深度学习pdf 深度生成模型_生成模型_17

Generator的优化

那么这样一个向量从何来?总不能随便生成吧。如下图所示,我们希望向量的每一个维度都存在着一些规律。

生成式深度学习pdf 深度生成模型_生成图片_18


在实验中,我们可以随机生成向量,但这样的向量很难把握特征,所以得到的图片质量不高,因此,有了以下改进方法。

Generator的输入

我们可以训练一个Encoder,提取特征,将图片变为向量。
如何train这样一个Encoder?
Auto-encoder

auto-encoder回顾

生成式深度学习pdf 深度生成模型_判别模型_19


训练一个encoder需要配合decoder,构建一个完整的训练系统。

encoder将图片变为向量;decoder将向量变回图片,得到的图片要与初始图片越接近越好。

此时的Decoder就是Generator。

我们把Decoder取出来就可以作为Generator,也就是说,我们在寻找向量的时候,顺带得到了生成器。

Auto-Encoder的问题

训练集是有限的,我们看到vector a得到左倾的1,看到vector得到右倾的1,那么取平均后的向量会是什么呢?

首先,训练集不包含这个样本,按理论来说,得到的会是正直的1.但是NN的过程是非线性的,因此可能会得到噪声。也就是说。这样一个结构学习问题,暂时不具备智能性。这说明了自编码器泛化能力不强。

生成式深度学习pdf 深度生成模型_判别模型_20

解决方案——VAE(Variational Aoto-encoder)

Encoder会生成样本的均值和方差,从分布中随机抽样,得到特征,这提高了泛化能力。

生成式深度学习pdf 深度生成模型_生成图片_21

Generator的输出(解答)

我们看到了单独的自编码器和VAE的Decoder其实都可以做一个Generator。

训练过程中,我们采用最小重构误差,我们通过判断不一样的像素点数,评判Generator的性能。

然而,实际上,要达成一模一样的效果,是不现实的,肯定会存在一些误差,那么在哪个特征上妥协,在哪个特征上高要求,是一大难题。

生成式深度学习pdf 深度生成模型_判别模型_22


比如以下四张图片:

生成式深度学习pdf 深度生成模型_生成模型_23


显然上面的误差小一些,但其缺失的部分,不大合适。我们可以理解下层图片笔画过长的问题,但不能接受中间存在空白或多余的问题。

以上的问题体现了结构学习的全局性要求。这是单独的Auto-encoder得到的generator所很难办到的,需要更大、更深的网络结构。因此,我们再加一层Discriminator。

判别器之为什么不能自我生成

为什么discriminator可以解决全局性问题?
这是因为,generator是一个一个生成像素的,其本身很难自我检测,而discriminator接受的是生成完的图片,因此检测起来很方便。

Discriminator的生成(解答)

那么Discriminator可以自己训练吗?
这当然是可以的。

我们随机给一个图片,DIscirminator穷举所有的像素组合方式,选取得分最高的作为生成图片。其本质上,是求解一个最优化问题。

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_24

但是我们只有正样本,却没有负样本,这样会造成Discriminator对所有的样本给出高分。

然而,光有负样本是不够的,我们希望DIscriminator的眼光更挑剔一些,所以,负样本的品质要达标。

所以负样本的存在成为了阻碍Discriminator的第一大障碍。

如果考虑以上方面,一定要Discriminator生成的话,那么算法流程如下:

生成式深度学习pdf 深度生成模型_判别模型_25


那么,更新负样本的问题,就转化为了求解上述最优化问题,这是很困难的(我们势必要做一些假设,才可以求解,如果设D是线性的,虽然好求解,但是性能不高;设其为非线性的则截然相反)。综上所述,由于无法求解arg问题,因此,我们用Generator代替。

生成式深度学习pdf 深度生成模型_判别模型_26


综上所述:

  1. 缺少有质量的负样本;
  2. 无法解决优化问题。

Discriminator的训练

生成式深度学习pdf 深度生成模型_生成图片_27

  1. 初始化D(x)曲线;
  2. 为正样本区域,将D(x)提升;对负样本区域,将D(x)降低;
  3. 更新负样本,迭代进行。

对比Generator和Discriminator

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_28

Gan的优势

生成式深度学习pdf 深度生成模型_生成式深度学习pdf_29