想象你是工地上的一个学徒推土机司机,任务是让操场东边的一堆沙子,变成西边那堆沙子的形状。现在有两位“距离老师”能指导你。第一位老师只问你:“两堆沙子有没有重叠?”如果完全不重叠,她只会说“离得远,差评”——而且不管你推近十米还是原封不动,反馈都是同一个“差评”。你彻底失去了方向,干脆躺平,只推一种最简单的形状交差。第二位老师则专业得多,她拿出尺子量搬运成本:“现在差50米,你刚才推近了5米,还剩45米。”你永远知道下一步该怎么走,每一步都有意义。 前者是JS散度的尴尬,后者就是Wasserstein距离的魔力。WGAN(Wasserstein GAN)正是把GAN的“量尺”从JS散度换成Wasserstein距离的改进方案,一举缓解了GAN训练不稳定、模式崩塌两大顽疾。这篇文章会带你从直觉到数学,彻底看懂这把新尺子,以及实现它的两种方式——权重裁剪和梯度惩罚。

岗位关联

理解WGAN,就掌握了生成模型训练稳定性的核心钥匙。对AI从业者来说,这既是面试高频考点,也是把GAN从“玄学炼丹”变成“可解释的工程”的关键认知。

目录
  1. 可视化演示
  2. 1. GAN训练困境:为什么总是崩盘
  3. 2. JS散度局限:两堆土不重叠就失灵
  4. 3. Wasserstein距离:推土机师傅的测量哲学
  5. 4. WGAN架构:判别器变身Critic
  6. 5. 权重裁剪:给测量员硬性限步
  7. 6. 梯度惩罚:让测量员走得既稳又准
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示FIFO与LRU页面置换算法的工作机制:当内存帧满时,按照不同策略选择淘汰页面,追踪缺页率和命中率变化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

FIFO算法 先进先出策略:当帧满时淘汰最早进入内存的页面 fault: page ∉ frames 当前展示FIFO页面置换过程

1. GAN训练困境:为什么总是崩盘

想象你同时扮演两个角色:一个是造假画的学徒(生成器),一个是鉴定画作的师傅(判别器)。学徒想尽办法画出足以乱真的画,师傅想尽办法识破一切赝品。两人天天对练,水平都该提升——但现实是,这场对练经常崩盘:学徒忽然不知道学什么了,或者干脆只画同一种风格的画去应付师傅。这就是GAN训练中著名的“训练不稳定”和“模式崩塌”。

在技术世界里,这场师徒博弈被写成了一个数学游戏:师傅的目标是最大化“识破”的成功率,学徒则是最小化“被识破”的丢脸程度。两者轮流更新,理论上应该达到一个双方都满意的平衡点。但实际训练时,只要师傅太聪明,学徒拿到的反馈就会坏掉——梯度消失,学习信号中断;师傅太弱,学徒又缺乏提升压力。平衡极难拿捏。

原始GAN把这个博弈直接写成了最小最大目标函数。师傅太强导致学徒崩溃,是梯度性质决定的,不是调参不努力。

这场师徒对练的矛盾根源,其实是师傅手里那把“量尺”有问题——它测不出“哪里像、哪里不像”,只能笼统地说“像或不像”。下一节我们就来看这把有问题的尺子。

V(D,G)=Ex∼Pr[log⁡D(x)]+Ez∼Pz[log⁡(1−D(G(z)))]\displaystyle V(D,G) = \mathbb{E}_{x \sim P_r}[\log D(x)] + \mathbb{E}_{z \sim P_z}[\log(1 - D(G(z)))]
师傅(D)要最大化这个目标函数,学徒(G)要最小化它,两人拉锯。
  1. 真实样本期望从真实数据分布 $P_r$ 中采样本,师傅判断它为真的对数概率,师傅希望这个值越大越好。
    Ex∼Pr[log⁡D(x)]\mathbb{E}_{x \sim P_r}[\log D(x)]
  2. 生成样本期望从噪声 $z$ 生成假样本,师傅识破它(输出接近0)后再取对数,师傅想要它大,学徒想要它小。
    Ez∼Pz[log⁡(1−D(G(z)))]\mathbb{E}_{z \sim P_z}[\log(1 - D(G(z)))]
  3. min-max博弈结构外层 $\min_G$ 对应学徒最小化“被识破”的损失,内层 $\max_D$ 对应师傅最大化“识破率”。
    min⁡Gmax⁡DV(D,G)\min_G \max_D V(D,G)

