Tic商业评论

关注微信公众号【站长自定义模块】,定时推送前沿、专业、深度的商业资讯。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

  • QQ空间
  • 回复
  • 收藏

GAN — 提高 GAN 性能的方法

lijingle gan 2022-1-9 12:14 3510人围观

与其他深度网络相比,GAN 模型在以下情况可能会受到严重影响。
  1. 不收敛:模型不收敛,更糟糕的是它们变得不稳定。
  2. 模式崩溃:生成器产生有限的模式,并且
  3. 慢速训练:训练生成器的梯度消失了。
作为 GAN 文章的一部分,本文探讨了如何改进 GAN。 特别是,
  1. 更改cost函数以获得更好的优化目标。
  2. 向cost函数添加额外的惩罚以强制执行约束。
  3. 避免过度自信和过度拟合。
  4. 优化模型的更好方法。
  5. 添加标签。

特征匹配
生成器试图找到最好的图像来欺骗鉴别器。 当两个网络都对抗他们的对手时,“最佳”形象会不断变化。 但是,优化可能会变得过于贪婪并陷入永无止境的猫捉老鼠游戏。 这是模型不收敛和模式崩溃的场景之一。
特征匹配改变了生成器的cost函数,以最小化真实图像和生成图像的特征之间的统计差异。 通常,我们测量它们的特征向量均值之间的 L2 距离。 因此,特征匹配将目标从击败对手扩展到匹配真实图像中的特征。 这是新的目标函数:


其中 f(x) 是鉴别器在直接层中提取的特征向量。


真实图像特征的均值是按每个minibatch计算的,每个batch都有波动。 这是缓解模式崩溃的好方法。 它引入了随机性,使鉴别器更难以过度拟合。

当 GAN 模型在训练过程中不稳定时,特征匹配是有效的。


Minibatch discrimination

当模式崩溃时,创建的所有图像看起来都相似。 为了缓解这个问题,我们将真实图像和生成的图像在不同batch中分别输入鉴别器,并计算图像 x 与同一batch中的图像的相似度。 我们在鉴别器的一个密集层中附加相似度 o(x) 来分类该图像是真实的还是生成的。


如果模式开始崩溃,生成图像的相似性就会增加。 鉴别器可以使用这个分数来检测生成的图像并在模式崩溃时惩罚生成器。

图像 xi 与同一批次中的其他图像之间的相似度 o(xi) 是通过变换矩阵 T 计算的。方程有点难以追踪,但概念非常简单。


在上图中,xi 是输入图像,xj 是同一批次中的其余图像。 我们使用转换矩阵 T 将特征 xi 转换为 Mi,这是一个 B×C 矩阵。


我们使用 L1 范数和以下等式推导出图像 i 和 j 之间的相似度 c(xi, xj)。



图像 xi 与batch中其余图像之间的相似度 o(xi) 为


下面是回顾:


作为论文“训练 GAN 的改进技术”的引述

Minibatch 判别使我们能够非常快速地生成具有视觉吸引力的样本,并且在这方面它优于特征匹配。


单面标签平滑

深度网络可能会受到过度自信的影响。 例如,它使用很少的特征来对对象进行分类。 为了缓解这个问题,深度学习使用regulation和dropout来避免过度自信。

在 GAN 中,如果判别器依赖于一小组特征来检测真实图像,则生成器可能只是产生这些特征来利用判别器。 优化可能变得过于贪婪并且不会一直有利。 在 GAN 中,过度自信会造成严重伤害。 为了避免这个问题,当任何真实图像的预测超过 0.9(D(真实图像)>0.9)时,我们会惩罚判别器。 这是通过将我们的目标标签值设置为 0.9 而不是 1.0 来完成的。 这是伪代码:

p = tf.placeholder(tf.float32, shape=[None, 10])
# Use 0.9 instead of 1.0.
feed_dict = {
  p: [[0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0]] # Image with label "3"
}
# logits_real_image is the logits calculated by 
# the discriminator for real images.
d_real_loss = tf.nn.sigmoid_cross_entropy_with_logits(
                    labels=p, logits=logits_real_image)

historical average

在historical average中,我们跟踪最后 t 个模型的模型参数。 或者,如果我们需要保留很长的模型序列,我们会更新模型参数的运行平均值。

我们在代价函数下面添加一个 L2 代价来惩罚与historical average值不同的模型。


对于具有非凸对象函数的 GAN,历史平均可能会阻止模型围绕平衡点旋转,并充当阻尼力来收敛模型。


Experience replay

模型优化在击败生成器当前生成的内容时可能过于贪婪。 为了解决这个问题,Experience replay会保留过去优化迭代中最近生成的图像。 我们不仅用当前生成的图像拟合模型,还向鉴别器提供所有最近生成的图像。 因此,鉴别器不会过度拟合生成器的特定时间实例。


