Lecture 10 · 生成对抗网络(二):f-GAN、WGAN、BiGAN 与 CycleGAN · Generative Adversarial Networks II

Deep Generative Models · Lecture 10。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS236 Deep Generative Models(Fall 2023,Stefano Ermon),Lecture 10 · 2023-10-30 · Generative Adversarial Networks(slides:cs236_lecture10.pdf,28 页)。 依据说明:本讲按原课 slides 的顺序展开:回顾(GAN ≈ 最小化缩放平移后的 JSD)→ GAN Zoo 与本讲计划 → 超越 KL 与 JS:ff-散度 → 用 ff-散度训练需要密度比 → Fenchel 凸共轭 → ff-GAN 的变分下界与目标 → 支撑集不相交时 ff-散度失效 → Wasserstein(推土机)距离 → Kantorovich–Rubinstein 对偶与 WGAN → 推断隐表示:判别器特征、BiGAN → 跨域翻译:配对与无配对、CycleGAN、循环一致性、AlignFlow、StarGAN → GAN 小结。“非饱和损失在最优判别器下对应 DKL(pG∥pdata)−2DJSDD_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}“的推导与数值验证、一维里双边梯度惩罚的”墙”、单边梯度惩罚、“无配对翻译的不唯一性”的定量检查是本讲义补充的。所有实验的真实分布与真实映射都已知。 配套代码 Code:code/lecture10/(PyTorch;1 个模块 + 4 个演示脚本,最长的约 100 秒) 预计阅读时间:3.5 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 写出 ff-散度的定义和条件,认出 KL、反向 KL、JS、Hellinger、χ²、全变差各自的 ff;说出”模式覆盖”和”模式寻找”分别来自哪些散度。
  2. 用 Fenchel 凸共轭推导 ff-散度的变分下界 Df(p,q)≥sup⁡TEp[T]−Eq[f∗(T)]D_f(p, q) \geq \sup_T \mathbb{E}_p[T] - \mathbb{E}_q[f^*(T)],写出最优判别器 T∗=f′(p/q)T^* = f'(p/q),并说明原始 GAN 是 ff-GAN 的特例。
  3. 推导非饱和生成器损失在最优判别器下的梯度等于 ∇[DKL(pG∥pdata)−2DJSD]\nabla[D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}],解释它为什么比原始 minimax 损失更偏向”抓住一个模式”。
  4. 说明支撑集不相交时 ff-散度为什么失效,写出 Wasserstein-1 距离的原始定义和 Kantorovich–Rubinstein 对偶,比较权重裁剪和梯度惩罚两种实现 Lipschitz 约束的方法及各自的陷阱。
  5. 理解 BiGAN 怎样通过匹配联合分布 (x,E(x))(x, E(x)) 和 (G(z),z)(G(z), z) 学到一个推断网络。
  6. 写出 CycleGAN 的损失,说明循环一致性保证了什么、没有保证什么;理解 AlignFlow 为什么”精确地循环一致”。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面几讲再展开 Previewed only
第 9 讲:两样本检验、最优判别器、V(G,D∗)=2 DJSD−log⁡4V(G, D^*) = 2\,D_{\mathrm{JSD}} - \log 4、非饱和损失、模式坍塌用分类器训练能量模型:噪声对比估计(第 12 讲)
第 4 讲:前向 / 反向 KL,模式覆盖与模式寻找最优传输在流匹配中的用法(第 16 讲、MIT6.S184)
第 7–8 讲:归一化流、RealNVP生成模型的系统评估(第 15 讲)
凸函数、Jensen 不等式

0.3 本讲地图 Map

§1  回顾与本讲计划
§2  f-散度:一个家族;训练需要密度比                                                 ← 代码 01 第 1–2 部分
§3  f-GAN:凸共轭、变分下界、T* = f'(p/q);原始 GAN 是特例;非饱和损失到底在优化什么    ← 代码 01 第 3 部分、代码 02
§4  Wasserstein GAN:支撑集不相交;推土机距离;KR 对偶;裁剪与梯度惩罚                 ← 代码 03
§5  推断隐表示:判别器特征、BiGAN                                                    ← 代码 04 第 1 部分
§6  跨域翻译:CycleGAN、循环一致性、AlignFlow、StarGAN                                ← 代码 04 第 2–3 部分
§7  GAN 小结
§8  2023 年之后
§9–13  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation

符号含义
Df(p,q)=Ex∼q[f(p(x)/q(x))]D_f(p, q) = \mathbb{E}_{x \sim q}[f(p(x)/q(x))]ff-散度(原课约定:期望在 qq 下,比值是 p/qp/q)
f∗(t)=sup⁡u(ut−f(u))f^*(t) = \sup_u (ut - f(u))ff 的凸共轭(Fenchel conjugate)
Vϕ(x)V_\phi(x),Tϕ(x)=gf(Vϕ(x))T_\phi(x) = g_f(V_\phi(x))判别器网络的原始输出;经过输出激活 gfg_f 后的”检验函数”
W(p,q)W(p, q)Wasserstein-1(推土机)距离
Π(p,q)\Pi(p, q),γ\gamma边缘分别为 pp、qq 的所有联合分布(“搬运方案”)
∥f∥L≤1\Vert f \Vert_L \leq 1ff 是 1-Lipschitz:∣f(x)−f(y)∣≤∥x−y∥\lvert f(x) - f(y)\rvert \leq \Vert x - y\Vert
E:x↦zE: x \mapsto zBiGAN 的编码器
G:X→YG: X \to Y,F:Y→XF: Y \to X,DXD_X,DYD_YCycleGAN 的两个翻译器和两个判别器

0.5 关于数字 · About the numbers

代码用的”真相”有三种:一维的双峰分布 0.7 N(−2,0.52)+0.3 N(2,0.52)0.7\,\mathcal{N}(-2, 0.5^2) + 0.3\,\mathcal{N}(2, 0.5^2)(与第 9 讲相同,所有散度都能在细网格上精确积分);二维的 8 个高斯圆环与双月牙(第 5 讲的 toy2d.py);以及”把双月牙旋转、缩放、平移”这个已知的跨域映射。散度的单位是 nat,Wasserstein 距离的单位是坐标单位。GAN 的结果依赖随机种子和超参数,几处和预想不同的结果记录在 代码 README 的”关于实验结果”里。


1. 回顾与本讲计划 · Recap

slide 2:GAN 的训练目标 min⁡Gmax⁡DV(G,D)=Ex∼pdata[log⁡D(x)]+Ex∼pG[log⁡(1−D(x))].\min_G\max_D V(G, D) = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{x \sim p_G}[\log(1 - D(x))]. 判别器最优时,GAN 最小化缩放平移后的 Jensen–Shannon 散度 2DJSD(pdata,pG)−log⁡42D_{\mathrm{JSD}}(p_{\text{data}}, p_G) - \log 4。参数化以后: min⁡θmax⁡ϕEx∼pdata[log⁡Dϕ(x)]+Ez∼p(z)[log⁡(1−Dϕ(Gθ(z)))].\min_\theta\max_\phi \mathbb{E}_{x \sim p_{\text{data}}}[\log D_\phi(x)] + \mathbb{E}_{z \sim p(z)}[\log(1 - D_\phi(G_\theta(z)))].

slide 3 是”GAN Zoo”——一个列出了几百个有名字的 GAN 的仓库。本讲挑出其中有代表性的四个方向:

  • 通过 ff-GAN 得到一大类不需要似然的目标;
  • Wasserstein GAN;
  • 通过 BiGAN 推断隐表示;
  • 应用:通过 CycleGAN 做图像到图像的翻译。

第 9 讲还留下一个问题:代码里实际用的非饱和损失并不是在最小化 JSD——它在最小化什么?§3.5 会给出答案。


2. f-散度 · f-divergences

2.1 我们有哪些选择?

slide 4:到目前为止,距离 d(⋅)d(\cdot) 有两种:KL 散度(自回归模型、流模型)和(近似地、缩放平移后的)JS 散度(原始 GAN)。还有别的吗?

2.2 定义

slide 5:给两个密度 pp 和 qq,ff-散度定义为 Df(p,q)=Ex∼q[f(p(x)q(x))],D_f(p, q) = \mathbb{E}_{x \sim q}\left[f\left(\frac{p(x)}{q(x)}\right)\right], 其中 ff 是任意一个凸、下半连续、满足 f(1)=0f(1) = 0 的函数。

  • 凸:连接函数图像上任意两点的线段在图像上方。
  • 下半连续:在任意一点 x0x_0,函数值要么接近 f(x0)f(x_0)、要么比 f(x0)f(x_0) 大(函数只能往”上”跳,不能往”下”跳)。这个技术条件保证了 §3 的对偶是精确的。
  • 非负:由 Jensen 不等式, Ex∼q[f(p(x)q(x))]≥f(Ex∼q[p(x)q(x)])=f(∫q(x)p(x)q(x) dx)=f(∫p(x) dx)=f(1)=0.\mathbb{E}_{x \sim q}\left[f\left(\tfrac{p(x)}{q(x)}\right)\right] \geq f\left(\mathbb{E}_{x \sim q}\left[\tfrac{p(x)}{q(x)}\right]\right) = f\left(\int q(x)\tfrac{p(x)}{q(x)}\,dx\right) = f\left(\int p(x)\,dx\right) = f(1) = 0.

例子:KL 散度取 f(u)=ulog⁡uf(u) = u\log u:Eq[pqlog⁡pq]=Ep[log⁡pq]=DKL(p∥q)\mathbb{E}_q[\frac{p}{q}\log\frac{p}{q}] = \mathbb{E}_p[\log\frac{p}{q}] = D_{\mathrm{KL}}(p \Vert q)。

2.3 一个家族

slide 6 列出了很多 ff-散度。代码 01 第 1 部分实现了其中 7 种(Nowozin, Cseke & Tomioka 2016 的表 1、表 2),并数值地验证了 f∗∗=ff^{**} = f(§3.1):

