代码部分参考:李宏毅机器学习作业6-使用GAN生成动漫人物脸_iwill323的博客-CSDN博客

目录

基本概念介绍

生成器(generator)

什么时候需要输出一个分布

Generative Adversarial Network (GAN)

​discriminator(鉴别器)

GAN的基本思想和算法

应用实例

Anime Face Generation(动画人脸生成)

Progressive GAN——真实人脸生成

The first GAN

BigGAN

设定目标与训练

GAN 的训练目标:让生成器产生的与真实数据之间的分布接近

借助Discriminator 的力量计算 Divergence

从Objective Function到JS divergence

使用其他的divergence

JS divergence存在的问题

PG和Pdata重叠的范围很小

重叠部分少导致的问题

Wasserstein distance

Wasserstein distance概念:另一种计算divergence的方法

Wasserstein distance好处

计算方法和WGAN

GAN is still challenging

GAN for Sequence Generation

Conditional Generation(CGAN)

cycle GAN

实现方式

More style-transfer GAN

StarGAN

Text Style Transfer

文本摘要

无监督翻译

无监督语音辨识

生成器效能评估

图片质量:对一张图片

图像的多样性:对所有(一批)图片

模型崩溃Mode Collapse

Mode Dropping

Mode Collapse与Mode Dropping的区别

如何衡量生成图片的多样性

量化指标

Inception Score (IS)

Frechet Inception Distance (FID)

We don’t want memory GAN

其他的评估办法

总结


基本概念介绍

生成器(generator)

区别于给定x输出y的神经网络,现在给神经网络的输入添加一个从简单分布(Simple Distribution)中随机采样的变量,生成一个复杂的满足特定分布规律的输出(Complex Distribution)

分布:高斯分布、均一分布

z所选择的不同的distribution之间的差异并没有真的非常大,generator会想办法把这个简单的distribution对应到一个复杂的distribution。所以可以简单地选择“正态分布”

方法:

  • X,Z两个向量直接接起来,变成一个比较长的向量,作为network的input
  • X跟Z正好长度一样,相加以后当做network的input

什么时候需要输出一个分布

当我们的任务需要一点创造力的时候,一个输入有多种可能的输出,这些不同的输出都是对的,但又只需要输出一个对象,这时就需要使用generator,在网络中加入随机输入,让网络在复杂分布中随机选择一个对象输出(输出有几率的分布)。

Generative Adversarial Network (GAN)

GAN是众多generator中比较有代表性的一个,而GAN的种类也非常多,常常会出现重名的GAN和奇奇怪怪的GAN名字。

以unconditional generation(不考虑x,只考虑z)为例,假设Z是从一个normal distribution里采样出来的向量,通常会是一个low dimensional的向量,维度是你自己决定的,丢到generator裡面,输出一个非常高维的向量,希望是一个二次元人物的脸

discriminator(鉴别器)

Discriminator也是一个神经网络(可以考虑使用CNN、transformer等),可以将generator输出的图像转换成数字,越接近于1,说明图像越真实,品质越高。

GAN的基本思想和算法

generator和discriminator是对抗关系,discriminator通过真实的图像来监督generator的图形生成,两者不断相互进化。

1、随机初始化generator和discriminator。

2、固定generator不变,更新discriminator。

将generator产生的图像和数据库样本比较,让discriminator分辨二者之间的差异,从而把二者区分开。具体地说,就是 real ones 经 0过 D,输出值大(接近 1),generator 产生的数据 (generated ones) 经过 D,输出值小(接近 0)。

该训练可以当作分类的问题来做(把样本当作类别1,Generator產生的图片当作类别2),然后训练一个classifier;也可以当作regression的问题来做(样本对应输出1,generator產生的图形对应输出0)

3、固定discriminator不变,更新generator。

从gaussian distribution采样作為generator输入,產生一个图片,把这个图片丢到Discriminator裡面,Discriminator会给这个图片一个分数,Generator训练的目标是要Discriminator的输出值越大越好,说明它产生的数据可以以假乱真

4、不断循环上述过程,直至产生很好的图像

实际中可以把 generator 和 discriminator 组成一个大的网络结构,如下图所示,前几层为 generator,后几层为 discriminator,中间 hidden Layer 的输出就是 generator 的输出,更新generator的时候就只更改前面几层,而更新discriminator的时候就只更改后面几层。

理解:

Generator 或 Discriminator每次只有一个在训练。训练时,所掌握的是对方上一轮训练的信息。其实这就像是双方每一次交手后,知道对方最新的技术水平,然后回去提升自己。精妙,但是对训练过程提出了更高要求:如果其中一个训练过程中某几步loss上升,就会对另一个的训练会产生负面影响,后者又可能会对前者产生负面影响,恶性循环,导致训练“坏掉”。

应用实例

Anime Face Generation(动画人脸生成)

Progressive GAN——真实人脸生成

生成“没有看过的\连续变化的”人脸。generator输入一个向量 输出一张图片。把输入的向量,做内插interpolation,看到两张图片之间连续的变化。

The first GAN

BigGAN

设定目标与训练

GAN 的训练目标:让生成器产生的与真实数据之间的分布接近

从给定简单的 Normal Distribution 采样数据,经过 Generator,得到的输出分布PG,使其接近目标分布Pdata。于是要计算PG与Pdata这两个分布之间的距离,用Divergence表征,找一个genenrator尽量使Divergence小。

问题在于我们无法知道PG和Pdata的分布。GAN 告诉我们,不需要知道 PG 跟Pdata的分布具体长什麼样子,只要能从 PG 和 Pdata这两个分布中采样,就有办法算 Divergence。

