GAN的一些小trick

GAN的一些小trick

最近训练GAN遇到了很多坑,GAN的训练的确是个很dt的问题,如果只是用别人的paper跑一些应用还好,如果自己设计新的结构,做一些新的研究的话,就需要了解这些trick了,都是泪~

这个doc soumith/ganhackssoumith/ganhacks 简直是GAN武林界的九阴真经,看完以后感觉自己上了一个level。

自己做个笔记:

1。normalize输入,让它在[-1,1]。generater的输出用tanh,也是[-1,1],这就对应起来了。

2。论文里面optimize G是min log(1 - D),但在实际训练的时候可以用 max log(D)

3。对于噪声z,别用均匀(uniform)分布,用高斯分布。

4。可以用instance norm代替 batch norm。还有就是real放一起,generated放一起(感觉这个是废话QAQ)。

5。避免稀疏的gradients:RELU,Maxpool那些。这一点我认为原因是不像做辨别式的网络,判别式的,尽可能提取重要的信息,其实一些对预测影响不大的信息都被忽略掉了。但是GAN不同,是生成式的模型,所以要尽可能的表现出细节方面的内容,所以避免使用稀疏的这些?

  • LeakyRelu
  • For Downsampling, use: Average Pooling, Conv2d + stride
  • For Upsampling, use: PixelShuffle, ConvTranspose2d + stride

6。可以把label为1的(real)变到0.7~1.2,label为0的变到0~0.3。这个可以深入想想。

7。能用DCGAN就用,用不了的话用混合模型,KL+GAN,VAE+GAN之类的。

8。借用RL训练技巧。

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

9。用ADAM!或者是D可以用SGD,G用ADAM

10。注意训练过程,尽早发现训练失败,不至于训练好长时间最后才发现,浪费时间。

11。最好别尝试设置一些常量去balance G与D的训练过程。(他们说这个work很难做。我觉得有时间的话其实还是可以试一下的。)

12。如果你对real有相应的label,用label,AC-GAN。加入label信息,可以降低生成的难度,这个应该可以想的通。

13。加噪声?作用是improve生成内容得diversity?

  • Add some artificial noise to inputs to D (Arjovsky et. al., Huszar, 2016)
  • adding gaussian noise to every layer of generator (Zhao et. al. EBGAN)

14。【not sure】多训练D,特别是加噪声的时候。

15。【not sure】batch D,感觉貌似是和pix2pix中的patchGAN有点像?

16。CGAN,我一直觉得CGAN这种才符合人类学习的思路。原始的GAN就太粗暴了,就好像什么都不知道,然后两个人D与G讨论交流对抗,产生的都是一些前人没有做过的工作,开篇的工作,所以比较困难一些,但是CGAN的话就有了一定的前提,也就是技术积累,所以比较简单一些。有点类似科研中的大牛挖坑,开辟新方向(GAN)。小牛填坑(CGAN)。

17。在G中的几层中用dropout(50%)。这个有一篇论文,还没看。


读完这些感觉自己想要设计GAN的话,应该有个系统的认识了,不会觉得自己好像有哪些重要的地方还不知道,很不踏实感觉。这种感觉对我这种强迫症的感觉很不爽啊!!看完以后顿时舒服了很多~~~


编辑于 2017-07-06