名字f(u)f(u)Df(p,q)D_f(p, q)f∗(t)f^*(t)f∗f^* 的定义域
前向 KLulog⁡uu\log uDKL(p∥q)D_{\mathrm{KL}}(p \Vert q)et−1e^{t-1}R\mathbb{R}
反向 KL−log⁡u-\log uDKL(q∥p)D_{\mathrm{KL}}(q \Vert p)−1−log⁡(−t)-1 - \log(-t)t<0t < 0
Pearson χ²(u−1)2(u-1)^2∫(p−q)2/q\int (p-q)^2/qt2/4+tt^2/4 + tR\mathbb{R}
平方 Hellinger(u−1)2(\sqrt u - 1)^2∫(p−q)2\int (\sqrt p - \sqrt q)^2t/(1−t)t/(1-t)t<1t < 1
Jensen–Shannonulog⁡u−(u+1)log⁡u+12u\log u - (u+1)\log\frac{u+1}{2}2DJSD(p,q)2D_{\mathrm{JSD}}(p, q)−log⁡(2−et)-\log(2 - e^t)t<log⁡2t < \log 2
原始 GANulog⁡u−(u+1)log⁡(u+1)u\log u - (u+1)\log(u+1)2DJSD−log⁡42D_{\mathrm{JSD}} - \log 4−log⁡(1−et)-\log(1 - e^t)t<0t < 0
全变差12∣u−1∣\frac12\lvert u - 1\rvert12∫∣p−q∣\frac12\int\lvert p - q\rverttt∣t∣≤12\lvert t\rvert \leq \frac12

(原始 GAN 那一行的 f(1)=−log⁡4≠0f(1) = -\log 4 \neq 0:它差一个常数,不影响优化。)

这些散度”在意”的东西不同。 f(u)f(u) 在 u=p/q→∞u = p/q \to \infty(qq 漏掉了 pp 的质量)和 u→0u \to 0(qq 把质量放在 pp 没有的地方)两端的增长速度,决定了模型更怕哪一种错误。前向 KL 的 ulog⁡uu\log u 在 u→∞u \to \infty 时超线性增长——极怕”漏掉”;反向 KL 的 −log⁡u-\log u 在 u→0u \to 0 时趋于无穷——极怕”多出来”。代码 01 第 2 部分把它们放在同一个任务上:用一个高斯 N(μ,σ2)\mathcal{N}(\mu, \sigma^2) 近似双峰分布,最小化 Df(pdata,q)D_f(p_{\text{data}}, q)(网格上精确积分,4 个初值取最好):

最小化μ\muσ\sigma最小值解的样子
前向 KL−0.8001.9000.724盖住两个
Pearson χ²−0.7851.9371.404盖住两个
反向 KL−2.0000.5000.357抓住大模式
平方 Hellinger−2.0000.5010.327抓住大模式
Jensen–Shannon−2.0000.5000.235(= 2 × 0.117)抓住大模式
全变差−1.9060.7010.299抓住大模式,但更宽
(参照)Wasserstein-1−0.8741.7770.742盖住两个

前向 KL 的解就是矩匹配(最大似然);Pearson χ² 比它还”宽”一点((u−1)2(u-1)^2 在 u→∞u \to \infty 时增长得更快)。反向 KL、Hellinger、JS 都抓住大模式。全变差抓住大模式但 σ 更宽——它对两种错误按面积一视同仁地计价。Wasserstein-1(不是 ff-散度,§4 的主角)也盖住两个:把 30% 的质量搬运 4 个单位,“运费”很高。

注意:第 9 讲练习 6 提醒过,“JS 是模式寻找的”并不总成立——两个模式等权时,JS 的全局最小变成了宽高斯。散度的偏好取决于数据的形状。

2.4 用 f-散度训练,需要密度比

slide 7:给 pdatap_{\text{data}} 和 pθp_\theta,可以最小化 Df(pθ,pdata)D_f(p_\theta, p_{\text{data}}) 或 Df(pdata,pθ)D_f(p_{\text{data}}, p_\theta)——非负,两个分布相同时为零。但两者都依赖未知的密度比: Df(pθ,pdata)=Ex∼pdata⏟用样本近似[f(pθ(x)pdata(x)⏟未知的比值)],Df(pdata,pθ)=Ex∼pθ⏟用样本近似[f(pdata(x)pθ(x)⏟未知的比值)].D_f(p_\theta, p_{\text{data}}) = \underbrace{\mathbb{E}_{x \sim p_{\text{data}}}}_{\text{用样本近似}}\Big[f\Big(\underbrace{\tfrac{p_\theta(x)}{p_{\text{data}}(x)}}_{\text{未知的比值}}\Big)\Big], \qquad D_f(p_{\text{data}}, p_\theta) = \underbrace{\mathbb{E}_{x \sim p_\theta}}_{\text{用样本近似}}\Big[f\Big(\underbrace{\tfrac{p_{\text{data}}(x)}{p_\theta(x)}}_{\text{未知的比值}}\Big)\Big]. 外面的期望可以用样本近似,里面的比值不行:pdatap_{\text{data}} 的密度永远不知道,GAN 的 pθp_\theta 也没有密度。要把 ff-散度当作不需要似然的两样本检验目标,必须能只用样本(训练数据和模型样本)估计它。


3. f-GAN:变分散度最小化 · Variational divergence minimization

3.1 Fenchel 凸共轭

slide 8:任何函数 ff 的凸共轭是 f∗(t)=sup⁡u∈domf(ut−f(u)).f^*(t) = \sup_{u \in \mathrm{dom}_f}(ut - f(u)).

几何直觉:固定斜率 tt,f∗(t)f^*(t) 是”斜率为 tt、过原点的直线 utut 比 ff 高出的最大距离”;等价地,−f∗(t)-f^*(t) 是斜率为 tt 的切线在纵轴上的截距。一个凸函数完全由它的所有切线决定——f∗f^* 就是把”ff 在每个斜率上的切线”记录下来。

性质:

  • f∗f^* 是凸的(凸函数——这里是关于 tt 的线性函数 ut−f(u)ut - f(u)——的逐点上确界还是凸的)、下半连续的。
  • 令 f∗∗f^{**} 是 f∗f^* 的共轭,f∗∗(u)=sup⁡t∈domf∗(tu−f∗(t))f^{**}(u) = \sup_{t \in \mathrm{dom}_{f^*}}(tu - f^*(t))。则 f∗∗≤ff^{**} \leq f。证明:由定义,对所有 t,ut, u,f∗(t)≥ut−f(u)f^*(t) \geq ut - f(u),即 f(u)≥ut−f∗(t)f(u) \geq ut - f^*(t);对 tt 取上确界,f(u)≥sup⁡t(ut−f∗(t))=f∗∗(u)f(u) \geq \sup_t(ut - f^*(t)) = f^{**}(u)。
  • 强对偶:当 ff 凸且下半连续时,f∗∗=ff^{**} = f。

代码 01 第 1 部分在 u=14,1,4u = \frac14, 1, 4 处数值地求 sup⁡t(tu−f∗(t))\sup_t(tu - f^*(t)),7 种散度都精确地还原了 f(u)f(u)。

3.2 变分下界

slide 9:用 f=f∗∗f = f^{**} 改写 ff-散度,

Df(p,q)=Ex∼q[f∗∗(p(x)q(x))]=Ex∼q[sup⁡t∈domf∗(tp(x)q(x)−f∗(t))]=Ex∼q[T∗(x)p(x)q(x)−f∗(T∗(x))]=∫X[T∗(x)p(x)−f∗(T∗(x))q(x)]dx=sup⁡T∫X[T(x)p(x)−f∗(T(x))q(x)]dx≥sup⁡T∈T∫X(T(x)p(x)−f∗(T(x))q(x))dx=sup⁡T∈T(Ex∼p[T(x)]−Ex∼q[f∗(T(x))]).\begin{aligned} D_f(p, q) &= \mathbb{E}_{x \sim q}\left[f^{**}\left(\tfrac{p(x)}{q(x)}\right)\right] = \mathbb{E}_{x \sim q}\left[\sup_{t \in \mathrm{dom}_{f^*}}\left(t\tfrac{p(x)}{q(x)} - f^*(t)\right)\right] \\ &= \mathbb{E}_{x \sim q}\left[T^*(x)\tfrac{p(x)}{q(x)} - f^*(T^*(x))\right] = \int_X\left[T^*(x)p(x) - f^*(T^*(x))q(x)\right]dx \\ &= \sup_T\int_X\left[T(x)p(x) - f^*(T(x))q(x)\right]dx \\ &\geq \sup_{T \in \mathcal{T}}\int_X\left(T(x)p(x) - f^*(T(x))q(x)\right)dx = \sup_{T \in \mathcal{T}}\left(\mathbb{E}_{x \sim p}[T(x)] - \mathbb{E}_{x \sim q}[f^*(T(x))]\right). \end{aligned}

第二行:对每个 xx 把上确界的取值记为 T∗(x)T^*(x),它是 xx 的一个函数;第三行:上确界可以逐点取,所以”对每个 xx 取 sup”等于”对所有函数 TT 取 sup”;最后一行把 TT 限制在一个函数类 T\mathcal{T}(比如某个神经网络能表示的函数)里,得到下界。

这个下界对 pp 和 qq 都是 likelihood-free 的——只需要两组样本。

最优的 TT 是什么? 对每个 xx 最大化 tp−f∗(t)qtp - f^*(t)q:导数 p−f∗′(t)q=0p - f^{*\prime}(t)q = 0,即 f∗′(t)=p/qf^{*\prime}(t) = p/q。由共轭的性质,f∗′f^{*\prime} 是 f′f' 的反函数,所以 T∗(x)=f′(p(x)q(x)).T^*(x) = f'\left(\frac{p(x)}{q(x)}\right). 判别器又一次在估计密度比(第 9 讲 §3.6 的 D∗D^* 是 fGANf_{\text{GAN}} 的特例:T∗=log⁡pp+q=log⁡D∗T^* = \log\frac{p}{p+q} = \log D^*)。

3.3 f-GAN 的目标

