[论文速通]tmd GAN!
打黑工好几个月,突然想起来自己是个没毕业的硕士研究生()
读完了也实在是没力气写博客了,让gpt生成了一个
看点老的文章也算纯纯满足好奇心了
凑活记录一下吧
# 从概率分布到对抗博弈:我的 GAN 原始论文阅读笔记
## 一、GAN 到底在学习什么?
GAN 的目标不是让生成器记住某一张真实图片,而是让生成器产生的整体分布接近真实数据分布。
真实数据服从:
$$
x \sim p_{\mathrm{data}}(x)
$$
生成器首先从一个简单的先验分布中采样噪声:
$$
z \sim p_z(z)
$$
再通过生成器得到样本:
$$
x = G(z)
$$
当随机变量 \(z\) 经过映射 \(G\) 后,生成样本 \(G(z)\) 会形成一个新的概率分布,记为:
$$
p_g(x)
$$
因此:
- \(G(z)\) 是一次生成得到的具体样本;
- \(p_g\) 是生成器反复采样后形成的整体分布;
- GAN 的最终目标是使
$$
p_g = p_{\mathrm{data}}
$$
原始 GAN 并不显式给出 \(p_g(x)\) 的概率密度,而是通过 \(z \mapsto G(z)\) 隐式定义这个分布。
---
## 二、判别器为什么可以看作伯努利概率模型?
判别器接收样本 \(x\),输出:
$$
D_\theta(x) \in [0,1]
$$
它表示样本来自真实数据的条件概率:
$$
D_\theta(x)
=
P_\theta(Y=1\mid X=x)
$$
其中:
- \(Y=1\):真实样本;
- \(Y=0\):生成样本。
因此,在给定 \(x\) 后,标签 \(Y\) 服从伯努利分布:
$$
Y\mid X=x
\sim
\operatorname{Bernoulli}(D_\theta(x))
$$
其条件概率可以写为:
$$
P_\theta(Y=y\mid X=x)
=
D_\theta(x)^y
\left(1-D_\theta(x)\right)^{1-y}
$$
判别器训练可以理解为条件极大似然估计。
对一组带标签的样本 \((x_i,y_i)\),对数似然为:
$$
\ell(\theta)
=
\sum_i
\left[
y_i\log D_\theta(x_i)
+
(1-y_i)\log(1-D_\theta(x_i))
\right]
$$
实际神经网络框架通常最小化负对数似然:
$$
\mathcal L_D=-\ell(\theta)
$$
这就是二分类交叉熵。
整个过程可以概括为:
$$
x
\xrightarrow{\text{神经网络}}
D_\theta(x)
\xrightarrow{\text{负对数似然}}
\mathcal L_D
\xrightarrow{\text{反向传播}}
\nabla_\theta\mathcal L_D
\xrightarrow{\text{优化器}}
\theta\text{ 更新}
$$
所以:
- 概率模型决定训练准则;
- 神经网络负责参数化概率;
- 反向传播负责计算梯度;
- SGD、Momentum 等优化器负责更新参数。
---
## 三、GAN 的极小极大目标
GAN 的原始目标为:
$$
\min_G\max_D V(D,G)
$$
其中:
$$
V(D,G)
=
\mathbb E_{x\sim p_{\mathrm{data}}}
[\log D(x)]
+
\mathbb E_{z\sim p_z}
[\log(1-D(G(z)))]
$$
判别器 \(D\) 希望最大化这个目标:
- 对真实样本,希望 \(D(x)\rightarrow 1\);
- 对生成样本,希望 \(D(G(z))\rightarrow 0\)。
生成器 \(G\) 希望最小化这个目标,使判别器无法识别生成样本。
原始算法采用交替训练:
1. 更新判别器 \(k\) 次;
2. 更新生成器一次。
论文实验中通常取:
$$
k=1
$$
这不是两个网络真正意义上的完全同步训练,而是交替更新。
---
## 四、固定生成器后,最优判别器是什么?
固定 \(G\) 后,生成分布 \(p_g\) 也被固定。
GAN 目标可以写成积分形式:
$$
V(D,G)
=
\int
p_{\mathrm{data}}(x)\log D(x)\,dx
+
\int
p_g(x)\log(1-D(x))\,dx
$$
对每一个固定的 \(x\),需要最大化:
$$
p_{\mathrm{data}}(x)\log D(x)
+
p_g(x)\log(1-D(x))
$$
最终可以得到最优判别器:
$$
D_G^*(x)
=
\frac{p_{\mathrm{data}}(x)}
{p_{\mathrm{data}}(x)+p_g(x)}
$$
它反映了真实数据密度与生成数据密度的相对大小。
当:
$$
p_g=p_{\mathrm{data}}
$$
有:
$$
D_G^*(x)=\frac12
$$
这不是判别器“训练失败”,而是两个分布已经完全相同,判别器无法再根据输入判断样本来源。
---
## 五、为什么要把极小极大问题重新表述?
定义:
$$
C(G)=\max_D V(D,G)
$$
意思是:对于当前的生成器 \(G\),先假设判别器已经达到最优,再研究生成器面对的目标。
因此:
$$
\min_G\max_D V(D,G)
$$
可以重新写成:
$$
\min_G C(G)
$$
把最优判别器 \(D_G^*\) 代回目标函数:
$$
C(G)
=
\mathbb E_{x\sim p_{\mathrm{data}}}
\left[
\log
\frac{p_{\mathrm{data}}(x)}
{p_{\mathrm{data}}(x)+p_g(x)}
\right]
$$
$$
+
\mathbb E_{x\sim p_g}
\left[
\log
\frac{p_g(x)}
{p_{\mathrm{data}}(x)+p_g(x)}
\right]
$$
经过这一步,公式中不再出现独立的判别器,只剩下:
$$
p_{\mathrm{data}}
\quad\text{和}\quad
p_g
$$
这使作者能够直接研究两个概率分布之间的关系。
---
## 六、KL 散度、JSD 与定理 1
KL 散度定义为:
$$
D_{\mathrm{KL}}(P\|Q)
=
\mathbb E_{x\sim P}
\left[
\log\frac{P(x)}{Q(x)}
\right]
$$
它衡量用分布 \(Q\) 描述来自分布 \(P\) 的数据时,多付出了多少信息代价。
KL 散度与信息熵、交叉熵之间的关系为:
$$
D_{\mathrm{KL}}(P\|Q)
=
H(P,Q)-H(P)
$$
但是 KL 散度通常不对称:
$$
D_{\mathrm{KL}}(P\|Q)
\neq
D_{\mathrm{KL}}(Q\|P)
$$
JSD 是 Jensen–Shannon divergence,即詹森–香农散度。
令混合分布:
$$
M=\frac{P+Q}{2}
$$
则:
$$
D_{\mathrm{JS}}(P\|Q)
=
\frac12D_{\mathrm{KL}}(P\|M)
+
\frac12D_{\mathrm{KL}}(Q\|M)
$$
JSD 是对称的:
$$
D_{\mathrm{JS}}(P\|Q)
=
D_{\mathrm{JS}}(Q\|P)
$$
GAN 的目标可以推导为:
$$
C(G)
=
-\log 4
+
2D_{\mathrm{JS}}
\left(
p_{\mathrm{data}}\|p_g
\right)
$$
由于:
$$
D_{\mathrm{JS}}
\left(
p_{\mathrm{data}}\|p_g
\right)
\geq 0
$$
所以:
$$
C(G)\geq-\log 4
$$
并且只有当:
$$
p_g=p_{\mathrm{data}}
$$
时,JSD 才等于零,目标函数取得全局最小值:
$$
C(G)=-\log 4
$$
需要注意的是,原始 GAN 训练时不会直接计算 KL 散度或 JSD。
实际训练仍然只是:
1. 从真实数据集中采样;
2. 从生成器中采样;
3. 训练判别器区分两者;
4. 根据判别器提供的梯度更新生成器。
JSD 是对最优判别器条件下 GAN 目标的理论解释,而不是代码中显式计算的损失函数。
---
## 七、命题 2:为什么要讨论凸性?
论文将:
$$
V(G,D)
$$
重新记为:
$$
U(p_g,D)
$$
也就是暂时不研究生成器网络参数,而把生成器看成它所产生的概率分布 \(p_g\)。
固定判别器 \(D\) 后:
$$
U(p_g,D)
=
\int p_{\mathrm{data}}(x)\log D(x)\,dx
+
\int p_g(x)\log(1-D(x))\,dx
$$
第一项与 \(p_g\) 无关。
令:
$$
c_D(x)=\log(1-D(x))
$$
则:
$$
U(p_g,D)
=
C_D+\int p_g(x)c_D(x)\,dx
$$
离散化后可以写成:
$$
U(p_g,D)
=
C_D+c_1p_1+c_2p_2+\cdots+c_np_n
$$
因此 \(U\) 关于 \(p_g\) 是一次函数,更严格地说,是线性或仿射泛函。
一次函数满足:
$$
f(\lambda x_1+(1-\lambda)x_2)
=
\lambda f(x_1)+(1-\lambda)f(x_2)
$$
而凸函数只要求:
$$
f(\lambda x_1+(1-\lambda)x_2)
\leq
\lambda f(x_1)+(1-\lambda)f(x_2)
$$
一次函数直接取等号,因此它既是凸函数,也是凹函数,但不是严格凸函数。
接下来定义:
$$
C(p_g)=\sup_D U(p_g,D)
$$
可以把它理解为:对每个 \(p_g\),从所有判别器对应的“一次函数”中,选取最高的一条。
很多直线的上方轮廓仍然是凸的,因此 \(C(p_g)\) 是凸函数。
证明凸性的意义在于:
> 这个理想化目标没有欺骗优化过程的局部最低点。
定理 1 已经说明它唯一的全局最低点是:
$$
p_g=p_{\mathrm{data}}
$$
所以在下列理想条件下:
- 每一步都能把判别器训练到最优;
- 可以直接优化概率分布 \(p_g\);
- 每次更新步长足够小;
不断更新 \(p_g\),就能够收敛到:
$$
p_g\rightarrow p_{\mathrm{data}}
$$
---
## 八、为什么双网络训练很难稳定?
GAN 中两个网络相互影响:
- \(G\) 更新后,判别器面对的生成分布发生变化;
- \(D\) 更新后,生成器接收到的梯度也发生变化。
因此,任何一个网络的目标都不是静态的。
这和 Actor–Critic 有相似之处:
- Actor 改变策略后,Critic 所估计的策略发生变化;
- Critic 估计不准确,又可能给 Actor 提供错误方向。
原始 GAN 的命题 2 只是把“小步更新”作为理论收敛条件,但没有给出类似 TRPO 的显式步长约束。
TRPO 使用 KL 散度限制新旧策略的变化:
$$
\mathbb E_s
\left[
D_{\mathrm{KL}}
\left(
\pi_{\mathrm{old}}(\cdot\mid s)
\|
\pi_{\mathrm{new}}(\cdot\mid s)
\right)
\right]
\leq\delta
$$
因此可以概括为:
> TRPO 把“小步更新”做成了明确的信赖域约束;原始 GAN 只是说明理想情况下需要足够小的步长。
实际 GAN 一般通过学习率、交替更新次数和优化器设置,尽量平衡生成器与判别器,但原始论文并没有彻底解决训练不稳定问题。
---
## 九、为什么论文强调不需要马尔可夫链?
这里的马尔可夫链不是强化学习中的 MDP,而是 MCMC:
$$
x_0\rightarrow x_1\rightarrow x_2\rightarrow\cdots
$$
传统能量模型会显式定义:
$$
p_\theta(x)
=
\frac{e^{-E_\theta(x)}}{Z}
$$
但归一化常数:
$$
Z=\int e^{-E_\theta(x)}dx
$$
通常很难计算,也难以直接从 \(p_\theta(x)\) 中采样。
因此需要构造马尔可夫链,让它运行足够多步,逐渐接近目标分布。
经典例子包括:
- Boltzmann Machine;
- Restricted Boltzmann Machine;
- Deep Boltzmann Machine;
- 一些早期能量模型。
这些模型常使用 Gibbs sampling、Contrastive Divergence 或 Persistent Contrastive Divergence。
GAN 则直接学习:
$$
z\sim p_z
$$
$$
x=G(z)
$$
生成样本只需要一次生成器前向传播,不需要:
- 配分函数;
- MCMC;
- burn-in;
- 长时间运行采样链。
GAN 的重要贡献不是发明了反向传播,而是构造了一个可以通过判别器提供梯度的生成学习目标。
---
## 十、反向传播在 GAN 出现前就已经存在
反向传播在 20 世纪 80 年代已经成为神经网络训练的重要方法。
早期生成模型依赖 MCMC,并不是因为不会反向传播,而是因为:
> 很多生成模型虽然能够定义概率分布,却没有容易计算、容易采样、又能够直接反向传播的训练目标。
GAN 通过判别器把生成问题转化为可微的对抗优化问题:
$$
\text{生成样本}
\rightarrow
\text{判别器评价}
\rightarrow
\text{计算损失}
\rightarrow
\text{梯度反传到生成器}
$$
现代模型依然主要依靠反向传播训练,只是损失来源不同:
| 模型 | 梯度或损失的来源 |
|---|---|
| 分类模型 | 人工标签 |
| LLM | 下一个 Token |
| VLA | 专家动作或奖励 |
| Diffusion | 噪声预测误差 |
| GAN | 判别器反馈 |
| PPO / TRPO | 策略梯度与环境奖励 |
Transformer、LLM 和 VLA 并没有取代反向传播。
它们仍然遵循:
$$
\text{可微目标}
\rightarrow
\text{反向传播}
\rightarrow
\text{梯度优化}
\rightarrow
\text{参数更新}
$$
真正不断变化的是:
> 如何设计一个能够为模型提供有效梯度的目标函数。
---
## 十一、这次阅读建立起来的整体认识
通过阅读原始 GAN 论文,可以把 GAN 的逻辑压缩成下面这条主线:
$$
z\sim p_z
\rightarrow
G(z)\sim p_g
$$
$$
p_{\mathrm{data}},p_g
\rightarrow
D_G^*
$$
$$
D_G^*
\rightarrow
C(G)
=
-\log4
+
2D_{\mathrm{JS}}
(p_{\mathrm{data}}\|p_g)
$$
$$
\min_G C(G)
\rightarrow
p_g\rightarrow p_{\mathrm{data}}
$$
从神经网络角度,则是:
$$
\text{概率模型}
\rightarrow
\text{损失函数}
\rightarrow
\text{反向传播}
\rightarrow
\text{交替优化两个网络}
$$
GAN 最值得理解的并不是“生成器和判别器互相打架”这一表面比喻,而是:
1. 生成器隐式定义生成分布 \(p_g\);
2. 判别器通过分类任务间接估计两个分布的差异;
3. 最优判别器条件下,对抗目标等价于最小化 JSD;
4. 判别器为无法直接计算概率密度的生成器提供可反向传播的梯度;
5. GAN 用可微生成网络代替了传统模型中的 MCMC 采样过程。
这也是 GAN 在生成模型发展史上的核心意义。

浙公网安备 33010602011771号