1. Tips for Improving GAN - WGAN, EBGAN
首先是JS divergence失效的原因
input domain和Generator domain大概率没有overlap
两个原因
- image分布是高维空间的低维manifold, 很难找到两个分布overlap, 意思就是image分布很稀
- 即使有overlap, 你只sample几个点, 靠这几个点算divergence, 也大概率会认为这两个分布没有overlap
总之一句话, 就是分布本来就很稀, sample了更稀, 很难认为这么稀的两摊分布有overlap
那没有overlap有什么问题呢?
只要没有overlap, JS divergence算出来就是log2, 不管它们是否有试图靠近, 就是说JS divergence不管你的GAN有多努力
直觉上, 在原始的GAN,当你train的是一个binary classifer的, 只要没有overlap, 那这个classifier分辨这两堆data的能力就是一样的, 所以不会存在PG0到PG1的进步, 因为老师没有进步, 它对于PG0和PG1数据的给分是一样的
实际在train的时候, 希望是蓝色点顺着红色的曲线向蓝色点改变, 实际根本train不动, 因为蓝色点附近梯度都是0, iteration没有效果, 过去的解法是不要把discriminator train的太好, train的越好红色线就越陡, train的不太好就可以在蓝色点附近保有一些斜率, 要不genorator就train不动
一个解决方法LSGAN, 把sigmoid换成linear
WGAN就是换一个Divergence, 不用JS, 而用Earth Mover`s Distance
铲土从P到Q, 走的平均距离就叫做Earth Mover`s Distance
铲土的方法有很多, 什么才是Earth Mover`s Distance, 穷举所有铲土计划, 用最小的平局距离作为Earth Mover`s Distance
why Earth Mover`s Distance, 就是G50一定要比G0好, 李老师右上角那个例子就是说进化一定要有好处, 否则这个方向就不会被持续下去
直观理解wasserstein distance
- 从Pdata sample出的x的discriminator D(x)要尽量大, 从PG sample出的x的discriminator D(x)要尽量小
- D要符合1-lipschitz函数, 要足够平滑
开始给discriminator加constraint的方式是weight clipping, 但这招实际不行, 不没有真的限制D为1-lipschitz
实际上有用的是WGAN-GP
把D∈1-lipschitz换成等价的条件, 但是这个等价的条件依然很难达到, 是要对所有的采样x, 整个Image space, 都要对梯度大于1的D(x)惩罚, x不能穷举所有sample, 所以换成了计算Ppenalty分布里sample出来x的惩罚
直观理解为什么用Ppenalty有用, 因为Genorator是看着Discriminator给的方向来把Pdata往Pdata挪, 所以实际上对update参数有影响的只有在Pdata和Pdata中间分布的这些数据
对WGAN的另外一个改进, 把对D(x)大于1梯度的惩罚变成偏离1的惩罚, 这个就没有什么理论支撑了, paper里面写的也是experimentally
原先的GAN算法
改成WGAN后的算法
EBGAN
改变discriminator的做法, 如果有一张图它能够被reconstruction的越好, 它就是一张high-quality的real data, 如果它很难被reconstruction, 就证明它是一张fake data, 这个理论基础就是自然图像的低秩性
这个的好处是可以pretrain的, 你只要给它positive example然后minimize loss就好了, 这个就避免了train GAN的时候开始D网络太弱, 没有分辨能力, 只有等G起来了以后它才有
Hard to reconstruct, easy to destroy, 所以我们训练EBGAN不能直接追求discrimanor判断fake data越小越好, 这样的话容易把D(fake data)出噪声, 只要小于某个margin m就好