← 总目录 / 板块四 · 多模态模型的发展
板块四 · 多模态模型的发展

第29篇 · GAN

造假者与警察:用一场博弈替代马尔可夫链的生成建模革命
Generative Adversarial Networks · Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio(蒙特利尔大学)· 2014 · arXiv:1406.2661
来源声明:本页依据 ar5iv 全文 HTML 版精读,所有公式、算法与数字均复述原文并注明小节出处,未做外部验证。标注【论文声称】【实验支持】【解读者推断】以区分来源。

一、全局大图

1.1 摘要拆解与导航表

摘要短语对应原文章节对应本页章节
"adversarial process… simultaneously train two models"§1 引言 + §3 对抗网络二·A / 二·B 公式手术
"G captures the data distribution… D estimates the probability"§3 框架定义二·B
"minimax two-player game"§3 式(1)二·B
"unique solution: G recovers data distribution, D equals 1/2"§4 理论结果(定理1)二·C 理论手术
"trained by backpropagation… no Markov chains or approximate inference"§1/§3(算法1);§2 与相关工作对照二·D 工程账单
实验与样本质量§5 实验(表1、表2、图2/3)三·批判性阅读

1.2 主要贡献与证据强度预评

#论文声称的贡献证据类型预评强度
1对抗框架:minimax 博弈式生成建模,免马尔可夫链、免推断网络概念框架 + 定理1/命题2 的理论证明(非参数极限下)强支撑(理论上)/ 主张(实践上)
2最优判别器 D*G(x)=pdata/(pdata+pg),博弈值 = −log4 + 2·JSD§4 完整推导,可逐步复算数学证明
3MNIST/TFD 上 Parzen window log-likelihood 有竞争力(225±2 / 2057±26)主实验表;但评估方法本身高方差、不适用高维仅弱间接证据
4"样本质量至少与文献中更好的生成模型相当"作者自评的目测比较,作者自己声明"make no claim that these samples are better"只是主张
5k=1 交替训练即可工作;非饱和损失 max log D(G(z)) 提供更强早期梯度实践陈述+定性解释,无消融表经验主张

1.3 推荐阅读路线

必读主线:式(1) minimax → 命题1 最优判别器 → 定理1 JSD 分解 → 算法1 交替训练 + 非饱和技巧。这条线是全文的骨架,四个节点缺一不可。

可跳读支线:§2 相关工作(RBM/DBM/GSN 的配分函数之苦——知道结论"GAN 免马尔可夫链"即可);命题2 的凸性证明细节(记住结论和它的三个理想化前提即可)。

跳读代价:跳过 §2 将无法理解本文在 2014 年的真正卖点——当时主流生成模型全被 MCMC 抽样拖累,"前向一跑即采样"是降维打击。

二、逐章精读

A · 失效模式先行 (来源:论文 §1–§2)

可验证的学习目标:学完本节能列出——①2014年深度生成模型的两大计算顽疾;②GAN 针对每个顽疾分别砍掉了什么。

2014年,深度学习在判别任务上高歌猛进(backprop + dropout + 分段线性单元),但生成模型深陷两潭泥沼【论文声称】:

直觉类比(原文自带的经典比喻):生成器是造假币团伙,努力印出以假乱真的钞票;判别器是警察,努力识破假币。双方对抗、共同进化,直到假币与真币无法区分。类比在哪里失效:真实世界里警察的经验来自所有历史案件(数据固定),而 GAN 里 D 的对手是一个不断变化的 G——D 必须与 G 保持同步,一旦 G 更新太快而 D 掉队,梯度信号就失去意义。这个"同步要求"正是后来几乎所有 GAN 训练不稳定问题的根源,原文 §6 用"Helvetica 场景"承认了它。【解读者指出】

一句话蒸馏:本节的唯一必记结论——GAN 把"拟合概率分布"重述为"打赢一场可微分的辨别博弈",从而绕开配分函数与马尔可夫链。

B · 式(1) 公式手术 (来源:论文 §3)

minG maxD V(D,G) = Ex∼pdata(x)[log D(x)] + Ez∼pz(z)[log(1 − D(G(z)))]  (式1)
符号它是什么直觉
z ∼ pz(z)噪声先验(如均匀/高斯)生成的一切 randomness 的唯一源头
G(z; θg)MLP 表示的可微映射,把 z 变成样本隐式定义分布 pg:从不写出密度函数,只给采样器
D(x; θd) ∈ [0,1]x 来自数据(而非 pg)的概率估计警察的"真钞置信度"
第一项 E[log D(x)]D 在真样本上的对数似然鼓励 D 把真货认成真货
第二项 E[log(1−D(G(z)))]D 在假样本上的对数似然鼓励 D 把假货认成假货;而 minG 则反向拉扯

