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

本文详细介绍了对抗生成网络(GAN)的基本概念,包括生成器与鉴别器的运作机制,以及GAN在动画人脸生成、序列生成等方面的应用。文章还探讨了GAN的训练目标、Wasserstein距离、模型评估指标Inception Score和FID,以及训练过程中可能遇到的挑战,如模式塌缩和多样性问题。

代码部分参考:李宏毅机器学习作业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

经过推导可以发现,𝑉(𝐷,𝐺)的最大值和JS divergence相关,详细的证明请参见 GAN 原始的 Paper。直观上也可以理解:如果Discriminator 很难分辨 PG 和 Pdata,没办法准确打分,那么Objective Function的最大值就比较小,所以小的 Divergence对应小的Max 𝑉(𝐷,𝐺),反之假如PG 和 Pdata 很不像,divergence大,Discriminator 很容易就把两者分开了,得到的Max 𝑉(𝐷,<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值