slide 10:选任意一个 ff-散度,令 p=pdatap = p_{\text{data}}、q=pGq = p_G,用 ϕ\phi 参数化 TT、用 θ\theta 参数化 GG: min⁡θmax⁡ϕF(θ,ϕ)=Ex∼pdata[Tϕ(x)]−Ex∼pGθ[f∗(Tϕ(x))].\min_\theta\max_\phi F(\theta, \phi) = \mathbb{E}_{x \sim p_{\text{data}}}[T_\phi(x)] - \mathbb{E}_{x \sim p_{G_\theta}}[f^*(T_\phi(x))]. 生成器 GθG_\theta 试图最小化散度的估计,判别器 TϕT_\phi 试图把下界收紧。 代入任何一个 ff-散度,优化 ff-GAN 目标即可。slide 11:现在 d(⋅)d(\cdot) 的选择包括 KL(自回归、流)、JS(原始 GAN)以及任何其他 ff-散度(近似地,通过 ff-GAN 目标)。

两个实现细节(Nowozin et al. 2016):

  1. f∗f^* 有定义域限制(比如反向 KL 要求 t<0t < 0)。网络输出任意实数 Vϕ(x)V_\phi(x),再经过一个输出激活 gfg_f 映射到定义域里:Tϕ=gf(Vϕ)T_\phi = g_f(V_\phi)。例如反向 KL 用 gf(v)=−e−vg_f(v) = -e^{-v},Hellinger 用 1−e−v1 - e^{-v},JS 用 log⁡2−log⁡(1+e−v)\log 2 - \log(1 + e^{-v})。
  2. 原始 GAN 是特例:fGANf_{\text{GAN}} 配 gf(v)=−log⁡(1+e−v)=log⁡σ(v)g_f(v) = -\log(1 + e^{-v}) = \log\sigma(v),于是 T=log⁡DT = \log D,f∗(T)=−log⁡(1−eT)=−log⁡(1−D)f^*(T) = -\log(1 - e^T) = -\log(1 - D), F=Epdata[log⁡D]+EpG[log⁡(1−D)]=V(G,D).F = \mathbb{E}_{p_{\text{data}}}[\log D] + \mathbb{E}_{p_G}[\log(1 - D)] = V(G, D).

3.4 下界有多紧?

代码 01 第 3 部分固定 pp = 双峰数据、q=N(−0.8,1.92)q = \mathcal{N}(-0.8, 1.9^2)(矩匹配的高斯),用 20 万对样本估计不同 TT 给出的下界:

散度精确 DfD_fT=T∗T = T^*TT = MLP(训练出来的)TT = 线性TT = 常数
前向 KL0.72420.72260.7148−0.00030
反向 KL2.09602.09481.8476−0.00030
Pearson χ²1.40561.40601.3653−0.00050
平方 Hellinger0.47160.46970.4601−0.00010
Jensen–Shannon0.40230.40100.3968−0.00010
原始 GAN−0.9840−0.9853−0.9895−1.3864−1.3863

(蒙特卡洛误差约 ±0.003,所以 T∗T^* 偶尔略高于精确值、线性 TT 偶尔略低于 0。)

  • T=T∗T = T^* 时下界等于精确值——slide 9 的等号。
  • 一个 64 × 2 的小 MLP 接近 T∗T^*;反向 KL 差得最多:T∗=−q/pT^* = -q/p 在 pp 很小的中间和尾部绝对值很大,网络难以逼近。
  • 线性 TT 的下界和常数一样 ≈ 0:qq 和数据均值相同,而线性的 TT 只能利用均值的差别(对前向 KL 可以直接算:T=ax+bT = ax + b 时最优下界是 a(μp−μq)−a2σq22≤0a(\mu_p - \mu_q) - \frac{a^2\sigma_q^2}{2} \leq 0)。这就是第 9 讲”均值检验看不见同均值的差别”的 ff-GAN 版本。判别器的容量决定了 ff-GAN “看见”的散度有多大。
  • 常数 TT 的下界正好是 f(1)f(1):什么都区分不了的判别器认为两个分布一样。

3.5 f-GAN 真的在最小化它声称的散度吗?

代码 02 第 1 部分:生成器 = 单个高斯,从 (0,1)(0, 1) 出发,判别器 64 × 2,6,000 步(生成器直接最小化 FF,即 minimax 形式)。把终点和精确散度的全局最小、“从同一个初值出发对精确散度做梯度下降”的局部最小比较:

ff精确全局最小 (μ,σ∣Df)(\mu, \sigma \mid D_f)从 (0,1)(0, 1) 出发的精确局部最小ff-GAN 的终点找到了
前向 KL−0.80, 1.90 | 0.724同左−0.83, 1.90 | 0.724全局最小
反向 KL−2.00, 0.50 | 0.357同左−2.00, 0.50 | 0.357全局最小
Pearson χ²−0.78, 1.94 | 1.404同左−0.81, 2.00 | 1.406全局最小
平方 Hellinger−2.00, 0.50 | 0.327−0.84, 1.82 | 0.471−0.90, 1.77 | 0.471局部最小
Jensen–Shannon−2.00, 0.50 | 0.235−0.85, 1.86 | 0.402−0.92, 1.82 | 0.402局部最小
原始 GAN−2.00, 0.50 | −1.152−0.85, 1.86 | −0.984−0.92, 1.82 | −0.984局部最小
全变差−1.90, 0.70 | 0.299−1.94, 0.55 | 0.300−1.20, 68.87 | 0.544发散
  • 换一个 ff,同一个训练程序就学出了性质完全不同的近似:前向 KL、Pearson 盖住两个模式,反向 KL 抓住大模式——都是各自的全局最小,和 Nowozin et al. 论文表 3 的实验一致。
  • Hellinger、JS、原始 GAN 停在宽高斯附近,正好是精确梯度下降从同一个初值出发得到的局部最小。这不是判别器的错:判别器最优时,minimax 形式的生成器梯度就是精确散度的梯度,自然也停在同一个局部最小。
  • 全变差发散:T∗=12sign(p/q−1)T^* = \frac12\mathrm{sign}(p/q - 1) 是阶跃函数,12tanh⁡\frac12\tanh 的判别器在大部分地方饱和,梯度几乎没有信息。

3.6 非饱和损失到底在优化什么?

第 9 讲的 GAN 从 (0,1)(0, 1) 出发走到了大模式(JSD 的全局最小),上表的 minimax 版本却停在宽高斯。区别在于第 9 讲用的是非饱和损失 −Ez[log⁡D(G(z))]-\mathbb{E}_z[\log D(G(z))]。

命题(Arjovsky & Bottou 2017):设 D∗=pdatapdata+pθ0D^* = \frac{p_{\text{data}}}{p_{\text{data}} + p_{\theta_0}} 是当前生成器 θ0\theta_0 的最优判别器(固定不动),则 ∇θ Ez[−log⁡D∗(Gθ(z))]∣θ0=∇θ[DKL(pθ∥pdata)−2DJSD(pdata,pθ)]∣θ0.\nabla_\theta\,\mathbb{E}_{z}\left[-\log D^*(G_\theta(z))\right]\Big|_{\theta_0} = \nabla_\theta\left[D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}(p_{\text{data}}, p_\theta)\right]\Big|_{\theta_0}.

推导:把 −log⁡D∗-\log D^* 拆成两项,−log⁡D∗=−log⁡D∗1−D∗−log⁡(1−D∗)-\log D^* = -\log\frac{D^*}{1 - D^*} - \log(1 - D^*)。

  1. 第二项:V(G,D)=Epdata[log⁡D]+Epθ[log⁡(1−D)]V(G, D) = \mathbb{E}_{p_{\text{data}}}[\log D] + \mathbb{E}_{p_\theta}[\log(1 - D)] 在 D=D∗D = D^* 处对 DD 的偏导为零(D∗D^* 是最大值点),所以由包络定理,∇θEpθ[log⁡(1−D∗)]=∇θV(Gθ,Dθ∗)=∇θ 2DJSD\nabla_\theta\mathbb{E}_{p_\theta}[\log(1 - D^*)] = \nabla_\theta V(G_\theta, D^*_\theta) = \nabla_\theta\,2D_{\mathrm{JSD}}。
  2. 第一项:D∗1−D∗=pdatapθ0\frac{D^*}{1 - D^*} = \frac{p_{\text{data}}}{p_{\theta_0}},所以 Epθ[−log⁡D∗1−D∗]=Epθ[log⁡pθ0−log⁡pdata]\mathbb{E}_{p_\theta}[-\log\frac{D^*}{1-D^*}] = \mathbb{E}_{p_\theta}[\log p_{\theta_0} - \log p_{\text{data}}]。而 DKL(pθ∥pdata)=Epθ[log⁡pθ−log⁡pdata]D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) = \mathbb{E}_{p_\theta}[\log p_\theta - \log p_{\text{data}}],在 θ0\theta_0 处对 θ\theta 求导时,”log⁡pθ\log p_\theta 里的 θ\theta“贡献 Epθ0[∇θlog⁡pθ]=0\mathbb{E}_{p_{\theta_0}}[\nabla_\theta\log p_\theta] = 0(得分函数的期望为零),所以两者梯度相同。

合起来:∇E[−log⁡D∗]=∇DKL(pθ∥pdata)−∇ 2DJSD\nabla\mathbb{E}[-\log D^*] = \nabla D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) - \nabla\,2D_{\mathrm{JSD}}。同样的推导给出 minimax 损失 E[log⁡(1−D∗)]\mathbb{E}[\log(1 - D^*)] 的梯度是 ∇ 2DJSD\nabla\,2D_{\mathrm{JSD}}。

代码 02 第 2 部分在一维网格上数值验证了这两个等式(4 个不同的 (μ,σ)(\mu, \sigma),误差都在 10−1310^{-13} 以内)。例如在 (0,1)(0, 1) 处:

