【GAN优化】小批量判别器如何解决模式崩溃问题

GAN的第二季开始更新了,还是熟悉的配方,还是熟悉的味道。第一季更新了12篇小文,只解读了GAN的冰山一角,第二季将作为第一季的“零零星星”的补充,讲解包括其他的损失函数、训练算法等等方面,并且会扩展到隐空间、离散数据等方向。今天将先介绍一个处理模式崩溃问题的小方法—小批量判别器,作为对上一季模式崩溃问题的补充吧。

作者&编辑 | 小米粥

1. 模式崩溃的原因

当模式崩溃发生时,生成器 G(z)往往会把很多不同的z均映射成某个x,(更确切地说,指x以及其附近的点,用A表示),接下来更新判别器D(x)后,判别器会很快发现这个病态的mode A从而降低了对这个mode A的信任程度(信任程度即该样本点来源于训练数据集的概率),而信任mode B,那么生成器就会把很多不同的z均映射成x',其中x'及其附近的点表示一个新的mode B,如下图所示。接着,判别器发现这个新的的病态mode B.....

【GAN优化】小批量判别器如何解决模式崩溃问题_第1张图片

【GAN优化】小批量判别器如何解决模式崩溃问题_第2张图片

生成器和判别器陷入这样没有意义的循环。我们梳理一下上面的环节,首先生成器 G(z)把很多不同的z均映射成某个x,而不是将部分z映射到mode A,部分z映射到mode B,但这不应该引起担忧,因为可以训练判别器来识别这个不好的mode A再改进G(z)即可;接着,训练判别器环节也没有问题,实践中甚至担忧判别器训练得过好了而产生梯度消失;那么问题应该出在最后一步:生成器把生成样本全部都转移放置到新的mode B下!显然,生成器的改进是“过分”的,理想上生成器应该将部分生成样本都转移放置到 mode B下,保留部分生成样本在mode A下,如下图所示。

【GAN优化】小批量判别器如何解决模式崩溃问题_第3张图片

其实这并不奇怪,因为在训练生成器时,目标函数为:

【GAN优化】小批量判别器如何解决模式崩溃问题_第4张图片

其过程为:生成器G(z)生成m个样本{x1,x2,...,xi,...,xm},然后将m个x分别独立送给判别器D(x)判定获得梯度信息。在上面的例子中,由于判别器不信任mode A而非常信任mode B,故对于任意生成样本x,判别器都将指引其接近mode B:G(z)→B,也就是说对于任意x,判别器传递给生成器G(z)得到的梯度的方向是相同的,生成器按着该梯度方向更新参数极易把所有的生成样本转移到mode B下。

2.mini-batch discriminator

根据第一节的讨论,认为原因还是出现在判别器上,因为判别器每次只能独立处理一个样本,生成器在每个样本上获得的梯度信息缺乏“统一协调”,都指向了同一个方向,而且也不存在任何机制要求生成器的输出结果彼此有较大差异。

小批量判别器给出的解决方案是:让判别器不再独立考虑一个样本,而是同时考虑一个小批量的所有样本。具体办法如下:对于一个小批量的每个样本{x1,x2,...,xi,...,xm},将判别器的某个中间层f(xi)的结果引出,其为一n维向量,将该向量与一个可学习的n x p x q维张量T相乘,得到样本xi的p x q维的特征矩阵Mi,可视为得到了p个q维特征。

接着,计算每一个样本xi与小批量中其他样本的第r个特征的差异和:

其中,Mi,r表示矩阵Mi的第r行,并使用L1范数表示两个向量的差异。

【GAN优化】小批量判别器如何解决模式崩溃问题_第5张图片

那么每个样本都将会计算得到一个对应的向量:

最后将o(xi)也接引出的中间层的下一层L+1即可,也就是说在原来判别器L层的基础上加了一个mini-batch层,其输入是f(xi),而输出是o(xi),中间还包含一个可学习参数T。相比较,原始的判别器要求给出样本来源于训练数据集的概率,而小批量判别器的任务仍然是输出样本来源于训练数据集的概率,只不过它能力更强,因为它能利用批量样本中的其他样本作为附加信息。

还是在第一节的例子中,使用小批量判别器,当发生模式崩溃的生成器需要更新时,G(z)先生成一个批量的样本{G(z1),G(z2),...G(zm)},由于这些样本都在mode A下,则计算得到的mini-batch层结果必然与训练数据集的计算得到的mini-batch层结果有很大差异,捕捉到的差异信息会使小批量判别器D(G(zi))值不会太低,小批量判别器不会简单地认为对所有样本给出相同的梯度方向。

3. 一个简化版本

在Progressive GAN中,给出了一个简化版本的小批量判别器,其思想与上述相同,只是计算方式比较简单,对于判别器的输入样本{x1,x2,...,xm},抽取某中间层作为n维特征有{f(x1),f(x2),...,f(xm)},计算每个维度的标准差并求均值,即:

其中

【GAN优化】小批量判别器如何解决模式崩溃问题_第6张图片

最后将o作为特征图与中间层的输出拼接到一起。Progressive GAN的小批量判别器中不含有需要学习的参数,而是直接计算批量样本的统计特征,更为简洁。

[1]Tim Salimans , et al. Improved Techniques for Training GANs. 2016.

[2]Karras, Tero, Aila, Timo, Laine, Samuli,等. Progressive Growing of GANs for Improved Quality, Stability, and Variation[J].

总结

今天首先将说明模式崩溃问题的本质,分析了产生模式崩溃的原因,并针对该问题给出了小批量判别器技巧,并在最后给出了一个更简单的版本。

知识星球推荐

_

_

【GAN优化】小批量判别器如何解决模式崩溃问题_第7张图片

【GAN优化】小批量判别器如何解决模式崩溃问题_第8张图片

有三AI知识星球由言有三维护,内设AI知识汇总,AI书籍,网络结构,看图猜技术,数据集,项目开发,Github推荐,AI1000问八大学习板块。其中网络结构1000变部分有大量GAN实战相关的内容。

【年终总结】2019年有三AI知识星球做了什么,明年又会做什么

转载文章请后台联系

侵权必究

往期精选

_

  • 【杂谈】有三AI知识星球最近都GAN了哪些内容?

  • 【杂谈】GAN对人脸图像算法产生了哪些影响?

  • 【完结】12篇GAN的优化文章大盘点,浓浓的数学味儿

你可能感兴趣的:(【GAN优化】小批量判别器如何解决模式崩溃问题)