文章目录

  • 一、Network as Generator
  • 二、Why distribution?
  • 三、Anime Face Generation
  • 四、Discriminator
  • 五、Basic Idea of GAN
  • 六、Algorithm
  • 七、Progressive GAN
  • 八、Our Objective
  • 九、Sampling is good enough
  • 十、Discriminator
  • 十一、Tips for GAN
    • 1. JS divergence is not suitable
    • 2. JS divergence的缺点
    • 3. Wasserstein distance
    • 4. WGAN
  • 十二、GAN is still challenging
  • 十三、Possible Solution?
  • 十四、Evaluation of Generation
  • 十五、Conditional Generation
  • 十六、Learning from Unpaired Data

一、Network as Generator

我们把Network当作Generator使用时,会在Network的输入中加上一个z(从某一个Distribution Simple出来的),这个z是不固定的,因为每一次使用这个Network是随机生成z的。这里的Distribution存在一个限制,限制是它足够简单,能够让我们知道它的式子是什么样子。因此,随着Sample出来的Z不同,得到的输出也就会不同,现在的输出不在单一,而变成一个Complex Distribution。

二、Why distribution?

1. 举例说明为什么需要输出是一个Distribution?如下图所示,一个Video Prediction的例子,它要做的是预测小精灵游戏下一步的游戏画面。Network的输入是之前的游戏画面,我们希望输出与下一步的游戏画面越接近越好(我们把游戏画面用一个很长的向量表示)。现在遇到一个问题是小精灵在某一时刻会向左右两端分裂,因此我们希望输出与向左转接近的同时也与向右转接近,解决这个问题就需要Network的输出是有机率的,是一个Distribution。

2. 什么时候我们需要处理上述问题呢?当我们的任务需要创造力时,具体来说就是给一个Function,同样的输入会得到不同的输出。如下图所示,举例说明为什么需要创造力。

三、Anime Face Generation

Unconditional generation就是输入中不添加x,所以Generator的输入是z(从Normal Distribution Sample出来的Low-dim vector,它的维度由自己决定),输出是y(Complex Distribution,输出是high-dim vector,然后把它整理成一张二次元人脸)。

四、Discriminator

Discriminator的输入是一张图片,输出是一个数值,数值越大代表输入的图片越真,反之,数值越小代表输入的图片越假(在Discriminator里面可能会有大量CNN的架构)。

五、Basic Idea of GAN

如下图所示,说明了Generator与Discriminator彼此之间互动,对抗中发展的过程。

六、Algorithm

1. Generator与Discriminator的运作过程:首先要初始化Generator与Discriminator的参数,固定Generator并训练Discriminator,我们用真正的二次元头像与Generator生成的头像训练Discriminator,训练的目标是分辨真正的二次元头像与Generator生成头像的差异。

2. 固定Discriminator并训练Generator,也就是让Generator欺骗Discriminator成功,让输出的分数越来越大。

3. 现在就要反复地训练Generator与Discriminator,期待Generator与Discriminator的结果越来越好。

七、Progressive GAN

Progressive GAN可以产生非常高清的人脸。举例说明,GAN的输入是一个向量,输出是一张图片。现在可以把输入的向量做内差,我们可以看到两张图片之间连续地变化。

八、Our Objective

1. 我们有一个Generator,输入是从Normal Distribution中sample出来的vector,输出是P(G)(一个复杂的Distribution),现在有一堆data形成的P(data)(Distribution),希望P(G)与P(data)越接近越好。

2. 如下图所示,用一维向量和式子来说明上面的情况。图中的Divergence代表了P(G)与P(data)的差异度,Divergence越大代表P(G)与P(data)差距大,反之,Divergence越小代表P(G)与P(data)差距小。

九、Sampling is good enough

现在有一个问题是不知道如何计算Divergence,解决这个问题的方法是我们要sample出P(G)与P(data)。

十、Discriminator

1. 现在我们要把从P(G)与P(data)中sample出来的data拿去训练一个Discriminator,训练的目标是给从P(data) 中sample出来的data较高的分数,给从P(G)中sample出来的data较低的分数。

2. 如下图所示,用式子来说明上面的情况。现在我们希望图中的Dy(从P(data) 中sample出来的y)分数越高越好,Dy(从P(G)中sample出来的y)分数越低越好,也就是对V(D,G)取最大值。因此,max V(D,G)可以看作带上负号的cross entropy,相当于minimize cross entropy。

