李宏毅《机器学习》2021版第15-18讲——生成对抗网络GAN

Network Generator

吃进x,再吃进一个已知分布可以sample出来的simple distribution z,得到一个complex distribution y。


Network Generator

为什么需要输出分布?
Video Prediction
给一段视频,预测后面的游戏画面。


why generator1

希望机器输出的时候小人同时有向左向右转的可能,具体向左还是向右根据输入的z决定。


why generator2

也就是当输出有一些随机性,需要解决一些创造力的任务的时候,就希望有一个generator。
举例:Drawing、Chatbot

GAN

各式各样的GAN

各式各样GAN

举个例子

Anime Face Generation


face generator

Discriminator

GAN训练的时候需要Discriminator,本质是neural network,作用是个function,如果输入是image,输出是数值scaler,数值越大,说明越接近真实图片。


Discriminator

Discriminator的架构可以是CNN,可以是transformer。

GAN的基础概念
Discriminator像一个天敌,帮助generator进化。

天敌

也可以说他们之间是对抗的关系(一种拟人化描述)。其实是亦敌亦友、相互促进的关系。


对抗

GAN演算

先初始化Generator和Discriminator参数,
在每一次迭代的时候:
Step1: 固定G,update D;
拿G产生的objects和database里sample出来的图片相比较,来训练D,训练目标是学着分辨真正的图片和G产生的objects之间的差异,可以当分类任务做,也可以当回归问题做。


GAN演算1

Step2: 固定D,update G;
训练Generator去骗过Discriminator,以假乱真。
实际操作是G输入一个vector,产生一个图片,再输入给D去打分,G训练的目标是让固定的D打的分数越高越好。
G和D可以看成一个大的network,其中某一层的hidden layer的输出就代表一张图片,现在希望通过调整参数这个大的network输出的分数越大越好,只是不会调后半段的参数。


GAN演算2

接下来就是以上过程再不停迭代。


GAN演算3

Anime Face Generation训练测试

随着训练次数增加,人脸越来越清晰。
这是训练5万次的结果。


face train1

结果还可以更好:


face train2
StyleGAN

还可以产生高清人脸。


Progressive GAN

不同人脸的输入向量做内差可以看到两张人脸之间连续的变化。


人脸内差

The first GAN

First GAN

Today… BigGAN

BigGAN

GAN目标

目标:PG接近Pdata,divergence是衡量2种分布之间差距的指标。


GAN目标

不需要实际算PG和Pdata分布差异,可以通过采样计算。


Sampling

训练Discriminator的目标是看到真的数据给比较高的分数,看到生成的数据给比较低的分数。
现在要找一个discriminator maximize objective function(要最小化某东西的叫loss function,要最大化某东西的叫objective function)。
事实上这个objective function就是cross entropy乘以一个负号,就是相当于在训练一个classifier。


Discriminator

这个max的值跟JS divergence有关。
如果PG和Pdata比较有差异,那么D可以比较容易分辨。


Divergence

既然D的function跟JS divergence有关,那么可以对G的optimization公式进行替换。


替换

刚刚的迭代过程就是在求解这个替换后的min max公式。


替换后公式

除了JS还可以有多种divergence。


多种divergence

但GAN还是不好train

Tips for GAN

JS divergence缺陷

JS divergence is not suitable.
原因有2:

  1. The nature of data.
    Both Pdata and PG are low-dim manifold in high-dim space.
    Pdata and PG 是高维空间投射到低维空间的两条线,这两条线重叠的可能性很小。
  2. Sampling
    如果sample的点不够多,即使他们分布相似,也没办法sample到重叠的部分。


    JS1

JS divergence的问题是如果两个分布没有重叠,那算出来的结果永远是log2。
第二个分布明显比第一个分布好,但是从JS的计算结果看不出差别。
有一个现象:如果是二元分类train GAN,最后总会得到100%的正确率,就导致看不出generator有没有越来越好。(因为sample不多,用硬背的也可以背住正确答案)。导致以前train GAN的时候只能用人眼看


JS2

Wasserstein Distance

