模型训练不稳定

GAN训练不稳定的原因如下:

  • 不收敛:很难使两个模型G和D同时收敛;

  • 模式崩溃:生成器G生成单个或有限模式(4.2节详细介绍);

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

训练GAN的时候,可以采取以下训练技巧:

1)生成器最后一层的激活函数用tanh(),输出归一化至[-1, 1];

2)真实图像也归一化到[-1,1]之间;

3)学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率;

4)优化器尽量选择Adam,因为SGD解决的是一个寻找最小值的问题,GAN是一个博弈问题,使用SGD容易震荡;

5)避免使用ReLU和MaxPool,减少稀疏梯度的可能性,可以使用Leak Re LU激活函数,下采样可以用Average Pooling或者Convolution + stride替代。上采样可以用PixelShuffle, ConvTranspose2d + stride;

6)加噪声:在真实图像和生成图像中添加噪声,增加鉴别器训练难度,有利于提升稳定性;

7)如果有标签数据,尽量使用标签信息来训练;

8)标签平滑:如果真实图像的标签设置为1,我们将它更改为一个较低的值,比如0.9,避免鉴别器对其分类过于自信 。