Generative Adversarial Network(李宏毅老师系列)

自学参考:
thispersondoesnotexist
Generative Adversarial Nets
GAN论文逐段精读
视频课
课件+资料
笔记

一、引入

输入network的,除了x以外还有一个从某一简单的(已知)分布中随机采样得到的一个random的variable z z z
在这里插入图片描述
分布:高斯分布、均一分布

方法:

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

从network输出的也将是一个分布。

  • Creativity
    在这里插入图片描述

  • Unconditional Generation:没有 x x x,只看 z z z
    Z是从一个normal distribution(z所选择的不同的distribution之间的差异并没有真的非常大,generator会想办法把这个简单的distribution对应到一个复杂的distribution。⇒可以简单地选择“正态分布”)里sample出来的向量,通常会是一个low-dimensional的向量
    一张图片就是一个非常高维的向量,所以generator实际上做的事情,就是产生一个非常高维的向量
    当你输入的向量不同的时候,你的输出就会随之改变
    在这里插入图片描述

  • Discriminator(判别器)
    在这里插入图片描述

  • Basic Idea of GAN
    在这里插入图片描述

二、GAN

Algorithm

以生成动漫人像为例

  1. 初始化generator与discriminator。开始以下迭代:

  2. Fix generator G, and update discriminator D
    (1)generator的参数,是随机初始化的,从这个高斯分布中,去random sample一堆vector丢到generator里,出一些图片会跟正常的二次元人物非常的不像。
    (2)对discriminator来说,这就是一个分类的问题,或者是回归的问题。需要拿真正的二次元人物头像,跟generator产生出来的结果,去训练你的discriminator,分辨他们的差异:
    ① 如果视作分类的问题,你就把真正的人脸当作类别1,Generator产生出来的,这些图片当作类别2,然后训练一个classifier
    ②如果视为regression的问题,让discriminator看到真实二次元人脸图片就输出1,看到生成的图片你就输出0
    在这里插入图片描述

  3. Fix discriminator D, and update generator G
    固定住判别器,训练Generator,目标是Discriminator的输出值越大越好
    ⇒假设Discriminator已经能够分辨照片的真假,让它觉得是真正的图片的话,那generator产生出来的图片,可能就可以以假乱真
    另一个角度,把generator跟Discriminator直接接起来,当做一个比较大的network来看待,通过调整前几层Generator部分的参数,使得整个模型的输出分数越大越好。
    用gradient ascent,调整generator,让目标函数越大越好。
    在这里插入图片描述

Theory

  • 目标objective:让生成器产生的和真实数据的分布尽可能接近
    • 从normal distribution中采样一堆vector给generator,产生一个较复杂的distribution,这个较复杂的distribution称为PG
    • 有一堆真正的Data形成了另外一个distribution,叫做Pdata
      我们的目标是PG和Pdata越接近越好
      在这里插入图片描述
  • 散度divergence衡量分布之间的距离
    通过sample数据,借助discriminator来计算
  • 训练discriminator
    • 看到real data,就给比较高的分数
    • 看到generative的data,就给比较低的分数
      在这里插入图片描述
  • 公式形式:
    • V:对于从Pdata里sample出来的真正的image,希望其评分越高越好;从PG即generator所产生的image,希望其评分越低越好
    • V式子经过推导可以发现,他和JS散度有关,可以衡量两个分布之间的距离
      在这里插入图片描述
  • 训练过程等价于训练一个二元分类器
    在这里插入图片描述
    其中,V的形式等价于crossentropy乘上负号
    在这里插入图片描述
  • 思考:
    • PG 跟 Pdata 很像,它们差距没有很大。这个时候Discriminator 就是在 Train 一个Binary Classifier,这个问题很难,所以你在解这个 Optimization Problem 的时候,你就没有办法让二元分类器训练任务的损失函数(交叉熵)很小,也就是没有办法让Objective 的值 V V V非常大
      ⇒小的 Divergence,对应 V V V 的Maximum 的值就比较小
    • 两组 Data 很不像,Divergence值很大,此时这个二元分类器就可以很轻易地分开,训练的损失函数很小,也就是目标函数 V V V的值很大
      ⇒大的 Divergence,对应 V V V 的Maximum 的值就比较大
  • 结论:用 m a x D V ( D , G ) max_D V(D,G) maxDV(D,G)代替 D i v ( D , G ) Div(D,G) Div(D,G)
    在这里插入图片描述
  • 不同的Obejctive 与 Divergence之间的对应关系
    在这里插入图片描述

三、Tips for GAN training

