枢纽
数据集ImageNet
输入模态vision

BigGAN:「把 GAN 拉到 8 倍 batch + 4 倍参数」就够了

Andrew Brock, Jeff Donahue, Karen Simonyan(Heriot-Watt University + DeepMind)。ICLR 2019;arXiv:1809.11096。 tfhub 模型 · generative modelclass-conditional GANscale 线索

🧠 一句话心智模型:2018 年大多数人还在折腾「怎么改 GAN 的 loss / 正则让训练稳一点」。BigGAN 的回答出乎意料地简单:别改 loss,直接把 batch size 翻 8 倍、参数翻 4 倍,加一个 4 行的 truncation trick。ImageNet 128×128 上 IS 从 52.5 飙到 166.5,FID 从 18.65 砸到 7.4「大规模」本身就是一种正则——这是 GAN 走向工业级图像生成的转折点。

🎯 为什么重要:GAN 第一次接近「真实图像」的统计分布

论文 §1 用一个数字开场:在 ImageNet 类条件生成上,2018 年的 SOTA(SA-GAN,Zhang 2018)IS = 52.5,而真实数据的 IS 是 233——差距大到让人怀疑 GAN 这条路是不是本质不行。BigGAN 之前的「常识」是:

核心成见(论文 §1 要破的)
「GAN 训练脆弱,scale 不起来」——大模型 + 大 batch 会让训练更不稳,肯定崩。
「要稳就得加正则」——gradient penalty、Lipschitz 约束、谱归一化是必备。
「class-conditional ImageNet 必须用多尺度 trick」——progressive growing(ProGAN 那套)才能生成 128+ 分辨率。

BigGAN 的实证结论把这三条全推翻了:scaling 不仅没让训练变坏,反而显著更好;最有效的「正则」就是off-diagonal 正交正则(让生成器对输入噪声平滑);progressive growing 完全不需要——直接训 512×512 也行。scale 是 GAN 一直缺的那味药

💡 核心思想:三件事——放大、skip-z、truncation trick

方法上 BigGAN 没有发明新 loss,沿用了 SA-GAN 的 hinge loss + spectral norm。它做的是三件事(论文 §3):

BigGAN 三件套 ① 把一切放大 batch size: 256 → 2048 channels: 64 → 96 params: 81M → 160M+ IS: 52.5 → 95+ 大 batch → 每 batch 覆盖更多 mode → 更好的梯度 ② 共享 embedding + skip-z class embedding 共享 → 投影到每层 BN gain/bias z 切块 → 每个 resolution 都直接拼接一份 z +37% 训练速度 +4% IS 让噪声能直接影响 不同层级的特征 ③ Truncation trick 训练: z ~ N(0, I) 采样: z ~ truncated N 阈值大 → 多样性高 阈值小 → 单张更逼真 事后调参:精度/多样性 的 trade-off 曲线 需 orthogonal reg 让 G 对 z 平滑
图 1:BigGAN 三件套。放大带来数量级提升,skip-z 让 latent 直接作用到每个分辨率层级,truncation trick 把「多样性 vs 逼真度」变成可事后调节的旋钮。

最关键是truncation trick(§3.1):训练时 $z\sim\mathcal N(0,I)$,采样时改成 $z$ 从截断正态里采(把 $|z|>\text{阈值}$ 的样本丢回去重采)。阈值越小,$z$ 越接近 0(分布的 mode),生成样本越「像」、越锐利,但种类变少;阈值越大,多样性越高,但单张质量下降。这是 GAN 独有的福利——它不需要 backprop 通过 latent,所以采样分布可以和训练分布不一样。

为了让生成器对截断「耐受」,论文 §3.1 加了一个off-diagonal 正交正则

$$R_\beta(W)=\beta\,\big\|(W^\top W)\odot(1-I)\big\|_F,\qquad \beta=10^{-4}$$

这一项让 $W$ 的不同 filter 之间余弦相似度趋近 0(但不约束模长)。Table 1 ablation:没有这个正则时只有 16% 的模型能耐受 truncation,加上后升到 60%

🛠️ 工程关键(论文 §3 + §5)