对 (μ,log⁡σ)(\mu, \log\sigma) 的梯度
∇ E[−log⁡D∗]\nabla\,\mathbb{E}[-\log D^*](非饱和)(+0.2020, −2.4902)
∇[DKL(q∥p)−2DJSD]\nabla[D_{\mathrm{KL}}(q \Vert p) - 2D_{\mathrm{JSD}}](+0.2020, −2.4902)
∇ E[log⁡(1−D∗)]\nabla\,\mathbb{E}[\log(1 - D^*)](minimax)(+0.1337, −0.8436)
∇ 2DJSD\nabla\,2D_{\mathrm{JSD}}(+0.1337, −0.8436)

含义:非饱和 GAN 多优化了一个反向 KL,强烈地偏向”抓住一个模式”——这解释了第 9 讲的一维 GAN 为什么能逃出宽高斯的局部最小,也部分解释了 GAN 为什么常常模式坍塌。另外,−2DJSD-2D_{\mathrm{JSD}} 这一项会奖励 JSD 变大,所以这个目标本身不是一个散度(可以为负)——非饱和 GAN 在理论上并不”干净”。

3.7 二维:前向 KL 的 f-GAN ≠ 最大似然

代码 02 第 3 部分:生成器是 8 层 RealNVP(于是能精确计算两个方向的 KL),数据是 8 个高斯的圆环(σ = 0.25),判别器 128 × 2,4,000 步:

训练方式步数DKL(pdata∥pG)D_{\mathrm{KL}}(p_{\text{data}} \Vert p_G)DKL(pG∥pdata)D_{\mathrm{KL}}(p_G \Vert p_{\text{data}})精确 JSD模式 / 高质量样本
最大似然3,0000.0910.1320.0258/8,98%
ff-GAN,ff = 前向 KL1,0003.820,2000.6191/8,4%
4,0002.41,7960.4868/8,19%
ff-GAN,ff = 反向 KL1,00012.11.260.2628/8,96%
4,0004741.690.3748/8,100%
ff-GAN,ff = 原始 GAN1,00023.51.270.2678/8,98%
4,0001,2272.570.4798/8,98%
  • ff = 前向 KL:每个时刻它的前向 KL 都是三者中最低的——没有哪块真实数据被”漏掉”;代价是反向 KL 有几千到两万多 nat、高质量样本只有 4–19%:密度是盖住整个圆环的一大团(代码输出的第一张密度图),大部分样本落在模式之间。模式覆盖。
  • ff = 反向 KL:反向 KL 最低、样本几乎全是高质量的,密度是 8 个模式上的尖点;前向 KL 却越训练越大。模式寻找。
  • 原始 GAN 站在反向 KL 那一边。
  • 没有一个接近最大似然:生成器只能通过一个有限容量、没训练到最优的判别器”看见”散度。ff = KL 的 ff-GAN 和最大似然朝同一个方向犯错,但犯得多得多。

4. Wasserstein GAN · Beyond f-divergences

4.1 支撑集不相交时,f-散度失效

