--- title: 2-GAN-对抗生成网络 draft: false tags: - GAN - 生成对抗网络 - 生成模型 - 深度学习 --- ### 一、 核心直觉与博弈论视角 GAN 由两个核心神经网络组成: 1. **生成器(Generator, $G$):** 它的任务是接收一个随机噪声 $z$(通常采样自高斯分布或均匀分布),并将其映射到数据空间,生成假数据 $G(z)$。它的目标是“造假”,尽可能骗过判别器。 2. **判别器(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)中:** 1. **训练判别器 $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]$$ 2. **训练生成器 $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),而不是收敛进去。这在纯理论博弈论中是一个经典的动力学不稳定性问题。