GAN 里面的奇怪东西

缘起

我本以为像我这样自命清高的人,大概这辈子都不会亲手去碰GAN这种骚东西,没想到天命难测,终究需要徒手复现别人GAN的代码,

GAN的loss

从最古老的GAN的loss说起,$Loss = \log{D_1(x)} + \log{(1-D_1(G_1(x,z)))}$,对D的要求一般是对正常样本输出1,对生成样本输出0。

随后是WGAN的提出。他相对于普通的GAN只做了以下调整:

  • D最后一层不要sigmoid
  • loss不取log
  • 更新Discriminator的参数后将参数clip
  • 优化算法不使用带动量的??

pix2pix

大名鼎鼎的pixel2pixel,很有特色的是他的Discriminator。正常的D输出都是一个标量,而他的D输出是一个向量,向量中的每一维都是生成图片每个窗口部分是否为真的判定。

这么做直接导致的一个技术问题就是,怎么定义loss来进行后续的bp和训练。毕竟GAN的Discriminator输出都是标量{0, 1}。在一个GitHub项目中我发现,只用把这个D输出定义成全0或者全1的向量输出就ok。