张量形状流:batch 训练时,z ∈ ℝm×dz,G 输出 x̂ ∈ ℝm×784(MNIST 展平情形),D 输出标量向量 ∈ ℝm。两项期望都以 mini-batch 均值近似——这正是算法1里 ∇ 项中 (1/m)Σ 的来历。

手算验证(博弈值的两端):训练起点,若 D(x)≈1、D(G(z))≈0,则 V ≈ log1 + log1 = 0,这是 D 的近乎最优开局、G 的最差处境;收敛点(见定理1)V = −log4 ≈ −1.386。所以从开局到收敛,D 的目标值从 0 一路降到 −log4——−log4 是 D 能保住的最差战果,也是 G 能逼出来的最好结局。【解读者推导】

两个工程级修正(同属 §3,却比式(1)本身更常被使用):

常见误读①:"式(1)就是实际训练的目标函数。"错:实际代码里 G 的损失几乎总是非饱和版本 maxG log D(G(z)),与式(1)中 G 的最小化项不同(尽管定点相同)。读任何 GAN 代码都应对上这一点。

闭卷自检:不看材料,我能默写式(1)并说明每一项由谁的哪次更新驱动吗?能解释为什么需要非饱和损失吗?

C · 理论手术:从最优判别器到 JSD (来源:论文 §4)

命题1(固定 G 的最优判别器):

D*G(x) = pdata(x) / [pdata(x) + pg(x)]  (式2)

证明只需一步初等微积分:对任意 a,b ≥ 0 不全为零,y ↦ a·log y + b·log(1−y) 在 y = a/(a+b) 处取最大。把 V 写成对 x 的积分,逐点求极值即得。直觉:D* 就是"贝叶斯最优真伪分类器"——两个分布在哪里重叠,D* 就在哪里犹豫。

定理1(全局最优):把 D* 代回,定义 C(G)=maxDV(G,D),则

C(G) = −log4 + KL(pdata ‖ (pdata+pg)/2) + KL(pg ‖ (pdata+pg)/2) = −log4 + 2·JSD(pdata ‖ pg)  (式5/6)

手算验证:当 pg=pdata 时 D*(x)=1/2,C(G) = E[log½] + E[log½] = −log4 ≈ −1.386,与式(6)一致(JSD=0)。JSD 非负且仅在两分布相等时为零 ⇒ C 的全局最小值唯一地在 pg=pdata 取得。数字对账通过。这一步的美在于:minimax 博弈的最优值不是随便一个常数,而是恰好等于负4的对数加两倍JS散度——生成质量第一次有了几何解释。【实验支持层面为纯数学,无需数据】

命题2(收敛性)及其三个理想化前提:若①G、D 容量无限(非参数极限),②每步允许 D 达到给定 G 下的最优,③按改善准则更新 pg 本身而非 θg,则 pg 收敛到 pdata。证明骨架:U(pg,D) 关于 pg 凸,凸函数的上确界仍是凸函数,在其唯一最小点做梯度下降必收敛。类比失效点:现实训练三条全部不满足——MLP 是有限参数族、k=1 步的 D 远非最优、优化变量是 θg 而非分布本身。所以命题2与其说是保证,不如说是精确刻画了"保证在哪些假设下才存在"。【解读者观点】

常见误读②:"GAN 的理论证明了训练会收敛。"错:定理只在非参数+每步最优 D 的虚拟动态下成立;参数化 MLP 引入多个临界点,原文自己承认"尽管缺乏理论保证,MLP 的实践经验表明它们是合理选择"(§4)。

常见误读③:"JSD 是 GAN 的损失函数。"错:C(G)=−log4+2JSD 只是在"内部最大化已完成"的理想前提下对 G 目标的等价改写,用于分析;实际小样本、非最优 D 时两者并不等价。

D · 算法1 与工程账单 (来源:论文 §3 图1说明与算法1)

for 每轮训练:
  for k 步:                        # 实验 k=1
    采样 m 个噪声 z⁽¹⁾…z⁽ᵐ⁾ ~ p_z
    采样 m 个真样本 x⁽¹⁾…x⁽ᵐ⁾ ~ p_data
    梯度上升更新 θ_d:
      ∇_θd (1/m) Σᵢ [log D(x⁽ⁱ⁾) + log(1−D(G(z⁽ⁱ⁾)))]
  采样 m 个噪声 z⁽¹⁾…z⁽ᵐ⁾ ~ p_z
  梯度下降更新 θ_g:
      ∇_θg (1/m) Σᵢ log(1−D(G(z⁽ⁱ⁾)))   # 实际用 max log D(G(z))
