深度学习_GAN_GAN优化方法汇总

1.输入Normalize

  1. 将输入图片Normalize到 [ 1 1 ] [-1,1] 之间。
  2. 生成器最后一层的输出使用Tanh激活函数。

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

2.使用修正的损失函数

  1. 在GAN论文中用 min ( log ( 1 D ) ) \min(\log(1-D)) 来优化D,实际上 max ( log D ) \max(\log D) 更好。
    因为第一个公式在实际中会造成训练早期梯度消失的问题。

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

3.使用具有球形结构的随机噪声Z

  1. 不要使用均匀分布进行采样
    在这里插入图片描述

  2. 使用高斯分布进行采样
    在这里插入图片描述

When doing interpolations, do the interpolation via a great circle, rather than a straight line from point A to point B(博主不是很懂,尴尬)

4.BatchNorm

  1. 一个mini-batch中必须只有real数据或者fake数据,不要把他们混在一起训练。
  2. 如果能用BatchNorm就用BatchNorm,如果不能用则用instance normalization。(对于每个样本,减去平均值除以标准差)

在这里插入图片描述

5.避免引入稀疏梯度:ReLU,MaxPool

  1. GAN的稳定性会因为引入稀疏梯度受到很大影响。
  2. 最好使用LeakyReLU作为激活函数。(D和G中都使用)
  3. 对于下采样,最好使用:Average Pooling或者卷积+stride。
  4. 对于上采样,最好使用:PixelShuffle或者转置卷积+stride。

最好连Pooling也不用,因为使用Pooling会损失信息,这对于GAN训练没有益处。

6.使用Soft和Noisy的标签

  1. Label平滑,如果你设real=1,fake=0,那么我们在实际中可以进行一些改动,对于real,我们可以用一个0.7-1.2之间的随机值来代替,对于fake,用0-0.3这个区间来代替。
  2. 用real batch训练D的时候,不要一次性都给标签1,设一个小概率进行标签反转,也就是会有很小一部分为0,当然这些标签是噪声。

7.DCGAN/混合模型

  1. 如果可以用DCGAN为Baseline,使用它!
  2. 如果我们可以使用DCGAN但是没有模型是稳定的,那我们就可以用混合模型:KL+GAN或者VAE+GAN。

8.使用RL中的稳定技巧

Experience Replay

  1. Keep a replay buffer of past generations and occassionally show them.
  2. Keep checkpoints from the past of G and D and occassionaly swap them out for a few iterations.

All stability tricks that work for deep deterministic policy gradients.

9.使用Adam优化器

  1. Adam优化器对于GAN来说非常有用。
  2. 在生成器中使用Adam,在判别器中使用SGD。

10.追踪训练失败的信号

  1. D的损失=0:模型训练失败。
  2. 检查梯度的标准:如果超过100,事情就会搞砸。
  3. 训练时,D损失的方差很低,并且随着时间的推移而下降。或者方差和峰值都很大。
  4. 如果生成器的损失稳步下降,说明它愚弄了判别器。

11.不通过统计平衡损失

  1. 不要试图找到一个(G的数量/D的数量)计划来展开训练。
  2. 很难,我们都试过了。
  3. 如果你真的尝试了,就要有原则的方法,而不是直觉。

在这里插入图片描述

12.如果我们有类别标签,那就使用他们

如果我们有数据的类别标签,则在训练判别器的时候对样本进行分类。

13.在输入端添加噪声,随着时间衰减

  1. 在D的输入中加入一些人工噪声。
  2. 在生成器的每层中都加入高斯噪声。

14.多训练判别器

  1. 尤其是我们有噪声的时候。
  2. 难以寻找到合适的规则去多训练判别器的时机。

15.条件GANs中的离散变量

  1. 使用嵌入层。
  2. 作为附加通道添加到图像。
  3. 保持嵌入维度低和上采样以匹配图像通道大小。

16.在训练和测试阶段都使用Dropout

  1. 使用Dropout也是为了因为一定的噪声。(50%)
  2. 在生成器的某几层中使用Dropout,而且测试和训练阶段都要做。
发布了156 篇原创文章 · 获赞 48 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Rocky6688/article/details/104803276
GAN
今日推荐