slide 12:ff-散度 Df(p,q)=Ex∼q[f(p(x)/q(x))]D_f(p, q) = \mathbb{E}_{x \sim q}[f(p(x)/q(x))] 要求 qq 的支撑覆盖 pp 的支撑,否则会出现不连续。例子: p(x)={1,x=00,x≠0,qθ(x)={1,x=θ0,x≠θ.p(x) = \begin{cases}1, & x = 0\\ 0, & x \neq 0\end{cases}, \qquad q_\theta(x) = \begin{cases}1, & x = \theta\\ 0, & x \neq \theta\end{cases}. DKL(p,qθ)={0,θ=0∞,θ≠0,DJS(p,qθ)={0,θ=0log⁡2,θ≠0.D_{\mathrm{KL}}(p, q_\theta) = \begin{cases}0, & \theta = 0\\ \infty, & \theta \neq 0\end{cases}, \qquad D_{\mathrm{JS}}(p, q_\theta) = \begin{cases}0, & \theta = 0\\ \log 2, & \theta \neq 0\end{cases}. 不管 θ\theta 离 0 是 0.01 还是 100,散度都一样——没有任何信号告诉生成器”往哪边走”。我们需要一个更平滑的距离 D(p,q)D(p, q),在 pp、qq 支撑集不相交时也有定义。

这不是一个人为的例子。图像位于高维空间里的低维流形上(第 13 讲的”流形假设”);生成器 G:Rdz→RdxG: \mathbb{R}^{d_z} \to \mathbb{R}^{d_x} 在 dz<dxd_z < d_x 时,它的像也是一个低维流形。两个低维流形在高维空间里几乎肯定不相交(Arjovsky & Bottou 2017)——训练初期,真实分布和生成分布的支撑集很可能就是不相交的。

4.2 Wasserstein(推土机)距离

slide 13: Dw(p,q)=inf⁡γ∈Π(p,q)E(x,y)∼γ[∥x−y∥1],D_w(p, q) = \inf_{\gamma \in \Pi(p, q)}\mathbb{E}_{(x, y) \sim \gamma}[\Vert x - y\Vert_1], Π(p,q)\Pi(p, q) 是所有满足”xx 的边缘是 p(x)=∫γ(x,y) dyp(x) = \int\gamma(x, y)\,dy、yy 的边缘是 q(y)q(y)“的联合分布。γ(y∣x)\gamma(y \mid x) 是一个概率性的搬土方案:把 pp 这堆土变成 qq 的形状,位于 xx 的土按 γ(y∣x)\gamma(y \mid x) 分配到各个 yy;Eγ∥x−y∥\mathbb{E}_\gamma\Vert x - y\Vert 是总的”质量 × 距离”,取所有方案中最便宜的那个。(slide 写的是 ℓ1\ell_1 范数;代码和大多数实现用 ℓ2\ell_2,结论不变。)

上面的例子里,唯一的方案是把位于 0 的单位质量搬到 θ\theta:Dw(p,qθ)=∣θ∣D_w(p, q_\theta) = |\theta|——连续,几乎处处可导,梯度永远指向正确的方向。

一维里有闭式:最优方案是”按大小顺序一一配对”(不交叉),W1(p,q)=∫∣Fp(t)−Fq(t)∣ dtW_1(p, q) = \int|F_p(t) - F_q(t)|\,dt,对两组等量的样本就是排序后对应点之差的平均(divergences.w1_1d)。

4.3 Kantorovich–Rubinstein 对偶与 WGAN

slide 14: Dw(p,q)=sup⁡∥f∥L≤1Ex∼p[f(x)]−Ex∼q[f(x)].D_w(p, q) = \sup_{\Vert f\Vert_L \leq 1}\mathbb{E}_{x \sim p}[f(x)] - \mathbb{E}_{x \sim q}[f(x)]. ∥f∥L≤1\Vert f\Vert_L \leq 1 表示 ff 的 Lipschitz 常数不超过 1:对所有 x,yx, y,∣f(x)−f(y)∣≤∥x−y∥|f(x) - f(y)| \leq \Vert x - y\Vert——直观地说,ff 不能变化得太快。

直觉:ff 像是给每个位置标一个”价格”;把单位质量从 xx 搬到 yy 最多能”赚” ∣f(x)−f(y)∣≤∥x−y∥|f(x) - f(y)| \leq \Vert x - y\Vert,不会超过运费。于是”pp 处的总价值减去 qq 处的总价值”不可能超过最便宜的运费;对偶定理说,最好的价格体系恰好让两者相等。

Wasserstein GAN(判别器 Dϕ(x)D_\phi(x),常被称为 critic,输出任意实数、不是概率;生成器 Gθ(z)G_\theta(z)): min⁡θmax⁡ϕ Ex∼pdata[Dϕ(x)]−Ez∼p(z)[Dϕ(Gθ(z))].\min_\theta\max_\phi\,\mathbb{E}_{x \sim p_{\text{data}}}[D_\phi(x)] - \mathbb{E}_{z \sim p(z)}[D_\phi(G_\theta(z))]. DϕD_\phi 的 Lipschitz 性通过权重裁剪(Arjovsky et al. 2017:每步更新后把所有权重裁到 [−c,c][-c, c])或在 ∇xDϕ(x)\nabla_x D_\phi(x) 上加梯度惩罚(Gulrajani et al. 2017:λ Ex^[(∥∇xD(x^)∥−1)2]\lambda\,\mathbb{E}_{\hat x}[(\Vert\nabla_x D(\hat x)\Vert - 1)^2],x^\hat x 在真假样本的连线上随机取)来实现。

4.4 实验:两条平行线

代码 03 第 1 部分用 Arjovsky et al. 的例子:pp 是 x=0x = 0 处的竖直线段(y∼U[0,1]y \sim U[0, 1]),qθq_\theta 是 x=θx = \theta 处的线段。训练一个 GAN 判别器和一个 WGAN-GP critic(各 1,000 步),再看它们给”生成器参数” θ\theta 的梯度:

θ\theta判别器估计的 JS∂/∂θ\partial/\partial\theta minimax∂/∂θ\partial/\partial\theta 非饱和critic 估计的 W(精确 =θ= \theta)∂/∂θ\partial/\partial\theta WGAN
0.050.692+2.1e−01+2880.050+1.01
0.250.693+8.2e−03+66.00.258+1.03
10.693+7.4e−04+15.31.048+1.05
20.693+2.2e−04+7.62.191+1.10
40.693+5.4e−05+3.94.820+1.21
  • JS:判别器只说”完全分得开”(估计都是 log⁡2\log 2),不说”差多远”;minimax 损失的梯度随 θ\theta 增大迅速消失。
  • 非饱和损失的梯度不为零,但离得越近反而越大(θ=0.05\theta = 0.05 时 288):它由判别器在两条线之间有多陡决定,和距离成反比。Arjovsky & Bottou 指出这会让更新很不稳定。
  • WGAN:critic 的估计随 θ\theta 线性增长,梯度约为 +1,几乎和 θ\theta 无关——无论离得多远,生成器都收到一个大小合适、方向正确的信号。θ\theta 大时略有高估(梯度惩罚是软约束,斜率可以略超过 1)。

4.5 对偶有多准?裁剪与梯度惩罚的陷阱

代码 03 第 2 部分:一维里 W1 能精确算(排序),比较四种 critic(64 × 2,2,000 步;括号里是 critic 在 [−6,6][-6, 6] 上的最大斜率,对偶要求 ≤ 1):

分布对精确 W1裁剪 c=0.01c = 0.01裁剪 c=0.1c = 0.1双边梯度惩罚单边梯度惩罚
N(0,1)\mathcal{N}(0, 1) vs N(2,1)\mathcal{N}(2, 1)1.9840.006(0.0041)2.918(2.7)2.174(1.1)2.195(1.1)
双峰 vs N(−0.8,1.92)\mathcal{N}(-0.8, 1.9^2)0.7530.000(0.00095)0.228(0.61)0.036(1.2)0.784(1.1)
双峰 vs N(−2,0.52)\mathcal{N}(-2, 0.5^2)1.1920.004(0.0041)1.664(2.8)1.329(1.2)1.310(1.2)
  • 权重裁剪只保证斜率有界,界是多少由 cc 和网络结构间接决定:c=0.01c = 0.01 时斜率只有千分之几,估计值只是 W1 乘上一个未知的小常数;c=0.1c = 0.1 时斜率超过 2,估计值偏大。Gulrajani et al. 还发现裁剪让 critic 偏向过于简单的函数——于是提出了梯度惩罚。
  • 单边梯度惩罚(只惩罚 ∥∇D∥>1\Vert\nabla D\Vert > 1 的部分,Petzka et al. 2018)在三对上都接近精确值(略高 4–11%)。
  • 双边梯度惩罚在第二对上失败了(0.036 vs 0.753)。这两个分布均值相同,最优 critic 是一条斜率在 +1 和 −1 之间切换的折线。一维里斜率要从 −1 变到 +1 必须经过 0,那里的双边惩罚是 λ\lambda——一道墙。critic 停在一个近似线性的函数上,而均值相同时线性 critic 什么也看不见(§3.4)。

这道墙在训练中会造成什么? 代码 03 第 3 部分(a):一维单高斯生成器,WGAN-GP 训练 2,000 步:

梯度惩罚初值第 500 步第 1,000 步第 2,000 步
双边(0,1)(0, 1)−1.00, 1.33(W≈−0.22)−2.00, 1.62(W≈−1.11)−4.00, 1.77(W≈−2.92)
单边(0,1)(0, 1)−0.83, 1.82−0.86, 1.80−0.85, 1.80
单边(1.5,0.5)(1.5, 0.5)+0.51, 1.37−0.47, 1.85−0.85, 1.80

(精确的 W1 最小值在 (−0.874,1.777)(-0.874, 1.777),W1 = 0.742。)双边惩罚下 μ\mu 每 500 步左移 1,critic 的估计变成负数——它卡在”左高右低”的斜率上翻不过来,生成器一直被推向左边。可以算出这道墙有多高:线性 critic f=axf = ax 的目标是 aΔ−λ(∣a∣−1)2a\Delta - \lambda(|a| - 1)^2(Δ=μdata−μG\Delta = \mu_{\text{data}} - \mu_G)。斜率符号错误时(a<0a < 0),它在 a=−1+Δ/(2λ)a = -1 + \Delta/(2\lambda) 处有一个局部最大值;只要 Δ<2λ=20\Delta < 2\lambda = 20,critic 就翻不过去(练习 8)。实验里 μ=−4\mu = -4 时 Δ=3.2\Delta = 3.2,预测斜率 −0.84,和 critic 实际的斜率一致。二维以上没有这个问题:梯度向量可以在单位圆上连续转动,不必经过零。单边惩罚下生成器从两个初值都走到 W1 的最小值——“盖住两个模式”的宽高斯,和第 9 讲 GAN 的”抓住大模式”相反。

4.6 更稳定、更少模式坍塌?

slide 15:WGAN “训练更稳定,模式坍塌更少”。代码 03 第 3 部分(b)回到第 9 讲会坍塌的设置(8 个 σ = 0.05 的尖高斯,dz=64d_z = 64),在同样的计算量下比较(每种 3 个种子,3,000 次生成器更新,Adam lr = 1e-3):

方法最后盖住的模式数高质量样本切片 W1(越小越好)
GAN(判别器每步 1 次)8 8 886%0.242
GAN(判别器每步 5 次)1 2 480%1.138
WGAN-GP(critic 每步 5 次)8 8 872%0.080

种子 0 的训练过程:

步数GAN(5 次)d_lossGAN 切片 W1WGAN critic 估计的 WWGAN 切片 W1WGAN 高质量样本
5000.3871.5521.6351.2210%
1,5000.4261.6310.4201.0352%
2,0000.3461.5840.2970.16211%
3,0000.3961.5490.1050.09661%
  • 判别器每步训练 5 次的 GAN 三个种子都坍塌了,并且一直停在那里(种子 0 的切片 W1 从头到尾约 1.55):判别器越强,越早把假样本完全拒绝,生成器的梯度失去方向(§4.4)。同样的计算量下,WGAN-GP 三个种子都盖住了 8 个模式。这正是 WGAN 的卖点:critic 可以(也应该)训练得接近最优,而不会让生成器的梯度消失。
  • 但判别器每步只训练 1 次时,普通 GAN 在这里也没有坍塌,高质量样本还更多(各模式样本数不均匀,切片 W1 是 WGAN-GP 的 3 倍)。“WGAN 不坍塌、GAN 坍塌”不是一个无条件的结论。
  • WGAN critic 估计的 W 随训练单调下降,和切片 W1 大体一起变小(第 1,500 步切片 W1 有一次反弹):critic 的损失是一个有意义的进度指标;GAN 的 d_loss 和样本质量没有这种对应关系。

5. 推断隐表示 · Inferring latent representations

5.1 问题

slide 16:GAN 的生成器通常是一个有向的隐变量模型,隐变量 zz、观测 xx。怎样推断一个 xx 的隐表示?

  • 和归一化流不同,映射 G:z↦xG: z \mapsto x 不必可逆;
  • 和 VAE 不同,没有一个推断网络 q(⋅)q(\cdot) 学习变分后验。

办法 1:对任意 xx,用判别器倒数第二层的激活作为特征表示。直觉:和有监督的深度网络类似,判别器在区分真假 xx 的过程中学到了有用的表示(DCGAN 就用判别器特征做过图像分类)。

5.2 BiGAN

slide 17:如果想直接推断生成器的隐变量 zz,需要不同的学习算法。普通 GAN 比较的是**xx 的样本**(来自生成器和来自数据)。办法 2:比较 (x,z)(x, z) 的联合样本——来自模型的联合分布和来自数据的”联合分布”。对模型生成的 xx,我们有它的 zz(从先验里抽的);对数据里的 xx,zz 没有观测到——需要一个编码器!

slides 18–19:BiGAN(Donahue, Krähenbühl & Darrell 2017;同期的 ALI,Dumoulin et al. 2017)在生成器之外再加一个编码器网络 EE:

  • 编码器只看 x∼pdatax \sim p_{\text{data}},学一个映射 E:x↦zE: x \mapsto z;
  • 生成器和以前一样,只看 z∼p(z)z \sim p(z),学 G:z↦xG: z \mapsto x;
  • 判别器 DD 观察生成侧的 (z,G(z))(z, G(z)) 和编码侧的 (E(x),x)(E(x), x),目标是最大化这两个联合分布之间的两样本检验统计量;
  • 训练结束后,用 GG 生成新样本,用 EE 推断隐表示。

为什么这样能学到逆映射? 如果两个联合分布完全相同,那么对编码侧几乎每个 (E(x),x)(E(x), x),它也必须”像是”由 GG 从 z=E(x)z = E(x) 生成的,即 x=G(E(x))x = G(E(x))——EE 和 GG 在几乎处处意义下互为逆(Donahue et al. 的定理)。值得注意的是:EE 从没见过 GG 的输出,GG 也从没见过数据的编码,它们完全靠判别器”撮合”。

5.3 实验

代码 04 第 1 部分(8 个高斯的圆环,z∼N(0,I2)z \sim \mathcal{N}(0, I_2),8,000 步):

重构误差(4,000 个点的平均)BiGAN随机配对的参照
∥G(E(x))−x∥\Vert G(E(x)) - x\Vert0.4272.583
∥E(G(z))−z∥\Vert E(G(z)) - z\Vert0.6201.784

G(E(x))G(E(x)) 落在和 xx 同一个模式里的比例是 90.2%(随机 12.5%)。EE 和 GG 近似地互为逆,但只是近似:同一个模式内部的位置没有精确还原(误差 0.43,每个模式的 σ = 0.25),而且 E(x)E(x) 的分布明显比 N(0,I)\mathcal{N}(0, I) 窄——两个联合分布没有完全对上。和 VAE(有显式的重构项)、流(精确可逆)相比,BiGAN 的推断是最”松”的。


6. 跨域翻译 · Translating across domains

6.1 配对与无配对

slide 20:图像到图像的翻译:给两个域 XX、YY 的图像(比如照片 ↔ 莫奈的画、马 ↔ 斑马、夏天 ↔ 冬天)。配对的例子(同一个场景的照片和画)往往很难获得;能不能无监督地学 X↔YX \leftrightarrow Y——只有两堆互不对应的图像?

6.2 CycleGAN

slide 21:为了匹配两个分布,学两个参数化的条件生成模型 G:X→YG: X \to Y 和 F:Y→XF: Y \to X。

  • GG 把 XX 的元素映射到 YY;判别器 DYD_Y 比较观测到的 YY 和生成的 Y^=G(X)\hat Y = G(X)。
  • FF 把 YY 的元素映射到 XX;判别器 DXD_X 比较 XX 和 X^=F(Y)\hat X = F(Y)。

slide 22:循环一致性——如果能从 XX 经 GG 到 Y^\hat Y,就应该能从 Y^\hat Y 经 FF 回到 XX:F(G(X))≈XF(G(X)) \approx X;反过来 G(F(Y))≈YG(F(Y)) \approx Y。总损失: min⁡F,G,DX,DYLGAN(G,DY,X,Y)+LGAN(F,DX,X,Y)+λ(EX∥F(G(X))−X∥1+EY∥G(F(Y))−Y∥1)⏟循环一致性.\min_{F, G, D_X, D_Y}\mathcal{L}_{\text{GAN}}(G, D_Y, X, Y) + \mathcal{L}_{\text{GAN}}(F, D_X, X, Y) + \lambda\underbrace{\left(\mathbb{E}_X\Vert F(G(X)) - X\Vert_1 + \mathbb{E}_Y\Vert G(F(Y)) - Y\Vert_1\right)}_{\text{循环一致性}}. (判别器在 LGAN\mathcal{L}_{\text{GAN}} 里做最大化。)slide 23 展示了 CycleGAN 的效果:照片 ↔ 莫奈 / 梵高、马 ↔ 斑马、夏 ↔ 冬。

为什么需要循环一致性? 只有两个对抗损失时,GG 只需要让 G(X)G(X) 的整体分布像 YY——它可以把所有输入映射到同一张”很像 YY“的图(模式坍塌),或者把 xx 送到任何一个和 xx 毫无关系的 yy。循环一致性要求 GG 保留足够的信息让 FF 能还原 xx,于是 GG 必须(近似地)是一个双射。

6.3 实验:循环一致性保证了什么?

代码 04 第 2 部分:XX = 双月牙;YY = 把双月牙旋转 90°、缩小到 0.7、平移(真实映射 TT 已知,但训练时不给任何配对)。“月牙对应正确” = xx 所在的弧被映射到 YY 里”TT 下对应”的那条弧上的比例(50% = 随机):

方法种子切片 W1(G(X),Y)(G(X), Y)循环误差 ∥F(G(x))−x∥\Vert F(G(x)) - x\Vert∥G(x)−T(x)∥\Vert G(x) - T(x)\Vert月牙对应正确
只有两个 GAN(λ=0\lambda = 0)00.0602.4520.80982.0%
10.2821.2500.88184.2%
CycleGAN(λ=10\lambda = 10)00.1480.0220.64287.5%
10.0810.0180.88465.6%
AlignFlow(最大似然)—0.0161.8e−151.29538.5%

(两批独立的真实 YY 样本之间的切片 W1 = 0.018;YY 里两条弧相距约 1 个单位。)

  • 只有两个 GAN:分布能对上,但循环误差 1.3–2.5,和数据本身的尺度相当——GG 和 FF 各学各的,没有理由互为逆。有意思的是月牙对应也有 82–84%:平滑的小网络倾向于保持”谁和谁挨着”,这是网络结构的归纳偏置,不是目标函数的要求。
  • 加上循环一致性:循环误差降到 0.02,GG 近似是一个双射。但它是不是真实的那个 TT?两个种子的月牙对应是 88% 和 66%,∥G(x)−T(x)∥\Vert G(x) - T(x)\Vert 仍有 0.6–0.9。循环一致性只保证”可逆”,不保证”语义正确”:把两条弧部分对调、沿弧方向翻转,同样循环一致、同样分布匹配。无配对的翻译本质上是不唯一的(练习 9);CycleGAN 在图像上”看起来对”,靠的是卷积网络倾向于保持空间结构这类归纳偏置。

6.4 AlignFlow

slide 24(Grover, Chute, Shu, Cao & Ermon 2020):如果 GG 是一个流模型呢? 不需要单独参数化 FF:F=G−1F = G^{-1}。可以用最大似然和 / 或对抗学习训练。精确地循环一致:F(G(X))=XF(G(X)) = X,G(F(Y))=YG(F(Y)) = Y。

具体做法:两个流 fXf_X、fYf_Y 共享一个隐空间 ZZ(比如 N(0,I)\mathcal{N}(0, I)),G=fY∘fX−1G = f_Y \circ f_X^{-1},F=fX∘fY−1F = f_X \circ f_Y^{-1}。代码 04 第 3 部分只用最大似然分别训练两个 RealNVP:循环误差 1.8×10−151.8 \times 10^{-15}(舍入误差),分布匹配是三者中最好的(0.016,和两批真实样本之间的 0.018 相当)——可月牙对应正确只有 38.5%,大多数点被送到了”另一条”弧上。两个流各自把数据映射到高斯,隐空间里”XX 的哪部分对应 YY 的哪部分”是任意的(例如把隐空间旋转一下,得到的映射同样精确可逆、同样分布匹配,练习 10)。精确的可逆性和精确的分布匹配,都不能代替”哪个对应哪个”的信息——AlignFlow 论文里的对抗项和共享结构正是为了引入这种偏置。

6.5 StarGAN

slides 25–27(Choi et al. 2018):如果有多个域呢(比如人脸的发色、性别、年龄、表情)?为每一对域训练一个 CycleGAN 需要 K(K−1)K(K-1) 个生成器。StarGAN 只用一个生成器 G(x,c)G(x, c),把目标域标签 cc 作为额外的输入;判别器除了判断真假,还要分类图像属于哪个域(辅助分类器);循环一致性变成 G(G(x,c),c′)≈xG(G(x, c), c') \approx x(c′c' 是原来的域)。slides 26–27 展示了在 CelebA(发色、性别、年龄)和 RaFD(表情)上的多域翻译。


7. GAN 小结 · Summary of GANs

slide 28:

  • 关键观察:样本和似然在实践中并不相关(第 9 讲 §2)。
  • 两样本检验的目标让我们只通过样本学习生成模型(likelihood-free)。
  • 两样本检验目标的范围很广,覆盖 ff-散度和 Wasserstein 距离(以及更多)。
  • 隐表示可以通过 BiGAN 推断。
  • 循环一致的跨域翻译:CycleGAN、AlignFlow、StarGAN。

把第 9、10 讲的实验放在一起看,还可以补充三点:判别器的容量和训练程度决定了生成器”看见”的距离(§3.4、§3.7、§4.5);GAN 实际优化的目标常常不是它名义上的散度(非饱和损失、minimax 的局部最小);没有似然,评估只能靠一组各有盲点的样本统计量。


8. 2023 年之后 · Since 2023

  • 散度的选择在偏好对齐里再次出现。 大语言模型的 RLHF / DPO 默认用反向 KL 把策略约束在参考模型附近;Beyond Reverse KL: Generalizing Direct Preference Optimization with Diverse Divergence Constraints(f-DPO,Wang et al., ICLR 2024)把它推广到一般的 ff-散度,发现不同的 ff 在”对齐程度”和”生成多样性”之间做出不同的取舍——本讲 §2.3、§3.7 的模式覆盖 / 模式寻找,换了一个舞台。
  • 最优传输进入了流匹配。 Wasserstein 距离背后的最优传输思想被用来给流匹配挑选更好的噪声–数据配对(OT-CFM / minibatch OT,Tong et al. 2023;以及整流 Rectified Flow),让学到的轨迹更直、采样步数更少(第 16 讲)。
  • 无配对翻译转向扩散模型。 SDEdit(Meng et al. 2022)在加噪后用目标域的扩散模型去噪;DDIB(Dual Diffusion Implicit Bridges,Su, Song, Meng & Ermon, ICLR 2023)用源域扩散模型的确定性 ODE 把图像编码到噪声、再用目标域模型的 ODE 解码——这正是 AlignFlow 的思路(两个可逆映射共享一个隐空间),循环一致性同样是精确的;薛定谔桥(如 I²SB,Liu et al. 2023)则直接学两个分布之间的随机桥。§6.4 的教训依然适用:共享隐空间并不自动带来语义对应。
  • 对抗损失作为一个”项”:第 9 讲 §8 提到的对抗蒸馏、自编码器的对抗损失里,判别器常常配合梯度惩罚(R1 正则,Mescheder et al. 2018)使用——它和本讲的 WGAN-GP 一脉相承:约束判别器的梯度,让生成器收到平滑的信号。

9. 小结 · Summary

  1. ff-散度 Df(p,q)=Eq[f(p/q)]D_f(p, q) = \mathbb{E}_q[f(p/q)](ff 凸、下半连续、f(1)=0f(1) = 0)是一个家族:前向 KL、Pearson χ² 偏向盖住所有模式,反向 KL、Hellinger、JS 偏向抓住部分模式。直接用它训练需要未知的密度比。
  2. 凸共轭 f∗(t)=sup⁡u(ut−f(u))f^*(t) = \sup_u(ut - f(u)),f∗∗=ff^{**} = f,给出变分下界 Df≥sup⁡TEp[T]−Eq[f∗(T)]D_f \geq \sup_T\mathbb{E}_p[T] - \mathbb{E}_q[f^*(T)],最优 T∗=f′(p/q)T^* = f'(p/q)——只需要样本。ff-GAN:判别器收紧下界,生成器最小化它;原始 GAN 是 fGANf_{\text{GAN}} 的特例。判别器的容量决定了下界有多紧(线性 TT 看不见同均值的差别)。
  3. 一维实验:前向 KL、Pearson、反向 KL 的 ff-GAN 找到各自的全局最小;JS、Hellinger、原始 GAN(minimax 形式)停在宽高斯的局部最小;全变差发散。非饱和损失在最优判别器下的梯度是 ∇[DKL(pG∥pdata)−2DJSD]\nabla[D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}](数值验证到 10−1310^{-13}),多出来的反向 KL 让它更偏向抓住一个模式。二维的流生成器:ff = KL 模式覆盖、ff = 反向 KL 模式寻找,都远不如最大似然。
  4. 支撑集不相交时 ff-散度失效(KL = ∞、JS = log 2,与距离无关)。Wasserstein-1 =inf⁡γE∥x−y∥= \inf_\gamma\mathbb{E}\Vert x - y\Vert 平滑;KR 对偶 =sup⁡∥f∥L≤1Epf−Eqf= \sup_{\Vert f\Vert_L \leq 1}\mathbb{E}_p f - \mathbb{E}_q f。WGAN 的 critic 可以训练到接近最优而不让梯度消失;平行线实验中梯度恒约为 1。
  5. Lipschitz 约束的实现有陷阱:权重裁剪只给出”有界”而非”≤ 1”;双边梯度惩罚在一维里形成”墙”(critic 翻不过去,生成器一直漂移),单边惩罚没有这个问题。
  6. BiGAN 匹配联合分布 (x,E(x))(x, E(x)) 与 (G(z),z)(G(z), z),得到近似的逆映射(重构误差 0.43 vs 随机 2.58)。
  7. CycleGAN 用两个对抗损失 + 循环一致性做无配对翻译;循环一致性保证近似可逆(误差 0.02),不保证语义正确(月牙对应 66–88%)。AlignFlow 精确可逆、分布匹配最好,但对应关系任意(38.5%)。

10. 常见误区 · Common pitfalls

  1. “ff-GAN 选 ff = KL 就等于最大似然。” 方向相同,但生成器只能通过一个有限容量、没训练到最优的判别器看见这个散度(§3.7:前向 KL 2.4 vs 最大似然 0.091)。
  2. “GAN(不管哪种损失)都在最小化 JSD。” minimax 损失在判别器最优时才对应 JSD;常用的非饱和损失对应 DKL(pG∥pdata)−2DJSDD_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}(§3.6)。
  3. “判别器越强越好。” 对原始 GAN 不是:判别器每步训练 5 次时生成器梯度消失、坍塌(§4.6)。对 WGAN 才是”critic 应该训练得接近最优”。
  4. “WGAN 的 critic 损失就是 Wasserstein 距离。” 只有在 critic 是 1-Lipschitz 且接近最优时才是;权重裁剪下它是 W 乘以一个未知常数,双边梯度惩罚在一维里可能完全失效(§4.5)。
  5. “WGAN 一定不坍塌、普通 GAN 一定坍塌。” 两者都依赖设置(§4.6:判别器每步 1 次的普通 GAN 也盖住了 8 个模式)。
  6. “梯度惩罚只是一个正则项,形式无所谓。” 双边与单边在一维里结果天差地别;二维以上差别才变小(§4.5)。
  7. “支撑集不相交是一个罕见的病态情况。” 生成器的输出在 dz<dxd_z < d_x 时位于低维流形上,和数据流形几乎肯定不相交(§4.1)。
  8. “循环一致 = 学到了正确的对应。” 循环一致只保证双射;无配对翻译有大量同样循环一致、同样分布匹配的解(§6.3、练习 9)。
  9. “BiGAN 的编码器就是生成器的精确逆。” 只在联合分布完全匹配时才成立;实践中是近似的(§5.3)。

11. 练习 · Exercises

练习 1(凸共轭) 推导前向 KL(f(u)=ulog⁡uf(u) = u\log u)和反向 KL(f(u)=−log⁡uf(u) = -\log u)的共轭 f∗f^*,并验证 §2.3 表中的定义域。

参考答案

前向 KL:ddu(tu−ulog⁡u)=t−log⁡u−1=0⇒u=et−1\frac{d}{du}(tu - u\log u) = t - \log u - 1 = 0 \Rightarrow u = e^{t-1},代回 tet−1−et−1(t−1)=et−1te^{t-1} - e^{t-1}(t-1) = e^{t-1},对所有实数 tt 有定义。反向 KL:ddu(tu+log⁡u)=t+1/u=0⇒u=−1/t\frac{d}{du}(tu + \log u) = t + 1/u = 0 \Rightarrow u = -1/t,需要 u>0u > 0,所以 t<0t < 0;代回 −1+log⁡(−1/t)=−1−log⁡(−t)-1 + \log(-1/t) = -1 - \log(-t)。t≥0t \geq 0 时 tu+log⁡u→∞tu + \log u \to \infty(u→∞u \to \infty),f∗(t)=+∞f^*(t) = +\infty,不在定义域里。

练习 2(最优判别器) 对固定的 xx,最大化 T p(x)−f∗(T) q(x)T\,p(x) - f^*(T)\,q(x),证明最优解是 T∗(x)=f′(p(x)/q(x))T^*(x) = f'(p(x)/q(x))。(提示:若 t=f′(u)t = f'(u),则 f∗′(t)=uf^{*\prime}(t) = u。)对前向 KL,T∗T^* 是什么?代入下界,验证等号成立。

参考答案

一阶条件 p−f∗′(T)q=0⇒f∗′(T)=p/qp - f^{*\prime}(T)q = 0 \Rightarrow f^{*\prime}(T) = p/q。共轭的性质:f∗(t)=ut−f(u)f^*(t) = ut - f(u) 在 t=f′(u)t = f'(u) 处取到(uu 是 sup 的取值点),由包络定理 f∗′(t)=uf^{*\prime}(t) = u;所以 f∗′f^{*\prime} 是 f′f' 的反函数,T∗=f′(p/q)T^* = f'(p/q)。前向 KL:T∗=1+log⁡(p/q)T^* = 1 + \log(p/q),f∗(T∗)=elog⁡(p/q)=p/qf^*(T^*) = e^{\log(p/q)} = p/q;下界 =Ep[1+log⁡pq]−Eq[pq]=1+DKL(p∥q)−1=DKL(p∥q)= \mathbb{E}_p[1 + \log\frac pq] - \mathbb{E}_q[\frac pq] = 1 + D_{\mathrm{KL}}(p \Vert q) - 1 = D_{\mathrm{KL}}(p \Vert q)。

练习 3(原始 GAN 是 f-GAN) 验证 fGAN(u)=ulog⁡u−(u+1)log⁡(u+1)f_{\text{GAN}}(u) = u\log u - (u+1)\log(u+1) 的共轭是 f∗(t)=−log⁡(1−et)f^*(t) = -\log(1 - e^t)(t<0t < 0),并说明用 T=log⁡DT = \log D 时 ff-GAN 目标恰好是 V(G,D)V(G, D)。

参考答案

f′(u)=log⁡u−log⁡(u+1)=t⇒uu+1=et⇒u=et1−etf'(u) = \log u - \log(u+1) = t \Rightarrow \frac{u}{u+1} = e^t \Rightarrow u = \frac{e^t}{1 - e^t}(需要 t<0t < 0)。f∗(t)=tu−ulog⁡u+(u+1)log⁡(u+1)f^*(t) = tu - u\log u + (u+1)\log(u+1);log⁡u=t−log⁡(1−et)\log u = t - \log(1 - e^t),log⁡(u+1)=−log⁡(1−et)\log(u+1) = -\log(1 - e^t),代入得 ulog⁡(1−et)−(u+1)log⁡(1−et)=−log⁡(1−et)u\log(1 - e^t) - (u+1)\log(1 - e^t) = -\log(1 - e^t)。T=log⁡DT = \log D(D∈(0,1)D \in (0,1) 保证 T<0T < 0),f∗(T)=−log⁡(1−D)f^*(T) = -\log(1 - D),所以 F=Ep[log⁡D]+Eq[log⁡(1−D)]=VF = \mathbb{E}_p[\log D] + \mathbb{E}_q[\log(1 - D)] = V。

练习 4(线性判别器看不见什么) 设 T(x)=ax+bT(x) = ax + b,对前向 KL 求 sup⁡a,bEp[T]−Eq[eT−1]\sup_{a, b}\mathbb{E}_p[T] - \mathbb{E}_q[e^{T-1}],其中 q=N(μq,σq2)q = \mathcal{N}(\mu_q, \sigma_q^2)。证明当 μp=μq\mu_p = \mu_q 时这个下界为 0。

参考答案

先对 bb 最大化:Ep[ax]+b−eb−1Eq[eax]\mathbb{E}_p[ax] + b - e^{b-1}\mathbb{E}_q[e^{ax}],最优 eb−1=1/Eq[eax]e^{b-1} = 1/\mathbb{E}_q[e^{ax}],值为 aμp+1−log⁡Eq[eax]−1=aμp−aμq−a2σq22a\mu_p + 1 - \log\mathbb{E}_q[e^{ax}] - 1 = a\mu_p - a\mu_q - \frac{a^2\sigma_q^2}{2}。μp=μq\mu_p = \mu_q 时它 ≤0\leq 0,在 a=0a = 0 取 0。线性判别器只”看得见”均值的差别(代码 01 第 3 部分的 −0.0003 就是这个 0 加上蒙特卡洛误差)。

练习 5(非饱和损失的目标) 按 §3.6 的思路写出完整的推导:∇θEpθ[−log⁡D∗]=∇θ[DKL(pθ∥pdata)−2DJSD]\nabla_\theta\mathbb{E}_{p_\theta}[-\log D^*] = \nabla_\theta[D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}]。在哪一步用到了”D∗D^* 固定、不随 θ\theta 变”?

