#! https://zhuanlan.zhihu.com/p/670760702
对抗生成 GAN 学习笔记
初识
生成器
Generater
在一个简单的随机领域上,然后通过 Network,输出一个复杂或者说随机的分布。
当任务需要一点创造力的时候,需要用 Distribution 来指定不同的输出。
Unconditional generation
是否存在 condition x 分为两种
|
从低纬度到高纬度,输入一个简单的 Vector 比如,可以生成一个 48 _ 48 _ 3 的图片
Discriminator
可以用 CNN,也可以用 Transformer,只需要能够给 Generater 生成的图像打分就可以了(也可以用分类,真实的就是一类,不真实的又是一类)
Adversarial
Step 1
固定 Generator,更新 Discriminator,让鉴别器能够分辨真的和假的
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就是从源数据里面随机出来的,
对于鉴别器
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)=Ey∼Pdata[logD(y)]+Ey∼PG[log(1−D(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)=21∑p(x)log(p(x)+q(x)p(x))+21∑q(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{Ex∼Pdata[D(x)]−Ex∼PG[D(x)]}
:::info{title=“SNGAN”}
因为 WGAN 没有很好的方法能够让 D 足够的平滑,因此 Spectral Normalization(SNGAN)-> keep gradient norm smaller than 1 everywhere,目前看来效果较好。
一些较好的 Tips:
- Tips from Soumith: code
- Tips in DCGAN: paper
- Improved techniques for training GANS: paper
- Tips from BigGAN: paper
:::
GAN 用来生成序列是最难的
直到一篇论文是 Scratch GANS,用了一个 SeqGAN-step 的方法
|
|
GAN 的评估
Quality of image
- 用一个图片分类系统,最后得到的分类(概率)越集中,就说明 Generator 的效果很好。
- Mode Collapse,中文又称模式奔溃,主要出现于 GAN 训练的后期阶段,生成器生成图像样式单一问题.(相当于盲点被 Generator 抓到了,无法被鉴别器识别出来)
一张图片的概率需要集中,所有图片的概率越平均越好。 3. Frechet Inception 距离:(FID)是评估生成图像质量的度量标准,专门用于评估生成对抗网络的性能。 4. 等等 20 种评估的方法,GAN 的评估是相对比较复杂的。
Conditional generation
应用
- 因为一开始就是为了骗过鉴别器,所以可能只会为了骗过鉴别器而不管文字 condition
- 因此需要 Pairs data,看到配对的结果才打高分
3. 当然不仅仅只有图片和文字的配对,还能 Pix2pix 4. 同时骗过鉴别器和输入图片越来越像,监督学习+GAN 5. voice2Img
Unpaired data
比如图像风格转化,需要转变一个思路,需要从 Domain X 经过网络输出 Domain y 分布就行,然后需要用一个鉴别器分辨输出和 y domain 的区别。
但是有一个问题,输出可能和输入没有什么关系,只为了生成一个 Domain y 类似的。并且现在没有成对的资料,无法判断和输入的关系
Cycle GAN
增加一个额外的 GAN,让输出能够经过网络变回原来的图像。就变成三个 network 了