当前位置: 首页 > 科技观察

本指南将帮助你“稳住”反复无常的GAN

时间:2023-03-16 16:58:39 科技观察

生成对抗网络(GAN)是一种非常强大的神经网络,具有非常广阔的应用前景。GAN本质上是两个相互竞争的神经网络(生成器和鉴别器)的系统。GAN的工作流程图给定一组目标样本,生成器会尝试生成一些人工样本,这可以诱使判别器将它们当作真实的目标样本,达到“厌恶真人”的目的。另一方面,鉴别器试图将真实(目标)样本与假(生成)样本区分开来。通过这样一种迭代的训练方式,我们最终可以得到一个能够很好地生成与目标样本相似的样本的生成器。由于GAN可以学习模拟几乎所有类型的数据分布,因此具有非常广泛的应用场景。通常,GAN用于去除图像中的伪影、超分辨率、姿态转换和任何类型的图像变换,如下所示:使用GAN完成的图像变换但是,由于GAN反复无常的训练稳定性,使用GAN非常困难.诚然,许多研究人员已经提出了很好的解决方案来缓解GAN训练中涉及的一些问题。然而,这一领域的研究进展如此之快,以至于很难跟上这些有趣的新想法。本文列出了一些常用的技术来稳定GAN训练。1.使用GAN的缺点由于多种原因,使用GAN很困难。本节列出了一些原因:1.ModeCollapse自然数据分布是一个极其复杂的多峰函数(也称为多峰函数)。也就是说,数据分布有很多“峰”或“模”。每个模态代表一组与其他模态相似但不相同的数据样本。在模式崩溃的情况下,生成器生成属于有限模式集的样本。当生成器认为它可以通过生成单一模式的样本来欺骗鉴别器时,就会发生这种情况。也就是说,生成器仅从该模式生成样本。顶行图像代表没有模式崩溃的GAN输出样本。下面一行图像代表发生模式崩溃时GAN输出的样本。鉴别器最终会发现这种模式是人为生成的。结果,生成器直接生成另一个模式。这样的情况会反复出现,从本质上限制了生成样本的多样性。详细解释可以参考博客《Mode collapse in GANs》(http://aiden.nibali.org/blog/2017-01-18-mode-collapse-gans/)2.Convergence在GAN的训练过程中,一个常见的问题是“什么时候停止训练GAN模型?”由于生成器的损失增加而判别器的损失减少(反之亦然),我们不能根据损失函数的值来判断GAN的收敛性。下图说明了这一点:一个典型的GAN损失函数的示意图。请注意,此图无法说明GAN的收敛性。3.质量与上述问题一样,很难定量判断生成器何时生成高质量样本。在损失函数中添加一个额外的感知正则化项可以帮助我们在一定程度上减轻这种情况。4.评估标准GAN的目标函数描述了生成器(G)和鉴别器(D)对的性能,这是一个相互对抗的模型,相对于它的对手,但并不代表输出样本的质量或多样性。因此,我们需要在同一目标函数下可以衡量的唯一评价标准。二。术语在我们深入研究可能有助于提高GAN模型性能的技术之前,让我们回顾一下一些术语。1.Infimumandsuprema简而言之,infimum是集合的下界,supremum是集合的最小上界,“上界,下界”与“最小值,最大值”的关系区别在于下界和上界不一定属于集合。2.散度度量散度度量表示两个分布之间的距离。传统的GAN本质上是最小化真实数据分布和生成数据分布之间的JensenShannon散度(JS散度)。可以重写GAN的损失函数以最小化其他发散度量,例如:KulbackLeibler散度(KL散度)或总变差距离。一般来说,WassersteinGAN最小化了推土机距离。3.KantorovichRubenstein对偶性我们很难利用一些发散性度量的原始形式进行优化。然而,它们的对偶形式(用上确界代替下确界,反之亦然)可能更容易优化。二元性原则提供了将一种形式转化为另一种形式的框架。详细解释请参考博客:《Wasserstein GAN and the Kantorovich-Rubinstein Duality》(https://vincentherrmann.github.io/blog/wasserstein/)4.LiPSCHITZ连续性Lipschitz连续函数的变化率是有限的。对于具有Lipschitz连续性的函数,函数曲线上任一点的斜率绝对值不能超过实数K。此类函数也称为K-Lipschitz连续函数。Lipschitz连续性是GAN期望满足的,因为它们限制了判别器的梯度,从而从本质上避免了梯度爆炸问题。此外,Kantorovich-Rubinstein对偶性要求WassersteinGAN也满足Lipschitz连续性。详细解释请参考博客:《Spectral Normalization Explained》(https://christiancosgrove.com/blog/2018/01/04/spectral-normalization-explained.html)。3.提高模型性能的技巧有很多技巧和技巧可以使GAN更加稳定和强大。为了简洁起见,我只解释了一些相对较新或复杂的技术。在本节的末尾,我列出了其他各种技巧和技巧。1.替换损失函数针对GAN的缺点,一种流行的修正方法是使用“WassersteinGAN”。它本质上是使用“推土机距离”(Wasserstein-1距离或EM距离)来代替传统GAN的JensenShannon散度。然而,EM距离的原始形式很难优化,所以我们使用它的对偶形式(通过KantorovichRubenstein对偶计算)。这要求鉴别器满足“1-Lipschitz”,我们通过削减鉴别器的权重来确保这一点。使用bulldozerdistance的好处是bulldozerdistance是“连续的”,即使真实样本和生成样本的数据分布不相交,这与JS或KLdivergence不同。此外,此时生成图像的质量与损失函数的值之间存在相关性。而使用推土机距离的缺点是每次生成器更新时我们都需要更新几个鉴别器(对于原始实现的每次生成器更新也是如此)。此外,作者声称权重裁剪是确保1-Lipschitz约束的糟糕方法。与JensenShannon散度(如右图所示)不同,推土机距离(如左图所示)是连续的,即使数据分布不是连续的。详细解释请参考论文《Wasserstein GAN》(https://arxiv.org/pdf/1701.07875.pdf)另一个有趣的解决方案是使用均方损失而不是对数损失。LSGAN的作者认为,传统的GAN损失函数没有提供足够的刺激来将生成的数据分布“拉”得更接近真实的数据分布。原始GAN损失函数中的对数损失不影响生成数据与决策边界(决策边界将真实数据与生成数据分开)的距离。另一方面,LSGAN对远离决策边界的生成样本进行惩罚,本质上是将生成的数据分布“拉”向实际数据分布。它通过使用均方损失而不是对数损失来做到这一点。详细解释可以参考博客:《Least Squares GAN》(https://wiseodd.github.io/techblog/2017/03/02/least-squares-gan/)。2.两个时间尺度上的更新规则(TTUR)在这种方法中,我们对判别器和生成器使用不同的学习率。通常,生成器使用较慢的更新规则,而鉴别器使用较快的更新规则。通过使用这种方法,我们可以仅通过微调学习率来以1:1的比例执行生成器和鉴别器更新。值得注意的是,SAGAN的实现使用了这种方法。3.梯度惩罚在论文“改进的WGAN训练”中,作者声称权重裁剪(如在原始WGAN中执行的那样)会导致一些优化问题。作者认为,权重裁剪迫使神经网络学习“更简单的近似”以获得更好的数据分布,从而导致GAN获得的最终结果质量较低。他们还声称,如果WGAN的超参数设置不正确,权重裁剪会导致梯度爆炸或消失的问题。作者在损失函数中引入了一个简单的梯度惩罚规则,缓解了上述问题。除此之外,这样做还保证了1-Lipschitz的连续性,就像在最初的WGAN实现中一样。正如原始WGAN-GP论文中提到的,添加了梯度惩罚作为正则化项。DRAGAN的作者声称,当GAN中的游戏(即鉴别器和生成器相互对抗)达到“局部平衡状态”时,模式崩溃就会发生。他们还声称此时鉴别器贡献的梯度非常“陡峭”。使用这样的梯度惩罚自然可以帮助我们避免这些状态,大大提高训练的稳定性,减少模式崩溃的发生。4.谱归一化谱归一化是判别器中常用的一种权重归一化技术,可以优化训练过程(使训练过程更稳定),从本质上保证判别器满足“K-Lipschitz连续性”。SAGAN等实现也在生成器中使用频谱归一化技术。博文《Spectral Normalization Explained》(https://christiancosgrove.com/blog/2018/01/04/spectral-normalization-explained.html)也指出谱归一化比梯度惩罚计算效率更高。5.展开和打包正如博文《Mode collapse in GANs》中所述,防止模式崩溃发生的一种方法是在更新参数时预见“对策”。展开的GAN允许生成器在鉴别器有机会对生成器的结果做出反应时欺骗鉴别器(考虑对策,如min-max方法)。另一种防止模式崩溃的方法是“捆绑”一些属于同一类的样本并将它们传递给鉴别器。PacGAN采用??了这种方法,论文声称它们减少了模式崩溃的发生。6.堆叠GAN单个GAN可能不足以有效处理某些任务。因此,我们可以使用连续放置的多个GAN,其中每个GAN可以解决一个简化的问题模块。例如,FashionGAN使用两个GAN进行本地图像翻译任务。FashionGAN使用两个GAN进行局部图像变换来推动这种情况,可以逐渐增加GAN模型所面临问题的难度。例如,ProgressiveGAN(ProGAN)可以生成超高分辨率的高质量图像。7、与GAN相比,传统的GAN会衡量生成的数据是真实数据的概率。相对GAN(RelativisticGAN)会衡量生成的数据比真实数据“更真实”的概率。正如RGAN相关论文《The relativistic discriminator: a key element missing from standard GAN》中提到的,我们可以用一个合适的距离来衡量这种“相对真实性”。图B显示了我们的鉴别器使用标准GAN损失的输出。图C显示了输出曲线的实际情况。图A是JS发散的最优解。作者还提到,当鉴别器达到最优状态时,其输出的概率D(x)应该收敛到0.5。然而,传统的GAN训练算法强制判别器对任何图像输出“真实”(即概率为1)的结果。这在某种程度上阻止了鉴别器的输出概率达到它们的品质因数。RelativeGAN也解决了这个问题,如下图所示,取得了非常显着的效果。5000次迭代后,标准GAN得到的输出(左图),和相对GAN得到的输出(右图)。8.自注意力机制自注意力GAN的作者声称,用于生成图像的卷积运算专注于局部传播的信息。也就是说,由于接受域有限,他们忽略了全局传播的关系。注意图(由黄色框中的网络计算)被添加到标准卷积操作中。自注意力生成对抗网络为图像生成任务启用注意力驱动的远程依赖建模。自注意力机制是对常规卷积操作的补充。全局信息(远距离依赖)有助于生成更高质量的图像。网络可以选择忽略注意力机制,或者将其与常规卷积操作一起考虑。关于self-attention机制更详细的理解可以参考论文《Self-Attention Generative Adversarial Networks》(https://arxiv.org/pdf/1805.08318.pdf)。9.其他杂项技术这里有一些其他技术(不完全统计!)已被用于提高GAN模型的性能:您可以通过论文《Improved Techniques for Training GANs》和博客文章《From GAN to WGAN》了解更多关于这些技术的信息。以下GitHub存储库中列出了更多技术:https://github.com/soumith/ganhacks。3.评价指标至此,读者已经了解了提高GAN训练效果的方法。我们需要用一些指标来量化证明这些方法是有效的。下面,本文将列举一些常用的GAN模型性能评价指标。1.Inception(GoogleNet)scoreInceptionscore可以衡量生成数据的“真实”程度。InceptionScore的计算方法上式由两部分组成(p(y|x)和p(y))。这里,x表示生成器生成的图像,p(y|x)是预训练Inception网络的输入图像x(与使用ImageNet数据集进行预训练的原始实现一样,https://arxiv.org/pdf/1801.01973.pdf)得到时的概率分布。同时,p(y)是边缘概率分布,可以通过对生成图像x的一些不同样本平均p(y|x)来计算。这两个术语代表真实图像需要满足的两个属性:生成的图像应该包含“有意义的”对象(清晰、不模糊的对象)。这意味着p(y|x)应该具有“较小的熵”。也就是说,我们的Inception网络必须非常确信生成的图像属于某个类。生成的图像应该是“多样的”。这意味着p(y)应该有“更大的熵”。换句话说,生成器应该生成图像,使每个图像代表不同类别的标签(理想情况下)。p(y|x)和p(y)在理想条件下的示意图。这种情况下,两者的KL散度非常大。如果一个随机变量是高度可预测的,那么它的熵很小(即p(y)应该是一个有峰值的分布)。相反,如果随机变量是不可预测的,它的熵应该很大(即p(y|x)应该是均匀分布)。如果两个性质都满足,我们应该认为p(y|x)和p(y)的KL散度很大。Inceptionscore(IS)越大越好。如果读者想了解更深入的Inceptionscore分析,请参考论文《A Note on the Inception Score》(https://arxiv.org/pdf/1801.01973.pdf)。2.FréchetInceptionDistance(FID)Inceptionscore的缺点之一是没有比较真实和生成的数据统计,比如均值和方差。Fréchet距离通过比较真实图像和生成图像的均值和方差来解决这个问题。FréchetInceptionDistance(FID)执行与InceptionScore相同的分析过程,但它是在通过将真实图像和生成的图像馈送到预训练的Inception-v3网络而获得的特征图上完成的。FID的公式如下:FID分数比较真实数据分布和生成数据分布的均值和方差。“Tr”代表矩阵的“踪迹”。FID分数越低越好,因为它表明生成图像的统计数据非常接近真实图像。4.结论为了克服GAN训练中的各种弊端,研究界提出了很多解决方案和方法。然而,由于新研究成果如潮水般涌来,很难跟踪所有有意义的新工作。因此,本文中分享的详细信息并非详尽无遗,并且可能在不久的将来会过时。不过,我希望这篇文章可以为那些想要提高GAN模型性能的人提供一些指导。原文链接:https://medium.com/beyondminds/advances-in-generative-adversarial-networks-7bad57028032Machine(id:almosthuman2014)》]点此阅读更多本作者好文