GANs学习(GAN、wGAN)
原始GAN
GANs (Generative Adversarial Networks) [1]是2014年 Goodfellow 提出的,一种zero-sum博弈过程:生成器[generator] 和判别器[discriminator]之间的此消彼长
D和G play a two-player minimax game:
上式可以看出,判别器尽可能将来自真实数据的样本判别为1,将来自生成器的样本判别为0,即:尽可能的从生成数据中区分出真实的数据;生成器,最小化 log(1−D(G(z)) ,也就是说最小化生成数据和真实数据的样本,也可以理解为最大化 log(D(G(z)) ,最大化判别器犯错误的概率。生成器相当于对输入noise进行非线性变换(Noise或者先验一般是 均匀分布或正太分布)
训练时,交替更新Discriminator 和 Generator。论文中的伪代码:
生成器函数采用最小化 log(1−D(G(z)) ,当判别器训练好的时候,生成器函数梯度几乎为0;因而,原文中作者提出使用最大化 log(D(G(z)) 。
Global Optimality pdata=pg
- G fixed, optimal discriminator D :
V(G,D)=∫xpdata(x)log(D(x))dx+∫zpz(z)log(1−D(G(z)))dz=∫xpdata(x)log(D(x))+pg(x)log(1−D(x))dx
两边求导,可得最优的Discriminator D is:
D∗G(x)=pdata(x)pdata(x)+pg(x)
Thus
C(G)=Ex∼pdata(x)log(pdata(x)pdata(x)+pg(x))+Ex∼pg(x)log(pg(x)pdata(x)+pg(x)) D fixed, optimal generator G:
Theorem 1. The global minimum of the virtual training criterion C(G) is achieved if and only if pg=pdata . At that point, C(G) achieves the value −log 4。
证明:
已知 pg=pdata , 那么 D∗G=12 。 C(G) = log12+log12=−log4 。C(G)=V( D∗G ,D)减去它得到:
C(G)=−log(4)+KL(pdata||pdata+pg2)+KL(pg||pdata+pg2)=−log(4)+2×JSD(pdata||pg)
两个分布之间的Jensen–Shannon 距离总是非负的,且当 pdata=pg 时JSD为0。因而C(G)的全局最小值为 C∗=−log(4) 。wGAN
原始GAN存在着训练困难、生成样本缺乏多样性、生成器和判别器loss函数无法指示训练过程等问题,Wasserstein GAN通过简单的改变,实现了巨大的突破。主要改变有以下几点:
1. 判别器最后一层去掉sigmoid(这是由Wasserstein 距离决定的);
2. 生成器和判别器的loss不取log
3. 每次更新判别器的参数之后,把他们的绝对值限制到不超过一个常数c
4. 不要用基于动量的优化算法(Adam etc.),推荐RMSProp, 简单的SGD也可以
论文中的伪代码:
Wasserstein距离又叫 Earth-Mover(EM)距离,“推土机”距离。
直观上可以理解为:在 γ “路径规划下”,把 Pr 这堆”沙土”挪到 Pg “位置”所需要的“消耗”。而 W(Pr,Pg) 表示 “最优路径规划”下的“最小消耗”。参考https://zhuanlan.zhihu.com/p/25071913
Wasserstein距离相比KL散度、JS散度的优势在于,即使两个分布没有重叠,Wasserstein距离任然能够反应他们的远近。
[1] Goodfellow I, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]//Advances in neural information processing systems. 2014: 2672-2680.
[2]Arjovsky M, Chintala S, Bottou L. Wasserstein generative adversarial networks[C]//International Conference on Machine Learning. 2017: 214-223.