Skip to content

Improved Techniques for Training GANs阅读笔记

sssste edited this page Feb 5, 2018 · 1 revision

理论基础:

GAN寻找的是判别器和生成器的纳什均衡点,但是两个player通过梯度下降有可能会进入一个稳定的循环,而不是到达稳定点。

作者采取了一些措施去激励收敛

  1. Feature matching

    修改判别器的目标函数,让其变为


在判别器上的某一层中间层的输出值f(x),让生成数据与真实数据在该激活点上的L2范式最小。虽然无法保证能收敛到均衡点,但是实验效果不错。

  1. Minibatch discrimination

    对于单张图片的训练产生的梯度方向可能不是那么准确,如果是按minibatch去一起判断方向的话,会好很多,一种方法就是用minibatch中训练样本之间的差别(closeness)来控制梯度。具体做法如下:


对于判别器,假如batch里面第i个样本在某一层的输出值是一个A维向量fi,添加一个张量T,维度为A×B×C这样每个样本i于它相乘能得到一个B×C的Mi矩阵。

对于一个batch里,有M1,M2...Mn,n个矩阵,对这n个矩阵的每一行,计算一个L1负指数距离

意思是,一个Mi有B行,对于其中一行k,用k分别和其他Mi中的第k行计算负指数距离,并求和,这样一个Mi就有B维的输出矢量,而一个batch里一共有n个B维的矢量。所以输出是个n×B的矩阵。
该方法能较快生成较好的图像,这点比feature matching好,但是在半监督学习的情况下学习强分类器,feature matching效果更强。

  1. Historical averaging

    在判别器和生成器cost function里都加上正则项

    theta是函数的参数,t是时间 实验发现加了这个对低维和连续非凸的优化有比较好的效果。

  2. One-sided label smoothing

    比如有个0,1两个标签,分别用0.1和0.9来代替。
    但是
    假如用alpha代替正标签,beta代替负标签,理想的判别器就变成了
    如果Pmodel比较大,那么Pdata的正负影响就显得不大了,但是实际上数据得到的结果应该是更确切的,因此只平滑正标签alpha,而beta还是令其为0

  3. Virtual batch normalization

    batch-normalization虽然效果非常好,但是某个数据的输出非常依赖于同一个batch的其他数据,因此引入了virtual batch,在训练开始前选取一个reference batch,用这个batch+其他batch的统计信息去归一化其他batch的数据。
    这样做计算是很昂贵的,因为本来一个batch的计算量变成了2倍。因此只用于生成器。

Semi-supervised learning

假如我们的分类器要分类K个种类,那么我们可以人为的添加第K+1类为生成类,这样,损失函数就能写成

其中
监督学习部分只需要考虑K个种类的损失,而半监督部分只用考虑是否为第K+1类

Clone this wiki locally