2. JS散度局限:两堆土不重叠就失灵

回到工地。师傅评判两堆沙子是否相似的方式,是看“它们重叠了多少”。听起来合理?但如果学徒把沙子堆到了一个完全不同的角落,两堆土在空间上根本不接触,师傅就懵了:“我完全看不出它们有任何交集,只能给个固定差评。”更糟的是,不管学徒把土推近十米还是推远十米,只要两堆土还没碰到,师傅的差评分数就完全一样——学徒得不到任何“改进方向”。

这个打分方式在数学上对应JS散度。当真实分布和生成分布的支撑集互不相交时,JS散度等于常数 $\log 2$,它关于生成器参数的梯度恒为0。训练信号彻底中断。

在GAN训练初期,生成分布通常与真实分布几乎没有重叠——高维空间里随机初始化的网络输出,几乎不可能恰好落在真实图像流形附近。这时判别器能轻松区分真假,反向传播给生成器的梯度却趋近于零。这就是“训练刚开始就卡死”的根本原因。

师傅的尺子在“够不着”的地方完全失灵,学徒只能原地打转。要根治这个问题,需要换一把“距离再远也能读数”的新尺子——Wasserstein距离。

DJS(Pr∥Pg)=log⁡2,当 Pr⊥Pg\displaystyle D_{JS}(P_r \| P_g) = \log 2, \quad \text{当 } P_r \perp P_g
两堆土完全没有重叠时,JS散度是一个固定的值,无论推土机推近还是推远,它都不变。
  1. JS散度衡量 $P_r$ 与 $P_g$ 这两个分布之间的重叠差异,值域为 $[0, \log 2]$。
    DJS(Pr∥Pg)D_{JS}(P_r \| P_g)
  2. 互不重叠条件$P_r \perp P_g$ 表示两个分布支撑集没有交集,两堆土“碰不到面”。
    Pr⊥PgP_r \perp P_g
  3. 常数结论此时 JS 散度恒为 $\log 2$,对参数变化不敏感,梯度完全消失。
    log⁡2\log 2

3. Wasserstein距离:推土机师傅的测量哲学

换一位专业的土方测量师。他不问“两堆土重叠了多少”,而是问:“把这一堆土推到另一堆土的位置,总共要付出多少搬运成本?”即使两堆土相隔50米,他也能报出准确数字:50米。推土机推近了5米,读数变成45米。每一小步推进都有反馈,司机永远有方向。

