github地址:https://github.com/openai/improved-gan/
What:
提出了对于GANs新的结构和训练过程。主要focus在两个应用:半监督学习 和 更好的图像产生。
对于G,不要求一个和test data和像的模型,也不要求不使用label。
实验中,D在半监督分类任务上达到了state-of-art的结果。
G在MNIST样本人已经无法分辨,CIFAR10的样本人也有21.3%的概率认错。
How:
训练GANs 其实是一个找纳什均衡的问题。但这个均衡很难找到,cost函数不是凸的。
所以引入了一些策略来鼓励收敛。
1. Feature matching
为G设定一个新的目标函数。
替代原先的最大化D的目标,新的目标是用G去产生数据来匹配真实数据。 D还是和原来一样。
f(x) 代表D中的一个中间层,新的目标函数为 f(G(x)) 和 f(z) 的二范数最小。
2.minibatch discrimination
孤立的看一个个sample,容易使G收敛到一个点(这就是我之前跑实验常遇到的问题啊!!!)
之前DCGAN里面用batch normal其实也是为了让D不孤立的去看sample。
所以作者提出了使用minibatch discrimination,意思是我们不孤立的看sample,加入sample之间的信息,来写D。(G的objective不变,还是最大化D)
公式的主要意思是,除了D中原来的f(x)外,加入一个信息,就是minibatch 中 f(x)之间的距离 (在bp的时候会有作用)
(作者还提到在训练分类器时,feature matching会表现得更好)
3.Historical averaging
加入了一个正则项。
4.One-side label smoothing
把gt的label 从1,0变成0.9,0.1
generate还是 1和 0
5.VBN
batch normalize 依赖minibatch里面的其他数据。这会有影响。所以提出了一个 virtual batch normalise
每次sample的时候另外再sample一个batch 根据这个batch做norm (这只使用在G中)