参考答案

见 §3.6。用到 D∗D^* 固定的地方有两处:(1) 包络定理——∇θV(Gθ,Dθ∗)\nabla_\theta V(G_\theta, D^*_\theta) 里 Dθ∗D^*_\theta 随 θ\theta 的变化不贡献梯度,因为 ∂V/∂D=0\partial V/\partial D = 0;所以”固定 D∗D^* 求导”等于”对 2DJSD2D_{\mathrm{JSD}} 求导”。(2) log⁡D∗1−D∗=log⁡pdatapθ0\log\frac{D^*}{1-D^*} = \log\frac{p_{\text{data}}}{p_{\theta_0}} 里出现的是 θ0\theta_0(当前值),不是 θ\theta;对 KL 求导时,log⁡pθ\log p_\theta 中 θ\theta 的直接贡献 Epθ0[∇log⁡pθ]=0\mathbb{E}_{p_{\theta_0}}[\nabla\log p_\theta] = 0,所以两边一致。这正是交替训练中”生成器那一步”看到的梯度。

练习 6(Wasserstein 的例子) (a) 计算 W1(N(μ1,σ2),N(μ2,σ2))W_1(\mathcal{N}(\mu_1, \sigma^2), \mathcal{N}(\mu_2, \sigma^2))。(b) 对 §4.1 的两个点质量,KL、JS、W1W_1 关于 θ\theta 的导数各是什么?

