11 KiB
title, draft, tags
| title | draft | tags | ||||
|---|---|---|---|---|---|---|
| 2-GAN-对抗生成网络 | false |
|
一、 核心直觉与博弈论视角
GAN 由两个核心神经网络组成:
-
生成器(Generator, $G$): 它的任务是接收一个随机噪声 $z$(通常采样自高斯分布或均匀分布),并将其映射到数据空间,生成假数据 $G(z)$。它的目标是“造假”,尽可能骗过判别器。
-
判别器(Discriminator, $D$): 它的任务是接收一个样本 $x$,判断这个样本是来自真实数据分布
p_{data}还是由生成器伪造的分布 $p_g$。它输出一个[0, 1]之间的标量 $D(x)$,表示样本为“真”的概率。
博弈过程:
-
D想要最大化区分真假数据的能力。 -
G想要最小化D区分真假数据的能力。两者在训练中相互博弈,共同进化,最终理想状态下,
G生成的数据分布完美拟合真实数据分布($p_g = p_{data}$),而D面对真假难辨的数据,只能给出50\%的瞎蒙概率($D(x) = 0.5$)。
二、 目标函数(Value Function)与严谨推导
我们可以定义一个价值函数 $V(D, G)$。GAN 的目标是一个 Minimax 优化问题:
\min_{G} \max_{D} V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]
-
$\mathbb{E}{x \sim p{data}(x)}[\log D(x)]$:真实数据通过
D的期望。D希望这部分尽可能大(趋近于 $\log 1 = 0$)。 -
$\mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]$:生成数据通过
D的期望。D希望D(G(z))小(趋近于 $0$),从而让整体变大;而G希望D(G(z))大(趋近于 $1$),从而让这部分变小(趋近于 $-\infty$)。
为了理解这个优化的本质,我们需要将其拆解为两步进行严谨的数学推导。
1. 固定生成器 $G$,求解最优判别器 D_G^*
假设 G 已经固定,我们要找到一个 D 使得 V(D, G) 最大化。
首先,将期望写成积分形式。考虑到生成器将噪声分布 p_z(z) 映射为数据空间的分布 $p_g(x)$,我们可以将第二项的积分变量从 z 替换为 $x$:
V(D, G) = \int_{x} p_{data}(x) \log(D(x)) dx + \int_{x} p_g(x) \log(1 - D(x)) dx
V(D, G) = \int_{x} \left[ p_{data}(x) \log(D(x)) + p_g(x) \log(1 - D(x)) \right] dx
要最大化这个积分,只需要最大化积分号内的每一项。对于任意给定的 $x$,我们定义 $a = p_{data}(x)$,$b = p_g(x)$,$y = D(x)$。问题转化为求函数 f(y) 的最大值:
f(y) = a \log(y) + b \log(1 - y)
对 y 求导并令其为 $0$:
\frac{df}{dy} = \frac{a}{y} - \frac{b}{1 - y} = 0
解得最优的判别器输出为:
D_G^*(x) = \frac{a}{a + b} = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}
直觉:当真实数据密度远大于假数据密度时($p{data} \gg p_g$),$D \to 1$;当两者相等时(纳什均衡),$D = 0.5$。_
2. 将最优 D_G^* 代回,最小化 G
现在,判别器已经达到了最优 $D_G^$,生成器 G 的目标是最小化此时的 $V(D_G^, G)$。我们将其代入原方程:
\max_{D} V(D, G) = V(D_G^*, G)
= \mathbb{E}_{x \sim p_{data}} \left[ \log \frac{p_{data}(x)}{p_{data}(x) + p_g(x)} \right] + \mathbb{E}_{x \sim p_g} \left[ \log \frac{p_g(x)}{p_{data}(x) + p_g(x)} \right]
接下来进行巧妙的恒等变形,分子分母同除以 $2$:
= \mathbb{E}_{x \sim p_{data}} \left[ \log \left( \frac{p_{data}(x)}{\frac{p_{data}(x) + p_g(x)}{2}} \cdot \frac{1}{2} \right) \right] + \mathbb{E}_{x \sim p_g} \left[ \log \left( \frac{p_g(x)}{\frac{p_{data}(x) + p_g(x)}{2}} \cdot \frac{1}{2} \right) \right]
利用对数的性质 $\log(A \cdot \frac{1}{2}) = \log A - \log 2$:
= -\log 4 + KL\left(p_{data} \parallel \frac{p_{data} + p_g}{2}\right) + KL\left(p_g \parallel \frac{p_{data} + p_g}{2}\right)
(注:KL 表示 Kullback-Leibler 散度)
两个 KL 散度之和刚好定义了 Jensen-Shannon 散度 (JSD):
C(G) = -\log 4 + 2 \cdot JSD(p_{data} \parallel p_g)
核心推论: JS 散度恒大于等于 $0$。因此,当且仅当 p_g(x) = p_{data}(x) 时,JS 散度为 $0$,生成器达到全局最优解,此时损失函数的最小值为 $-\log 4$。这就是 GAN 能够拟合任意分布的数学基石。
二.5 纳什均衡的深入分析
均衡的存在性与唯一性
GAN 的 Minimax 优化问题存在唯一的纳什均衡点(当 p_g = p_{data} 时),但均衡的收敛性并不保证。
纳什均衡的定义:在二人零和博弈中,策略 (G^*, D^*) 构成纳什均衡,当且仅当:
V(G^*, D) \leq V(G^*, D^*) \leq V(G, D^*), \quad \forall G, D
即:G^* 已经是在 D^* 下的最优反应,D^* 已经是在 G^* 下的最优反应。
GAN 均衡条件:
- 当
p_g = p_{data}时,D^*(x) = 0.5对所有x - 此时
G无法通过调整来提高 $V$,D也无法通过调整来提高V
训练动力学的稳定性分析
交替梯度下降的更新可以写为:
\theta_d^{t+1} = \theta_d^t + \eta \nabla_{\theta_d} V(G^t, D^t)
\theta_g^{t+1} = \theta_g^t - \eta \nabla_{\theta_g} V(G^t, D^t)
问题 1:同步更新的不稳定性
如果 G 和 D 更新步长不匹配,可能导致:
D过于强大时,G的梯度消失G过于强大时,D无法区分真假
问题 2:梯度振荡
即使在均衡点附近,如果使用动量优化器(如 Adam),参数更新可能围绕均衡点振荡而非收敛。这与 GAN 的损失曲面(非凸非凹)有关。
问题 3:模式崩溃的数学描述
当 G 将所有质量集中在单点 x_0 时($p_g = \delta_{x_0}$),D 的最优判别器为:
D^*(x) = \frac{p_{data}(x)}{p_{data}(x) + \delta_{x_0}(x)}
这意味着 $D(x_0) \to 1$(真实数据点)而 $D(x_0) \to 0$(生成点)。G 只需生成 x_0 即可骗过当前的 $D$,但这远非真实分布。
二.6 Non-saturating Loss 的深入理解
原始 GAN 的损失函数(对 $G$)为:
\mathcal{L}_G = \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]
问题:当 D(G(z)) \to 0 时,$\log(1 - D) \to -\infty$,梯度 $\nabla_G \log(1 - D) \to 0$,导致训练初期 G 无法学习。
改进:使用 Non-saturating loss:
\mathcal{L}_G^{NS} = -\mathbb{E}_{z \sim p_z(z)}[\log D(G(z))]
数学解释:
设 $D(G(z)) = \sigma(f(z))$,其中 f(z) 是判别器的 logit 输出,\sigma 是 sigmoid 函数。
\log(1 - \sigma(f)) = -\log(1 + e^{-f}) = -\text{softplus}(-f)
当 $f \to -\infty$(即 $D \to 0$)时,$\text{softplus}(-f) \approx -f$,所以 $\log(1 - D) \approx f$。
但实际计算中,\log(1 - D) 的梯度在 D \to 0 处几乎为 0,而 \log D 的梯度始终为 1/f 量级(只要 f 不过分大)。
更直观的理解:将 G 的目标从"让 D 输出低概率"改为"让 D 输出高概率"。前者对应 $\log(1 - D)$(饱和),后者对应 $-\log D$(非饱和)。
三、 训练过程 (Alternating Gradient Descent)
由于这是个 Minimax 游戏,我们不能像常规网络那样一次性更新所有参数,而是采用交替梯度下降的方法。
每次迭代(Epoch/Step)中:
-
训练判别器 $D$(通常进行
k步,原始论文中 $k=1$):-
从真实数据
p_{data}中采样m个样本 ${x^{(1)}, ..., x^{(m)}}$。 -
从先验噪声
p_z中采样m个样本 ${z^{(1)}, ..., z^{(m)}}$,通过G生成假样本 ${G(z^{(1)}), ..., G(z^{(m)})}$。 -
利用梯度上升更新
D的参数 $\theta_d$(最大化 $V$):\nabla_{\theta_d} \frac{1}{m} \sum_{i=1}^m \left[ \log D(x^{(i)}) + \log(1 - D(G(z^{(i)}))) \right]
-
-
训练生成器 $G$(进行
1步):-
从先验噪声
p_z中重新采样m个样本 ${z^{(1)}, ..., z^{(m)}}$。 -
利用梯度下降更新
G的参数 $\theta_g$(最小化 $V$):\nabla_{\theta_g} \frac{1}{m} \sum_{i=1}^m \log(1 - D(G(z^{(i)})))(在工程实现中,为了防止训练初期梯度消失,这步通常会被替换为最大化
\log D(G(z)))。
-
四、 常见训练病理与崩溃问题
尽管数学推导非常完美,但 GAN 在实际的高维空间训练中极度不稳定。
1. 梯度消失 (Vanishing Gradients)
现象: 训练初期,生成器很弱,生成的全是噪声。判别器可以极其轻易地将真假分开,导致 D(x) \to 1 且 $D(G(z)) \to 0$。
数学本质: 如果判别器太完美,它给出的概率会趋近于 0 或 $1$。此时 \log(1 - D(G(z))) 曲线在 D \to 0 处的导数趋近于 $0$。生成器拿不到梯度,直接“僵死”在原地无法更新。
解法: 使用 Non-saturating loss(即上文提到的将 G 的目标从最小化 \log(1-D) 改为最大化 $\log D$),或者引入 Wasserstein GAN (WGAN) 利用 Earth Mover 距离(又称 Wasserstein-1 距离)替代 JS 散度。
Wasserstein 距离的优势:
W(p_{data}, p_g) = \inf_{\gamma \in \Pi(p_{data}, p_g)} \mathbb{E}_{(x,y) \sim \gamma}[|x - y|]
其中 \Pi(p_{data}, p_g) 表示所有以 p_{data} 和 p_g 为边缘分布的联合分布集合。
与 JS 散度不同,Wasserstein 距离对分布完全不重叠的情况仍有梯度(连续可微),这从根本上避免了梯度消失问题。
实现方式:通过 D 的输出近似 Critic 值,移除最后的 sigmoid 层,使用权重裁剪(Weight Clipping)或梯度惩罚(Gradient Penalty)来满足 1-Lipschitz 约束。
2. 模式崩溃 (Mode Collapse)
现象: 真实数据有多个峰(比如手写数字有 0-9 十个类别),但生成器发现只生成某一种数据(比如只生成极其逼真的数字 "1")就能最高效地骗过判别器。最终生成器失去了多样性,只能输出单一或极少数的样本。
数学本质: 在 Minimax 博弈中,如果先优化 G 再优化 $D$,G 倾向于将所有质量集中在 D 当前认为最像真实数据的单一点上(退化为狄拉克分布)。
解法: 引入谱归一化(Spectral Normalization)、Minibatch Discrimination,或使用 Unrolled GAN 让 G 能够“预见” D 的几步更新。
3. 难以收敛 (Non-convergence)
现象: 损失函数不下降,反而开始剧烈震荡。G 和 D 陷入无限循环的“猫鼠游戏”中。
数学本质: 使用基于动量的梯度下降求解纳什均衡时,参数更新轨迹可能围绕均衡点画圈(Limit Cycle),而不是收敛进去。这在纯理论博弈论中是一个经典的动力学不稳定性问题。