训练GANs 其实是一个找纳什均衡的问题。但是找高维连续非凸问题的纳什均衡点是很困难的。而且,在GAN的训练中我们通常是通过梯度下降法来最小化代价函数的,而不是去找纳什均衡点,所以我们经常会碰到无法收敛的情况。
所以我们提出了几个有助于收敛的技术:
1.Feature matching(更好的分类效果)
生成器弃用了之前最大化判别器输出的目标函数。具体化了生成器的目标函数,克服了之前的损失函数存在的过度训练判别器后产生的问题。
生成器把判别器的中间层输出作为目标,尽量使生成样本的中间输出和真实样本的中间输出相似。目标函数如下:
2.Minibatch discrimination(更好的视觉上的生成结果)
GAN的一个常见的失败就是收敛到同一个点。这是因为判别器是对每一个样本单独处理的,他们之间没有联系,判别器也无法告诉生成器它生成的样本是不是相似的。生成器所有输出都是朝着一个目标走的:让判别器认为它是真的 。
这里我们引入了side information,让D能够看到更多的信息,从而可以指导G它生成的样本是否相似。
在判别器中加入如下结构:
xi是输入向量(第i个样本的特征向量)。
f(xi)是判别器中间层的输出向量。
每个样本经过T之后都能得到各自的矩阵Mi,计算当前样本矩阵Mi中每行同其它各个样本的Mj之间对应行的L1距离,并经过一个负指数得到一系列的值,把每行对应的值加起来,最终得到一个输出向量。
把o(xi)和f(xi)连起来构成side information作为下一层的输入(这里的o(xi)相当于CGAN中的conditional)。随后的D仍旧是对单个样本进行判别,但是用到了包含其他样本的信息。
3.Historical averaging
添加了一个正则化项:
:参数theta和它们过去时候的值有关。
有了这个正则化项,梯度不容易进入稳定轨道,能够继续向均衡点更新。
对低维连续非凸问题处理的比较好。
4.One-sided label smoothing
判别器的目标函数中正负样本的系数不再是0-1,而是α和β。这样最优判别器就变成了:
当Pdata接近0,Pmodel很大的时候,D(x)很小,优化时梯度信息太弱,因此负样本beta取0;
5.Virtual batch normalization
BN存在的问题:输入样本x在神经网络上的输出会受到minibatch上其它样本的影响。
文中提出了一种virtual batch normalization(VBN),会在训练前提取一个batch,以后就根据这个batch做normalize,当然这样计算开销会稍微大点。
Semi-supervised learning
对于标准分类网络,我们的输出是k个类别对应的概率。在这里我们借助分类网络进行无监督学习。我们把生成样本当成第K+1类,用x属于k+1类的概率当做x为假的概率。
loss function for training the classifier:
这里的无监督过程相当于训练一个GAN。
实验结果
左边feature matching,右边minibatch discrimination。
分类预测结果:
、