组件做法数字 / 论文依据
① 大 batch从 SA-GAN 的 256 → 2048(8×)§3 Table 1 row 1-4:单 batch 加大就把 IS 从 52.5 顶到 76.85(+46%
② 加宽channels 从 64 → 96(约 2× 参数)§3 Table 1:进一步 +21% IS
③ 共享 class embedding1 个 embedding 投影到每层 BN 的 gain/bias,而非每层独立§3:训练速度快 37%
④ Skip-z$z$ 切 $n$ 块,每个分辨率都拼一份到条件向量§3:额外 +4% IS,速度 +18%
⑤ Orthogonal Regularization$R_\beta$ off-diagonal,$\beta=10^{-4}$§3.1:truncation 友好率 16% → 60%
⑥ Moving avg of G用 G 权重的 EMA(decay 0.9999)做评估§3:沿用 Karras 2018 / Mescheder 2018
⑦ 跨设备 BatchNormG 的 BN 统计跨所有 TPU 设备算,而非 per-device§3:大 batch 下 BN 统计必须全局
⑧ 不用 progressive growing直接训 512×512§3:「We find progressive growing unnecessary
🔮 硬件(§3):每模型在 128-512 个 TPUv3 核心的 Pod 上训,这就是为什么能塞 2048 batch + 大模型。也是后续大规模生成模型的工程范式起点。

📊 关键结果:ImageNet IS 几乎翻 3 倍,且能 scale 到 512×512

消融:从 SA-GAN baseline 到 BigGAN(论文 Table 1,ImageNet 128×128)

batchch.paramssharedskip-zorthoFID ↓IS ↑
2566481.5M18.6552.52
20486481.5M12.3976.85
204896158.3M8.5199.31

每一行都是上行的叠加。最大单一跳变来自 batch size 8×(IS 52.5 → 76.85)。

各分辨率 SOTA 对比(论文 Table 2,ImageNet)

模型分辨率FID(best)IS(max)vs 上一个 SOTA
SA-GAN(prior SOTA)12818.6552.52
BigGAN1287.7166.3(valid)/ 206(max)FID -59% / IS +216%
BigGAN2567.7233.1(valid,接近真实 233)首次接近「真实 IS」
BigGAN5127.6241.4高分辨率仍稳
BigGAN-deep(4× 深)1286.3166.5(valid)/ 253(max)更深更好
BigGAN-deep2567.0232.5(valid)/ 317(max)更深更好
关键洞察(§5.1):BigGAN-deep(4× 更深的残差块)全方位胜过 BigGAN——证明深度也跟着 scale 起作用,不只是 batch 和宽度。

JFT-300M 上的稳定性(论文 Table 3,§5.2)

channelsparamsFIDIS
64(ablated,techniques off,真·SA-GAN-like baseline317.1M48.3823.27
64(full BigGAN,techniques on)99.4M23.4824.78
96(full BigGAN)207.9M18.8427.86
128(full BigGAN)355.7M13.7530.61

论文 §5.2 把 row 1(shared/skip-z/ortho 全关,仅大 batch)当作「comparable to SA-GAN」的 ablated baseline,把 row 2-4(techniques 全开)当作「full BigGAN」;HTML 之前把 row 2(ch=64 full)误标成「baseline-like」已修正。JFT-300M 子集(292M 图,8.5K 类)上训练几百千步不塌,论文 §5.2:「moving beyond ImageNet to larger datasets may partially alleviate GAN stability issues」——更大的数据本身也是稳定剂。

稳定性分析(§4,最深刻的发现)

现象结论
G 的第一层(非卷积、过完备)谱范数 $\sigma_0$ 持续增长,塌缩时爆炸限制 $\sigma_0$(clamping / regularize)能延缓但不阻止塌缩
D 的训练 acc 98%+,验证 acc 50-55%(≈ 随机猜)D 在 memorize 训练集——这其实是它该做的事
强行加 R1 gradient penalty γ=10 能稳,但 IS -45%稳定和性能在 GAN 里是对立的
放宽正则 → 谱失控;加强正则 → 性能塌用现有技术,最好的策略是允许后期塌缩 + 早停

🌐 在领域中的位置

DCGAN / WGAN(小规模、稳定化 loss) SN-GAN / SAGAN(谱归一化、self-attention) BigGAN(直接 scale,truncation trick)⭐ StyleGAN2 / ADA(迁移到无监督人脸 / 小数据) Diffusion Models(接管高保真生成主流)

BigGAN 是 GAN scale 化的顶峰:它证明「scale 是 GAN 的解药」的同时,也穷尽了 GAN 的 scale 潜力——§4 的稳定性分析指出 GAN 训练在 scale 下存在「性能 vs 稳定」的不可调和矛盾。这也是为什么 2020 年后高保真图像生成主流让位给 diffusion。但 BigGAN 的两个遗产影响深远:truncation trick(diffusion 的 CFG 是其变体)和「scale 即正则」的工程直觉。

❓ 常见误区

BigGAN 的「大」到底指什么?

主要指batch size 8×(256→2048)和参数 2-4×(81M→160M-355M)。论文标题「Large Scale GAN Training」的「scale」既包括模型规模也包括 batch 规模。核心 insight 是 batch 越大每步覆盖的 mode 越多,梯度越好

为什么 truncation trick 不在训练时用?

训练时用截断会让 $z$ 分布偏离 $\mathcal N(0,I)$,破坏 G 学到的 latent 结构。采样时用是为了「事后」在「多样性-逼真度」曲线上选点。论文 §3.1 Fig.2a:阈值从 2 → 0.04,单张样本越来越接近 mode(更逼真),但种类变少。

为什么不用 progressive growing?

论文 §3:「We find progressive growing unnecessary even for our 512×512 models」。ProGAN 那套是为了在小 scale 下稳定训练,BigGAN 的发现是「scale 本身就是稳定剂」——足够大的 batch 让你完全不需要多尺度技巧。

训练真的不塌吗?

会塌。这是论文 §4 最重要的负面结论。BigGAN 的所有报点都是「塌缩前的 checkpoint」。论文原话:「with current techniques, better final performance can be achieved by relaxing this conditioning and allowing collapse to occur at the later stages of training」。也就是说,只能用早停兜底。

BigGAN 是「记住训练集」了吗?

论文 §5.1 专门做了 nearest-neighbor 分析(附录 A):BigGAN 的样本在像素空间和特征空间的最近邻视觉上明显不同,且 class-wise 插值平滑过渡——说明它在学分布,不是 memorize。但 §4.2 也指出 D 在 memorize 训练集(98% train acc vs 50-55% val),这被认为是 D 的本职工作。

现在还有人用 BigGAN 吗?

作为生产级生成模型——基本被 diffusion 取代。但作为研究 baseline知识蒸馏教师仍有用;其 truncation trick 的思想被扩散模型的 CFG(Classifier-Free Guidance)继承——都是「在 latent/conditional 上做截断或外推来 trade 精度/多样性」。