在数学上,这个“搬土成本”就是Wasserstein距离,学名“推土机距离”(Earth Mover's Distance)。它定义为:在所有可能的“搬土计划”(联合分布)中,寻找搬运成本最小的那个计划,这个最小成本就是两个分布的距离。

Wasserstein距离有两个关键优势:第一,分布完全不重叠时,它仍然是一个有限且连续的值——不会像JS散度那样饱和成常数;第二,它反映的是“搬多远、搬多少”的真实工作量,而不是只判断“是否重叠”。因此,用它做损失函数,生成器永远能获得有方向的梯度。不过,直接按定义搜索所有联合分布是不可行的,实践中通过Kantorovich对偶形式转化为一个更容易求解的“最大期望差”问题。

测量师给了司机会说话的尺子。接下来的问题很自然:怎么得到这把尺子?WGAN的答案是——让一个神经网络充当测量员。

W(Pr,Pg)=inf⁡γ∈Π(Pr,Pg)E(x,y)∼γ[∥x−y∥]\displaystyle W(P_r, P_g) = \inf_{\gamma \in \Pi(P_r, P_g)} \mathbb{E}_{(x, y) \sim \gamma}[\|x - y\|]
在所有“搬土方案”里,找一种总搬运成本最小的方案,这个最小成本就是两堆土之间的距离。
  1. 所有搬土计划集合$\Pi(P_r, P_g)$ 是所有以 $P_r$ 和 $P_g$ 为边缘分布的联合分布,每种联合分布就是一个搬土方案。
    γ∈Π(Pr,Pg)\gamma \in \Pi(P_r, P_g)
  2. 搬土成本$\|x - y\|$ 表示把一单位土从位置 $x$ 搬到位置 $y$ 的距离,这是单次搬运的成本。
    E(x,y)∼γ[∥x−y∥]\mathbb{E}_{(x, y) \sim \gamma}[\|x - y\|]
  3. 下确界$\inf$ 表示在所有方案里挑成本最低的那个,对应“最聪明的搬土方式”。
    inf⁡γ\inf_{\gamma}
  4. 对偶形式实践中改为最大化满足Lipschitz约束的评分函数 $f$ 在真实样本与生成样本上的期望差,这就是后面Critic网络的优化目标。
    sup⁡∥f∥L≤1Ex∼Pr[f(x)]−Ex∼Pg[f(x)]\sup_{\|f\|_L \le 1} \mathbb{E}_{x \sim P_r}[f(x)] - \mathbb{E}_{x \sim P_g}[f(x)]

4. WGAN架构:判别器变身Critic

怎么得到那把能量距离的“尺子”?答案是让原来的鉴定师傅转型成测量员。师傅不再给出“像/不像”的百分制概率,而是直接报出距离读数:“目前差28米。”为了读数准确,我们专门安排一组测量员(Critic)反复校准尺子,读得越准越好,然后推土机司机根据这个读数调整方向。

WGAN把判别器(Discriminator)替换成评分器(Critic)。最关键的一处改动是:Critic的输出层去掉了Sigmoid激活函数。Sigmoid会把输出压缩到0到1之间,强制网络表达“概率”;去掉它之后,Critic可以输出任意实数,直接作为两个分布差距的估计。损失函数也相应变为:真实样本的Critic评分期望减去生成样本的评分期望。

为了让Critic报出的差距真正等于Wasserstein距离,必须限制Critic函数的平滑程度——它要满足1-Lipschitz条件(输出变化不能快于输入变化)。这正是下一节权重裁剪和梯度惩罚要解决的问题。另外,WGAN的训练策略也和原始GAN不同:Critic要训练到接近收敛时再更新生成器,因为距离估计得越准,生成器得到的梯度越可靠;而在原始GAN里,判别器不能太强,否则生成器梯度会消失。

测量员有了,但“尺子刻度规约”怎么落实?WGAN的第一版方案简单粗暴:给测量员每一步加上限。

L=Ex∼Pg[C(x)]−Ex∼Pr[C(x)]\displaystyle L = \mathbb{E}_{x \sim P_g}[C(x)] - \mathbb{E}_{x \sim P_r}[C(x)]
Critic对“假样本”打分减去对“真样本”打分,差值越大说明两堆土越远。
  1. 真实样本评分期望$\mathbb{E}_{x \sim P_r}[C(x)]$ 是Critic给真实样本的平均分,期望它尽量高。
    Ex∼Pr[C(x)]\mathbb{E}_{x \sim P_r}[C(x)]
  2. 生成样本评分期望$\mathbb{E}_{x \sim P_g}[C(x)]$ 是Critic给生成样本的平均分,期望它尽量低。
    Ex∼Pg[C(x)]\mathbb{E}_{x \sim P_g}[C(x)]
  3. 距离估计两者之差直接作为 $W(P_r, P_g)$ 的经验估计,Critic最大化它,生成器最小化它。
    max⁡CLmin⁡GL\max_{C} L \quad \min_{G} L

5. 权重裁剪:给测量员硬性限步

为了让Critic生成的函数满足1-Lipschitz条件,第一版WGAN选择了最直接的办法:立规矩。测量员每次挪动位置,步长不能超过1米。不管前面有多远,每步最多走固定的长度;一旦走到最大步长,就停下来不许再走。

落实到神经网络里,这个规矩叫做权重裁剪(Weight Clipping):每次更新完参数后,把所有权重 $w$ 硬性裁剪到区间 $[-c, c]$ 内。裁剪值 $c$ 是一个超参数,它限制了Critic权重的大小,也就限制了函数变化的最大速率,从而近似满足Lipschitz约束。

这个实现只需要一行代码,但隐患很快暴露:裁剪值 $c$ 极难调。设得太小,网络容量被锁死,学不会复杂的分布;设得太大,约束形同虚设,Critic退化成任意极端函数。更麻烦的是,权重裁剪会把大量参数推向区间的两端——权重集中在 $\pm c$ 边界附近,导致梯度要么爆炸要么消失。许多实验表明,权重裁剪版的WGAN虽然比原始GAN稳定,但对超参数仍然敏感。

硬性限步虽然简单,但总让测量员“卡在边界上,走路趔趄”。更好的办法不是限制步子,而是给测量员装一个温柔的速度提醒器。

w←clip(w,−c,c)={−c,w<−cw,−c≤w≤cc,w>c\displaystyle w \leftarrow \text{clip}(w, -c, c) = \begin{cases} -c, & w < -c \\ w, & -c \le w \le c \\ c, & w > c \end{cases}
权重的绝对值不能超过 $c$,超出部分直接“截断”到边界上。
  1. 裁剪上限 $c$一个正超参数,决定权重的最大绝对值是多少。
    c>0c > 0
  2. 三种情况权重小于 $-c$ 时拉回 $-c$,大于 $c$ 时拉回 $c$,区间内则保持不变。
    clip(w,−c,c)\text{clip}(w, -c, c)
  3. 约束效果所有权重被硬性限制在 $[-c, c]$,Critic函数变化速率得到间接控制。
    w∈[−c,c]w \in [-c, c]

6. 梯度惩罚:让测量员走得既稳又准

新方案WGAN-GP不再硬性限制测量员的每一步长度,而是在他脚下装了一个“速度报警器”:一旦某一步迈得太大,超出标准步速,就立刻发出警告(惩罚);当每一步的步速都接近标准速度时,报警器保持安静。这样,测量员既能灵活走位,又不会因为步子太大而失去精度。

对应到数学上,WGAN-GP对Critic输出关于输入的梯度范数施加惩罚:希望梯度范数接近1,偏离1就惩罚。1-Lipschitz条件要求梯度范数不超过1,而“接近1”是更宽松也更平滑的约束。注意,惩罚点不是只放在真实样本或生成样本上,而是放在两者连线上的随机插值点——这些点相当于“搬土途中”的位置,最值得我们盯着步速。

梯度惩罚项加上原有的Wasserstein损失,就构成了完整的目标函数。实验表明,WGAN-GP训练非常稳定,几乎不出现模式崩塌,生成质量也明显提升。如今,当我们说"WGAN"时,通常指的就是WGAN-GP这套方案。

测量员现在既有自由度又有精度保证,推土机司机终于能听着清晰、稳定的读数,一步一个脚印地把土推到目标位置。回看整个故事:GAN训练不稳定的根因是JS散度这把“只会看重叠”的尺子,WGAN换上了Wasserstein距离这把“能量距离”的尺子,权重裁剪是第一代实现,梯度惩罚让约束更平滑——这就是WGAN从“训练难”走向“训练好”的完整旅程。

LGP=λEx^∼Px^[(∥∇x^C(x^)∥2−1)2]\displaystyle L_{GP} = \lambda \mathbb{E}_{\hat{x} \sim P_{\hat{x}}} \left[ \left( \| \nabla_{\hat{x}} C(\hat{x}) \|_2 - 1 \right)^2 \right]
在真实样本和生成样本之间的“路途”上随机取点,检查Critic在这些点的“步速”是否接近1。
  1. 插值样本$\hat{x}$ 是真实样本和生成样本连线上的随机点,代表搬土途中的位置。
    x^∼Px^\hat{x} \sim P_{\hat{x}}
  2. 梯度范数$\|\nabla_{\hat{x}} C(\hat{x})\|_2$ 是Critic输出对输入求梯度的2范数,表示局部变化速度。
    ∥∇x^C(x^)∥2\|\nabla_{\hat{x}} C(\hat{x})\|_2
  3. 平方偏差惩罚梯度范数与1的偏差越大,惩罚越大;当范数恰为1时惩罚为零。
    (∥⋅∥2−1)2(\| \cdot \|_2 - 1)^2
  4. 惩罚权重 $\lambda$控制惩罚强度的超参数,WGAN-GP论文中通常取 $\lambda = 10$。
    λ\lambda

AI 应用场景

高保真数字人生成

阶段:模型训练与调优

解决的问题:传统GAN在生成人脸或虚拟偶像形象时,常常出现模式崩塌——模型只学会生成几张固定的“克隆脸”,多样性严重不足。用Wasserstein距离替换损失函数后,生成分布始终有明确的方向信号,多样性显著提升,训练过程也更稳定。

具体案例:某虚拟偶像公司用WGAN-GP训练2D动漫头像生成器。早期GAN只能生成单一风格的头像,换用WGAN-GP后,表情、发型、脸型的分布逐渐接近真实数据,且不再需要反复调整学习率来“碰运气”。

工业缺陷检测的异常分数

阶段:模型推理与监控

解决的问题:在工业质检中,正常产品图像构成一个“正常分布”,缺陷图像则偏离这个分布。传统分类器需要大量缺陷样本标注,成本高且缺陷种类千奇百怪。利用Wasserstein距离的思想,可以计算“当前批次图像分布”与“正常分布”之间的搬运成本,成本超过阈值就判定为异常。

具体案例:电路板焊点质检中,将大量正常焊点的特征分布作为真实分布,训练一个Critic网络给图像打分。新批次图像的分数与正常分布的期望分数之差即近似Wasserstein距离,当该距离显著变大时触发报警,把缺陷批次拦截下来。

跨域迁移中的分布对齐

阶段:迁移学习

解决的问题:在仿真环境训练的模型直接部署到真实场景时,性能往往骤降,原因是源域和目标域的数据分布差异太大。Wasserstein距离可以作为域间差异的度量指标,通过最小化该距离实现特征分布的对齐。

具体案例:自动驾驶的语义分割模型先用仿真数据训练,再用WGAN的思想在特征空间中把仿真域与真实域的分布对齐。实验表明,这种方式比直接微调更稳定,在无标注真实数据的情况下也能显著提升分割准确率。

Python 演示

python63 行
import torchimport torch.nn as nn  class Generator(nn.Module):    def __init__(self):        super().__init__()        self.net = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 2))     def forward(self, z):        return self.net(z)  class Critic(nn.Module):    def __init__(self):        super().__init__()        self.net = nn.Sequential(nn.Linear(2, 32), nn.ReLU(), nn.Linear(32, 1))     def forward(self, x):        return self.net(x)  def real_samples(n):    # 真实分布:圆环上的点,加一点噪声    angles = torch.rand(n) * 6.283    return torch.stack([torch.cos(angles), torch.sin(angles)], dim=1) + 0.1 * torch.randn(n, 2)  def gradient_penalty(critic, real, fake):    alpha = torch.rand(real.size(0), 1)    interp = alpha * real + (1 - alpha) * fake    interp.requires_grad_(True)    out = critic(interp)    grad = torch.autograd.grad(out, interp, grad_outputs=torch.ones_like(out), create_graph=True)[0]    return ((grad.norm(2, dim=1) - 1) ** 2).mean()  def train_wgan_gp(steps=2000, lamb=10, n_critic=5):    G = Generator()    C = Critic()    opt_g = torch.optim.Adam(G.parameters(), lr=1e-3, betas=(0.5, 0.9))    opt_c = torch.optim.Adam(C.parameters(), lr=1e-3, betas=(0.5, 0.9))    for i in range(steps):        for _ in range(n_critic):            real = real_samples(64)            z = torch.randn(64, 8)            fake = G(z)            loss_c = -(C(real).mean() - C(fake).mean()) + lamb * gradient_penalty(C, real, fake.detach())            opt_c.zero_grad()            loss_c.backward()            opt_c.step()        z = torch.randn(64, 8)        fake = G(z)        loss_g = -C(fake).mean()        opt_g.zero_grad()        loss_g.backward()        opt_g.step()        if i % 500 == 0:            print(f"step {i}: critic loss {loss_c.item():.3f}, gen loss {loss_g.item():.3f}")  if __name__ == "__main__":    train_wgan_gp()
目的:用 PyTorch 实现一个简化版 WGAN-GP,在“圆环分布”这个玩具数据上训练生成器,演示 Wasserstein 距离 + 梯度惩罚如何让收敛过程稳定进行。
  1. class Critic(nn.Module)评分器输出一个实数,替代传统判别器的真假概率输出
  2. real_samples(n)从圆环采样真实样本,对应短文里的“目标土堆”
  3. def gradient_penalty(...)在真实样本和生成样本的连线上采样插值点,检查途中的步速
  4. torch.autograd.grad(out, interp, grad_outputs=torch.ones_like(out), create_graph=True)[0]计算 Critic 输出对插值点的梯度向量
  5. return ((grad.norm(2, dim=1) - 1) ** 2).mean()梯度范数偏离 1 越多,惩罚越大
  6. loss_c = -(C(real).mean() - C(fake).mean()) + lamb * gradient_penalty(...)Critic 总损失:最大化距离估计,同时约束步速
  7. loss_g = -C(fake).mean()生成器让 Critic 对假样本打分尽量高,即把假土堆往真土堆方向推
  8. for _ in range(n_critic):Critic 多训练几步,确保距离估计足够准确再更新生成器