参考答案

(a) 把 N(μ1,σ2)\mathcal{N}(\mu_1, \sigma^2) 整体平移 μ2−μ1\mu_2 - \mu_1 是一个可行方案,代价 ∣μ1−μ2∣|\mu_1 - \mu_2|;由 W1≥∣Epx−Eqx∣W_1 \geq |\mathbb{E}_p x - \mathbb{E}_q x|(取 f(x)=±xf(x) = \pm x,它是 1-Lipschitz),这是最优的:W1=∣μ1−μ2∣W_1 = |\mu_1 - \mu_2|。(代码 03 第 2 部分:N(0,1)\mathcal{N}(0, 1) vs N(2,1)\mathcal{N}(2, 1),2 万个样本的经验值 1.984。)(b) KL 在 θ≠0\theta \neq 0 处恒为 ∞,JS 恒为 log⁡2\log 2,导数都是 0(或无定义);W1=∣θ∣W_1 = |\theta|,导数 sign(θ)\mathrm{sign}(\theta)——永远指向 0。

练习 7(为什么在连线上惩罚) Gulrajani et al. 证明:若 f∗f^* 是 KR 对偶的最优 critic,γ∗\gamma^* 是最优搬运方案,则对 (x,y)∼γ∗(x, y) \sim \gamma^*,在连线上的点 xt=tx+(1−t)yx_t = tx + (1-t)y 处 ∇f∗(xt)\nabla f^*(x_t) 指向 x−yx - y 方向、范数为 1。用一维的例子说明直觉。