3. 为什么max V(D,G)与Divergence有关系?当训练有较小的Divergence的data时,会很难去discriminate,也就会得到较小的max V(D,G),当训练有较大的Divergence的data时,会很容易去discriminate,也就会得到较大的max V(D,G)。

4. 通过上面步骤的说明,我们就可以得到下图所示的结果,可以把max V(D,G)代替Divergence。

十一、Tips for GAN

1. JS divergence is not suitable

在大多例子中,P(G)与P(data)重叠的部分很少。有下面两个原因:
1) Data本身的特性,重叠会被忽略掉。
2) 假设sample出来的点较少,就算P(G)与P(data)有重叠,对Discriminator来说是没有重叠的。

2. JS divergence的缺点

JS divergence有一个特性是两个没有重叠的Distribution计算出来永远是log2(不管这两个Distribution是如何分布的),这会导致generator无法提高。

3. Wasserstein distance

在两个没有重叠的Distribution中,Wasserstein distance相比JS divergence做的更好在一直在向更好的方向发展而并非是处于一个恒定值。

4. WGAN

1) WGAN就是用Wasserstein distance取代JS divergence的GAN,WGAN的限制条件是D必须是1-Lipschitz,目的是为了让生成数据与真实数据的差距不会太大。

2) 如下图所示,WGAN做到限制的方法。

十二、GAN is still challenging

1. GAN很难训练的原因是Generator与Discriminator相互促进,在训练的过程中,只要其中一个停止进步,另外一个也会跟着停止进步。

2. 如下图所示,GAN生成一段文字的难点在于Decoder改变参数后,得到最大的中文字没有改变,Discriminator输出的分数没有改变,因此不能去计算微分,也就不能做Gradient Descent。

十三、Possible Solution?

现在考虑用Supervised Learning的方法,训练一个Network,输入是一堆图片,每一个图片用向量表示,输出是一张图片,希望输出与原始图片更加接近。

十四、Evaluation of Generation

1. 将GAN产生的图片放入Image Classifier,输出是一个机率分布,这个机率分布越集中代表产生出来的图片质量越高。

2. 遇到的一个问题是Mode Collapse,它是指训练开始时,产生的图片质量比较不错,当训练很久后,会发现它产生的图片数目比较匮乏。产生Mode Collapse的原因是Generation产生了Discriminator分辨不了的图片后,Generation会抓住这一点,一直产生这类的图片。

3. 遇到另外一个问题是Mode Dropping,它是指产生的资料只有真实资料的一部分,虽然产生的资料分布表示不错,但是真实资料的分布比它更加丰富。

4. Diversity会参考一堆图片,输出的机率分布越平均,代表具有较高的多样性。

5. IS的问题在于它可以判断生成图像的正确类型,但不能保证生成图像的多样性和质量。Fréchet Inception Distance可以解决这个问题,它的主要思想是通过输出分类的倒二层的特征进行判断。

十五、Conditional Generation

Conditional GAN是指额外地输入一段向量,这段向量规定生成的图像需要包含什么特征。

十六、Learning from Unpaired Data

1. 在Image Style Transfer中,我们要训练一个Deep Network,现在的训练资料是不成对的(unpaired),因此考虑用GAN来解决问题。

2. 如下图所示,有一种想法:输入是Domain x图片的分布,输出是Domain y图片的分布。

3. 实际操作与之前的GAN不同在于Generator会无视输入,也就是生成的二次元图片与输入的真人图片没有联系,因此考虑使用Cycle GAN。Cycle GAN会训练两个Generator,这两个Generator的作用是将原来的真人图转成二次元图,再将二次元图转成真人图,目标是输入的真人图与输出的真人图越接近越好。

4. 如下图所示,StarGAN可以在多种风格间做转换。


