如何训练GAN?训练GAN的技巧和方法

https://github.com/soumith/ganhacks

1.输入归一化

把信号归一化到-1 到1

generator的最后一层输出用Tanh

2.使用修饰过后的损失函数

在GAN的文章中,generator的损失函数是min(log 1-D) 但是在实际中会用max(log D)

  • 因为前一个式子在早期会有梯度消失的问题
  • Goodfellow et. al (2014)

在实际中的好方法:

训练生成器时翻转标签:real = fake, fake = real

3.使用球体Z

G的初始值不从均匀分布中采样,从高斯分布中采样

torch.randn(*size)   从标准正态分布(均值为0,方差为1)中抽取的一组随机数。应该是高斯分布

进行插值时,请通过大圆而不是从A点到B的直线进行插值

4.特征标准化

为真实数据和生成数据构造不同的mini batch,即每个mini batch仅需要包含所有真实图像或所有生成的图像。
如果不使用batch norm,则使用标准化(对于每个样本,减去均值并除以标准差)。

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

如果梯度稀疏,GAN的稳定性会受到影响
LeakyReLU =好(在G和D中)
对于下采样,使用:平均池化,Conv2d +stride
对于上采样,使用:PixelShuffle,ConvTranspose2d + stride
PixelShuffle:https://arxiv.org/abs/1609.05158

6.使用软标签和带噪声的标签

标签平滑,即如果您有两个目标标签:Real = 1和Fake = 0,则对于每个传入样本,如果它是真实的,则将标签替换为介于0.7和1.2之间的随机数,如果它是虚假的 ,将其替换为0.0和0.3。
比如

  • Salimans et. al. 2016

使标签对discriminator产生干扰:训练鉴别器时偶尔翻转标签

7.DCGAN / Hybrid Models

如果能用就用DCGAN吧,这个能行!

如果不能使用DCGAN并且没有稳定的模型,可以使用混合模型:KL + GAN或VAE + GAN

8.使用强化学习的稳定性技巧

  • Experience Replay
    • Keep a replay buffer of past generations and occassionally show them
    • 从过去的G和D中保留检查点偶尔用这个替换几次迭代
  • 适用于深度确定性策略梯度的所有稳定性技巧

Pfau & Vinyals (2016)

9.使用ADAM优化器

optim.Adam规则

Radford et. al. 2015

使用SGD训练D,ADAM训练G

10.尽早觉察出失败

D loss为0,失败   (D太强了,以至于G没有动力去产生好的fake数据,他觉得自己太垃圾于是索性放弃了)

检查梯度的范数:如果大于100就坏掉了 (梯度也不能太大,D或G,不希望D和G性能差距太大,他们应该同时进步)

网络正常时,D的loss曲线的方差较小,并且随着时间的推移而下降或者有大的方差并且有尖峰

如果G的loss稳定上升,那么G就是在用垃圾愚弄D

11.不要通过统计来平衡损失(除非理由充分)

不要尝试去找到一个(number of G/number of D)时间表去展开训练

很困难,我们都尝试过

如果你想尝试,请基于规则,而不是直觉

举例

while lossD > A:
  train D
while lossG > B:
  train G

12.如果有标签,请使用

如果有可用的标签,请训练鉴别器以对样本进行分类:auxillary GANs

13.给输入加上随时间衰减的噪声

给D的输入加上人工噪声 Arjovsky et. al., Huszar, 2016

给G的每层加上高斯噪声 Zhao et. al. EBGAN

  • Improved GANs: OpenAI code also has it (commented out)

14.[不确定]训练discriminator更多(有时)

特别是有噪声的情况下

找到到底训练D和G多少次非常困难

(意思是可以训练5次D,训练1次G,但至于准确确定训练多少次D再训练G非常困难)

15.[不确定]batch discrimination

混合的结果

(不知道这一条什么意思)

16.条件GAN中的离散变量

使用embedding层

往图像中加入条件信道

控制embedding的维度较低并且上采样去匹配图像信道的大小

17.在训练和测试阶段在G中用dropout

在dropout(50%)中提供噪声

在G的几层中用

Authors

  • Soumith Chintala
  • Emily Denton
  • Martin Arjovsky
  • Michael Mathieu
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值