参考答案

最优方案下每一单位质量都”恰好赚回运费”:f∗(x)−f∗(y)=∥x−y∥f^*(x) - f^*(y) = \Vert x - y\Vert。又因 f∗f^* 是 1-Lipschitz,沿 y→xy \to x 的直线 f∗f^* 必须以最大速率 1 增长,否则从 yy 到 xx 的总增量不够 ∥x−y∥\Vert x - y\Vert。一维:p=δ0p = \delta_0、q=δθq = \delta_\theta(θ>0\theta > 0),最优 critic 在 [0,θ][0, \theta] 上是 f(x)=−xf(x) = -x(斜率恰好 −1)。所以在真假样本的连线上要求 ∥∇f∥=1\Vert\nabla f\Vert = 1 是”必要条件”;连线以外的地方只需要 ≤1\leq 1——这也是单边惩罚的理由。

练习 8(双边梯度惩罚的墙) 线性 critic f(x)=axf(x) = ax,Δ=μdata−μG>0\Delta = \mu_{\text{data}} - \mu_G > 0(正确的斜率是 a>0a > 0)。目标 J(a)=aΔ−λ(∣a∣−1)2J(a) = a\Delta - \lambda(|a| - 1)^2。(a) 证明在 a<0a < 0 一侧,若 Δ<2λ\Delta < 2\lambda,JJ 在 a−=−1+Δ/(2λ)a_- = -1 + \Delta/(2\lambda) 处有局部最大值。(b) 从 a=−1a = -1 出发做梯度上升会怎样?(c) 单边惩罚 λmax⁡(0,∣a∣−1)2\lambda\max(0, |a| - 1)^2 下呢?

参考答案

(a) a<0a < 0 时 J=aΔ−λ(a+1)2J = a\Delta - \lambda(a + 1)^2,J′=Δ−2λ(a+1)=0⇒a−=−1+Δ2λJ' = \Delta - 2\lambda(a+1) = 0 \Rightarrow a_- = -1 + \frac{\Delta}{2\lambda},J′′=−2λ<0J'' = -2\lambda < 0;a−<0⇔Δ<2λa_- < 0 \Leftrightarrow \Delta < 2\lambda。(b) 梯度上升停在 a−a_-:critic 的斜率符号是错的(Edataf−EGf=a−Δ<0E_{\text{data}}f - E_Gf = a_-\Delta < 0),生成器的损失 −EG[f]=−a−μG-\mathbb{E}_G[f] = -a_-\mu_G 对 μG\mu_G 的梯度是 −a−>0-a_- > 0,于是 μG\mu_G 一直减小、Δ\Delta 一直增大,直到 Δ>2λ\Delta > 2\lambda 才可能翻过去——代码 03 里 λ=10\lambda = 10、μG=−4\mu_G = -4 时 Δ=3.2\Delta = 3.2,a−=−0.84a_- = -0.84,和观测一致。(c) 单边惩罚在 ∣a∣≤1|a| \leq 1 时为 0,J=aΔJ = a\Delta 单调递增,梯度上升直接穿过 0 走到 a=1+Δ2λa = 1 + \frac{\Delta}{2\lambda}。

练习 9(无配对翻译不唯一) 设 XX 和 YY 都是 N(0,1)\mathcal{N}(0, 1)。证明 G(x)=−xG(x) = -x、F(y)=−yF(y) = -y 和 G(x)=xG(x) = x、F(y)=yF(y) = y 都让 CycleGAN 的总损失达到最小。再举一个二维的例子。

参考答案

−X∼N(0,1)-X \sim \mathcal{N}(0, 1),所以 G(X)G(X) 与 YY 同分布、F(Y)F(Y) 与 XX 同分布,两个对抗项都在最优值(判别器无法区分);F(G(x))=xF(G(x)) = x、G(F(y))=yG(F(y)) = y,循环项为 0。任何保持 N(0,1)\mathcal{N}(0, 1) 不变的双射(比如保测度的分段重排)都一样。二维:X=Y=N(0,I2)X = Y = \mathcal{N}(0, I_2),任意旋转 RR 都是解。代码 04 的双月牙同理:把两条弧对调、沿弧方向翻转,近似地保持分布、可逆。哪个”对”由目标函数以外的东西决定(网络结构、初始化、额外的约束)。

练习 10(AlignFlow 的自由度) 设 fXf_X、fYf_Y 是精确的流(fX−1f_X^{-1} 把 pXp_X 变成 N(0,I)\mathcal{N}(0, I),fYf_Y 把 N(0,I)\mathcal{N}(0, I) 变成 pYp_Y),RR 是任意正交矩阵。证明 GR=fY∘R∘fX−1G_R = f_Y \circ R \circ f_X^{-1} 同样把 pXp_X 精确地变成 pYp_Y,并且 FR=GR−1F_R = G_R^{-1} 精确循环一致。这说明了什么?

参考答案

x∼pX⇒fX−1(x)∼N(0,I)⇒RfX−1(x)∼N(0,I)x \sim p_X \Rightarrow f_X^{-1}(x) \sim \mathcal{N}(0, I) \Rightarrow R f_X^{-1}(x) \sim \mathcal{N}(0, I)(标准高斯旋转不变)⇒GR(x)∼pY\Rightarrow G_R(x) \sim p_Y。GRG_R 是可逆函数的复合,FR=fX∘R⊤∘fY−1F_R = f_X \circ R^\top \circ f_Y^{-1} 精确地是它的逆。所以”精确可逆 + 精确分布匹配”的解有一整族(至少包含所有旋转),最大似然训练得到其中哪一个,取决于两个流各自的训练细节——和”语义对应”无关(代码 04:38.5%)。


12. 延伸阅读 · Further reading

原课材料

f-GAN 与散度

  • Nowozin, Cseke & Tomioka, f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization, NeurIPS 2016
  • Nguyen, Wainwright & Jordan, Estimating Divergence Functionals and the Likelihood Ratio by Convex Risk Minimization, IEEE TIT 2010(变分下界的来源)
  • Arjovsky & Bottou, Towards Principled Methods for Training Generative Adversarial Networks, ICLR 2017(支撑集、非饱和损失的目标)

Wasserstein GAN

  • Arjovsky, Chintala & Bottou, Wasserstein Generative Adversarial Networks, ICML 2017
  • Gulrajani, Ahmed, Arjovsky, Dumoulin & Courville, Improved Training of Wasserstein GANs, NeurIPS 2017(梯度惩罚)
  • Petzka, Fischer & Lukovnikov, On the Regularization of Wasserstein GANs, ICLR 2018(单边惩罚)
  • Villani, Optimal Transport: Old and New, 2009;Peyré & Cuturi, Computational Optimal Transport, 2019

推断与翻译

  • Donahue, Krähenbühl & Darrell, Adversarial Feature Learning(BiGAN), ICLR 2017;Dumoulin et al., Adversarially Learned Inference(ALI), ICLR 2017
  • Zhu, Park, Isola & Efros, Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks(CycleGAN), ICCV 2017
  • Grover, Chute, Shu, Cao & Ermon, AlignFlow: Cycle Consistent Learning from Multiple Domains via Normalizing Flows, AAAI 2020
  • Choi et al., StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation, CVPR 2018

2023 年之后

  • Wang et al., Beyond Reverse KL: Generalizing Direct Preference Optimization with Diverse Divergence Constraints, ICLR 2024
  • Tong et al., Improving and Generalizing Flow-Based Generative Models with Minibatch Optimal Transport, TMLR 2024(arXiv 2023)
  • Su, Song, Meng & Ermon, Dual Diffusion Implicit Bridges for Image-to-Image Translation, ICLR 2023
  • Liu et al., I²SB: Image-to-Image Schrödinger Bridge, ICML 2023

13. 下一讲预告 · Next lecture

GAN 换来了灵活的生成器,代价是没有似然、训练不稳定、难以评估。第 11 讲(原课 Lecture 11,Energy-Based Models)走另一条路:保留”对每个 xx 打分”,但放弃”分数必须归一化”——

  • 能量模型 pθ(x)=exp⁡(fθ(x))/Z(θ)p_\theta(x) = \exp(f_\theta(x))/Z(\theta):fθf_\theta 可以是任何神经网络,代价是配分函数 Z(θ)Z(\theta) 算不出来;
  • 例子:Ising 模型、专家乘积、受限玻尔兹曼机(RBM)、深度玻尔兹曼机;
  • 比较两个点的相对概率很容易(ZZ 抵消了);
  • 训练的直觉:“压低数据的能量、抬高其他点的能量”——对比散度;从能量模型采样需要 MCMC(Metropolis–Hastings、朗之万动力学)。
← 返回课程目录