关于采样:从数据库裡面随机采样一些图片出来,就得到 Pdata;从 Normal Distribution 裡面采样向量丢给 Generator,让 Generator 產生一堆图片出来,那这些图片就是从 PG采样出来的结果

借助Discriminator 的力量计算 Divergence

Discriminator训练目标是看到Pdata给一个较高的分数,看到PG给一个比较低的分数。这个 Optimization 的问题如下(要Maximize 的东西叫 Objective Function,如果 Minimize 就叫它 Loss Function):

之所以写成这个样子,是因为在最开始设计时,希望在训练Discriminator时能够按照分类问题的方式考虑,事实上这个 Objective Function 就是 Cross Entropy 乘一个负号。Discriminator可以当做是一个分类器,它做的事情就是把从 Pdata 采样出来的真实 Image当作 Class 1,把从 PG 采样出来的假 Image当作 Class 2,训练过程等价于训练一个二元分类器

从Objective Function到JS divergence

经过推导可以发现,

​李宏毅机器学习——对抗生成网络(GAN)相关推荐

  1. 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow)

    图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow) 文章目录 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网 ...

  2. 深度学习代码实战演示_Tensorflow_卷积神经网络CNN_循环神经网络RNN_长短时记忆网络LSTM_对抗生成网络GAN

    前言 经过大半年断断续续的学习和实践,终于将深度学习的基础知识看完了,虽然还有很多比较深入的内容没有涉及到,但也是感觉收获满满.因为是断断续续的学习做笔记写代码跑实验,所以笔记也零零散散的散落在每个角 ...

  3. 对抗生成网络GAN(优化目标篇)

    对抗生成网络GAN(优化目标篇) 快要面试,故对GAN进行稍许复习 目的 对抗式生成网络GAN提出的目的是估计样本的密度函数pr(x;θ)p_r(x;\theta)pr​(x;θ),且并不显式的估计密 ...

  4. 深度学习对抗生成网络--GAN

    导读:GAN的风暴席卷了整个深度学习圈子,任何任务似乎套上GAN的壳子,立马就变得高大上了起来.那么,GAN究竟是什么呢? 相关资料下载 加助教小姐姐的威信即可免费获取: 1. GAN的基本思想 GA ...

  5. pytorch学习笔记-----对抗生成网络GAN

    生成器,判别器 G:生成网络生成的都为假的 D:判别网络判别真实数据与来自生成网络的假数据 判别网络其实就是进行一个图像二分类 生成网络需要fc层输出个数为h*w*c(c=1or3 即为一张图片的形式 ...

  6. 李宏毅对抗生成网络 (GAN)教程(1)Introduction

    视频链接:https://www.bilibili.com/video/BV1tE411Z78A 在李宏毅GAN教程(1) 的基础上增添修改内容 文章目录 Basic idea of GAN 生成器G ...

  7. 李宏毅对抗生成网络 (GAN)教程(2) Conditional Generation by GAN

    文章目录 Conditional GAN 介绍 具体算法 设计Discriminator Stack GAN 图片到图片 Patch GAN 应用在speech enhancement Video G ...

  8. 一文通俗了解对抗生成网络(GAN)核心思想

    目前有时间的时候学习一下gan的知识,但是时间也不多,这里记录一下所学,不要太期待喔,完全是学习李宏毅老师课程的笔记,由于是新手,欢迎大家交流指错. 引言 GAN已经作为一种思想来渗透在ML的其余领域 ...

  9. Tensorflow 对抗生成网络GAN 不服就GAN

    这一节的回顾也意味着深度学习基础课程学习进入了尾声了,GAN作为性能远超我们上一节提到的VAE的一个存在还是有很多出彩的地方的: 首先引用理查德费曼的一句话-'What I cannot create ...

最新文章

  1. javascript 对象的设计模式
  2. 剑指offer之题解目录(全)
  3. electron 屏幕标注_屏幕 | screen (screen) – Electron 中文开发手册
  4. 计算机硬件统的构成,计算机硬件统的构成部件.ppt
  5. mysql生产环境加索引_【生产篇】_MySQL环境下如何查看基于表的索引定义
  6. sap bom递归_SAP软件之化工行业特点01
  7. 百度音乐 android,千千音乐(com.ting.mp3.android) - 8.2.3.4 - 应用 - 酷安
  8. java connection 单例_Java设计模式之单例模式详解
  9. JAVA求n个数里最小的k个_n个数 找到最小的k个数 几种解法 和java实现
  10. acc 蓝牙_蓝牙中的三种音频编码:Apt-X、SBC、AAC,请问分别有什么区别?
  11. grep -A -B -C
  12. NLPCC2021.10.14
  13. Java 反射操作(完全版)
  14. uniapp实现附有二维码的图片的本地保存
  15. 130 余个超实用网站
  16. php类的定义与实例化方法
  17. Down友庆新年,下载中心新版分享达人排行赛开始!【已结束】
  18. VS语音信号处理(6) C语言调用SoundTouch进行变速不变调工程实例
  19. 数值分析实验 实验1-1 拉格朗日插值公式 python3实现
  20. 金凤镇流动人口信息管理系统

热门文章

  1. 电脑不能进入睡眠模式
  2. 浅拷贝(shallow copy)和深拷贝(deep copy)
  3. linux 零拷贝goodlen,linux零拷贝技术
  4. JS--拷贝数组的方法(浅拷贝)
  5. 论投资六字心经——买预期,卖事实
  6. QQ聊天消息之bak文件备份方法
  7. java计算机毕业设计vue健康餐饮管理系统设计与实现(附源码、数据库)
  8. SE11 创建搜索帮助
  9. cad打开卡死_cad一点打开文件就卡死么办_cad打开某个文件很卡解决方法-win7之家...
  10. C#链接mysql数据库入门