常见误区

误区很多初学者把WGAN的成功归因于“换了个更好调的优化器”“学习率调小了”,认为原始GAN不稳定只是参数没调对。

正解WGAN稳定的根本原因是Wasserstein距离的性质——即使两个分布完全不重叠,Critic依然能输出一个有限且可导的距离估计,生成器总是知道“该往哪个方向推土”。优化器和学习率只是锦上添花,核心是损失函数换了。

为何常见:看WGAN代码时发现改动似乎很小,只是改了损失函数、去掉了Sigmoid,于是误以为“这么简单的改动,稳定一定靠调参”。

误区既然都是为了满足Lipschitz约束,权重裁剪和梯度惩罚应该只是写法不同,用什么都可以。

正解权重裁剪通过硬性截断权重实现约束,会导致参数大量堆积在 ±c 边界上,梯度要么爆炸要么消失;梯度惩罚通过软性惩罚梯度范数偏离1的情况,训练过程平滑得多。实践表明WGAN-GP几乎全面优于权重裁剪版WGAN。

为何常见:两者确实服务于同一个数学目标,容易让人忽略“实现方式对训练动力学的影响”这种第二层思考。

误区训练中盯着Wasserstein距离一直下降,看到损失接近0就觉得生成器已经完美了。

正解Wasserstein距离衡量的是真实分布与生成分布之间的搬运成本。它下降确实代表两个分布越来越接近,但训练后期它接近0时,已经无法反映人类感知层面的“质量”。评估生成质量还需要看样本本身,比如图像清晰度、多样性指标(FID等)。