end
设计决策缓解的压力新增的压力/债
隐式分布(只有采样器,无密度)免除配分函数归一化pg(x) 无法显式求值 → 评估只能靠 Parzen window 近似(§5),埋下评测债
对抗信号替代似然免除 MCMC 与推断网络G/D 同步难题(Helvetica 场景:G 把过多 z 坍缩到同一 x)→ 后世模式崩塌问题
交替 k=1 更新计算量减半D 非最优 → 理论保证失效,训练动力学进入未知领域
非饱和损失早期梯度消失G 优化的是另一个(定点等价的)目标,训练曲线与式(1)值不再可比

E · 实验章速览 (来源:论文 §5,详细批判见第三节)

配置:MNIST / TFD / CIFAR-10 三数据集;生成器混用 ReLU 与 sigmoid,判别器用 maxout + dropout;噪声仅进 G 的最底层;优化用 momentum。评估:对 G 样本拟合 Gaussian Parzen window 估计测试集 log-likelihood,σ 验证集交叉验证。

模型MNISTTFD
DBN138 ± 21909 ± 66
Stacked CAE121 ± 1.62110 ± 50
Deep GSN214 ± 1.11890 ± 29
Adversarial nets225 ± 22057 ± 26

数字对账:MNIST 上 GAN 225±2 为全场最高;TFD 上 2057±26 低于 Stacked CAE 的 2110±50——正文如实呈现了"一胜一负",摘要并未吹嘘全面领先。对上了,且诚实。但注意单位是"测试集平均 log-likelihood"(越高越好),不同模型间比较依赖同一 Parzen 评估协议,而该方法方差高、在高维空间表现不佳——作者原话:"it is the best method available to our knowledge"。【实验支持的边界】

三、批判性阅读

3.1 benchmark 到底测什么

Parzen window log-likelihood 测的是"生成的样本作为测试集密度估计器的质量",它惩罚离群样本(生成一张明显不像数据的图会重创该指标),但对模式覆盖的数量不敏感——一个只生成三种数字但每种都完美的模型可能得分不错。因此它是"样本保真度"的代理,不是"分布覆盖度"的度量。这与 GAN 后来最著名的病症(模式坍缩)恰好处在评估盲区上。【解读者推断】

3.2 证据分级

3.3 第二坐标轴:成本与效率

GAN 的效率优势是结构性的:采样只需一次前向传播,对比 RBM/DBM 每个样本都要跑马尔可夫链至混合;训练也只需 backprop。表2(各方法挑战对比)系统列出了这一账单:对抗模型在 Training/Inference/Sampling 三栏几乎全绿,唯一的红栏是"Evaluating p(x)"——无法显式表示密度。换句话说,GAN 用"放弃密度可评估性"换来了"采样与训练的全线提速",这笔交换成为此后十年生成模型设计的基本权衡之一。

3.4 论文没有告诉你什么

声明:以上数字均复述 arXiv 版原文,未做外部验证。

四、综合考核

4.1 重建因果链

从摘要的两个否定句出发:"no Markov chains""no approximate inference"。推演:要免掉马尔可夫链 → 必须让采样变成单向映射 → 于是引入噪声源 z 和生成器 G(z);要免掉推断 → 必须绕开显式似然 → 于是需要一个不需要密度的学习信号 → 判别器提供"可微分的好坏评分" → 自然形成 minimax 博弈 → 博弈要有不动点 → 定理1给出 pg=pdata, D=1/2。整篇论文是从两个"不要"反推出来的必然结构。

4.2 数字总对账

五组跨节数字:①D*=1/2 ⇔ C(G)=−log4:代入 log½+log½=−log4,吻合;②式(6) 在 pg=pdata 时 JSD=0 ⇒ C=−log4,与①互证;③开局 V≈0 vs 终局 −log4≈−1.386:D 的战果单调恶化,方向合理;④表1 MNIST 各模型区间 121–225,GAN 最高、Stacked CAE 最低,与 TFD 上两者排序相反(225 vs 2110 的胜负翻转),提示指标对数据集敏感;⑤k=1 意味着每次迭代 D 与 G 各更新一次,算法伪代码与文字描述一致。全部自洽,无发现矛盾。

4.3 设计决策答辩

4.4 证据审计(回看阶段1预评)

