GANS学习笔记

#! https://zhuanlan.zhihu.com/p/670760702

对抗生成 GAN 学习笔记

初识

生成器

Generater

在一个简单的随机领域上,然后通过 Network,输出一个复杂或者说随机的分布。

image.png

当任务需要一点创造力的时候,需要用 Distribution 来指定不同的输出。
image.png

Unconditional generation

是否存在 condition x 分为两种

image.png
|

从低纬度到高纬度,输入一个简单的 Vector 比如,可以生成一个 48 _ 48 _ 3 的图片

image.png

Discriminator

可以用 CNN,也可以用 Transformer,只需要能够给 Generater 生成的图像打分就可以了(也可以用分类,真实的就是一类,不真实的又是一类)

image.png

Adversarial

Step 1

固定 Generator,更新 Discriminator,让鉴别器能够分辨真的和假的

image.png

Step 2

固定鉴别器,更新生成器,能够 fool Discriminator,相当于为了让最后的分数越来越大(梯度下降)

反复训练

Theory behind GANS

对于生成器 1

G ∗ = a r g m i n G D i v ( P G , P d a t a ) , D i v e r g e n c e   b e t w e e n   d i s t r i b u t i o n s   P G   a n d   P d a t a G^* = arg\underset {G}{min}Div(P_G,P_{data}), Divergence\space between\space distributions\space P_G \space and \space P_{data} G=argGminDiv(PG,Pdata),Divergence between distributions PG and Pdata

P d a t a P_{data} Pdata就是从源数据里面随机出来的,
image.png

对于鉴别器

D ∗ = a r g m a x D V ( D , G ) V ( G , D ) = E y ∼ P d a t a [ l o g D ( y ) ] + E y ∼ P G [ l o g ( 1 − D ( y ) ) ] D^* = arg\underset{D}{max} V(D,G) \\ V(G,D) = E_{y\sim P_{data}}[logD(y)] + E_{y\sim P_G}[log(1-D(y))]\\ D=argDmaxV(D,G)V(G,D)=EyPdata[logD(y)]+EyPG[log(1D(y))]

其实可以从公式就能看出,让 D 去识别 y(从 data 还是 G 得到的)前一部分,尽量让 data 来的数据为 1,让 G 来的数据为 0

对于生成器 2

其实对于 D i v ( P G , P d a t a ) Div(P_G,P_{data}) Div(PG,Pdata),其实就是 D 取某一个参数,让 V(D,G)最大的时候的值,即

G ∗ = a r g m i n G m a x D V ( D , G ) G^* = arg\underset{G}{min} \underset{D}{max} V(D,G)\\ G=argGminDmaxV(D,G)

说白了就是,在 D 能够最好地分开 G 生成的数据和真实 data 的情况下,让生成器能够生成和真实 data 差距最小的值。

Distance 的选取

JS(Jenson’s Shannon) divergence is not suitable

因为

J S D ( P ∣ ∣ Q ) = 1 2 ∑ p ( x ) l o g ( p ( x ) p ( x ) + q ( x ) ) + 1 2 ∑ q ( x ) l o g ( q ( x ) p ( x ) + q ( x ) ) + l o g 2 JSD(P||Q)=\frac{1}{2}\sum p(x)log(\frac{p(x)}{p(x)+q(x)})+\frac{1}{2}\sum q(x)log(\frac{q(x)}{p(x)+q(x)}) + log2\\ JSD(P∣∣Q)=21p(x)log(p(x)+q(x)p(x))+21q(x)log(p(x)+q(x)q(x))+log2

因此,对于在高维空间不重合的两个 P G P_G PG P d a t a P_{data} Pdata的话,会得到一个常数 log2,一是无法反应二者距离,二是无法进行梯度更新。

Wasserstein distance(WGAN)

“推土机”把 P 移动到 Q 需要移动的距离,穷举所有的 moving plans,用平均最小移动距离指代。

m a x D   h a s   t o   b e   s m o o t h   e n o u g h { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] } \underset{D\ has\ to\ be\ smooth\ enough}{max}\{ {E_{x\sim P_{data}}[D(x)]} -{E_{x\sim P_{G}}[D(x)]}\}\\ D has to be smooth enoughmax{ExPdata[D(x)]ExPG[D(x)]}

image.png

:::info{title=“SNGAN”}
因为 WGAN 没有很好的方法能够让 D 足够的平滑,因此 Spectral Normalization(SNGAN)-> keep gradient norm smaller than 1 everywhere,目前看来效果较好。
一些较好的 Tips:

  1. Tips from Soumith: code
  2. Tips in DCGAN: paper
  3. Improved techniques for training GANS: paper
  4. Tips from BigGAN: paper
    :::

GAN 用来生成序列是最难的

直到一篇论文是 Scratch GANS,用了一个 SeqGAN-step 的方法

| image.png
image.png |

GAN 的评估

Quality of image

  1. 用一个图片分类系统,最后得到的分类(概率)越集中,就说明 Generator 的效果很好。
  2. Mode Collapse,中文又称模式奔溃,主要出现于 GAN 训练的后期阶段,生成器生成图像样式单一问题.(相当于盲点被 Generator 抓到了,无法被鉴别器识别出来)

image.png
一张图片的概率需要集中,所有图片的概率越平均越好。 3. Frechet Inception 距离:(FID)是评估生成图像质量的度量标准,专门用于评估生成对抗网络的性能。 4. 等等 20 种评估的方法,GAN 的评估是相对比较复杂的。

Conditional generation

应用

  1. 因为一开始就是为了骗过鉴别器,所以可能只会为了骗过鉴别器而不管文字 condition
  2. 因此需要 Pairs data,看到配对的结果才打高分

image.png 3. 当然不仅仅只有图片和文字的配对,还能 Pix2pix 4. 同时骗过鉴别器和输入图片越来越像,监督学习+GAN 5. voice2Img

Unpaired data

比如图像风格转化,需要转变一个思路,需要从 Domain X 经过网络输出 Domain y 分布就行,然后需要用一个鉴别器分辨输出和 y domain 的区别。

image.png
但是有一个问题,输出可能和输入没有什么关系,只为了生成一个 Domain y 类似的。并且现在没有成对的资料,无法判断和输入的关系

Cycle GAN

增加一个额外的 GAN,让输出能够经过网络变回原来的图像。就变成三个 network 了

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值