为何常见:把“训练损失”直接等同于“质量指标”,忽略了损失函数只是训练信号的本质。

误区有些人认为WGAN把判别器改名为Critic,输出也不再是概率,所以Critic已经不在乎真假了。

正解Critic仍然在区分真假——它给真实样本打高分、给生成样本打低分,只是分数不再被Sigmoid压到0到1之间,分数差直接近似Wasserstein距离。改名强调的是“输出距离估计”的新角色,而不是说它不再关心真假。

为何常见:“Critic“和”评分器”这些新名词容易让人误以为网络角色发生了本质变化,实际变化的只是输出层和损失函数。

面试题

Q1. WGAN相比原始GAN最核心的改进是什么?

单选题 · easy

  • A.更换分布度量方式← 正确答案
  • B.扩大网络容量规模
  • C.新增批归一化层
  • D.改用卷积神经网络

答案:A。WGAN的核心是把衡量真实分布与生成分布差异的度量从JS散度换成Wasserstein距离,解决了分布不重叠时梯度消失的问题。扩大网络、加归一化、换卷积架构都不是WGAN的标志性改动。

Q2. 当真实分布与生成分布完全不重叠时,JS散度的值是?

单选题 · easy

  • A.无限大
  • B.log2常数← 正确答案
  • C.数值为零
  • D.负无穷小