贡献预评读后修正
对抗框架理论强/实践主张维持。理论部分证明完整可复算;实践有效性在本文内的定量证据其实很弱(Parzen 高方差),真正的确认来自后世海量后续工作——这超出本文证据范围。
JSD 分解与全局最优数学证明维持,手算复核通过。
Parzen 竞争力弱间接证据维持并降半格:TFD 落后 Stacked CAE,且指标本身有盲区。
样本竞争力主张只是主张维持。作者自我克制("make no claim…"),但毕竟是目测。
k=1与非饱和技巧经验主张维持。无消融,是全文工程可信度最薄弱处。

五、自测题

  1. L1 直接应用博弈达到全局最优时 D(x)=? C(G)=? 并给出数值。
    展开答案D(x)=1/2;C(G)=−log4≈−1.386(定理1,§4)。此时 JSD(p_data‖p_g)=0,即 p_g=p_data。
  2. L1 直接应用写出固定 G 时最优判别器 D*G(x) 的表达式,并计算当某点上 p_data(x)=0.3、p_g(x)=0.1 时 D* 的值。
    展开答案D*G(x)=p_data/(p_data+p_g)(式2);代入得 0.3/(0.3+0.1)=0.75。含义:在该点看到样本时,它来自真实数据的后验概率是75%。
  3. L2 迁移训练早期 G 极差时,原始目标 log(1−D(G(z))) 为什么失效?非饱和版本如何解决?两者的不动点是否相同?
    展开答案D 高置信拒绝假货(D(G(z))≈0),log(1−D(G(z))) 进入平坦饱和区,梯度近零,G 学不动;非饱和版改为最大化 log D(G(z)),在 D(G(z))≈0 处斜率很陡,早期梯度强。原文明确说两者给出相同的动力学定点(§3)。评分要点:饱和机理+"定点相同"这句原文结论。
  4. L2 变情境假设你把 k 从 1 改成 100(每更新 G 一次先充分训 D 百步),这对训练动态有什么影响?结合命题2的前提讨论。
    展开答案D 更接近当前 G 下的最优 D*G,更贴合命题2"每步 D 达到最优"的理论前提,梯度方向更有意义;但计算成本 ×100,且 D 过强时(尤其早期)非饱和损失也可能重新进入接近饱和的区域,G 每步收到的信号变化剧烈,实践中未必更快收敛。评分要点:指出向理论前提靠拢+成本与同步性代价两面。
  5. L3 构造反例构造一个具体场景说明"Helvetica 场景"如何发生:G 在什么激励下会把多个不同的 z 映射到同一个输出?这对应什么下游危害?
    展开答案若 G 先于 D 被过度更新,G 发现某个输出 x₀ 当前骗过了 D(D(x₀)>其他输出处的得分),梯度会把大量 z 区域都推向 x₀ 以"安全"地降低自身损失——因为对 G 而言,把更多概率质量放到 D 认为真实的点上总能降低 log(1−D(G(z)))。结果是 p_g 在少数点上堆积尖峰、丧失多样性,即模式坍缩的前身;下游危害:生成样本缺乏多样性,无法覆盖 p_data 的多个模式。评分要点:激励机制(D 未同步时的漏洞)+多样性丧失后果。
  6. L3 识别错误有人说:"命题2保证了只要网络容量够大,GAN 一定能收敛到数据分布。"指出这句话遗漏的两个关键前提,以及现实中它们为何不成立。
    展开答案遗漏一:"每一步允许 D 达到给定 G 下的最优"——实际 k=1 的小批量 SGD 远非最优;遗漏二:"按改善准则更新 p_g 分布本身"——实际优化的是有限维参数 θ_g,MLP 参数空间有多个临界点,且有限容量族可能根本不包含 p_data(即便容量"够大"也只是渐近说法)。原文自己在 §4 明确承认这些限制。评分要点:两个前提各占一半,能引原文态度加分。
  7. L4 综合综合 §4 的 JSD 结果与 §5 的 Parzen 评估:为什么说"本文的理论最强处与实证最弱处恰好指向同一个空白"?并据此预测后续工作首先会补什么。
    展开答案理论给出了完美极限下的优雅刻画(C(G)=−log4+2JSD),但无论训练中还是评估中都无法测量 p_g:训练时 D 非最优、JSD 只是理想改写;评估时只能用高方差的 Parzen 窗口近似。于是"分布层面的质量"全程处于不可观测状态——理论越漂亮,越凸显实证度量的空白。可预测的补课方向:更可靠的生成模型量化指标(后来的 IS/FID)、以及对 JSD 之外散度的显式优化(f-GAN 一系)。评分要点:双向论证(训练侧+评估侧均不可测)+至少一个可验证的预测方向。