于是就有了使用Wasserstein Distance的想法。
想象有一个推土机,要把P的土推给Q,推土的平均距离就是Wasserstein Distance。


Wasserstein distance

还有比较复杂的Wasserstein Distance,
把P变成Q的moving plan有很多,导致算出来的距离不一样。
为了让Wasserstein Distance只有一个值,会穷举所有moving plan,然后看哪一个moving plan可以让平均距离最小。


复杂Wasserstein distance

Wasserstein Distance可以解决上面JS divergence看不出差别的问题。


wdiverse比较好

WGAN演算

D必须是一个足够平滑的function,如果不对大括号做限制,如果真实数据和生产的数据没有重叠,generator会给真实值无限大正值,给生成值无限大的负值。training就会无法收敛。
加上平滑function的限制可以让真实值和生成值变化不会非常大,就会让真实值和生成值之间的差距不会很大。


WGAN演算1

这个式子具体怎么解?
Spectral Normalization可以实现smooth function。


WGAN演算2

GAN is still challenging…

Generate fake images to fool discriminator.
两者相互成长,如果有一个不再进步,另一个也会跟着停下来。


GAN challenge.png

还有一些tips,但是好不好用也不好说。


GAN tips ref

GAN for Sequence Generation

用GAN生成文字是最困难的。
把Decoder当成一个Generator,想要用Discriminator去train它让得到的分数越来越好,这件事做不到。
为什么呢?
Decoder如果有点变化,分数最大的talker(talker就是输出的文本单位,比如一个中文字)也没变化,输出的分数也没有改变。所以不能做gradient descent。
上次讲过,遇到不能gradient descent的时候,可以reinforcement learning(RL)硬train一发。


GAN seq2seq1

但是RL也很难train,所以很长一段时间train不出来sequence。
后来有篇paper train出来了。


GAN seq2seq2

除了GAN还有一些其他generative的model,比如variational autoencoder (VAE), FLOW-based model等。

Possible Solution

可以用network生成generator。


Solution

评估generator好坏

作业6是用了人脸检测的方法,那么一般的任务怎么辨别?


评估generator好坏1

用影像分类系统,出来的结果分布越集中代表产生的图片越好。


评估generator好坏2

光用这个方法,会有可能被Mode Collapse的现象骗过。这个现象是说有可能生成的data来来去去就几张。相当于这是discriminator的盲点。
这个问题至今没办法很好地解决,即使是爆搜参数。


Mode Collapseg

还有个问题是Mode Dropping,就是生产的数据只是真正的资料的一部分,单独看生产的资料可能觉得分布多样性也够,但真实的资料的多样性其实更好。这个问题还
不像Mode Collapse那样容易被看到。


Mode Dropping

怎么检测图片的diverse?

图片放到图片分类器输出distribution,每张图片都会生成一个distribution,把这些平均一下,如果平均的distribution非常集中,就代表现在的多样性不够。


检测diverse1

如果另一个case,平均完以后分布很平坦,则代表多样性足够。


检测diverse2

Inception Score:

quality只看一张图片,diversity看一堆图片,quality越集中越好,diversity越分散越好。
Good quality, large diversity —> Large IS
对于作业6的任务不适用,因为产生的都是人脸,对IS来说区别不大。

还有一个measure,叫FID

Frechet Inception Distance

CNN输出的时候,不取最后softmax分出的类别,而取中间hidden layer输出的高维度向量来代表一张图片。
假设真的图片和产生的图片都符合Gaussian分布然后计算两者之间的distance。distance越小越好。
但有两个问题:
1.不一定都符合Gaussian分布;
2.需要大量的sample。


FID

有一篇跑了各种GAN,用不同的random seed跑,用FID分数评估,分数越小越好。
不同random seed结果变化很多,GAN的表现都差不多,但比VAE的表现好。


FID ref

We don’t want memory GAN

还有个问题:不希望产生跟训练资料一模一样的人脸。


memory

所以评估generator这件事还是很难。

还有一些其他的mesure的ref


GAN evaluation

Conditional generation

给y的分布一个限制,把条件x输入给generator。
比如text-to-image这种任务,在输入的文字中给出条件。


text2image

