TVGAN 的训练,BigGAN,与 InfoGAN 的最新进展,GAN 是否已接近最终形式?

1,133 阅读4分钟
原文链接: zhuanlan.zhihu.com

标题图来自下文的 ProInfoGAN,在 CelebA-HQ 上无监督发现高质量 disentangled 编码。

我在几天前介绍了一个很简单的“TVGAN”,很奇怪的是,为什么这么简单的事情,之前没人明确去用。

今天细看 BigGAN 才发现,原来 Google 的这篇 SotA 也是在用非常接近的 LOSS。让我们看看为什么。

1. TVGAN 的训练

首先,回顾 TVGAN 公式:

\min_{G} \max_{D(x) \in [-1,1]} E_{x \sim p_x(x)}(D(x)) - E_{z \sim p_z(z)}(D(G(z)))

PENG Bo:TVGAN:一种简单且有效的新GAN (以及WGAN论文的问题) 思考DL的理论细节 (2)zhuanlan.zhihu.com图标

但是,如果实际去用,会发现一个问题:

如果用 tanh 硬性把 D 的输出映射到 [-1, 1],那么 G 的梯度就很容易消失(显然,就像 MSE 配合 CE 会梯度消失)。

估计这就是为什么之前大家都不用这个方法。

那么,简单的想法是,去掉 [-1,1] 限制,然后加个正则项希望 D 的输出接近 0,例如这样:

\min_{G} \max_{D} E_{x \sim p_x(x)}(D(x)) - E_{z \sim p_z(z)}(D(G(z))) - \lambda \cdot E_{x \sim {all}}(|D(x)|)

但感觉这样丑。

于是,我想了想,想到一个怪招,见下图:

这是当时试的一些方法,没有注释掉的那个,就是当时想到的怪招:

  • 对于 D(x) > 1 的真样本,直接就把梯度归零(因为已经足够了)。
  • 同理,对于 D(x) < -1 的假样本,也把梯度归零(因为已经足够了)。
  • 不用添加任何参数,大致实现了我们的要求,真好。
  • 这还有一个有趣的地方,就是现在如果 D 太完美,它会自动停下来等 G。

如果写到式子里面,就是:

\max_D E_{x \sim p_x(x)}(\min(1,\,D(x))) - E_{z \sim p_z(z)}(\max(-1,D(G(z))))

另外,代码中第一个 ggg 是另一种梯度方案,好像也还可以。第三个 ggg 就是普通的 GAN(显然)。

其实,许多不同的 GAN 只不过是梯度变来变去。我们完全可以去掉 D 最后的那个非线性,直接改梯度。

值得注意的是,G 不能用类似的思路,如图:

由于神秘的原因,G 还是要用原来的 loss,即,固定的梯度。否则似乎 G 会相对 D 而言太弱,导致没图像。

其实原始 GAN 中的 G loss 也是和 D loss 有区别。


2. BigGAN 的 LOSS:巧合

今天想再看看最新进展,于是细读了 BigGAN 的论文:

[1809.11096] Large Scale GAN Training for High Fidelity Natural Image Synthesisarxiv.org

发现 BigGAN 用这个所谓 Hinge loss(来自 SA-GAN):

易见,这里 D 和 G 的 loss 和“TVGAN”的方法一模一样,真是巧合,哈哈。

当然,我之前也说过,GAN 的这个 loss 没那么重要,所以也没什么可夸的,不过这可以说明这个方法是有道理的。

BigGAN 还有谱归一化,我个人是把谱归一化看成是通用技巧,和 BN 一个性质。

BigGAN 还做了很多有趣的选择。Google 完全不在意模型是否“简洁优美”(所以放心地给 D 和 G 用不同学习速率,D-D-G 训练周期,等等等等),只有效果好才是硬道理。

BigGAN 效果好,关键还是因为 Attention 太重要了,和 BERT 的情况一样。有了 Attention 之后,几乎是暴力解决一切。

Google 还明确地说,可能是 BigGAN 太大了,到后面都会塌掉,他们也没搞清楚深层的原因。所以现在 report 的是塌掉之前的结果。

我没有 TPU 集群,只能猜。我猜,BigGAN 缺少的环节,可以由 InfoGAN 模块补全。让我们继续看下文。


3. ProInfoGAN 与感想

这是搜索到的一篇少为人知的最新结果,效果非常好。我本来想做类似的事情,现在看来已经没有什么可做的了。

jonasz/progressive_infogangithub.com图标

无监督发现高质量 disentangled 编码!这是无监督学习的圣杯之一。

请大家欣赏视频(Youtube,需要翻墙),效果非常好:

https://youtu.be/U2okTa0JGZgyoutu.be

其实,就是 NVidia 那个逐步 GAN(ProGAN),和 InfoGAN 的结合:

  • 它发现,在有 InfoGAN 模组后,相当于加入了正则化,会令 GAN 稳定得多。用普通的 GAN loss 就够了,不会塌。
  • 它要求不同编码对应不同的尺度(例如,改眼睛颜色,就肯定在小图像中看不出来),还有其它一些技巧,实现了非常高质量的编码分离。
  • 具体技巧,看它的论文草稿吧。

效果,左右转:

嘴张合:

大家还是看 Youtube 视频吧,效果明显得多,很精彩。

完全无监督,拆出来 80 个带意义的维度,而且质量都很高。

4. 感想

GAN 是否已接近最终形式了?可以想象 BigInfoGAN 会很强。

再喂多些数据,再增大模型,真的 Sky is the limit。

严格说来,它还是啥都不懂,但确实很强。