答案:B。JS散度在取值上被归一化到 $[0, \log 2]$,当两个分布支撑集不相交时,它恒等于常数 $\log 2$。这意味着无论参数如何变化,损失都不变,梯度为0,生成器得不到任何学习信号。

Q3. Wasserstein距离的直观含义是什么?

单选题 · mid

  • A.分布质心的欧氏距离
  • B.推土机搬土的最小成本← 正确答案
  • C.概率密度差值的总和
  • D.分布形状拟合的准确度

答案:B。Wasserstein距离又称推土机距离,指的是把一个分布“搬运”成另一个分布所需的最小成本。它不只看质心距离,而是考虑所有土粒的搬运方案,所以即使分布完全不重叠,也能给出有意义的有限值。

Q4. WGAN中Critic最后一层为什么去掉Sigmoid?

单选题 · mid

  • A.减少网络参数
  • B.输出距离估计值← 正确答案
  • C.防止严重过拟合
  • D.加快训练收敛速度

答案:B。Sigmoid会把输出压缩到(0,1)区间,表示“真假概率”;WGAN需要Critic输出任意实数来估计真实样本与生成样本的评分差,这个差值近似Wasserstein距离。去掉Sigmoid是损失函数改变后的必然要求。

Q5. 权重裁剪实现Lipschitz约束的主要缺陷是?

