有哪些提高GAN训练稳定性的Tricks?

1.输入Normalize,将输入图片Normalize到 之间。

生成器最后一层的输出使用Tanh激活函数。

Normalize非常重要,没有处理过的图片是没办法收敛的。图片Normalize一种简单的方法是(images-127.5)/127.5,然后送到判别器去训练。同理生成的图片也要经过判别器,即生成器的输出也是-1到1之间,所以使用Tanh激活函数更加合适。

2.替换原始的GAN损失函数和标签反转

原始GAN损失函数会出现训练早期梯度消失和Mode collapse(模型崩溃)问题。可以使用Earth Mover distance(推土机距离)来优化。

实际工程中用反转标签来训练生成器更加方便,即把生成的图片当成real的标签来训练,把真实的图片当成fake来训练。

3.使用具有球形结构的随机噪声作为输入

4.使用BatchNorm

一个mini-batch中必须只有real数据或者fake数据,不要把他们混在一起训练。

如果能用BatchNorm就用BatchNorm,如果不能用则用instance normalization。

5.避免使用ReLU,MaxPool等操作引入稀疏梯度

GAN的稳定性会因为引入稀疏梯度受到很大影响。

最好使用类LeakyReLU的激活函数。(D和G中都使用)

对于下采样,最好使用:Average Pooling或者卷积+stride。

对于上采样,最好使用:PixelShuffle或者转置卷积+stride。

最好去掉整个Pooling逻辑,因为使用Pooling会损失信息,这对于GAN训练没有益处。

6.使用Soft和Noisy的标签

Soft Label,即使用和两个区间的随机值来代替正样本和负样本的Hard Label。

可以在训练时对标签加一些噪声,比如随机翻转部分样本的标签。

7.使用Adam优化器

Adam优化器对于GAN来说非常有用。

在生成器中使用Adam,在判别器中使用SGD。

8.追踪训练失败的信号

判别器的损失=0说明模型训练失败。

如果生成器的损失稳步下降,说明判别器没有起作用。

9.在输入端适当添加噪声

在判别器的输入中加入一些人工噪声。

在生成器的每层中都加入高斯噪声。

10.生成器和判别器差异化训练

多训练判别器,尤其是加了噪声的时候。

11.Two Timescale Update Rule (TTUR)

对判别器和生成器使用不同的学习速度。使用较低的学习率更新生成器,判别器使用较高的学习率进行更新。

12. Gradient Penalty (梯度惩罚)

使用梯度惩罚机制可以极大增强 GAN 的稳定性,尽可能减少mode collapse问题的产生。

13. Spectral Normalization(谱归一化)

Spectral normalization可以用在判别器的weight normalization技术,可以确保判别器是K-Lipschitz连续的。

14. 使用多个GAN结构

可以使用多个GAN/多生成器/多判别器结构来让GAN训练更稳定,提升整体效果,解决更难的问题。


蓝海大脑 京ICP备18017748号-1