生成对抗网络(GAN)

来源:互联网 发布:知乎的经典评论 编辑:程序博客网 时间:2024/05/22 14:33

生成对抗网络(GAN)

paper原文:Generative Adversarial Networks

  • 生成对抗网络GAN
  • 概览
    • 做了什么
    • 优势
    • 不足
  • 模型组成
    • 生成模型 G
    • 鉴别模型 D
  • 核心公式
  • 算法
  • 图示化描述
  • 全局最优点 Pg Pdata
  • 效果与对比
  • 展望

概览

做了什么

  • 提出了新的模型对抗模型
    • 通过生成模型(G)鉴别模型(D)之间的相互竞争。即D模型要将 G 生成假数据调出,而 G 模型要设法“骗过”D 模型的鉴别,最终提高 G 模型的生成质量
    • 通过实验当 D 最终结果稳定在12时 G 模型生成效果最好。

优势

  • 不需要使用Markov 决策框架
  • 框架移植性强,可以用于各种训练、优化算法,以及现有的模型中。
  • 两个模型都仅仅使用了后向传播dropout算法
  • G 模型生成样本只需要使用前向传播

不足

  • 在当时未能明确找到代表pg(x)产物
  • D 与 G 的训练必须同步,换句话说 G 不能脱离 D 的训练而更新多次。(防止出现Helvetica scenario问题)

模型组成

生成模型 G

  • 通过噪声(一维序列)生成样本,尽力混淆 D 模型的鉴定。
  • 随机噪声通过多层感知机生成
  • 通过多层感知机输入pz(z)映射到数据空间G(z;θg)
  • 训练 G 来最小化概率log(1D(G(z))).使得从噪声生成的数据足够真实。

鉴别模型 D

  • D 主要是学习数据来源到底是来自真实数据,还是生成数据。
  • 本质为二分类器
  • 数值D(x)代表 x 是由真实数据获得并非由 G 生成的概率
  • 同样使用多层感知机结构
  • 训练 D 来最大化概率D(x),使得 D 精于鉴别噪声数据

核心公式

minGmaxDV(D,G)=Ex pdata(x)[logD(x)]+Ex px(x)[log(1D(G(z)))]

分析:

  • 要让整体最小,即让两个期望都小
  • 当输入图片与模型 D 一定时,前面的期望数值是一定的。
  • 这时让整体下降就要依赖后面的期望
  • 注意期望一定层面上反馈了这组数据的平均性能
  • 所以当后面值低意味着,生成的图片必须足以以假乱真
  • 这恰恰就符合了 GAN 的目标
  • 最佳情况:一个看起来超假的图片,经过生成器,“以假乱真”
  • 只要G 的变化足够慢,D 就会被保持在一个较优的水平上
  • 这个思路模仿了SML/PCD算法的思路

算法

这里写图片描述
上方为 GAN 网络的核心算法,几点注意事项

  • k为一个超参数,定义让 D 在每次训练步骤中,优先 G 增长的次数。k 越大 D 的鉴别能力越强,最后 生成 G 就越像。但是需要耗费的资源开销也会增大
  • mmini-batch超参数,定义对多少输入以及生成样本做梯度下降。这是一种借鉴全局梯度下降随机梯度下降两者优点的做法。当 m = 样本数量退化为全局梯度下降。m =1 退化为随机梯度下降
  • D 的训练核心是最大化鉴别梯度
  • G 的训练核心是最小化鉴别梯度,即提高混淆能力

图示化描述


图示中:

  • 蓝点线代表 D 模型的D(x)在 x 域的分布
  • 黑点线代表正常样本在 x 区域的分布
  • 绿点线代表 G 模型生成样本在 x 域的分布
  • 下面的 z->x 表达了生成模型 G 通过噪音 z 向混淆数据 x 生成的映射情况

从过程上:

  • a的过程是算法刚开始,D 模型还不能很好的分辨出x 分布中的数据来源。
  • a->b是算法中的最里层的k步训练。训练模型 D,使其鉴伪能力加强
  • b过程蓝点线已经平滑,证明 D 已经具有较稳定的分辨性能。
  • b->c的过程是后面训练 G 模型的过程。此时 D 性能一定,训练 G 向能最小化 D(G(x))方向发展。
  • c过程下 G 的生成分布逐渐像元数据靠拢。G 的噪声的生成映射关系也向中间集中
  • c->d的过程是上面算法逐渐训练的过程
  • 最后到d,G 已经有足够的混淆能力,D 认为数据一半是原始数据,一半为真实数据。此时 G 模型已优化到最大性能。

全局最优点 Pg = Pdata

也可认为上面核心公式结果为0.5

首先我们假定:

DG(x)=pdata(x)pdata(x)+pg(x)

这里pdata(x)是来自真实数据样本数,pg(x)是来自生成数据的样本数.

这里我们可以对核心函数V(G,D)进行改写:

这里首先把V(G,D)式根据各自的数据集求积分得到全局情况。同时由于对那个变量积分对积分结果无影响。所以把 z更名为x然后做抽象:

y=alog(y)+blog(1y)(4)

(a,b)都属于二维实数平面时4式在[0,1]内的最大值点为aa+b
同时我们也可以从期望的角度重写 V 式:


此时当pg=pdata时,DG(x)=12,C(G)=log12+log12=log4
我们此时可以将 C 式子改写为


因为当 G 数据分布于 D 分布不均时,就需要C 就需要加上关于pdatapg
各自的KL 散度,也就是

定值加上两者的 JSD 散度
由于JS 散度不为负数且当pg=pdata时为0(分布相同).
于是得出题设的答案

效果与对比

这里写图片描述

展望

在当时作者最后提出几个重点展望

  1. 一个条件模型使得有参量c可以随时被注入于模型 G 和 D
  2. 半监督学习的提出
  3. 后期论文DCGANGANCNN结合提供了具体实现方案。