油泵厂家
免费服务热线

Free service

hotline

010-00000000
油泵厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

模型不收敛训练速度慢如何才能改善GAN的性能_[#第一枪]

发布时间:2021-06-07 18:50:24 阅读: 来源:油泵厂家

雷锋网 AI 研习社按:本文为雷锋网字幕组编译的技术博客,原标题 GAN?—?Ways to improve GAN performance,作者为 Jonathan Hui 。

翻译 | 姚秀清 郭蕴哲 校对 | 吴桐 整理 | 孔令双

与其他深度网络相比,GAN 模型在以下方面可能会受到严重影响。

不收敛:模型永远不会收敛,更糟糕的是它们变得不稳定。

模式崩溃:生成器生成单个或有限模式。

慢速训练:训练生成器的梯度会消失。

作为 GAN 系列的一部分,本文探讨了如何改进 GAN 的方法。 尤其在如下方面,

更改成本函数以获得更好的优化目标。

在成本函数中添加额外的惩罚以强制执行约束。

避免过度自信和过度拟合。

更好的优化模型的方法。

添加标签。

特征匹配

生成器试图找到最好的图像来欺骗鉴别器。当两个网络相互抵抗时,“最佳“图像会不断变化。 然而,优化可能变得过于贪婪,并使其成为永无止境的猫捉老鼠游戏。这是模型不收敛且模式崩溃的场景之一。

特征匹配改变了生成器的成本函数,用来最小化真实图像的特征与生成图像之间的统计差异,即,它将目标从击败对手扩展到真实图像中的特征匹配。 我们使用图像特征函数 f(x) 对真实图像和生成图像的均值间的L2范数距离来惩罚生成器。

其中 f(x) 是鉴别器立即层的输出,用于提取图像特征。

每个批次计算的实际图像特征的平均值,都会波动。这对于减轻模式崩溃来说可能是个好消息。它引入了随机性,使得鉴别器更难以过拟合。

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

微批次鉴别

当模式坍塌时,创建的所有图像看起来都相似。为了缓解这个问题,我们将不同批次的实际图像和生成的图像分别送给鉴别器,并计算图像 x 与同一批次中其余图像的相似度。 我们在鉴别器的一个密集层中附加相似度 o(x) ,来确定该图像是真实的还是生成的。

如果模式开始崩溃,则生成的图像的相似性增加。鉴别器可以使用该分数来检测生成的图像。这促使生成器生成具有更接近真实图像的多样性的图像。

图像 xi 与同一批次中的其他图像之间的相似度 o(xi) 是通过一个变换矩阵 T 计算得到的。如下所示,xi 是输入图像,xj 是同一批次中的其余图像。

方程式有点难以追踪,但概念非常简单。(读者可以选择直接跳到下一部分。)我们使用变换矩阵 T 将特征 xi 转换为 Mi , 一个 B×C 的矩阵。

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

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

这里是回顾:

引用自论文“ Improved Techniques for Training GANs ”

微批次鉴别使我们能够非常快速地生成视觉上吸引人的样本,在这方面它优于特征匹配。

单面标签平滑

深度网络可能会过自信。 例如,它使用很少的特征来对对象进行分类。 深度学习使用正则化和 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)

历史平均

在历史平均中,我们跟踪最后 t 个模型的模型参数。 或者,如果我们需要保留一长串模型,我们会更新模型参数的运行平均值。

我们为成本函数添加了如下的一个 L2 成本,来惩罚不同于历史平均值的模型。

对于具有非凸对象函数的 GAN,历史平均可以迫使模型参数停止围绕平衡点兜圈子,从而令其收敛。

经验回放

为了击败生成器当前产生的内容,模型优化可能变得过于贪婪。为了解决这个问题,经验回放维护了过去优化迭代中最新生成的图像。我们不仅仅使用当前生成的图像去拟合模型,而且还为鉴别器提供了所有最近生成的图像。因此,鉴别器不会针对生成器某一特定时间段生成的实例进行过度拟合。

使用标签(CGAN)

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

成本函数

成本函数重要吗? 它当然重要,否则那么多研究工作的心血都将是一种浪费。但是如果你听说过 2017 年 Google Brain 的一篇论文,你肯定会有疑虑。 但努力提升图像质量仍然是首要任务。因此在我们对成本函数的作用有一个明确的认识之前,我们很有可能会看到研究人员仍在努力尝试着不同的成本函数。

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

表格改动自这里:https://github.com/hwalsuklee/tensorflow-generative-model-collections

我们决定不在本文中详细介绍这些成本函数。实际上,如果您想了解更多信息,我们强烈建议您细致地阅读这些文章中的至少一篇:WGAN/WGAN-GP,EBGAN / BEGAN,LSGAN,RGAN 和 RaGAN 。 在本文的最后,我们还列出了一篇更详细地研究成本函数的文章。 成本函数是 GAN 的一个主要研究领域,我们鼓励您稍后阅读该文章。

以下是某些数据集中的一些 FID 分数(越低越好)。这是一个参考点,但需要注意的是,现在对于究竟哪些成本函数表现最佳下结论还为时尚早。 实际上,目前还没有哪一个成本函数在所有不同数据集中都具有最佳表现。

但缺乏好的超参数的模型不可能表现良好,而调参需要大量时间。所以在随机测试不同的成本函数之前,请耐心地优化超参数。

实现技巧

将图像的像素值转换到 -1 到 1 之间。在生成模型的最后一层使用 tanh 作为激活函数。

在实验中使用高斯分布对 z 取样。

Batch normalization 可以让训练结果更稳定。

上采样时使用 PixelShuffle 和反卷积。

下采样时不要使用最大池化而使用卷积步长。

Adam 优化通常比别的优化方法表现的更好。

图像交给判别模型之前添加一些噪声,不管是真实的图片还是生成的。

GAN 模型的动态特性尚未得到很好的解释。所以这些技巧只是建议,其优化结果如何可能存在差异。例如,提出 LSGAN 的文章指出 RMSProp 在他们的实验中表现更加稳定。这种情况非常稀少,但是也表明了提出普遍性的建议是非常困难的。

Virtual batch normalization (VBN)

Batch normalization 已经成为很多深度神经网络设计中的事实标准。Batch normalization 的均值和方差来自当前的 minibatch 。然而,它会在样本之间创建依赖关系,导致生成的图像不是彼此独立的。

下图显示了在使用同一个 batch 的数据训练时,生成的图像有着相同的色调。

上排图像是橙色色调,第二排图像是绿色色调。 原文

双螺栓管夹批发

医疗器械仪器与耗材

蒸汽灭菌器批发