JS Divergence的特性

  • 生成的分布 P G P_G PG和真实数据的分布 P d a t a P_{data} Pdata重叠的部分非常小
    PG 跟 Pdata,它们都是要产生图片的。图片是高维空间里的一个非常狭窄的低维的 Manifold【是可以局部欧几里得空间化的一个拓扑空间,是欧几里得空间中的曲线、曲面等概念的推广】高维空间中随便 Sample 一个点都不是图片只有非常小的范围,Sample 出来会是图片。因而,这部分可以被sample出二次元头像的部分,可以理解为二维空间中的一条线。
    进而,PG 跟 Pdata,它们都是 Low Dimensional 的 Manifold,除非它刚好重合,不然它们相交的范围,几乎是可以忽略的。
    在这里插入图片描述

  • 基于Sample的Divergence衡量具有局限性
    ⇒难以采样到“重叠的点”
    由于我们无法得知 P G P_G PG P d a t a P_{data} Pdata的真实情况,只能通过采样来进行“推断”。对于 Discriminator 来说,如果 Sample 的点不够多、不够密,它那就算这两个 Distribution 实际上有重叠,也无法判断出来。
    ⇒可以事实上“划出一条线”,使得采样点毫无联系。
    在这里插入图片描述

  • 结合JS Divergence
    JS Divergence 的特性:两个没有重叠的分布,JS Divergence 算出来的值恒为 Log2,无法衡量这类(没有重叠的)分布之间的关系。
    问题:根据理论,这个 Discriminator 的 Loss,也就是Binary Classifier Loss越来越大时,代表问题越来越难,代表我们的 Generated Data,跟 Real 的 Data 越来越接近。但是Binary Classifier 训练完总是可以让它的正确率变到 100%, Loss没有什么意义
    ⇒两个分布始终很难接近
    在这里插入图片描述

使用Wasserstein distance(Earth Mover Distance)替代JS Divergence

  • Wasserstein Distance直观理解:“推土”距离的最小值
    ⇒穷举/优化问题
    用将一堆土P移到Q的位置的距离衡量两个分布P与Q之间的差异。
    在这里插入图片描述
  • Wasserstein Distance的作用:能够分辨出没有重叠Divergence的差距
    →实现两个分布从毫不相关到逐渐接近
    在这里插入图片描述

计算Wasserstein

在这里插入图片描述

  • y 如果是从 Pdata 来的,那我们要计算它的 D(y) 的期望值,希望越大越好
  • y 如果是从 PG 来的,我们计算它的 D(y) 的期望值,但是前面乘上一个负号,希望越小越好
  • D 必须要是一个足够平滑的 Function,不可以是变动很剧烈的 Function。从而,即使两个分布没有重叠时,也不会出现“过于剧烈”的D,保证收敛性。⇒避免了JS Divergence出现的问题。
    • 否则无法收敛(例如,置无限大)

在这里插入图片描述

how to train

实作过程中,往往在之前iterate的结果之上继续进行训练

  • 原始:限制参数大小
    ⇒并不一定能够让 Discriminator,变成 1-Lipschitz Function
    在这里插入图片描述

  • Gradient Penalty
    在 Real Data 这边取一个 Sample,Fake Data 这边取一个 Sample,两点连线中间再取一个 Sample,我要求这个点它的 Gradient 要接近1
    在这里插入图片描述

  • Spectral Normalization(SNGAN)
    →保证让它是 1-Lipschitz Function

  • GAN training的困难之处:这两个 Network,这个 Generator 跟 Discriminator,它们是互相砥砺,才能互相成长的,只要其中一者,发生什么问题停止训练,另外一者就会跟着停下训练,就会跟着变差。我们需要保证二者的loss在这一过程中不断下降。
    困难:Discriminator 跟 Generator,它们互动的过程是自动的。我们不会在中间,每一次 Train Discriminator 的时候都换 Hyperparameter。如果有一次loss没有下降,那整个训练过程都有可能出现问题。
    在这里插入图片描述

GAN for sequence Generation

由于取了max,这一运算使得Discriminator的score对decoder参数不可微分,也就不能做GD。

在这里插入图片描述
而GAN+RL难以训练

  • ScrachGAN:Train Language GANs Form Scrach
    直接从随机的初始化参数开始Train 它的 Generator,然后让 Generator 可以产生文字,它最关键的就是爆调 Hyperparameter,跟一大堆的 Tips
    在这里插入图片描述

有监督学习的生成模型

每一个图片都去配一个从 Gaussian Distribution Sample 出来的 Vector,Train 一个 Network,输入一个 Vector,输出就是它对应的图片,把对应的图片当做你训练的目标训练下去。
在这里插入图片描述

四、Evaluation of Generation

  • 直觉的方法:人眼来看⇒不客观、不稳定、代价高
  • 自动化方法:影像分类系统

Quality

对于一张图片而言
将图片输入影像辨识系统:

  • 这个概率的分布如果越集中,说明产生的图片能够被影像分类系统“很肯定地”分辨出来,代表说现在产生的图片可能越好。
  • 反之,如果产生的图像是“四不像”,图片分类系统感到困惑,概率分布变得平坦
    在这里插入图片描述

Diversity

