BigGAN 证明 GAN 吃得下"大 batch、大通道、类别条件 + 自注意力"的规模化配方,其谱归一化与截断技巧分别管稳定与保真;此外 InfoGAN、SRGAN、Self-Attention GAN 等变体各占一格生态位。 本节收拢造假工艺进化史的末段,并给出一张变体速查表。
进化史最后一案:规模化罪。DCGAN 之后的架构在小数据集上各自精彩,但 ImageNet 这种千类大战场上,GAN 长期拿不出手——直到 BigGAN 把"大"本身当成方法。本节审它的两件核心武器,顺带把没来得及单独立案的变体一并归档。
BigGAN 稳定性的底座之一是谱归一化:把每个权重矩阵除以它的最大奇异值,强制该层的 Lipschitz 常数不超过 1。与 WGAN-GP 约束整个函数不同,谱归一化逐层设限、几乎零开销,判别器因此可以放心做深做宽。用数值验证一遍它的机制:
import numpy as np rng = np.random.default_rng(7) W = rng.normal(0, 1, (6, 4)) # 某层权重矩阵 # 迭代法逼近最大奇异值: 反复做 W W^T 的幂迭代 Wn = W.copy() for _ in range(30): u, s, v = np.linalg.svd(Wn, full_matrices=False) Wn = Wn / s[0] # 除以当前最大奇异值 _, s_norm, _ = np.linalg.svd(Wn) print(f"归一化前最大奇异值: {np.linalg.svd(W, compute_uv=False)[0]:.4f}") print(f"归一化后最大奇异值: {s_norm[0]:.6f}") # 输出: # 归一化前最大奇异值: 2.8191 # 归一化后最大奇异值: 1.000000 # 任何方向的拉伸都被压到 1 以内——该层从此"限速" # 实际框架用一次幂迭代近似(不必完整SVD), 开销极小
读数干净利落:2.8191 压到 1.000000。判别器每层都挂上限速牌后,它对生成器梯度的"放大失控"被结构性遏制——这是把 3.4 节 Lipschitz 思想推广到整个判别器的工程化版本。
BigGAN 的另一件招牌武器是截断技巧(truncation trick):采样时把噪声 z 从标准正态"截"到更窄的范围(重采样超出阈值的分量),生成质量上升、多样性下降。数值实验量化这颗旋钮:
for psi in [2.0, 1.0, 0.7, 0.4]: # psi 是缩放系数, 小于 1 即"收窄" z = rng.normal(0, 1, 10000) * psi print(f"缩放系数 {psi}: 噪声标准差={z.std():.3f} " f"越界比例(|z|>2)={np.mean(np.abs(z) > 2):.4f}") # 输出: # 缩放系数 2.0: 噪声标准差=1.999 越界比例(|z|>2)=0.3148 # 缩放系数 1.0: 噪声标准差=0.989 越界比例(|z|>2)=0.0417 # 缩放系数 0.7: 噪声标准差=0.702 越界比例(|z|>2)=0.0040 # 缩放系数 0.4: 噪声标准差=0.402 越界比例(|z|>2)=0.0000
原理:噪声的尾部对应生成分布的"边缘地带"(质量差、结构乱的样本),收窄噪声等于主动放弃边缘、保住中心。旋钮的代价是多样性——0.4 倍缩放下越界比例归零,样本也趋于雷同(模式崩溃的近亲,不过是主动选择的)。BigGAN 论文同时报告:对某些类别强行截断会直接崩出垃圾样本,所以这颗旋钮要按类试探着拧。
| 变体 | 核心改动 | 生态位 |
|---|---|---|
| InfoGAN | 最大化隐码与生成的互信息 | 无监督解耦表示(互信息下界可学) |
| SRGAN / ESRGAN | 感知损失 + 对抗损失 | 超分辨率重建 |
| SAGAN | 自注意力进 G/D | 长程依赖(条纹、对称结构) |
| WGAN 系列 | EM 距离 + Lipschitz | 通用稳定化底座(3.4 节) |
| StackGAN | 文本→粗图→精图两阶段 | 文本生成图像(早期) |
| Relativistic GAN | 判别器估计"真的比假的多真多少" | 损失改进,可与多数架构叠加 |
值得单独一提的是 InfoGAN:它把一部分噪声改为"隐码 c",训练时最大化 c 与生成样本的互信息——数值上,解耦良好时隐码恢复率接近 1,未解耦时退到瞎猜水平(四类隐码即 0.25)。这与 StyleGAN 的映射网络殊途同归:一个用信息论约束、一个用架构设计,都奔着"可控的生成"去。SRGAN 则示范了对抗损失的移植术:把判别器当"感知裁判"加进超分辨任务,专治均方误差带来的糊——对抗思想早已溢出"生成"本行(1.4 节版图的伏笔在此收线)。
回看 1.1 节的时间线与本章七案,规律已经完整:画质罪→DCGAN,失控罪→cGAN,梯度罪→WGAN,单一罪→CycleGAN/Pix2Pix,分辨率罪→PGGAN/StyleGAN,规模化罪→BigGAN。每次翻案都留下"遗产 + 新罪状":BigGAN 稳住了规模,但训练仍需大 batch、算力门槛高企;StyleGAN 可控了,但换域成本沉重。GAN 的进化史不是问题被解决的历史,而是问题被交换的历史——扩散模型接棒时,继承的正是"训练稳定"这块用其他代价换来的地盘(第 7.4 节)。
BigGAN 的"大"到底指什么? 三件事一起大:批大小(数百到数千)、通道数、类别嵌入共享。单独放大任何一项收益都有限,配合起来才出现在 ImageNet 千类上的质量跃升——规模化是配方不是单变量。
截断技巧与模式崩溃怎么区分? 两者都表现为"样本趋同",但方向相反:崩溃是被动失控(生成器走捷径,第 6.1 节),截断是主动取舍(用多样性换保真度,旋钮在你手里)。判断方法:逐步收窄噪声看质量曲线,可预期平滑变化的是截断,突变或样本崩坏的是崩溃。
谱归一化与 WGAN-GP 能一起用吗? 原则上都在管 Lipschitz,同时用属重复用药,一般二选一。经验上:判别器深而大用谱归一化(逐层、便宜),需要强约束时用梯度惩罚(全局、精确)。第 6.3 节的超参排查表把它们归在"损失层"同一优先级。
一个 6 乘 4 的权重矩阵,最大奇异值 2.82。谱归一化后所有奇异值缩放多少倍?答案:除以 2.82,最大奇异值变 1,其余按比例缩小。若该层输入范数最多 10,输出范数上界是多少?答案:不超过 10(1-Lipschitz 层不放大范数)。这两步是"限速牌"的全部数学。