有关于解决GAN中模型崩塌的一点方法
GAN好是好,但是这个模型崩塌我是真的头大,好好的一个模型跑着跑着就变全噪声了。
最近在论文的阅读当中,发现了一篇文章《Progressive growth of glycine to improve quality, stability, and variability》是有关于如何改善辨别器中对于生成器的生成的一些无用信息的剔除。同时可以提高生成图像的分辨率以及增强图片中的纹理和细节。
一、摘要
关键的想法是逐步增加发生器和鉴别器:从低分辨率开始,我们添加新的层,随着训练的进展模拟越来越多的细节。这既加快了训练速度又大大稳定了它,使我们能够制作出前所未有的质量图像。
二、对于之前同类方法的一点总结
-
自回归模型 - 例如PixelCNN - 产生清晰的图像,但评估速度慢,并且没有潜在的表示,因为它们直接模拟条件分布而非像素,可能限制它们的适用性。
-
VAE易于训练,但由于模型的限制,往往会产生模糊的结果。
-
GAN产生清晰的图像,虽然只是在相当小的分辨率和变化有限的情况下,尽管最近取得了进展,但训练仍然不稳定。
GAN的缺陷
通常,GAN由两个网络组成:生成器和鉴别器(又称批评者)。发生器从潜码产生样本,例如图像,并且这些图像的分布理想地应该与训练分布无法区分。由于设计一个能够判断是否是这种情况的函数通常是不可行的,因此训练一个鉴别器网络来进行评估,并且由于网络是可微分的,我们还可以使用梯度来将两个网络引导到正确的方向。通常,发生器是主要关注点,鉴别器是自适应损耗函数,一旦发生器被训练就会被丢弃。
本文主要采用了WGAN中的Wasserstein损失,对此进行了改进。
三、主要工作
-
从低分辨率图像开始,然后通过向网络添加图层逐步提高分辨率,如图1所示。这种增量性质允许训练首先发现图像分布的大规模结构,然后将注意力转移到越来越细的尺度细节,而不是必须同时学习所有尺度。
-
在整个培训过程中,两个网络中的所有现有层都可以训练。当新的图层添加到网络中时,我们会平滑地淡化它们,如图所示。这避免了对已经训练有素的小分辨率层的冲击。
四、主要方法
作者用了几种方法来对图片进行处理,同时证明了所假设的结论,取得了良好的效果。
- 使用mini-batch标准偏差增加变化
之前作者的采用的方法是:从单个图像计算特征统计数据,还在整个小批量模型中计算特征统计数据,从而鼓励生成和训练图像的小批量显示类似的统计数据。通过在鉴别器的末尾添加一个小批量层来实现的,其中该层学习一个大的张量,将输入激活投射到一组统计数据。为小批量中的每个示例生成一组单独的统计信息,并将其连接到层的输出,以便鉴别器可以在内部使用统计信息。
改进之后:首先计算小批量上每个空间位置中每个特征的标准偏差。然后,我们对所有要素和空间位置的这些估计值进行平均,以得到单个值。我们复制该值并将其连接到所有空间位置和小批量,从而产生一个额外的(常量)特征映射,并将其插入曾末尾。
image- 为鉴别器和发生器分别设置平衡的学习率
通过其估计的标准偏差来标准化梯度更新,从而使更新独立于参数的比例。因此,如果某些参数的动态范围比其他参数大,则需要更长的时间进行调整。这是现代初始化器导致的场景,因此学习率可能同时太大和太小。确保所有权重的动态范围和学习速度都相同
- 生成器中像素化特征矢量归一化
为了避免由于竞争导致发生器和鉴别器中的幅度失控的场景,我们在每个卷积层之后将每个像素中的特征向量归一化为发生器中的单位长度。我们使用“局部响应规范化”。
sample.png