单选题 · mid

  • A.容易陷入局部最优
  • B.参数集中裁剪边界← 正确答案
  • C.计算资源开销巨大
  • D.损失函数不收敛

答案:B。权重裁剪把所有参数硬性截断到 $[-c, c]$,训练中大量权重会被推到区间边缘,导致网络表达能力受限、梯度出现爆炸或消失。裁剪值 $c$ 也极难调节,这是它被梯度惩罚取代的主要原因。

Q6. 梯度惩罚相对于权重裁剪的优势有哪些?

多选题 · mid

  • A.训练过程更稳定← 正确答案
  • B.不需要调节裁剪值← 正确答案
  • C.网络容量被限制
  • D.调参难度大幅度降低← 正确答案

答案:ABD。梯度惩罚通过软性约束让梯度范数接近1,训练更平滑、稳定,且不需要设置裁剪值 $c$,调参更简单。C是错误选项:梯度惩罚不会限制网络容量,而权重裁剪恰恰会因为参数堆在边界上而限制容量。

Q7. WGAN-GP中对Critic梯度惩罚的目标是?

单选题 · hard

  • A.使梯度范数接近一← 正确答案
  • B.使梯度范数接近零
  • C.使梯度分布很均匀
  • D.使裁剪操作被移除

答案:A。1-Lipschitz条件要求Critic的梯度范数不超过1,WGAN-GP采用软性惩罚,让批评者在插值点处的梯度范数尽量接近1。偏离1越多惩罚越大,从而以更平滑的方式近似Lipschitz约束。

Q8. WGAN与原始GAN在生成器损失上的关键区别是?

单选题 · hard

  • A.WGAN用距离之差作为损失← 正确答案
  • B.WGAN用交叉熵作为损失
  • C.WGAN用均方误差作为损失
  • D.WGAN用对比学习损失

答案:A。原始GAN的生成器损失是“骗过判别器”的交叉熵形式;WGAN的生成器损失则是最小化“Critic对真实样本评分与对生成样本评分之差”,这个差值就是Wasserstein距离的估计。两者在损失函数形态上有本质区别。

Q9. 关于Wasserstein距离的性质,正确的说法有哪些?

多选题 · hard

  • A.分布分离时梯度连续← 正确答案
  • B.反映分布间真实差距← 正确答案
  • C.不重叠分布值为无穷
  • D.数值恒小于KL散度值

答案:AB。Wasserstein距离在两个分布不重叠时依然有限且梯度连续,所以生成器能持续获得学习信号,A正确;它衡量的是真实的搬运成本,B也正确。C错误——不重叠时距离是有限值且随距离增大而增大;D错误——它与KL散度没有恒定的大小关系。

Q10. 相比原始GAN,WGAN的训练策略调整包括哪些?

多选题 · easy

  • A.训练Critic多次再更新生成器← 正确答案
  • B.缩小判别器网络结构
  • C.去掉判别器Sigmoid层← 正确答案
  • D.把生成器换成自编码器

答案:AC。WGAN为了让距离估计准确,会让Critic多训练几步再更新生成器;同时去掉判别器最后的Sigmoid层,让输出变为距离估计。B和D都不是WGAN的改动方向——网络结构没有缩小,生成器仍然是生成器而非自编码器。