使用标签 (CGAN)

许多数据集都带有其样本对象类型的标签。 训练 GAN 已经很困难了。 因此,指导 GAN 训练的任何额外帮助都可以大大提高性能。 添加标签作为潜在空间 z 的一部分有助于 GAN 训练。 下面是 CGAN 中用于利用样本中标签的数据流。


cost函数

cost函数重要吗? 否则,所有这些研究努力都将是浪费。 但如果你听说 2017 年 Google Brain 的一篇论文,你肯定会有疑问。 但推动图像质量仍然是重中之重。 很可能,我们会看到研究人员尝试不同的cost函数,然后才能确定其优点。


下图列出了一些常见 GAN 模型的cost函数。


我们决定不在本文中详述这些cost函数。 以下是详细介绍一些常见cost函数的文章:WGAN/WGAN-GP、EBGAN/BEGAN、LSGAN、RGAN 和 RaGAN。 在本文的最后,我们列出了一篇更详细地研究所有这些cost函数的文章。 由于cost函数是 GAN 的一个主要研究领域,我们建议你稍后阅读该文章。

这是一些数据集上的一些 FID 分数(越低越好)。 这是一个参考点,但请注意,现在就哪种cost函数表现最好做出任何结论还为时过早。 事实上,目前还没有一个单一的cost函数在所有不同的数据集中表现最好。


(MM GAN 是原始论文中的 GAN cost函数。NS GAN 是同一篇论文中解决梯度消失的替代cost函数。)

但是,没有好的超参数,任何模型都不会表现良好,并且调整 GAN 需要时间。 在随机测试不同的cost函数之前,请耐心等待超参数优化。 一些研究人员建议,调整超参数可能比改变cost函数获得更好的回报。 精心调整的学习率可以缓解一些严重的 GAN 问题,例如模式崩溃。 具体来说,在模式崩溃发生时降低学习率并重做训练。

我们还可以为生成器和判别器尝试不同的学习率。 例如,下图在 WGAN-GP 训练中使用 0.0003 作为判别器的学习率和 0.0001 作为生成器的学习率。


Implementation tips

  1. 在 -1 和 1 之间缩放图像像素值。使用 tanh 作为生成器的输出层。
  2. 使用高斯分布对 z 进行实验采样。
  3. 批量标准化通常可以稳定训练。
  4. 使用 PixelShuffle 和转置卷积进行上采样。
  5. 避免最大池化以进行下采样。 使用卷积步幅。
  6. Adam 优化器通常比其他方法效果更好。
  7. 在将它们输入鉴别器之前,将噪声添加到真实和生成的图像中。

GAN 模型的动态变化还不是很清楚。 所以一些提示只是方法。 例如,LSGAN 论文报告 RMSProp 在他们的实验中具有更稳定的训练。

这种情况很少见,但表明了提出通用方法的挑战。 鉴别器和生成器不断地与其他人竞争。 准备好cost函数值可能会上下波动。 即使cost似乎呈上升趋势,也不要过早停止训练。

直观地监控结果以验证训练的进度。


Virtual batch normalization (VBN) Batch normalization BM 成为许多深度网络设计中的标准。 BM 的均值和方差来自当前的 minibatch。 但是,

它会在样本之间创建依赖关系。 生成的图像不是相互独立的。


在实验中反在生成的图像在同一batch中显示颜色。


最初,我们从给我们独立样本的随机分布中采样 z。 然而,batch normalization产生的偏差压倒了 z 的随机性。

Virtual batch normalization(VBN) 在训练之前对涉及的batch进行采样。 在前向传递中,我们可以预先选择一个batch来计算 BN 的归一化参数(μ 和 σ)。 

但是,我们将使用此参考批次对模型进行过度拟合,因为我们在整个训练中使用相同的batch。 为了缓解这种情况,我们可以将参考batch与当前batch结合起来计算归一化参数。


Random seeds

用于初始化模型参数的随机种子会影响 GAN 的性能。 如下所示,衡量 GAN 性能的 FID 分数在 50 次单独运行(训练)中有所不同。 但范围相对较小,可能仅在以后的微调中完成。


Google Brain 的一篇论文表明 LSGAN 在某些数据集中偶尔会失败或崩溃,并且需要使用另一个随机种子重新开始训练。


Batch normalization

DGCAN 建议将 BM 添加到网络设计中。 BM 的使用也成为许多深度网络模型的普遍做法。 但是,会有例外。 下图展示了 BN 对不同数据集的影响。 y 轴是 FID 分数,越低越好。 正如 WGAN-GP 论文所建议的,BN 在使用时应该关闭。 我们建议读者在 BN 上检查使用的cost函数和相应的 FID 性能,并通过实验验证设置。