对一批图片而言
Diversity-Mode Collapse(模型崩溃)
⇒训练输出的分布局限在很小的范围。
在这里插入图片描述
Diversity-Mode Dropping(模型丢弃)
⇒训练输出的分布范围较大,但没有完全覆盖真实数据分布(多样性减小)。
在这里插入图片描述
评估多样性:把影像辨识系统对所有生成结果的输出平均起来。

  • 平均分布集中⇒多样性低
  • 平均分布“均匀”⇒多样性高
    在这里插入图片描述

量化指标

  • Inception Score(IS)
    ⇒基于CNN的Inception网络
    将生成结果放进Inception网络,通过输出的分布结果来衡量。如果 Quality 高,那个 Diversity 又大,那 Inception Score 就会比较大
    在这里插入图片描述
  • Fréchet Inception Distance (FID)
    一些情况下,生成的图像是“同一类别”的,看“分布”并不合适。
    同样将图片送入Inception Network,取Softmax 之前的 Hidden Layer 输出的向量,来代表这张图片,利用这个向量来衡量两个分布之间的关系。
    ⇒假设真实数据和生成数据的两个分布,都是从高斯分布中抽样得到的,计算两个高斯分布之间的Fréchet Distance,越小代表分布越接近,图片品质越高。
    问题:
    • 将任意分布都视为“高斯分布”会有问题
    • 计算FID需要大量采样,计算量大。
      在这里插入图片描述
      利用FID衡量不同GAN的性能:Are GANs Created Equal,A Large Scale Study
      在这里插入图片描述

We don’t want memory GAN.

训练了一个 Generator,它产生出来的 Data,跟你的真实资料一模一样或者只是简单翻转,没有意义。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
其他的一些评价指标:
在这里插入图片描述

五、Conditional Generation

Text-to-image

操控 Generator 的输出,我们给它一个 Condition x,再从一个简单分布中抽样一个 z z z,让generator根据 x 跟 z 来产生 y。
例如,x 就是一段文字,对希望得到的人脸形象进行描述。
在这里插入图片描述

  • training
    Discriminator 不是只吃图片 y,它还要吃 Condition x。一方面图片要好,另外一方面,这个图片跟文字的叙述必须要是相配的,Discriminator 才会给高分。在这里插入图片描述
  • 准备资料:
    • 需要“图片-文字”的成对资料⇒高分
    • 需要准备“好图片-配错文字”的成对资料⇒低分
      在这里插入图片描述

Image Translation(pix2pix)

(pixel像素)

  • 给它房屋的设计图,然后让你的 Generator 直接把房屋搞出来
  • 给它黑白的图片,然后让它把加上颜色
  • 给它这个素描的图,让它把它变成实景实物
  • 那给它这个白天的图片,让它变成晚上的图片
  • 有时候你会给它,比如说起雾的图片,让它变成没有雾的图片,把雾去掉
    在这里插入图片描述
    单纯用 GAN 的话,它产生出来的图片,比较真实,但是它的问题是它的创造力,想像力过度丰富,如果你要做到最好,往往就是 GAN 跟 Supervised Learning,同时使用。

六、Learning from Unpaired Data

Cycle GAN:Learning from Unpaired Data
⇒Unsupervised Learning
我们有一堆X我们有一堆Y,但X跟Y是不成对的,就叫做unlabeled的资料。
在这里插入图片描述
以影像风格转换为例
在这里插入图片描述
问题归约:两个Domain之间的转换
在这里插入图片描述

  • idea1:

    • 套用原来的方法,将抽样的对象从“简单分布”改为 D o m a i n   x Domain\ x Domain x
    • 对于Discriminater,利用 D o m a i n   y Domain\ y Domain y中的图像训练,确保输出图片属于 D o m a i n   y Domain\ y Domain y
      在这里插入图片描述
      问题:
      可能会忽略输入图像,仅把它当做一个高斯噪声⇒Unconditional GAN.
      如何考虑“输入”的限制呢?
  • idea2:Conditional GAN⇒没有成对资料

  • idea3:Cycle GAN
    有一个循环,从X到Y 在从Y回到X,它是一个cycle,所以叫做Cycle GAN。利用这种架构,强迫你的generator输出的Y domain的图片,跟输入的X domain的图片,有一些关系
    所以现在这边我们有三个Network

    1. 第一个generator,它的工作是把X转成Y
    2. 第二个generator,它的工作是要把Y还原回原来的X
    3. 那这个discriminator,它的工作仍然是要看,蓝色的这个generator它的输出,像不像是Y domain的图
      在这里插入图片描述
      train两个generator:
    • 第一个generator它的工作是,把X domain的图变成Y domain的图
    • 第二个generator它的工作是,看到一张Y domain的图,把它还原回X domain的图
      经过两次转换以后,输入跟输出要越接近越好。
  • 双向Cycle GAN

    • 把这个橙色的generator拿来,给它Y domain的图片,让它产生X domain的图片
    • 然后在把蓝色的generator拿来,把X domain的图片,还原回原来Y domain的图片
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值