李宏毅机器学习笔记第14周_生成式对抗网络(GAN)相关推荐

  1. 《生成式对抗网络GAN的研究进展与展望》论文笔记

    本文主要是对论文:王坤峰, 苟超, 段艳杰, 林懿伦, 郑心湖, 王飞跃. 生成式对抗网络GAN的研究进展与展望. 自动化学报, 2017, 43(3): 321-332. 进行总结. 相关博客地址: ...

  2. 如何用 TensorFlow 实现生成式对抗网络(GAN)

    我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodfellow 在 14 年发表了 论文 Generative Adversarial Nets 以 ...

  3. 简述生成式对抗网络 GAN

    本文主要阐述了对生成式对抗网络的理解,首先谈到了什么是对抗样本,以及它与对抗网络的关系,然后解释了对抗网络的每个组成部分,再结合算法流程和代码实现来解释具体是如何实现并执行这个算法的,最后通过给出一个 ...

  4. 深度学习之生成式对抗网络 GAN(Generative Adversarial Networks)

    一.GAN介绍 生成式对抗网络GAN(Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.它源于2014年发表的论文:& ...

  5. 王飞跃教授:生成式对抗网络GAN的研究进展与展望

    本次汇报的主要内容包括GAN的提出背景.GAN的理论与实现模型.发展以及我们所做的工作,即GAN与平行智能.  生成式对抗网络GAN GAN是Goodfellow在2014年提出来的一种思想,是一种比 ...

  6. 生成式对抗网络GAN(一)—基于python实现

    基于python实现生成式对抗网络GAN 构建和训练一个生成对抗网络(GAN) ,使其可以生成数字(0-9)的手写图像. 学习目标 从零开始构建GAN的生成器和判别器. 创建GAN的生成器和判别器的损 ...

  7. 深度学习之生成式对抗网络GAN

    一.GAN介绍 生成式对抗网络GAN(Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.模型通过框架中(至少)两个模块 ...

  8. 生成式对抗网络(GAN, Generaitive Adversarial Networks)总结

    最近要做有关图像生成的工作-也是小白,今天简单学习一些有关GAN的基础知识,很浅,入个门,大神勿喷. GAN目前确实是在深度学习领域最热门,最有前景的方向之一.近几年有关于GAN的论文非常非常之多,从 ...

  9. 生成式对抗网络GAN模型搭建

    生成式对抗网络GAN模型搭建 目录 一.理论部分 1.GAN基本原理介绍 2.对KL散度的理解 3.模块导入命令 二.编程实现 1.加载所需要的模块和库,设定展示图片函数以及其他对图像预处理函数 1) ...

最新文章

  1. java desktop类 能打开共享文件夹中的文件吗_计算机二级之JAVA篇
  2. jQuery mobile 中div圆角弹出层
  3. Leetcode 100. 相同的树 解题思路及C++实现
  4. window7开放端sqlserver端口
  5. 【收藏】wsl2 出现 Vmmem内存占用过大问题解决
  6. 客户端是选择Java Swing还是C# Winform
  7. 使用Select.HtmlToPdf 把html内容生成pdf文件
  8. 数字图像处理(三)——频域滤波
  9. css 圆点样式 优惠券样子
  10. python爬虫中for循环无法每一段输出_Python入门到掌握只需要这3大,4类,5大,6种,即可,附教程...
  11. 网络安全实验室 脚本关 解析
  12. Java输出竖排古典文字
  13. 笔记本计算机故障与诊断,笔记本电脑维护与故障诊断
  14. Photoshop选区选取详解
  15. 怎么找好看的html颜色代码?
  16. 基于实物的智能化仓储管理-InStock
  17. Maven的基本概念(三)
  18. 四叶草云演-CTF04# 后台管理系统
  19. 打开计算机不显示硬盘一直在加载中,硬盘加载不出来怎么办 下面5个步骤帮你解决...
  20. QT案例实战1 - 从零开始编写一个OCR工具软件 (6) 关于QThread线程的使用

热门文章

  1. maya2018英文翻译_maya2018英文怎么切换中文?
  2. P1618 三连击(升级版)【全排列next_permutation】
  3. java erp_用Java如何实现ERP系统?
  4. 公司用的 MySQL 团队开发规范,太详细了,建议收藏!
  5. 【Photoshop】把同一场景中但焦点不一样的多张照片合成一张焦点清晰的图片
  6. 原创:Eclipse 上网代理设置(亲测有效)
  7. php 短信接口验证码,PHP代码示例_PHP验证码短信接口 | 微米-中国领先的短信彩信接口平台服务商...
  8. 制作表白墙,给TA一个惊喜吧
  9. 塔望 - 食品品牌咨询 食品品牌全案策划服务公司
  10. “碳中和”研究为什么需要气象数据