对应 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:f f f -散度 → 用 f f f -散度训练需要密度比 → Fenchel 凸共轭 → f f f -GAN 的变分下界与目标 → 支撑集不相交时 f f f -散度失效 → Wasserstein(推土机)距离 → Kantorovich–Rubinstein 对偶与 WGAN → 推断隐表示:判别器特征、BiGAN → 跨域翻译:配对与无配对、CycleGAN、循环一致性、AlignFlow、StarGAN → GAN 小结。“非饱和损失在最优判别器下对应 D K L ( p G ∥ p data ) − 2 D J S D D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}} D KL ( p G ∥ p data ) − 2 D JSD “的推导与数值验证、一维里双边梯度惩罚的”墙”、单边梯度惩罚、“无配对翻译的不唯一性”的定量检查 是本讲义补充的。所有实验的真实分布与真实映射都已知。
配套代码 Code :code/lecture10/ (PyTorch;1 个模块 + 4 个演示脚本,最长的约 100 秒)
预计阅读时间 :3.5 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
写出 f f f -散度 的定义和条件,认出 KL、反向 KL、JS、Hellinger、χ²、全变差各自的 f f f ;说出”模式覆盖”和”模式寻找”分别来自哪些散度。
用 Fenchel 凸共轭 推导 f f f -散度的变分下界 D f ( p , q ) ≥ sup T E p [ T ] − E q [ f ∗ ( T ) ] D_f(p, q) \geq \sup_T \mathbb{E}_p[T] - \mathbb{E}_q[f^*(T)] D f ( p , q ) ≥ sup T E p [ T ] − E q [ f ∗ ( T )] ,写出最优判别器 T ∗ = f ′ ( p / q ) T^* = f'(p/q) T ∗ = f ′ ( p / q ) ,并说明原始 GAN 是 f f f -GAN 的特例。
推导非饱和 生成器损失在最优判别器下的梯度等于 ∇ [ D K L ( p G ∥ p data ) − 2 D J S D ] \nabla[D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}] ∇ [ D KL ( p G ∥ p data ) − 2 D JSD ] ,解释它为什么比原始 minimax 损失更偏向”抓住一个模式”。
说明支撑集不相交时 f f f -散度为什么失效,写出 Wasserstein-1 距离 的原始定义和 Kantorovich–Rubinstein 对偶 ,比较权重裁剪和梯度惩罚两种实现 Lipschitz 约束的方法及各自的陷阱。
理解 BiGAN 怎样通过匹配联合分布 ( x , E ( x ) ) (x, E(x)) ( x , E ( x )) 和 ( G ( z ) , z ) (G(z), z) ( G ( z ) , z ) 学到一个推断网络。
写出 CycleGAN 的损失,说明循环一致性保证了什么、没有保证什么;理解 AlignFlow 为什么”精确地循环一致”。
0.2 先修与本讲范围 Prerequisites & scope
默认你已经会 Assumed 本讲只给直觉,后面几讲再展开 Previewed only 第 9 讲:两样本检验、最优判别器、V ( G , D ∗ ) = 2 D J S D − log 4 V(G, D^*) = 2\,D_{\mathrm{JSD}} - \log 4 V ( G , D ∗ ) = 2 D 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
符号 含义 D f ( p , q ) = E x ∼ q [ f ( p ( x ) / q ( x ) ) ] D_f(p, q) = \mathbb{E}_{x \sim q}[f(p(x)/q(x))] D f ( p , q ) = E x ∼ q [ f ( p ( x ) / q ( x ))] f f f -散度(原课约定:期望在 q q q 下,比值是 p / q p/q p / q )f ∗ ( t ) = sup u ( u t − f ( u ) ) f^*(t) = \sup_u (ut - f(u)) f ∗ ( t ) = sup u ( u t − f ( u )) f f f 的凸共轭(Fenchel conjugate)V ϕ ( x ) V_\phi(x) V ϕ ( x ) ,T ϕ ( x ) = g f ( V ϕ ( x ) ) T_\phi(x) = g_f(V_\phi(x)) T ϕ ( x ) = g f ( V ϕ ( x )) 判别器网络的原始输出;经过输出激活 g f g_f g f 后的”检验函数” W ( p , q ) W(p, q) W ( p , q ) Wasserstein-1(推土机)距离 Π ( p , q ) \Pi(p, q) Π ( p , q ) ,γ \gamma γ 边缘分别为 p p p 、q q q 的所有联合分布(“搬运方案”) ∥ f ∥ L ≤ 1 \Vert f \Vert_L \leq 1 ∥ f ∥ L ≤ 1 f f f 是 1-Lipschitz:∣ f ( x ) − f ( y ) ∣ ≤ ∥ x − y ∥ \lvert f(x) - f(y)\rvert \leq \Vert x - y\Vert ∣ f ( x ) − f ( y )∣ ≤ ∥ x − y ∥ E : x ↦ z E: x \mapsto z E : x ↦ z BiGAN 的编码器 G : X → Y G: X \to Y G : X → Y ,F : Y → X F: Y \to X F : Y → X ,D X D_X D X ,D Y D_Y D Y CycleGAN 的两个翻译器和两个判别器
0.5 关于数字 · About the numbers
代码用的”真相”有三种:一维的双峰分布 0.7 N ( − 2 , 0.5 2 ) + 0.3 N ( 2 , 0.5 2 ) 0.7\,\mathcal{N}(-2, 0.5^2) + 0.3\,\mathcal{N}(2, 0.5^2) 0.7 N ( − 2 , 0. 5 2 ) + 0.3 N ( 2 , 0. 5 2 ) (与第 9 讲相同,所有散度都能在细网格上精确积分);二维的 8 个高斯圆环与双月牙(第 5 讲的 toy2d.py);以及”把双月牙旋转、缩放、平移”这个已知 的跨域映射。散度的单位是 nat,Wasserstein 距离的单位是坐标单位。GAN 的结果依赖随机种子和超参数,几处和预想不同的结果记录在 代码 README 的”关于实验结果”里。
1. 回顾与本讲计划 · Recap
slide 2:GAN 的训练目标
min G max D V ( G , D ) = E x ∼ p data [ log D ( x ) ] + E x ∼ p G [ 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))]. min G max D V ( G , D ) = E x ∼ p data [ log D ( x )] + E x ∼ p G [ log ( 1 − D ( x ))] .
判别器最优时,GAN 最小化缩放平移后的 Jensen–Shannon 散度 2 D J S D ( p data , p G ) − log 4 2D_{\mathrm{JSD}}(p_{\text{data}}, p_G) - \log 4 2 D JSD ( p data , p G ) − log 4 。参数化以后:
min θ max ϕ E x ∼ p data [ log D ϕ ( x ) ] + E z ∼ 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)))]. min θ max ϕ E x ∼ p data [ log D ϕ ( x )] + E z ∼ p ( z ) [ log ( 1 − D ϕ ( G θ ( z )))] .
slide 3 是”GAN Zoo”——一个列出了几百个有名字的 GAN 的仓库。本讲挑出其中有代表性的四个方向:
通过 f f f -GAN 得到一大类不需要似然的目标;
Wasserstein GAN ;
通过 BiGAN 推断隐表示;
应用:通过 CycleGAN 做图像到图像的翻译。
第 9 讲还留下一个问题:代码里实际用的非饱和 损失并不是在最小化 JSD——它在最小化什么?§3.5 会给出答案。
2. f-散度 · f-divergences
2.1 我们有哪些选择?
slide 4:到目前为止,距离 d ( ⋅ ) d(\cdot) d ( ⋅ ) 有两种:KL 散度(自回归模型、流模型)和(近似地、缩放平移后的)JS 散度(原始 GAN)。还有别的吗?
2.2 定义
slide 5:给两个密度 p p p 和 q q q ,f f f -散度定义为
D f ( p , q ) = E x ∼ 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], D f ( p , q ) = E x ∼ q [ f ( q ( x ) p ( x ) ) ] ,
其中 f f f 是任意一个凸 、下半连续 、满足 f ( 1 ) = 0 f(1) = 0 f ( 1 ) = 0 的函数。
凸 :连接函数图像上任意两点的线段在图像上方。
下半连续 :在任意一点 x 0 x_0 x 0 ,函数值要么接近 f ( x 0 ) f(x_0) f ( x 0 ) 、要么比 f ( x 0 ) f(x_0) f ( x 0 ) 大(函数只能往”上”跳,不能往”下”跳)。这个技术条件保证了 §3 的对偶是精确的。
非负 :由 Jensen 不等式,
E x ∼ q [ f ( p ( x ) q ( x ) ) ] ≥ f ( E x ∼ q [ p ( x ) q ( x ) ] ) = f ( ∫ q ( x ) p ( x ) q ( x ) d x ) = f ( ∫ p ( x ) d x ) = 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. E x ∼ q [ f ( q ( x ) p ( x ) ) ] ≥ f ( E x ∼ q [ q ( x ) p ( x ) ] ) = f ( ∫ q ( x ) q ( x ) p ( x ) d x ) = f ( ∫ p ( x ) d x ) = f ( 1 ) = 0.
例子:KL 散度取 f ( u ) = u log u f(u) = u\log u f ( u ) = u log u :E q [ p q log p q ] = E p [ log p q ] = D K L ( 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) E q [ q p log q p ] = E p [ log q p ] = D KL ( p ∥ q ) 。
2.3 一个家族
slide 6 列出了很多 f f f -散度。代码 01 第 1 部分实现了其中 7 种(Nowozin, Cseke & Tomioka 2016 的表 1、表 2),并数值地验证了 f ∗ ∗ = f f^{**} = f f ∗∗ = f (§3.1):
名字 f ( u ) f(u) f ( u ) D f ( p , q ) D_f(p, q) D f ( p , q ) f ∗ ( t ) f^*(t) f ∗ ( t ) f ∗ f^* f ∗ 的定义域前向 KL u log u u\log u u log u D K L ( p ∥ q ) D_{\mathrm{KL}}(p \Vert q) D KL ( p ∥ q ) e t − 1 e^{t-1} e t − 1 R \mathbb{R} R 反向 KL − log u -\log u − log u D K L ( q ∥ p ) D_{\mathrm{KL}}(q \Vert p) D KL ( q ∥ p ) − 1 − log ( − t ) -1 - \log(-t) − 1 − log ( − t ) t < 0 t < 0 t < 0 Pearson χ² ( u − 1 ) 2 (u-1)^2 ( u − 1 ) 2 ∫ ( p − q ) 2 / q \int (p-q)^2/q ∫ ( p − q ) 2 / q t 2 / 4 + t t^2/4 + t t 2 /4 + t R \mathbb{R} R 平方 Hellinger ( u − 1 ) 2 (\sqrt u - 1)^2 ( u − 1 ) 2 ∫ ( p − q ) 2 \int (\sqrt p - \sqrt q)^2 ∫ ( p − q ) 2 t / ( 1 − t ) t/(1-t) t / ( 1 − t ) t < 1 t < 1 t < 1 Jensen–Shannon u log u − ( u + 1 ) log u + 1 2 u\log u - (u+1)\log\frac{u+1}{2} u log u − ( u + 1 ) log 2 u + 1 2 D J S D ( p , q ) 2D_{\mathrm{JSD}}(p, q) 2 D JSD ( p , q ) − log ( 2 − e t ) -\log(2 - e^t) − log ( 2 − e t ) t < log 2 t < \log 2 t < log 2 原始 GAN u log u − ( u + 1 ) log ( u + 1 ) u\log u - (u+1)\log(u+1) u log u − ( u + 1 ) log ( u + 1 ) 2 D J S D − log 4 2D_{\mathrm{JSD}} - \log 4 2 D JSD − log 4 − log ( 1 − e t ) -\log(1 - e^t) − log ( 1 − e t ) t < 0 t < 0 t < 0 全变差 1 2 ∣ u − 1 ∣ \frac12\lvert u - 1\rvert 2 1 ∣ u − 1 ∣ 1 2 ∫ ∣ p − q ∣ \frac12\int\lvert p - q\rvert 2 1 ∫ ∣ p − q ∣ t t t ∣ t ∣ ≤ 1 2 \lvert t\rvert \leq \frac12 ∣ t ∣ ≤ 2 1
(原始 GAN 那一行的 f ( 1 ) = − log 4 ≠ 0 f(1) = -\log 4 \neq 0 f ( 1 ) = − log 4 = 0 :它差一个常数,不影响优化。)
这些散度”在意”的东西不同。 f ( u ) f(u) f ( u ) 在 u = p / q → ∞ u = p/q \to \infty u = p / q → ∞ (q q q 漏掉了 p p p 的质量)和 u → 0 u \to 0 u → 0 (q q q 把质量放在 p p p 没有的地方)两端的增长速度,决定了模型更怕哪一种错误。前向 KL 的 u log u u\log u u log u 在 u → ∞ u \to \infty u → ∞ 时超线性增长——极怕”漏掉”;反向 KL 的 − log u -\log u − log u 在 u → 0 u \to 0 u → 0 时趋于无穷——极怕”多出来”。代码 01 第 2 部分把它们放在同一个任务上:用一个高斯 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^2) N ( μ , σ 2 ) 近似双峰分布,最小化 D f ( p data , q ) D_f(p_{\text{data}}, q) D f ( p data , q ) (网格上精确积分,4 个初值取最好):
最小化 μ \mu μ σ \sigma σ 最小值 解的样子 前向 KL −0.800 1.900 0.724 盖住两个 Pearson χ² −0.785 1.937 1.404 盖住两个 反向 KL −2.000 0.500 0.357 抓住大模式 平方 Hellinger −2.000 0.501 0.327 抓住大模式 Jensen–Shannon −2.000 0.500 0.235(= 2 × 0.117) 抓住大模式 全变差 −1.906 0.701 0.299 抓住大模式,但更宽 (参照)Wasserstein-1 −0.874 1.777 0.742 盖住两个
前向 KL 的解就是矩匹配(最大似然);Pearson χ² 比它还”宽”一点(( u − 1 ) 2 (u-1)^2 ( u − 1 ) 2 在 u → ∞ u \to \infty u → ∞ 时增长得更快)。反向 KL、Hellinger、JS 都抓住大模式。全变差抓住大模式但 σ 更宽——它对两种错误按面积一视同仁地计价。Wasserstein-1(不是 f f f -散度,§4 的主角)也盖住两个:把 30% 的质量搬运 4 个单位,“运费”很高。
注意 :第 9 讲练习 6 提醒过,“JS 是模式寻找的”并不总成立——两个模式等权时,JS 的全局最小变成了宽高斯。散度的偏好取决于数据的形状。
2.4 用 f-散度训练,需要密度比
slide 7:给 p data p_{\text{data}} p data 和 p θ p_\theta p θ ,可以最小化 D f ( p θ , p data ) D_f(p_\theta, p_{\text{data}}) D f ( p θ , p data ) 或 D f ( p data , p θ ) D_f(p_{\text{data}}, p_\theta) D f ( p data , p θ ) ——非负,两个分布相同时为零。但两者都依赖未知的密度比 :
D f ( p θ , p data ) = E x ∼ p data ⏟ 用样本近似 [ f ( p θ ( x ) p data ( x ) ⏟ 未知的比值 ) ] , D f ( p data , p θ ) = E x ∼ p θ ⏟ 用样本近似 [ f ( p data ( 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]. D f ( p θ , p data ) = 用样本近似 E x ∼ p data [ f ( 未知的比值 p data ( x ) p θ ( x ) ) ] , D f ( p data , p θ ) = 用样本近似 E x ∼ p θ [ f ( 未知的比值 p θ ( x ) p data ( x ) ) ] .
外面的期望可以用样本近似,里面的比值不行:p data p_{\text{data}} p data 的密度永远不知道,GAN 的 p θ p_\theta p θ 也没有密度。要把 f f f -散度当作不需要似然的两样本检验目标,必须能只用样本(训练数据和模型样本)估计它。
3. f-GAN:变分散度最小化 · Variational divergence minimization
3.1 Fenchel 凸共轭
slide 8:任何函数 f f f 的凸共轭是
f ∗ ( t ) = sup u ∈ d o m f ( u t − f ( u ) ) . f^*(t) = \sup_{u \in \mathrm{dom}_f}(ut - f(u)). f ∗ ( t ) = sup u ∈ dom f ( u t − f ( u )) .
几何直觉 :固定斜率 t t t ,f ∗ ( t ) f^*(t) f ∗ ( t ) 是”斜率为 t t t 、过原点的直线 u t ut u t 比 f f f 高出的最大距离”;等价地,− f ∗ ( t ) -f^*(t) − f ∗ ( t ) 是斜率为 t t t 的切线在纵轴上的截距。一个凸函数完全由它的所有切线决定——f ∗ f^* f ∗ 就是把”f f f 在每个斜率上的切线”记录下来。
性质:
f ∗ f^* f ∗ 是凸的(凸函数——这里是关于 t t t 的线性函数 u t − f ( u ) ut - f(u) u t − f ( u ) ——的逐点上确界还是凸的)、下半连续的。
令 f ∗ ∗ f^{**} f ∗∗ 是 f ∗ f^* f ∗ 的共轭,f ∗ ∗ ( u ) = sup t ∈ d o m f ∗ ( t u − f ∗ ( t ) ) f^{**}(u) = \sup_{t \in \mathrm{dom}_{f^*}}(tu - f^*(t)) f ∗∗ ( u ) = sup t ∈ dom f ∗ ( t u − f ∗ ( t )) 。则 f ∗ ∗ ≤ f f^{**} \leq f f ∗∗ ≤ f 。证明:由定义,对所有 t , u t, u t , u ,f ∗ ( t ) ≥ u t − f ( u ) f^*(t) \geq ut - f(u) f ∗ ( t ) ≥ u t − f ( u ) ,即 f ( u ) ≥ u t − f ∗ ( t ) f(u) \geq ut - f^*(t) f ( u ) ≥ u t − f ∗ ( t ) ;对 t t t 取上确界,f ( u ) ≥ sup t ( u t − f ∗ ( t ) ) = f ∗ ∗ ( u ) f(u) \geq \sup_t(ut - f^*(t)) = f^{**}(u) f ( u ) ≥ sup t ( u t − f ∗ ( t )) = f ∗∗ ( u ) 。
强对偶 :当 f f f 凸且下半连续时,f ∗ ∗ = f f^{**} = f f ∗∗ = f 。
代码 01 第 1 部分在 u = 1 4 , 1 , 4 u = \frac14, 1, 4 u = 4 1 , 1 , 4 处数值地求 sup t ( t u − f ∗ ( t ) ) \sup_t(tu - f^*(t)) sup t ( t u − f ∗ ( t )) ,7 种散度都精确地还原了 f ( u ) f(u) f ( u ) 。
3.2 变分下界
slide 9:用 f = f ∗ ∗ f = f^{**} f = f ∗∗ 改写 f f f -散度,
D f ( p , q ) = E x ∼ q [ f ∗ ∗ ( p ( x ) q ( x ) ) ] = E x ∼ q [ sup t ∈ d o m f ∗ ( t p ( x ) q ( x ) − f ∗ ( t ) ) ] = E x ∼ q [ T ∗ ( x ) p ( x ) q ( x ) − f ∗ ( T ∗ ( x ) ) ] = ∫ X [ T ∗ ( x ) p ( x ) − f ∗ ( T ∗ ( x ) ) q ( x ) ] d x = sup T ∫ X [ T ( x ) p ( x ) − f ∗ ( T ( x ) ) q ( x ) ] d x ≥ sup T ∈ T ∫ X ( T ( x ) p ( x ) − f ∗ ( T ( x ) ) q ( x ) ) d x = sup T ∈ T ( E x ∼ p [ T ( x ) ] − E x ∼ 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} D f ( p , q ) = E x ∼ q [ f ∗∗ ( q ( x ) p ( x ) ) ] = E x ∼ q [ t ∈ dom f ∗ sup ( t q ( x ) p ( x ) − f ∗ ( t ) ) ] = E x ∼ q [ T ∗ ( x ) q ( x ) p ( x ) − f ∗ ( T ∗ ( x )) ] = ∫ X [ T ∗ ( x ) p ( x ) − f ∗ ( T ∗ ( x )) q ( x ) ] d x = T sup ∫ X [ T ( x ) p ( x ) − f ∗ ( T ( x )) q ( x ) ] d x ≥ T ∈ T sup ∫ X ( T ( x ) p ( x ) − f ∗ ( T ( x )) q ( x ) ) d x = T ∈ T sup ( E x ∼ p [ T ( x )] − E x ∼ q [ f ∗ ( T ( x ))] ) .
第二行:对每个 x x x 把上确界的取值记为 T ∗ ( x ) T^*(x) T ∗ ( x ) ,它是 x x x 的一个函数;第三行:上确界可以逐点取,所以”对每个 x x x 取 sup”等于”对所有函数 T T T 取 sup”;最后一行把 T T T 限制在一个函数类 T \mathcal{T} T (比如某个神经网络能表示的函数)里,得到下界。
这个下界对 p p p 和 q q q 都是 likelihood-free 的 ——只需要两组样本。
最优的 T T T 是什么? 对每个 x x x 最大化 t p − f ∗ ( t ) q tp - f^*(t)q tp − f ∗ ( t ) q :导数 p − f ∗ ′ ( t ) q = 0 p - f^{*\prime}(t)q = 0 p − f ∗ ′ ( t ) q = 0 ,即 f ∗ ′ ( t ) = p / q f^{*\prime}(t) = p/q f ∗ ′ ( t ) = p / q 。由共轭的性质,f ∗ ′ f^{*\prime} f ∗ ′ 是 f ′ f' f ′ 的反函数,所以
T ∗ ( x ) = f ′ ( p ( x ) q ( x ) ) . T^*(x) = f'\left(\frac{p(x)}{q(x)}\right). T ∗ ( x ) = f ′ ( q ( x ) p ( x ) ) .
判别器又一次在估计密度比 (第 9 讲 §3.6 的 D ∗ D^* D ∗ 是 f GAN f_{\text{GAN}} f GAN 的特例:T ∗ = log p p + q = log D ∗ T^* = \log\frac{p}{p+q} = \log D^* T ∗ = log p + q p = log D ∗ )。
3.3 f-GAN 的目标
slide 10:选任意一个 f f f -散度,令 p = p data p = p_{\text{data}} p = p data 、q = p G q = p_G q = p G ,用 ϕ \phi ϕ 参数化 T T T 、用 θ \theta θ 参数化 G G G :
min θ max ϕ F ( θ , ϕ ) = E x ∼ p data [ T ϕ ( x ) ] − E x ∼ p G θ [ 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))]. min θ max ϕ F ( θ , ϕ ) = E x ∼ p data [ T ϕ ( x )] − E x ∼ p G θ [ f ∗ ( T ϕ ( x ))] .
生成器 G θ G_\theta G θ 试图最小化散度的估计,判别器 T ϕ T_\phi T ϕ 试图把下界收紧。 代入任何一个 f f f -散度,优化 f f f -GAN 目标即可。slide 11:现在 d ( ⋅ ) d(\cdot) d ( ⋅ ) 的选择包括 KL(自回归、流)、JS(原始 GAN)以及任何其他 f f f -散度 (近似地,通过 f f f -GAN 目标)。
两个实现细节 (Nowozin et al. 2016):
f ∗ f^* f ∗ 有定义域限制(比如反向 KL 要求 t < 0 t < 0 t < 0 )。网络输出任意实数 V ϕ ( x ) V_\phi(x) V ϕ ( x ) ,再经过一个输出激活 g f g_f g f 映射到定义域里:T ϕ = g f ( V ϕ ) T_\phi = g_f(V_\phi) T ϕ = g f ( V ϕ ) 。例如反向 KL 用 g f ( v ) = − e − v g_f(v) = -e^{-v} g f ( v ) = − e − v ,Hellinger 用 1 − e − v 1 - e^{-v} 1 − e − v ,JS 用 log 2 − log ( 1 + e − v ) \log 2 - \log(1 + e^{-v}) log 2 − log ( 1 + e − v ) 。
原始 GAN 是特例 :f GAN f_{\text{GAN}} f GAN 配 g f ( v ) = − log ( 1 + e − v ) = log σ ( v ) g_f(v) = -\log(1 + e^{-v}) = \log\sigma(v) g f ( v ) = − log ( 1 + e − v ) = log σ ( v ) ,于是 T = log D T = \log D T = log D ,f ∗ ( T ) = − log ( 1 − e T ) = − log ( 1 − D ) f^*(T) = -\log(1 - e^T) = -\log(1 - D) f ∗ ( T ) = − log ( 1 − e T ) = − log ( 1 − D ) ,
F = E p data [ log D ] + E p G [ log ( 1 − D ) ] = V ( G , D ) . F = \mathbb{E}_{p_{\text{data}}}[\log D] + \mathbb{E}_{p_G}[\log(1 - D)] = V(G, D). F = E p data [ log D ] + E p G [ log ( 1 − D )] = V ( G , D ) .
3.4 下界有多紧?
代码 01 第 3 部分固定 p p p = 双峰数据、q = N ( − 0.8 , 1.9 2 ) q = \mathcal{N}(-0.8, 1.9^2) q = N ( − 0.8 , 1. 9 2 ) (矩匹配的高斯),用 20 万对样本估计不同 T T T 给出的下界:
散度 精确 D f D_f D f T = T ∗ T = T^* T = T ∗ T T T = MLP(训练出来的)T T T = 线性T T T = 常数前向 KL 0.7242 0.7226 0.7148 −0.0003 0 反向 KL 2.0960 2.0948 1.8476 −0.0003 0 Pearson χ² 1.4056 1.4060 1.3653 −0.0005 0 平方 Hellinger 0.4716 0.4697 0.4601 −0.0001 0 Jensen–Shannon 0.4023 0.4010 0.3968 −0.0001 0 原始 GAN −0.9840 −0.9853 −0.9895 −1.3864 −1.3863
(蒙特卡洛误差约 ±0.003,所以 T ∗ T^* T ∗ 偶尔略高于精确值、线性 T T T 偶尔略低于 0。)
T = T ∗ T = T^* T = T ∗ 时下界等于精确值——slide 9 的等号。
一个 64 × 2 的小 MLP 接近 T ∗ T^* T ∗ ;反向 KL 差得最多:T ∗ = − q / p T^* = -q/p T ∗ = − q / p 在 p p p 很小的中间和尾部绝对值很大,网络难以逼近。
线性 T T T 的下界和常数一样 ≈ 0 :q q q 和数据均值相同,而线性的 T T T 只能利用均值的差别(对前向 KL 可以直接算:T = a x + b T = ax + b T = a x + b 时最优下界是 a ( μ p − μ q ) − a 2 σ q 2 2 ≤ 0 a(\mu_p - \mu_q) - \frac{a^2\sigma_q^2}{2} \leq 0 a ( μ p − μ q ) − 2 a 2 σ q 2 ≤ 0 )。这就是第 9 讲”均值检验看不见同均值的差别”的 f f f -GAN 版本。判别器的容量决定了 f f f -GAN “看见”的散度有多大。
常数 T T T 的下界正好是 f ( 1 ) f(1) f ( 1 ) :什么都区分不了的判别器认为两个分布一样。
3.5 f-GAN 真的在最小化它声称的散度吗?
代码 02 第 1 部分:生成器 = 单个高斯,从 ( 0 , 1 ) (0, 1) ( 0 , 1 ) 出发,判别器 64 × 2,6,000 步(生成器直接最小化 F F F ,即 minimax 形式)。把终点和精确散度的全局最小、“从同一个初值出发对精确散度做梯度下降”的局部最小比较:
f f f 精确全局最小 ( μ , σ ∣ D f ) (\mu, \sigma \mid D_f) ( μ , σ ∣ D f ) 从 ( 0 , 1 ) (0, 1) ( 0 , 1 ) 出发的精确局部最小 f f f -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 发散
换一个 f f f ,同一个训练程序就学出了性质完全不同的近似 :前向 KL、Pearson 盖住两个模式,反向 KL 抓住大模式——都是各自的全局最小,和 Nowozin et al. 论文表 3 的实验一致。
Hellinger、JS、原始 GAN 停在宽高斯附近,正好是精确梯度下降从同一个初值出发得到的局部最小。这不是判别器的错:判别器最优时,minimax 形式的生成器梯度就是 精确散度的梯度,自然也停在同一个局部最小。
全变差发散:T ∗ = 1 2 s i g n ( p / q − 1 ) T^* = \frac12\mathrm{sign}(p/q - 1) T ∗ = 2 1 sign ( p / q − 1 ) 是阶跃函数,1 2 tanh \frac12\tanh 2 1 tanh 的判别器在大部分地方饱和,梯度几乎没有信息。
3.6 非饱和损失到底在优化什么?
第 9 讲的 GAN 从 ( 0 , 1 ) (0, 1) ( 0 , 1 ) 出发走到了大模式(JSD 的全局最小),上表的 minimax 版本却停在宽高斯。区别在于第 9 讲用的是非饱和 损失 − E z [ log D ( G ( z ) ) ] -\mathbb{E}_z[\log D(G(z))] − E z [ log D ( G ( z ))] 。
命题 (Arjovsky & Bottou 2017):设 D ∗ = p data p data + p θ 0 D^* = \frac{p_{\text{data}}}{p_{\text{data}} + p_{\theta_0}} D ∗ = p data + p θ 0 p data 是当前生成器 θ 0 \theta_0 θ 0 的最优判别器(固定不动),则
∇ θ E z [ − log D ∗ ( G θ ( z ) ) ] ∣ θ 0 = ∇ θ [ D K L ( p θ ∥ p data ) − 2 D J S D ( p data , 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}. ∇ θ E z [ − log D ∗ ( G θ ( z )) ] θ 0 = ∇ θ [ D KL ( p θ ∥ p data ) − 2 D JSD ( p data , p θ ) ] θ 0 .
推导 :把 − log D ∗ -\log D^* − log D ∗ 拆成两项,− log D ∗ = − log D ∗ 1 − D ∗ − log ( 1 − D ∗ ) -\log D^* = -\log\frac{D^*}{1 - D^*} - \log(1 - D^*) − log D ∗ = − log 1 − D ∗ D ∗ − log ( 1 − D ∗ ) 。
第二项:V ( G , D ) = E p data [ log D ] + E p θ [ log ( 1 − D ) ] V(G, D) = \mathbb{E}_{p_{\text{data}}}[\log D] + \mathbb{E}_{p_\theta}[\log(1 - D)] V ( G , D ) = E p data [ log D ] + E p θ [ log ( 1 − D )] 在 D = D ∗ D = D^* D = D ∗ 处对 D D D 的偏导为零(D ∗ D^* D ∗ 是最大值点),所以由包络定理,∇ θ E p θ [ log ( 1 − D ∗ ) ] = ∇ θ V ( G θ , D θ ∗ ) = ∇ θ 2 D J S D \nabla_\theta\mathbb{E}_{p_\theta}[\log(1 - D^*)] = \nabla_\theta V(G_\theta, D^*_\theta) = \nabla_\theta\,2D_{\mathrm{JSD}} ∇ θ E p θ [ log ( 1 − D ∗ )] = ∇ θ V ( G θ , D θ ∗ ) = ∇ θ 2 D JSD 。
第一项:D ∗ 1 − D ∗ = p data p θ 0 \frac{D^*}{1 - D^*} = \frac{p_{\text{data}}}{p_{\theta_0}} 1 − D ∗ D ∗ = p θ 0 p data ,所以 E p θ [ − log D ∗ 1 − D ∗ ] = E p θ [ log p θ 0 − log p data ] \mathbb{E}_{p_\theta}[-\log\frac{D^*}{1-D^*}] = \mathbb{E}_{p_\theta}[\log p_{\theta_0} - \log p_{\text{data}}] E p θ [ − log 1 − D ∗ D ∗ ] = E p θ [ log p θ 0 − log p data ] 。而 D K L ( p θ ∥ p data ) = E p θ [ log p θ − log p data ] D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) = \mathbb{E}_{p_\theta}[\log p_\theta - \log p_{\text{data}}] D KL ( p θ ∥ p data ) = E p θ [ log p θ − log p data ] ,在 θ 0 \theta_0 θ 0 处对 θ \theta θ 求导时,”log p θ \log p_\theta log p θ 里的 θ \theta θ “贡献 E p θ 0 [ ∇ θ log p θ ] = 0 \mathbb{E}_{p_{\theta_0}}[\nabla_\theta\log p_\theta] = 0 E p θ 0 [ ∇ θ log p θ ] = 0 (得分函数的期望为零),所以两者梯度相同。
合起来:∇ E [ − log D ∗ ] = ∇ D K L ( p θ ∥ p data ) − ∇ 2 D J S D \nabla\mathbb{E}[-\log D^*] = \nabla D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) - \nabla\,2D_{\mathrm{JSD}} ∇ E [ − log D ∗ ] = ∇ D KL ( p θ ∥ p data ) − ∇ 2 D JSD 。同样的推导给出 minimax 损失 E [ log ( 1 − D ∗ ) ] \mathbb{E}[\log(1 - D^*)] E [ log ( 1 − D ∗ )] 的梯度是 ∇ 2 D J S D \nabla\,2D_{\mathrm{JSD}} ∇ 2 D JSD 。
代码 02 第 2 部分在一维网格上数值验证了这两个等式(4 个不同的 ( μ , σ ) (\mu, \sigma) ( μ , σ ) ,误差都在 10 − 13 10^{-13} 1 0 − 13 以内)。例如在 ( 0 , 1 ) (0, 1) ( 0 , 1 ) 处:
对 ( μ , log σ ) (\mu, \log\sigma) ( μ , log σ ) 的梯度 ∇ E [ − log D ∗ ] \nabla\,\mathbb{E}[-\log D^*] ∇ E [ − log D ∗ ] (非饱和)(+0.2020, −2.4902) ∇ [ D K L ( q ∥ p ) − 2 D J S D ] \nabla[D_{\mathrm{KL}}(q \Vert p) - 2D_{\mathrm{JSD}}] ∇ [ D KL ( q ∥ p ) − 2 D JSD ] (+0.2020, −2.4902) ∇ E [ log ( 1 − D ∗ ) ] \nabla\,\mathbb{E}[\log(1 - D^*)] ∇ E [ log ( 1 − D ∗ )] (minimax)(+0.1337, −0.8436) ∇ 2 D J S D \nabla\,2D_{\mathrm{JSD}} ∇ 2 D JSD (+0.1337, −0.8436)
含义 :非饱和 GAN 多优化了一个反向 KL ,强烈地偏向”抓住一个模式”——这解释了第 9 讲的一维 GAN 为什么能逃出宽高斯的局部最小,也部分解释了 GAN 为什么常常模式坍塌。另外,− 2 D J S D -2D_{\mathrm{JSD}} − 2 D JSD 这一项会奖励 JSD 变大,所以这个目标本身不是一个散度(可以为负)——非饱和 GAN 在理论上并不”干净”。
3.7 二维:前向 KL 的 f-GAN ≠ 最大似然
代码 02 第 3 部分:生成器是 8 层 RealNVP(于是能精确计算两个方向的 KL),数据是 8 个高斯的圆环(σ = 0.25),判别器 128 × 2,4,000 步:
训练方式 步数 D K L ( p data ∥ p G ) D_{\mathrm{KL}}(p_{\text{data}} \Vert p_G) D KL ( p data ∥ p G ) D K L ( p G ∥ p data ) D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) D KL ( p G ∥ p data ) 精确 JSD 模式 / 高质量样本 最大似然 3,000 0.091 0.132 0.025 8/8,98% f f f -GAN,f f f = 前向 KL1,000 3.8 20,200 0.619 1/8,4% 4,000 2.4 1,796 0.486 8/8,19% f f f -GAN,f f f = 反向 KL1,000 12.1 1.26 0.262 8/8,96% 4,000 474 1.69 0.374 8/8,100% f f f -GAN,f f f = 原始 GAN1,000 23.5 1.27 0.267 8/8,98% 4,000 1,227 2.57 0.479 8/8,98%
f f f = 前向 KL :每个时刻它的前向 KL 都是三者中最低的——没有哪块真实数据被”漏掉”;代价是反向 KL 有几千到两万多 nat、高质量样本只有 4–19%:密度是盖住整个圆环的一大团(代码输出的第一张密度图),大部分样本落在模式之间。模式覆盖。
f f f = 反向 KL :反向 KL 最低、样本几乎全是高质量的,密度是 8 个模式上的尖点;前向 KL 却越训练越大。模式寻找。
原始 GAN 站在反向 KL 那一边。
没有一个接近最大似然 :生成器只能通过一个有限容量、没训练到最优的判别器”看见”散度。f f f = KL 的 f f f -GAN 和最大似然朝同一个方向犯错,但犯得多得多。
4. Wasserstein GAN · Beyond f-divergences
4.1 支撑集不相交时,f-散度失效
slide 12:f f f -散度 D f ( p , q ) = E x ∼ q [ f ( p ( x ) / q ( x ) ) ] D_f(p, q) = \mathbb{E}_{x \sim q}[f(p(x)/q(x))] D f ( p , q ) = E x ∼ q [ f ( p ( x ) / q ( x ))] 要求 q q q 的支撑覆盖 p p p 的支撑,否则会出现不连续。例子:
p ( x ) = { 1 , x = 0 0 , 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}. p ( x ) = { 1 , 0 , x = 0 x = 0 , q θ ( x ) = { 1 , 0 , x = θ x = θ .
D K L ( p , q θ ) = { 0 , θ = 0 ∞ , θ ≠ 0 , D J S ( p , q θ ) = { 0 , θ = 0 log 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}. D KL ( p , q θ ) = { 0 , ∞ , θ = 0 θ = 0 , D JS ( p , q θ ) = { 0 , log 2 , θ = 0 θ = 0 .
不管 θ \theta θ 离 0 是 0.01 还是 100,散度都一样——没有任何信号告诉生成器”往哪边走”。我们需要一个更平滑 的距离 D ( p , q ) D(p, q) D ( p , q ) ,在 p p p 、q q q 支撑集不相交时也有定义。
这不是一个人为的例子。图像位于高维空间里的低维流形上(第 13 讲的”流形假设”);生成器 G : R d z → R d x G: \mathbb{R}^{d_z} \to \mathbb{R}^{d_x} G : R d z → R d x 在 d z < d x d_z < d_x d z < d x 时,它的像也是一个低维流形。两个低维流形在高维空间里几乎肯定 不相交(Arjovsky & Bottou 2017)——训练初期,真实分布和生成分布的支撑集很可能就是不相交的。
4.2 Wasserstein(推土机)距离
slide 13:
D w ( 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], D w ( p , q ) = inf γ ∈ Π ( p , q ) E ( x , y ) ∼ γ [ ∥ x − y ∥ 1 ] ,
Π ( p , q ) \Pi(p, q) Π ( p , q ) 是所有满足”x x x 的边缘是 p ( x ) = ∫ γ ( x , y ) d y p(x) = \int\gamma(x, y)\,dy p ( x ) = ∫ γ ( x , y ) d y 、y y y 的边缘是 q ( y ) q(y) q ( y ) “的联合分布。γ ( y ∣ x ) \gamma(y \mid x) γ ( y ∣ x ) 是一个概率性的搬土方案 :把 p p p 这堆土变成 q q q 的形状,位于 x x x 的土按 γ ( y ∣ x ) \gamma(y \mid x) γ ( y ∣ x ) 分配到各个 y y y ;E γ ∥ x − y ∥ \mathbb{E}_\gamma\Vert x - y\Vert E γ ∥ x − y ∥ 是总的”质量 × 距离”,取所有方案中最便宜的那个。(slide 写的是 ℓ 1 \ell_1 ℓ 1 范数;代码和大多数实现用 ℓ 2 \ell_2 ℓ 2 ,结论不变。)
上面的例子里,唯一的方案是把位于 0 的单位质量搬到 θ \theta θ :D w ( p , q θ ) = ∣ θ ∣ D_w(p, q_\theta) = |\theta| D w ( p , q θ ) = ∣ θ ∣ ——连续,几乎处处可导,梯度永远指向正确的方向。
一维里有闭式:最优方案是”按大小顺序一一配对”(不交叉),W 1 ( p , q ) = ∫ ∣ F p ( t ) − F q ( t ) ∣ d t W_1(p, q) = \int|F_p(t) - F_q(t)|\,dt W 1 ( p , q ) = ∫ ∣ F p ( t ) − F q ( t ) ∣ d t ,对两组等量的样本就是排序后对应点之差的平均(divergences.w1_1d)。
4.3 Kantorovich–Rubinstein 对偶与 WGAN
slide 14:
D w ( p , q ) = sup ∥ f ∥ L ≤ 1 E x ∼ p [ f ( x ) ] − E x ∼ 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)]. D w ( p , q ) = sup ∥ f ∥ L ≤ 1 E x ∼ p [ f ( x )] − E x ∼ q [ f ( x )] .
∥ f ∥ L ≤ 1 \Vert f\Vert_L \leq 1 ∥ f ∥ L ≤ 1 表示 f f f 的 Lipschitz 常数不超过 1:对所有 x , y x, y x , y ,∣ f ( x ) − f ( y ) ∣ ≤ ∥ x − y ∥ |f(x) - f(y)| \leq \Vert x - y\Vert ∣ f ( x ) − f ( y ) ∣ ≤ ∥ x − y ∥ ——直观地说,f f f 不能变化得太快。
直觉 :f f f 像是给每个位置标一个”价格”;把单位质量从 x x x 搬到 y y y 最多能”赚” ∣ f ( x ) − f ( y ) ∣ ≤ ∥ x − y ∥ |f(x) - f(y)| \leq \Vert x - y\Vert ∣ f ( x ) − f ( y ) ∣ ≤ ∥ x − y ∥ ,不会超过运费。于是”p p p 处的总价值减去 q q q 处的总价值”不可能超过最便宜的运费;对偶定理说,最好的价格体系恰好让两者相等。
Wasserstein GAN (判别器 D ϕ ( x ) D_\phi(x) D ϕ ( x ) ,常被称为 critic ,输出任意实数、不是概率;生成器 G θ ( z ) G_\theta(z) G θ ( z ) ):
min θ max ϕ E x ∼ p data [ D ϕ ( x ) ] − E z ∼ 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))]. min θ max ϕ E x ∼ p data [ D ϕ ( x )] − E z ∼ p ( z ) [ D ϕ ( G θ ( z ))] .
D ϕ D_\phi D ϕ 的 Lipschitz 性通过权重裁剪 (Arjovsky et al. 2017:每步更新后把所有权重裁到 [ − c , c ] [-c, c] [ − c , c ] )或在 ∇ x D ϕ ( x ) \nabla_x D_\phi(x) ∇ x D ϕ ( x ) 上加梯度惩罚 (Gulrajani et al. 2017:λ E x ^ [ ( ∥ ∇ x D ( x ^ ) ∥ − 1 ) 2 ] \lambda\,\mathbb{E}_{\hat x}[(\Vert\nabla_x D(\hat x)\Vert - 1)^2] λ E x ^ [( ∥ ∇ x D ( x ^ ) ∥ − 1 ) 2 ] ,x ^ \hat x x ^ 在真假样本的连线上随机取)来实现。
4.4 实验:两条平行线
代码 03 第 1 部分用 Arjovsky et al. 的例子:p p p 是 x = 0 x = 0 x = 0 处的竖直线段(y ∼ U [ 0 , 1 ] y \sim U[0, 1] y ∼ U [ 0 , 1 ] ),q θ q_\theta q θ 是 x = θ x = \theta x = θ 处的线段。训练一个 GAN 判别器和一个 WGAN-GP critic(各 1,000 步),再看它们给”生成器参数” θ \theta θ 的梯度:
θ \theta θ 判别器估计的 JS ∂ / ∂ θ \partial/\partial\theta ∂ / ∂ θ minimax∂ / ∂ θ \partial/\partial\theta ∂ / ∂ θ 非饱和critic 估计的 W(精确 = θ = \theta = θ ) ∂ / ∂ θ \partial/\partial\theta ∂ / ∂ θ WGAN0.05 0.692 +2.1e−01 +288 0.050 +1.01 0.25 0.693 +8.2e−03 +66.0 0.258 +1.03 1 0.693 +7.4e−04 +15.3 1.048 +1.05 2 0.693 +2.2e−04 +7.6 2.191 +1.10 4 0.693 +5.4e−05 +3.9 4.820 +1.21
JS:判别器只说”完全分得开”(估计都是 log 2 \log 2 log 2 ),不说”差多远”;minimax 损失的梯度随 θ \theta θ 增大迅速消失。
非饱和损失的梯度不为零,但离得越近反而越大 (θ = 0.05 \theta = 0.05 θ = 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] [ − 6 , 6 ] 上的最大斜率,对偶要求 ≤ 1):
分布对 精确 W1 裁剪 c = 0.01 c = 0.01 c = 0.01 裁剪 c = 0.1 c = 0.1 c = 0.1 双边梯度惩罚 单边梯度惩罚 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) vs N ( 2 , 1 ) \mathcal{N}(2, 1) N ( 2 , 1 ) 1.984 0.006(0.0041) 2.918(2.7) 2.174(1.1) 2.195(1.1) 双峰 vs N ( − 0.8 , 1.9 2 ) \mathcal{N}(-0.8, 1.9^2) N ( − 0.8 , 1. 9 2 ) 0.753 0.000(0.00095) 0.228(0.61) 0.036 (1.2)0.784(1.1) 双峰 vs N ( − 2 , 0.5 2 ) \mathcal{N}(-2, 0.5^2) N ( − 2 , 0. 5 2 ) 1.192 0.004(0.0041) 1.664(2.8) 1.329(1.2) 1.310(1.2)
权重裁剪 只保证斜率有界,界是多少由 c c c 和网络结构间接决定:c = 0.01 c = 0.01 c = 0.01 时斜率只有千分之几,估计值只是 W1 乘上一个未知的小常数;c = 0.1 c = 0.1 c = 0.1 时斜率超过 2,估计值偏大。Gulrajani et al. 还发现裁剪让 critic 偏向过于简单的函数——于是提出了梯度惩罚。
单边梯度惩罚 (只惩罚 ∥ ∇ D ∥ > 1 \Vert\nabla D\Vert > 1 ∥∇ D ∥ > 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) ( 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 , 1 ) −0.83, 1.82 −0.86, 1.80 −0.85, 1.80 单边 ( 1.5 , 0.5 ) (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) ( − 0.874 , 1.777 ) ,W1 = 0.742。)双边惩罚下 μ \mu μ 每 500 步左移 1,critic 的估计变成负数——它卡在”左高右低”的斜率上翻不过来,生成器一直被推向左边。可以算出这道墙有多高:线性 critic f = a x f = ax f = a x 的目标是 a Δ − λ ( ∣ a ∣ − 1 ) 2 a\Delta - \lambda(|a| - 1)^2 a Δ − λ ( ∣ a ∣ − 1 ) 2 (Δ = μ data − μ G \Delta = \mu_{\text{data}} - \mu_G Δ = μ data − μ G )。斜率符号错误时(a < 0 a < 0 a < 0 ),它在 a = − 1 + Δ / ( 2 λ ) a = -1 + \Delta/(2\lambda) a = − 1 + Δ/ ( 2 λ ) 处有一个局部最大值;只要 Δ < 2 λ = 20 \Delta < 2\lambda = 20 Δ < 2 λ = 20 ,critic 就翻不过去(练习 8)。实验里 μ = − 4 \mu = -4 μ = − 4 时 Δ = 3.2 \Delta = 3.2 Δ = 3.2 ,预测斜率 −0.84,和 critic 实际的斜率一致。二维以上没有这个问题 :梯度向量可以在单位圆上连续转动,不必经过零。单边惩罚下生成器从两个初值都走到 W1 的最小值——“盖住两个模式”的宽高斯,和第 9 讲 GAN 的”抓住大模式”相反。
4.6 更稳定、更少模式坍塌?
slide 15:WGAN “训练更稳定,模式坍塌更少”。代码 03 第 3 部分(b)回到第 9 讲会坍塌的设置(8 个 σ = 0.05 的尖高斯,d z = 64 d_z = 64 d z = 64 ),在同样的计算量 下比较(每种 3 个种子,3,000 次生成器更新,Adam lr = 1e-3):
方法 最后盖住的模式数 高质量样本 切片 W1(越小越好) GAN(判别器每步 1 次) 8 8 8 86% 0.242 GAN(判别器每步 5 次) 1 2 4 80% 1.138 WGAN-GP(critic 每步 5 次) 8 8 8 72% 0.080
种子 0 的训练过程:
步数 GAN(5 次)d_loss GAN 切片 W1 WGAN critic 估计的 W WGAN 切片 W1 WGAN 高质量样本 500 0.387 1.552 1.635 1.221 0% 1,500 0.426 1.631 0.420 1.035 2% 2,000 0.346 1.584 0.297 0.162 11% 3,000 0.396 1.549 0.105 0.096 61%
判别器每步训练 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 的生成器通常是一个有向的隐变量模型,隐变量 z z z 、观测 x x x 。怎样推断一个 x x x 的隐表示?
和归一化流不同,映射 G : z ↦ x G: z \mapsto x G : z ↦ x 不必可逆;
和 VAE 不同,没有一个推断网络 q ( ⋅ ) q(\cdot) q ( ⋅ ) 学习变分后验。
办法 1 :对任意 x x x ,用判别器倒数第二层的激活作为特征表示。直觉:和有监督的深度网络类似,判别器在区分真假 x x x 的过程中学到了有用的表示(DCGAN 就用判别器特征做过图像分类)。
5.2 BiGAN
slide 17:如果想直接推断生成器的隐变量 z z z ,需要不同的学习算法。普通 GAN 比较的是**x x x 的样本**(来自生成器和来自数据)。办法 2 :比较 ( x , z ) (x, z) ( x , z ) 的联合样本 ——来自模型的联合分布和来自数据的”联合分布”。对模型生成的 x x x ,我们有它的 z z z (从先验里抽的);对数据里的 x x x ,z z z 没有观测到——需要一个编码器!
slides 18–19:BiGAN (Donahue, Krähenbühl & Darrell 2017;同期的 ALI,Dumoulin et al. 2017)在生成器之外再加一个编码器网络 E E E :
编码器只看 x ∼ p data x \sim p_{\text{data}} x ∼ p data ,学一个映射 E : x ↦ z E: x \mapsto z E : x ↦ z ;
生成器和以前一样,只看 z ∼ p ( z ) z \sim p(z) z ∼ p ( z ) ,学 G : z ↦ x G: z \mapsto x G : z ↦ x ;
判别器 D D D 观察生成侧的 ( z , G ( z ) ) (z, G(z)) ( z , G ( z )) 和编码侧的 ( E ( x ) , x ) (E(x), x) ( E ( x ) , x ) ,目标是最大化这两个联合分布之间的两样本检验统计量;
训练结束后,用 G G G 生成新样本,用 E E E 推断隐表示。
为什么这样能学到逆映射? 如果两个联合分布完全相同,那么对编码侧几乎每个 ( E ( x ) , x ) (E(x), x) ( E ( x ) , x ) ,它也必须”像是”由 G G G 从 z = E ( x ) z = E(x) z = E ( x ) 生成的,即 x = G ( E ( x ) ) x = G(E(x)) x = G ( E ( x )) ——E E E 和 G G G 在几乎处处意义下互为逆(Donahue et al. 的定理)。值得注意的是:E E E 从没见过 G G G 的输出,G G G 也从没见过数据的编码,它们完全靠判别器”撮合”。
5.3 实验
代码 04 第 1 部分(8 个高斯的圆环,z ∼ N ( 0 , I 2 ) z \sim \mathcal{N}(0, I_2) z ∼ N ( 0 , I 2 ) ,8,000 步):
重构误差(4,000 个点的平均) BiGAN 随机配对的参照 ∥ G ( E ( x ) ) − x ∥ \Vert G(E(x)) - x\Vert ∥ G ( E ( x )) − x ∥ 0.427 2.583 ∥ E ( G ( z ) ) − z ∥ \Vert E(G(z)) - z\Vert ∥ E ( G ( z )) − z ∥ 0.620 1.784
G ( E ( x ) ) G(E(x)) G ( E ( x )) 落在和 x x x 同一个模式里的比例是 90.2%(随机 12.5%)。E E E 和 G G G 近似地互为逆,但只是近似:同一个模式内部的位置没有精确还原(误差 0.43,每个模式的 σ = 0.25),而且 E ( x ) E(x) E ( x ) 的分布明显比 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) 窄——两个联合分布没有完全对上。和 VAE(有显式的重构项)、流(精确可逆)相比,BiGAN 的推断是最”松”的。
6. 跨域翻译 · Translating across domains
6.1 配对与无配对
slide 20:图像到图像的翻译 :给两个域 X X X 、Y Y Y 的图像(比如照片 ↔ 莫奈的画、马 ↔ 斑马、夏天 ↔ 冬天)。配对 的例子(同一个场景的照片和画)往往很难获得;能不能无监督地 学 X ↔ Y X \leftrightarrow Y X ↔ Y ——只有两堆互不对应的图像?
6.2 CycleGAN
slide 21:为了匹配两个分布,学两个参数化的条件生成模型 G : X → Y G: X \to Y G : X → Y 和 F : Y → X F: Y \to X F : Y → X 。
G G G 把 X X X 的元素映射到 Y Y Y ;判别器 D Y D_Y D Y 比较观测到的 Y Y Y 和生成的 Y ^ = G ( X ) \hat Y = G(X) Y ^ = G ( X ) 。
F F F 把 Y Y Y 的元素映射到 X X X ;判别器 D X D_X D X 比较 X X X 和 X ^ = F ( Y ) \hat X = F(Y) X ^ = F ( Y ) 。
slide 22:循环一致性 ——如果能从 X X X 经 G G G 到 Y ^ \hat Y Y ^ ,就应该能从 Y ^ \hat Y Y ^ 经 F F F 回到 X X X :F ( G ( X ) ) ≈ X F(G(X)) \approx X F ( G ( X )) ≈ X ;反过来 G ( F ( Y ) ) ≈ Y G(F(Y)) \approx Y G ( F ( Y )) ≈ Y 。总损失:
min F , G , D X , D Y L GAN ( G , D Y , X , Y ) + L GAN ( F , D X , X , Y ) + λ ( E X ∥ F ( G ( X ) ) − X ∥ 1 + E Y ∥ 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{循环一致性}}. min F , G , D X , D Y L GAN ( G , D Y , X , Y ) + L GAN ( F , D X , X , Y ) + λ 循环一致性 ( E X ∥ F ( G ( X )) − X ∥ 1 + E Y ∥ G ( F ( Y )) − Y ∥ 1 ) .
(判别器在 L GAN \mathcal{L}_{\text{GAN}} L GAN 里做最大化。)slide 23 展示了 CycleGAN 的效果:照片 ↔ 莫奈 / 梵高、马 ↔ 斑马、夏 ↔ 冬。
为什么需要循环一致性? 只有两个对抗损失时,G G G 只需要让 G ( X ) G(X) G ( X ) 的整体分布 像 Y Y Y ——它可以把所有输入映射到同一张”很像 Y Y Y “的图(模式坍塌),或者把 x x x 送到任何一个和 x x x 毫无关系的 y y y 。循环一致性要求 G G G 保留足够的信息让 F F F 能还原 x x x ,于是 G G G 必须(近似地)是一个双射。
6.3 实验:循环一致性保证了什么?
代码 04 第 2 部分:X X X = 双月牙;Y Y Y = 把双月牙旋转 90°、缩小到 0.7、平移(真实映射 T T T 已知 ,但训练时不给任何配对)。“月牙对应正确” = x x x 所在的弧被映射到 Y Y Y 里”T T T 下对应”的那条弧上的比例(50% = 随机):
方法 种子 切片 W1( G ( X ) , Y ) (G(X), Y) ( G ( X ) , Y ) 循环误差 ∥ F ( G ( x ) ) − x ∥ \Vert F(G(x)) - x\Vert ∥ F ( G ( x )) − x ∥ ∥ G ( x ) − T ( x ) ∥ \Vert G(x) - T(x)\Vert ∥ G ( x ) − T ( x ) ∥ 月牙对应正确 只有两个 GAN(λ = 0 \lambda = 0 λ = 0 ) 0 0.060 2.452 0.809 82.0% 1 0.282 1.250 0.881 84.2% CycleGAN(λ = 10 \lambda = 10 λ = 10 ) 0 0.148 0.022 0.642 87.5% 1 0.081 0.018 0.884 65.6% AlignFlow(最大似然) — 0.016 1.8e−15 1.295 38.5%
(两批独立的真实 Y Y Y 样本之间的切片 W1 = 0.018;Y Y Y 里两条弧相距约 1 个单位。)
只有两个 GAN :分布能对上,但循环误差 1.3–2.5,和数据本身的尺度相当——G G G 和 F F F 各学各的,没有理由互为逆。有意思的是月牙对应也有 82–84%:平滑的小网络倾向于保持”谁和谁挨着”,这是网络结构的归纳偏置 ,不是目标函数的要求。
加上循环一致性 :循环误差降到 0.02,G G G 近似是一个双射。但它是不是真实 的那个 T T T ?两个种子的月牙对应是 88% 和 66%,∥ G ( x ) − T ( x ) ∥ \Vert G(x) - T(x)\Vert ∥ G ( x ) − T ( x ) ∥ 仍有 0.6–0.9。循环一致性只保证”可逆”,不保证”语义正确” :把两条弧部分对调、沿弧方向翻转,同样循环一致、同样分布匹配。无配对的翻译本质上是不唯一的(练习 9);CycleGAN 在图像上”看起来对”,靠的是卷积网络倾向于保持空间结构这类归纳偏置。
6.4 AlignFlow
slide 24(Grover, Chute, Shu, Cao & Ermon 2020):如果 G G G 是一个流模型呢? 不需要单独参数化 F F F :F = G − 1 F = G^{-1} F = G − 1 。可以用最大似然和 / 或对抗学习训练。精确地循环一致 :F ( G ( X ) ) = X F(G(X)) = X F ( G ( X )) = X ,G ( F ( Y ) ) = Y G(F(Y)) = Y G ( F ( Y )) = Y 。
具体做法:两个流 f X f_X f X 、f Y f_Y f Y 共享一个隐空间 Z Z Z (比如 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) ),G = f Y ∘ f X − 1 G = f_Y \circ f_X^{-1} G = f Y ∘ f X − 1 ,F = f X ∘ f Y − 1 F = f_X \circ f_Y^{-1} F = f X ∘ f Y − 1 。代码 04 第 3 部分只用最大似然分别训练两个 RealNVP:循环误差 1.8 × 10 − 15 1.8 \times 10^{-15} 1.8 × 1 0 − 15 (舍入误差),分布匹配是三者中最好的(0.016,和两批真实样本之间的 0.018 相当)——可月牙对应正确只有 38.5% ,大多数点被送到了”另一条”弧上。两个流各自把数据映射到高斯,隐空间里”X X X 的哪部分对应 Y Y Y 的哪部分”是任意的(例如把隐空间旋转一下,得到的映射同样精确可逆、同样分布匹配,练习 10)。精确的可逆性和精确的分布匹配,都不能代替”哪个对应哪个”的信息 ——AlignFlow 论文里的对抗项和共享结构正是为了引入这种偏置。
6.5 StarGAN
slides 25–27(Choi et al. 2018):如果有多个域 呢(比如人脸的发色、性别、年龄、表情)?为每一对域训练一个 CycleGAN 需要 K ( K − 1 ) K(K-1) K ( K − 1 ) 个生成器。StarGAN 只用一个 生成器 G ( x , c ) G(x, c) G ( x , c ) ,把目标域标签 c c c 作为额外的输入;判别器除了判断真假,还要分类图像属于哪个域(辅助分类器);循环一致性变成 G ( G ( x , c ) , c ′ ) ≈ x G(G(x, c), c') \approx x G ( G ( x , c ) , c ′ ) ≈ x (c ′ c' c ′ 是原来的域)。slides 26–27 展示了在 CelebA(发色、性别、年龄)和 RaFD(表情)上的多域翻译。
7. GAN 小结 · Summary of GANs
slide 28:
关键观察 :样本和似然在实践中并不相关(第 9 讲 §2)。
两样本检验的目标让我们只通过样本 学习生成模型(likelihood-free)。
两样本检验目标的范围很广,覆盖 f f f -散度和 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)把它推广到一般的 f f f -散度,发现不同的 f f f 在”对齐程度”和”生成多样性”之间做出不同的取舍——本讲 §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
f f f -散度 D f ( p , q ) = E q [ f ( p / q ) ] D_f(p, q) = \mathbb{E}_q[f(p/q)] D f ( p , q ) = E q [ f ( p / q )] (f f f 凸、下半连续、f ( 1 ) = 0 f(1) = 0 f ( 1 ) = 0 )是一个家族:前向 KL、Pearson χ² 偏向盖住所有模式,反向 KL、Hellinger、JS 偏向抓住部分模式。直接用它训练需要未知的密度比。
凸共轭 f ∗ ( t ) = sup u ( u t − f ( u ) ) f^*(t) = \sup_u(ut - f(u)) f ∗ ( t ) = sup u ( u t − f ( u )) ,f ∗ ∗ = f f^{**} = f f ∗∗ = f ,给出变分下界 D f ≥ sup T E p [ T ] − E q [ f ∗ ( T ) ] D_f \geq \sup_T\mathbb{E}_p[T] - \mathbb{E}_q[f^*(T)] D f ≥ sup T E p [ T ] − E q [ f ∗ ( T )] ,最优 T ∗ = f ′ ( p / q ) T^* = f'(p/q) T ∗ = f ′ ( p / q ) ——只需要样本。f f f -GAN :判别器收紧下界,生成器最小化它;原始 GAN 是 f GAN f_{\text{GAN}} f GAN 的特例。判别器的容量决定了下界有多紧(线性 T T T 看不见同均值的差别)。
一维实验:前向 KL、Pearson、反向 KL 的 f f f -GAN 找到各自的全局最小;JS、Hellinger、原始 GAN(minimax 形式)停在宽高斯的局部最小;全变差发散。非饱和损失在最优判别器下的梯度是 ∇ [ D K L ( p G ∥ p data ) − 2 D J S D ] \nabla[D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}] ∇ [ D KL ( p G ∥ p data ) − 2 D JSD ] (数值验证到 10 − 13 10^{-13} 1 0 − 13 ),多出来的反向 KL 让它更偏向抓住一个模式。二维的流生成器:f f f = KL 模式覆盖、f f f = 反向 KL 模式寻找,都远不如最大似然。
支撑集不相交时 f f f -散度失效 (KL = ∞、JS = log 2,与距离无关)。Wasserstein-1 = inf γ E ∥ x − y ∥ = \inf_\gamma\mathbb{E}\Vert x - y\Vert = inf γ E ∥ x − y ∥ 平滑;KR 对偶 = sup ∥ f ∥ L ≤ 1 E p f − E q f = \sup_{\Vert f\Vert_L \leq 1}\mathbb{E}_p f - \mathbb{E}_q f = sup ∥ f ∥ L ≤ 1 E p f − E q f 。WGAN 的 critic 可以训练到接近最优而不让梯度消失;平行线实验中梯度恒约为 1。
Lipschitz 约束的实现有陷阱 :权重裁剪只给出”有界”而非”≤ 1”;双边梯度惩罚在一维里形成”墙”(critic 翻不过去,生成器一直漂移),单边惩罚没有这个问题。
BiGAN 匹配联合分布 ( x , E ( x ) ) (x, E(x)) ( x , E ( x )) 与 ( G ( z ) , z ) (G(z), z) ( G ( z ) , z ) ,得到近似的逆映射(重构误差 0.43 vs 随机 2.58)。
CycleGAN 用两个对抗损失 + 循环一致性做无配对翻译;循环一致性保证近似可逆(误差 0.02),不保证语义正确 (月牙对应 66–88%)。AlignFlow 精确可逆、分布匹配最好,但对应关系任意(38.5%)。
10. 常见误区 · Common pitfalls
“f f f -GAN 选 f f f = KL 就等于最大似然。” 方向相同,但生成器只能通过一个有限容量、没训练到最优的判别器看见这个散度(§3.7:前向 KL 2.4 vs 最大似然 0.091)。
“GAN(不管哪种损失)都在最小化 JSD。” minimax 损失在判别器最优时才对应 JSD;常用的非饱和损失对应 D K L ( p G ∥ p data ) − 2 D J S D D_{\mathrm{KL}}(p_G \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}} D KL ( p G ∥ p data ) − 2 D JSD (§3.6)。
“判别器越强越好。” 对原始 GAN 不是:判别器每步训练 5 次时生成器梯度消失、坍塌(§4.6)。对 WGAN 才是”critic 应该训练得接近最优”。
“WGAN 的 critic 损失就是 Wasserstein 距离。” 只有在 critic 是 1-Lipschitz 且接近最优时才是;权重裁剪下它是 W 乘以一个未知常数,双边梯度惩罚在一维里可能完全失效(§4.5)。
“WGAN 一定不坍塌、普通 GAN 一定坍塌。” 两者都依赖设置(§4.6:判别器每步 1 次的普通 GAN 也盖住了 8 个模式)。
“梯度惩罚只是一个正则项,形式无所谓。” 双边与单边在一维里结果天差地别;二维以上差别才变小(§4.5)。
“支撑集不相交是一个罕见的病态情况。” 生成器的输出在 d z < d x d_z < d_x d z < d x 时位于低维流形上,和数据流形几乎肯定不相交(§4.1)。
“循环一致 = 学到了正确的对应。” 循环一致只保证双射;无配对翻译有大量同样循环一致、同样分布匹配的解(§6.3、练习 9)。
“BiGAN 的编码器就是生成器的精确逆。” 只在联合分布完全匹配时才成立;实践中是近似的(§5.3)。
11. 练习 · Exercises
练习 1(凸共轭)
推导前向 KL(f ( u ) = u log u f(u) = u\log u f ( u ) = u log u )和反向 KL(f ( u ) = − log u f(u) = -\log u f ( u ) = − log u )的共轭 f ∗ f^* f ∗ ,并验证 §2.3 表中的定义域。
参考答案
前向 KL:d d u ( t u − u log u ) = t − log u − 1 = 0 ⇒ u = e t − 1 \frac{d}{du}(tu - u\log u) = t - \log u - 1 = 0 \Rightarrow u = e^{t-1} d u d ( t u − u log u ) = t − log u − 1 = 0 ⇒ u = e t − 1 ,代回 t e t − 1 − e t − 1 ( t − 1 ) = e t − 1 te^{t-1} - e^{t-1}(t-1) = e^{t-1} t e t − 1 − e t − 1 ( t − 1 ) = e t − 1 ,对所有实数 t t t 有定义。反向 KL:d d u ( t u + log u ) = t + 1 / u = 0 ⇒ u = − 1 / t \frac{d}{du}(tu + \log u) = t + 1/u = 0 \Rightarrow u = -1/t d u d ( t u + log u ) = t + 1/ u = 0 ⇒ u = − 1/ t ,需要 u > 0 u > 0 u > 0 ,所以 t < 0 t < 0 t < 0 ;代回 − 1 + log ( − 1 / t ) = − 1 − log ( − t ) -1 + \log(-1/t) = -1 - \log(-t) − 1 + log ( − 1/ t ) = − 1 − log ( − t ) 。t ≥ 0 t \geq 0 t ≥ 0 时 t u + log u → ∞ tu + \log u \to \infty t u + log u → ∞ (u → ∞ u \to \infty u → ∞ ),f ∗ ( t ) = + ∞ f^*(t) = +\infty f ∗ ( t ) = + ∞ ,不在定义域里。
练习 2(最优判别器)
对固定的 x x x ,最大化 T p ( x ) − f ∗ ( T ) q ( x ) 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 ∗ ( x ) = f ′ ( p ( x ) / q ( x )) 。(提示:若 t = f ′ ( u ) t = f'(u) t = f ′ ( u ) ,则 f ∗ ′ ( t ) = u f^{*\prime}(t) = u f ∗ ′ ( t ) = u 。)对前向 KL,T ∗ T^* T ∗ 是什么?代入下界,验证等号成立。
参考答案
一阶条件 p − f ∗ ′ ( T ) q = 0 ⇒ f ∗ ′ ( T ) = p / q p - f^{*\prime}(T)q = 0 \Rightarrow f^{*\prime}(T) = p/q p − f ∗ ′ ( T ) q = 0 ⇒ f ∗ ′ ( T ) = p / q 。共轭的性质:f ∗ ( t ) = u t − f ( u ) f^*(t) = ut - f(u) f ∗ ( t ) = u t − f ( u ) 在 t = f ′ ( u ) t = f'(u) t = f ′ ( u ) 处取到(u u u 是 sup 的取值点),由包络定理 f ∗ ′ ( t ) = u f^{*\prime}(t) = u f ∗ ′ ( t ) = u ;所以 f ∗ ′ f^{*\prime} f ∗ ′ 是 f ′ f' f ′ 的反函数,T ∗ = f ′ ( p / q ) T^* = f'(p/q) T ∗ = f ′ ( p / q ) 。前向 KL:T ∗ = 1 + log ( p / q ) T^* = 1 + \log(p/q) T ∗ = 1 + log ( p / q ) ,f ∗ ( T ∗ ) = e log ( p / q ) = p / q f^*(T^*) = e^{\log(p/q)} = p/q f ∗ ( T ∗ ) = e l o g ( p / q ) = p / q ;下界 = E p [ 1 + log p q ] − E q [ p q ] = 1 + D K L ( p ∥ q ) − 1 = D K L ( 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) = E p [ 1 + log q p ] − E q [ q p ] = 1 + D KL ( p ∥ q ) − 1 = D KL ( p ∥ q ) 。
练习 3(原始 GAN 是 f-GAN)
验证 f GAN ( u ) = u log u − ( u + 1 ) log ( u + 1 ) f_{\text{GAN}}(u) = u\log u - (u+1)\log(u+1) f GAN ( u ) = u log u − ( u + 1 ) log ( u + 1 ) 的共轭是 f ∗ ( t ) = − log ( 1 − e t ) f^*(t) = -\log(1 - e^t) f ∗ ( t ) = − log ( 1 − e t ) (t < 0 t < 0 t < 0 ),并说明用 T = log D T = \log D T = log D 时 f f f -GAN 目标恰好是 V ( G , D ) V(G, D) V ( G , D ) 。
参考答案
f ′ ( u ) = log u − log ( u + 1 ) = t ⇒ u u + 1 = e t ⇒ u = e t 1 − e t f'(u) = \log u - \log(u+1) = t \Rightarrow \frac{u}{u+1} = e^t \Rightarrow u = \frac{e^t}{1 - e^t} f ′ ( u ) = log u − log ( u + 1 ) = t ⇒ u + 1 u = e t ⇒ u = 1 − e t e t (需要 t < 0 t < 0 t < 0 )。f ∗ ( t ) = t u − u log u + ( u + 1 ) log ( u + 1 ) f^*(t) = tu - u\log u + (u+1)\log(u+1) f ∗ ( t ) = t u − u log u + ( u + 1 ) log ( u + 1 ) ;log u = t − log ( 1 − e t ) \log u = t - \log(1 - e^t) log u = t − log ( 1 − e t ) ,log ( u + 1 ) = − log ( 1 − e t ) \log(u+1) = -\log(1 - e^t) log ( u + 1 ) = − log ( 1 − e t ) ,代入得 u log ( 1 − e t ) − ( u + 1 ) log ( 1 − e t ) = − log ( 1 − e t ) u\log(1 - e^t) - (u+1)\log(1 - e^t) = -\log(1 - e^t) u log ( 1 − e t ) − ( u + 1 ) log ( 1 − e t ) = − log ( 1 − e t ) 。T = log D T = \log D T = log D (D ∈ ( 0 , 1 ) D \in (0,1) D ∈ ( 0 , 1 ) 保证 T < 0 T < 0 T < 0 ),f ∗ ( T ) = − log ( 1 − D ) f^*(T) = -\log(1 - D) f ∗ ( T ) = − log ( 1 − D ) ,所以 F = E p [ log D ] + E q [ log ( 1 − D ) ] = V F = \mathbb{E}_p[\log D] + \mathbb{E}_q[\log(1 - D)] = V F = E p [ log D ] + E q [ log ( 1 − D )] = V 。
练习 4(线性判别器看不见什么)
设 T ( x ) = a x + b T(x) = ax + b T ( x ) = a x + b ,对前向 KL 求 sup a , b E p [ T ] − E q [ e T − 1 ] \sup_{a, b}\mathbb{E}_p[T] - \mathbb{E}_q[e^{T-1}] sup a , b E p [ T ] − E q [ e T − 1 ] ,其中 q = N ( μ q , σ q 2 ) q = \mathcal{N}(\mu_q, \sigma_q^2) q = N ( μ q , σ q 2 ) 。证明当 μ p = μ q \mu_p = \mu_q μ p = μ q 时这个下界为 0。
参考答案
先对 b b b 最大化:E p [ a x ] + b − e b − 1 E q [ e a x ] \mathbb{E}_p[ax] + b - e^{b-1}\mathbb{E}_q[e^{ax}] E p [ a x ] + b − e b − 1 E q [ e a x ] ,最优 e b − 1 = 1 / E q [ e a x ] e^{b-1} = 1/\mathbb{E}_q[e^{ax}] e b − 1 = 1/ E q [ e a x ] ,值为 a μ p + 1 − log E q [ e a x ] − 1 = a μ p − a μ q − a 2 σ q 2 2 a\mu_p + 1 - \log\mathbb{E}_q[e^{ax}] - 1 = a\mu_p - a\mu_q - \frac{a^2\sigma_q^2}{2} a μ p + 1 − log E q [ e a x ] − 1 = a μ p − a μ q − 2 a 2 σ q 2 。μ p = μ q \mu_p = \mu_q μ p = μ q 时它 ≤ 0 \leq 0 ≤ 0 ,在 a = 0 a = 0 a = 0 取 0。线性判别器只”看得见”均值的差别(代码 01 第 3 部分的 −0.0003 就是这个 0 加上蒙特卡洛误差)。
练习 5(非饱和损失的目标)
按 §3.6 的思路写出完整的推导:∇ θ E p θ [ − log D ∗ ] = ∇ θ [ D K L ( p θ ∥ p data ) − 2 D J S D ] \nabla_\theta\mathbb{E}_{p_\theta}[-\log D^*] = \nabla_\theta[D_{\mathrm{KL}}(p_\theta \Vert p_{\text{data}}) - 2D_{\mathrm{JSD}}] ∇ θ E p θ [ − log D ∗ ] = ∇ θ [ D KL ( p θ ∥ p data ) − 2 D JSD ] 。在哪一步用到了”D ∗ D^* D ∗ 固定、不随 θ \theta θ 变”?
参考答案
见 §3.6。用到 D ∗ D^* D ∗ 固定的地方有两处:(1) 包络定理——∇ θ V ( G θ , D θ ∗ ) \nabla_\theta V(G_\theta, D^*_\theta) ∇ θ V ( G θ , D θ ∗ ) 里 D θ ∗ D^*_\theta D θ ∗ 随 θ \theta θ 的变化不贡献梯度,因为 ∂ V / ∂ D = 0 \partial V/\partial D = 0 ∂ V / ∂ D = 0 ;所以”固定 D ∗ D^* D ∗ 求导”等于”对 2 D J S D 2D_{\mathrm{JSD}} 2 D JSD 求导”。(2) log D ∗ 1 − D ∗ = log p data p θ 0 \log\frac{D^*}{1-D^*} = \log\frac{p_{\text{data}}}{p_{\theta_0}} log 1 − D ∗ D ∗ = log p θ 0 p data 里出现的是 θ 0 \theta_0 θ 0 (当前值),不是 θ \theta θ ;对 KL 求导时,log p θ \log p_\theta log p θ 中 θ \theta θ 的直接贡献 E p θ 0 [ ∇ log p θ ] = 0 \mathbb{E}_{p_{\theta_0}}[\nabla\log p_\theta] = 0 E p θ 0 [ ∇ log p θ ] = 0 ,所以两边一致。这正是交替训练中”生成器那一步”看到的梯度。
练习 6(Wasserstein 的例子)
(a) 计算 W 1 ( N ( μ 1 , σ 2 ) , N ( μ 2 , σ 2 ) ) W_1(\mathcal{N}(\mu_1, \sigma^2), \mathcal{N}(\mu_2, \sigma^2)) W 1 ( N ( μ 1 , σ 2 ) , N ( μ 2 , σ 2 )) 。(b) 对 §4.1 的两个点质量,KL、JS、W 1 W_1 W 1 关于 θ \theta θ 的导数各是什么?
参考答案
(a) 把 N ( μ 1 , σ 2 ) \mathcal{N}(\mu_1, \sigma^2) N ( μ 1 , σ 2 ) 整体平移 μ 2 − μ 1 \mu_2 - \mu_1 μ 2 − μ 1 是一个可行方案,代价 ∣ μ 1 − μ 2 ∣ |\mu_1 - \mu_2| ∣ μ 1 − μ 2 ∣ ;由 W 1 ≥ ∣ E p x − E q x ∣ W_1 \geq |\mathbb{E}_p x - \mathbb{E}_q x| W 1 ≥ ∣ E p x − E q x ∣ (取 f ( x ) = ± x f(x) = \pm x f ( x ) = ± x ,它是 1-Lipschitz),这是最优的:W 1 = ∣ μ 1 − μ 2 ∣ W_1 = |\mu_1 - \mu_2| W 1 = ∣ μ 1 − μ 2 ∣ 。(代码 03 第 2 部分:N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) vs N ( 2 , 1 ) \mathcal{N}(2, 1) N ( 2 , 1 ) ,2 万个样本的经验值 1.984。)(b) KL 在 θ ≠ 0 \theta \neq 0 θ = 0 处恒为 ∞,JS 恒为 log 2 \log 2 log 2 ,导数都是 0(或无定义);W 1 = ∣ θ ∣ W_1 = |\theta| W 1 = ∣ θ ∣ ,导数 s i g n ( θ ) \mathrm{sign}(\theta) sign ( θ ) ——永远指向 0。
练习 7(为什么在连线上惩罚)
Gulrajani et al. 证明:若 f ∗ f^* f ∗ 是 KR 对偶的最优 critic,γ ∗ \gamma^* γ ∗ 是最优搬运方案,则对 ( x , y ) ∼ γ ∗ (x, y) \sim \gamma^* ( x , y ) ∼ γ ∗ ,在连线上的点 x t = t x + ( 1 − t ) y x_t = tx + (1-t)y x t = t x + ( 1 − t ) y 处 ∇ f ∗ ( x t ) \nabla f^*(x_t) ∇ f ∗ ( x t ) 指向 x − y x - y x − y 方向、范数为 1。用一维的例子说明直觉。
参考答案
最优方案下每一单位质量都”恰好赚回运费”:f ∗ ( x ) − f ∗ ( y ) = ∥ x − y ∥ f^*(x) - f^*(y) = \Vert x - y\Vert f ∗ ( x ) − f ∗ ( y ) = ∥ x − y ∥ 。又因 f ∗ f^* f ∗ 是 1-Lipschitz,沿 y → x y \to x y → x 的直线 f ∗ f^* f ∗ 必须以最大速率 1 增长,否则从 y y y 到 x x x 的总增量不够 ∥ x − y ∥ \Vert x - y\Vert ∥ x − y ∥ 。一维:p = δ 0 p = \delta_0 p = δ 0 、q = δ θ q = \delta_\theta q = δ θ (θ > 0 \theta > 0 θ > 0 ),最优 critic 在 [ 0 , θ ] [0, \theta] [ 0 , θ ] 上是 f ( x ) = − x f(x) = -x f ( x ) = − x (斜率恰好 −1)。所以在真假样本的连线上要求 ∥ ∇ f ∥ = 1 \Vert\nabla f\Vert = 1 ∥∇ f ∥ = 1 是”必要条件”;连线以外的地方只需要 ≤ 1 \leq 1 ≤ 1 ——这也是单边惩罚的理由。
练习 8(双边梯度惩罚的墙)
线性 critic f ( x ) = a x f(x) = ax f ( x ) = a x ,Δ = μ data − μ G > 0 \Delta = \mu_{\text{data}} - \mu_G > 0 Δ = μ data − μ G > 0 (正确的斜率是 a > 0 a > 0 a > 0 )。目标 J ( a ) = a Δ − λ ( ∣ a ∣ − 1 ) 2 J(a) = a\Delta - \lambda(|a| - 1)^2 J ( a ) = a Δ − λ ( ∣ a ∣ − 1 ) 2 。(a) 证明在 a < 0 a < 0 a < 0 一侧,若 Δ < 2 λ \Delta < 2\lambda Δ < 2 λ ,J J J 在 a − = − 1 + Δ / ( 2 λ ) a_- = -1 + \Delta/(2\lambda) a − = − 1 + Δ/ ( 2 λ ) 处有局部最大值。(b) 从 a = − 1 a = -1 a = − 1 出发做梯度上升会怎样?(c) 单边惩罚 λ max ( 0 , ∣ a ∣ − 1 ) 2 \lambda\max(0, |a| - 1)^2 λ max ( 0 , ∣ a ∣ − 1 ) 2 下呢?
参考答案
(a) a < 0 a < 0 a < 0 时 J = a Δ − λ ( a + 1 ) 2 J = a\Delta - \lambda(a + 1)^2 J = a Δ − λ ( 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 λ ( a + 1 ) = 0 ⇒ a − = − 1 + 2 λ Δ ,J ′ ′ = − 2 λ < 0 J'' = -2\lambda < 0 J ′′ = − 2 λ < 0 ;a − < 0 ⇔ Δ < 2 λ a_- < 0 \Leftrightarrow \Delta < 2\lambda a − < 0 ⇔ Δ < 2 λ 。(b) 梯度上升停在 a − a_- a − :critic 的斜率符号是错的(E data f − E G f = a − Δ < 0 E_{\text{data}}f - E_Gf = a_-\Delta < 0 E data f − E G f = a − Δ < 0 ),生成器的损失 − E G [ f ] = − a − μ G -\mathbb{E}_G[f] = -a_-\mu_G − E G [ f ] = − a − μ G 对 μ G \mu_G μ G 的梯度是 − a − > 0 -a_- > 0 − a − > 0 ,于是 μ G \mu_G μ G 一直减小、Δ \Delta Δ 一直增大,直到 Δ > 2 λ \Delta > 2\lambda Δ > 2 λ 才可能翻过去——代码 03 里 λ = 10 \lambda = 10 λ = 10 、μ G = − 4 \mu_G = -4 μ G = − 4 时 Δ = 3.2 \Delta = 3.2 Δ = 3.2 ,a − = − 0.84 a_- = -0.84 a − = − 0.84 ,和观测一致。(c) 单边惩罚在 ∣ a ∣ ≤ 1 |a| \leq 1 ∣ a ∣ ≤ 1 时为 0,J = a Δ J = a\Delta J = a Δ 单调递增,梯度上升直接穿过 0 走到 a = 1 + Δ 2 λ a = 1 + \frac{\Delta}{2\lambda} a = 1 + 2 λ Δ 。
练习 9(无配对翻译不唯一)
设 X X X 和 Y Y Y 都是 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) 。证明 G ( x ) = − x G(x) = -x G ( x ) = − x 、F ( y ) = − y F(y) = -y F ( y ) = − y 和 G ( x ) = x G(x) = x G ( x ) = x 、F ( y ) = y F(y) = y F ( y ) = y 都让 CycleGAN 的总损失达到最小。再举一个二维的例子。
参考答案
− X ∼ N ( 0 , 1 ) -X \sim \mathcal{N}(0, 1) − X ∼ N ( 0 , 1 ) ,所以 G ( X ) G(X) G ( X ) 与 Y Y Y 同分布、F ( Y ) F(Y) F ( Y ) 与 X X X 同分布,两个对抗项都在最优值(判别器无法区分);F ( G ( x ) ) = x F(G(x)) = x F ( G ( x )) = x 、G ( F ( y ) ) = y G(F(y)) = y G ( F ( y )) = y ,循环项为 0。任何保持 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) 不变的双射(比如保测度的分段重排)都一样。二维:X = Y = N ( 0 , I 2 ) X = Y = \mathcal{N}(0, I_2) X = Y = N ( 0 , I 2 ) ,任意旋转 R R R 都是解。代码 04 的双月牙同理:把两条弧对调、沿弧方向翻转,近似地保持分布、可逆。哪个”对”由目标函数以外的东西决定(网络结构、初始化、额外的约束)。
练习 10(AlignFlow 的自由度)
设 f X f_X f X 、f Y f_Y f Y 是精确的流(f X − 1 f_X^{-1} f X − 1 把 p X p_X p X 变成 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) ,f Y f_Y f Y 把 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) 变成 p Y p_Y p Y ),R R R 是任意正交矩阵。证明 G R = f Y ∘ R ∘ f X − 1 G_R = f_Y \circ R \circ f_X^{-1} G R = f Y ∘ R ∘ f X − 1 同样把 p X p_X p X 精确地变成 p Y p_Y p Y ,并且 F R = G R − 1 F_R = G_R^{-1} F R = G R − 1 精确循环一致。这说明了什么?
参考答案
x ∼ p X ⇒ f X − 1 ( x ) ∼ N ( 0 , I ) ⇒ R f X − 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) x ∼ p X ⇒ f X − 1 ( x ) ∼ N ( 0 , I ) ⇒ R f X − 1 ( x ) ∼ N ( 0 , I ) (标准高斯旋转不变)⇒ G R ( x ) ∼ p Y \Rightarrow G_R(x) \sim p_Y ⇒ G R ( x ) ∼ p Y 。G R G_R G R 是可逆函数的复合,F R = f X ∘ R ⊤ ∘ f Y − 1 F_R = f_X \circ R^\top \circ f_Y^{-1} F R = f X ∘ R ⊤ ∘ 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 )走另一条路:保留”对每个 x x x 打分”,但放弃”分数必须归一化”——
能量模型 p θ ( x ) = exp ( f θ ( x ) ) / Z ( θ ) p_\theta(x) = \exp(f_\theta(x))/Z(\theta) p θ ( x ) = exp ( f θ ( x )) / Z ( θ ) :f θ f_\theta f θ 可以是任何神经网络,代价是配分函数 Z ( θ ) Z(\theta) Z ( θ ) 算不出来;
例子:Ising 模型、专家乘积、受限玻尔兹曼机(RBM)、深度玻尔兹曼机;
比较两个点的相对概率很容易 (Z Z Z 抵消了);
训练的直觉:“压低数据的能量、抬高其他点的能量”——对比散度 ;从能量模型采样需要 MCMC(Metropolis–Hastings、朗之万动力学)。