Conditional GAN的Discriminator需要输入成对的生成的图片和相应的条件。


Conditional GAN

Conditional GAN还有更多应用——image translation

图片变图片:房屋设计图变成真的房子,黑白图着色,图片去雾。
用GAN+supervised去训练这种任务效果比较好。


GAN+supervised

声音转图片

声音变图片1

声音变图片2.png

图片动起来

Conditional GAN还可以让图片动起来,让蒙娜丽莎讲话。


图片讲话

GAN用于unsupervised learning

Learning from unpaired data
有一些问题没有成对label的data。


GAN用于unpair1

可以训练一个generator,输入是Domain x的分布,输出是Domain y的分布。


GAN用于unpair2

Cycle GAN

原始GAN是从Gussain sample出来作为输入,现在换成从Domain x里面sample。


Cycle GAN1

但是这样做还不够,因为输入和输出还没有关联。


Cycle GAN2

解决:增加一个generator,让输出的Domain y再还原回Domain x,这个还原的结果跟原Domain x越接近越好。这个就是cycle gan。为了让第二个generator能够成功还原,第一个generator输出的结果不能跟输入差太多。


Cycle GAN3
Cycle GAN4

Cycle GAN还可以双向。


Cycle GAN5

还有其他的算法跟Cycle GAN作用类似。


DiscoGAN
StarGAN

脸变二次元的网站


脸变二次元

Cycle GAN应用:文字风格转换

Text Style Transfer


文字转换1
文字转换2
文字转换结果

一些Cycle GAN的unpaired应用

-Unsupervised Abstractive Summarization: 提炼摘要
-Unsupervised Translation: 无监督翻译
-Unsupervised ASR: 语音到文字


一些GAN Unsupervised例子

GAN remarks

GAN remarks

我自己的GAN总结:

  1. Network Generator适用于一些需要创造力的任务,Generator的输入是x和simple distribution z,得到一个complex distribution y。GAN训练的时候需要对抗的Discriminator,本质是neural network,作用是个function,如果输入是image,输出是数值scaler,数值越大,说明越接近真实图片。Discriminator的架构可以是CNN,可以是transformer。GAN训练的时候先固定G,update D;再固定D,update G,接下来不停迭代。GAN的训练目标是PG接近Pdata,divergence是衡量2种分布之间差距的指标,可以通过采样计算分布差异,可以用JS divergence衡量。JS有缺陷,就是只要PG和Pdata分布无重叠就分辨不出差别,用Wasserstein Distance可以解决,WGAN演算的时候需要一个足够平滑的function,Spectral Normalization可以实现smooth function。GAN生成Seq比较难,可以reinforcement learning硬train但还是难,不过ScrachGAN可以实现。除了GAN还有一些其他generative的model,比如variational autoencoder (VAE), FLOW-based model等。
  2. Generator如何评估好坏?比如可以用图片分类系统评价单张图片,出来的结果分布越集中代表产生的图片越好。但是Mode Collapse (生成的图片来回只有几张)和Mode Dropping (生产图片多样性虽够但也只代表一部分)的问题导致评估还是比较难。怎么检测图片的diverse?所有图片放到图片分类器输出distribution,平均一下以后越分散说明代表性越好。Diverse的measurer有Inception Score (Good quality, large diversity)和Frechet Inception Distance (CNN输出的时候,取中间hidden layer输出的高维度向量来代表一张图片)等。
  3. Conditional generation是指输入的x包含条件,比如text-to-image这类任务。Conditional GAN的Discriminator需要输入成对的生成的图片和相应的条件。Conditional GAN的应用还有image translation、声音变图片、图片动起来。
  4. GAN还可以用于unsupervised learning,就是训练一个generator,输入是Domain x的分布,输出是Domain y的分布。再加第二个generator让Domain y还原成Domain x就是Cycle GAN。还有其他的算法跟Cycle GAN作用类似如DiscoGAN、DualGAN、StarGAN。Cycle GAN应用有人脸变二次元、文字风格转换、无监督提炼摘要、无监督翻译、无监督语音转文字。

b站学习链接:https://www.bilibili.com/video/BV1JA411c7VT?p=15

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容