Spectral Normalization

谱归一化是一种权重归一化,可以稳定判别器的训练。 它控制判别器的 Lipschitz 常数,以缓解爆炸梯度问题和模式崩溃问题。 这个概念很大程度上基于数学,但从概念上讲,它限制了每次迭代中的权重变化,而不是过度依赖于鉴别器区分图像的一小部分特征。 与 WGAN-GP 相比,这种方法在计算上将更轻,并实现了困扰许多 GAN 方法的良好模式覆盖率。


Multiple GANs

模式崩溃可能并不全是坏事。 当模式崩溃时,图像质量通常会提高。 事实上,

我们可能会为每种模式收集最佳模型,并使用它们来重新创建不同模式的图像。


判别器和生成器之间的平衡

鉴别器和生成器总是在执行以相互削弱拉锯战。模式崩溃和梯度减小通常被解释为鉴别器和生成器之间的不平衡。我们可以通过将注意力转向平衡生成器和判别器之间的损失来改进 GAN。不幸的是,解决方案似乎难以捉摸。我们可以在鉴别器和生成器上的梯度下降迭代次数之间保持一个静态比率。即使这看起来很吸引人,但许多人怀疑它的好处。通常,我们保持一对一的比例。但是一些研究人员还测试了每个生成器更新 5 次鉴别器迭代的比率。还提出了用动态力学平衡两个网络。但直到最近几年,我们才获得了一些牵引力。

另一方面,一些研究人员质疑平衡这些网络的可行性和可取性。一个训练有素的鉴别器无论如何都会向生成器提供质量反馈。此外,训练生成器始终赶上判别器并不容易。相反,当生成器表现不佳时,我们可能会将注意力转向寻找不具有接近于零梯度的cost函数。


尽管如此,问题仍然存在。 提出了许多cost函数建议,关于什么是最好的争论仍然存在。


鉴别器和生成器网络容量

鉴别器的模型通常比生成器更复杂(更多的过滤器和更多的层),一个好的鉴别器可以提供质量信息。 在许多 GAN 应用中,我们可能会遇到瓶颈,即增加生生成器容量并没有显示质量改进。 在我们确定瓶颈并解决它们之前,增加生成器容量似乎并不是许多分区器的优先事项。


BigGAN

BigGAN 于 2018 年发表,目标是汇集一些实践,让 GAN 在当时生成最佳图像。 在本节中,我们将研究一些尚未涵盖的实践。

更大的batch size


如上所示,增加batch size会显着降低 FID。batch size越大,覆盖的模式就越多,并为两个网络提供更好的梯度来学习。 但是,BigGAN 报告说该模型在更少的迭代中达到了更好的性能,但之后变得不稳定甚至崩溃。 所以,不断地保存模型。


截断技巧

潜在空间 z 中的低概率密度区域可能没有足够的训练数据来准确地学习它。 所以在生成图像时,我们可以避开这些区域以提高图像质量,但代价是变化。 即图像的质量会提高,但生成的图像的风格差异会更小。 有不同的技术可以截断输入潜在空间 z。 一般原则是当值超出范围时,它将被重新采样或挤压到更高概率的区域。


增加模型容量 

在调整期间,考虑增加模型的容量,特别是对于具有高空间分辨率的层。 当当时使用的传统容量翻倍时,许多模型显示出改进。 但是不要在没有先验证模型设计和实现的情况下做得太早。


生成器权重的移动平均值 

生成器使用的权重是根据生成器权重的指数移动平均值计算的。 


正交正则化 

权重矩阵的条件是一个重要的研究课题。 这是一项关于函数输出对其输入变化有多敏感的研究。 它对训练稳定性有很大影响。 矩阵 Q 是正交的,如果


如果我们将 x 与正交矩阵相乘,则 x 的变化不会被放大。 这种行为对于保持数值稳定性是非常可取的。


与其他属性一起,保持权重矩阵的正交属性在深度学习中可能很有吸引力。 我们可以添加正交正则化以在训练期间鼓励此类属性。

如果 Q 偏离正交矩阵,它会惩罚系统。


然而,这被认为过于局限,因此 BigGAN 使用了一个修改过的术语:


正交正则化还允许截断技巧在不同模型中更成功。

正交权重初始化

模型权重被初始化为一个随机正交矩阵。

Skip-z 连接 在 vanilla GAN 中,潜在因子 z 仅输入到第一层。 使用 skip-z 连接,来自潜在因子 z 的直接跳过连接(skip-z)

连接到生成器的多个层,而不仅仅是第一层。





路过

雷人

握手

鲜花

鸡蛋
我有话说......

TA还没有介绍自己。

电话咨询: 135xxxxxxx
关注微信