想象你是一位老师,布置了一道开放题。一开始学生们的答案五花八门,可慢慢你发现:所有人都答“人工智能是未来”这一句话,连标点都一样。不是他们商量好了,而是每个学生都发现——抄这份答案最省事,老师也不细看。这个现象在生成对抗网络(GAN)训练里,就叫模式崩溃(Mode Collapse)。 GAN里有个生成器(学生)和判别器(老师)。生成器负责产出图片,判别器判断图片是否真实。正常时,生成器应该覆盖真实数据的各种模式——人脸的不同角度、不同发型。但训练中它经常只输出少数几种“安全答案”,就像学生找到了“标准答案”的捷径,赖在里面不出来。怎么诊断这个问题?怎么让学生重新写出丰富多样的答案?这就是本文要解决的全景问题。

岗位关联

掌握模式崩溃的诊断与修复,是让GAN在真实业务中稳定产出多样内容的必备技能,也是衡量生成模型工程师实战水平的关键分水岭。

目录
  1. 可视化演示
  2. 模式崩溃现象
  3. 理论成因解析
  4. 诊断方法
  5. Minibatch Discrimination
  6. Wasserstein距离原理
  7. WGAN实践要点
  8. 方案效果对比
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

对比真实数据多峰分布与模式崩溃后生成器仅覆盖少数模式的退化分布,展示判别器梯度消失如何导致生成多样性丧失。

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

正常GAN:多模态覆盖 真实数据分布含8个模态,生成器逐步覆盖所有模态 判别器梯度充足,生成器持续学习多样性 D_KL(P_real || P_gen) → 0 生成分布与真实分布高度一致,JS散度低

模式崩溃现象

假设你是老师,发现班里学生的作业渐渐变成了同一种答案的复读。你最初只是觉得“大家可能想到一块去了”,直到期末考试,50份试卷居然有49份写的同一段话。这时你终于意识到:学生不是为了表达,而是为了“蒙混过关”。

GAN的生成器就是这样一名学生。它的唯一任务是让判别器认为它产出的图片是真实的。于是它会在一次次试错中找出判别器的“弱点”——某种特定类型的图片最容易骗过判别器。一旦找到,它就会反复生成这种图片,不再探索其他可能。在训练日志里,你会看到生成器损失震荡不前,但生成出来的图像却一张比一张相似。

这种坍缩在应用中非常致命。比如用GAN生成电商产品图,原本希望一张商品能产出十个不同角度的图片,结果生成器只输出同一个角度的重复图;用GAN做数据增强,生成的新样本都和原始样本一个模子,模型训练毫无增益。模式崩溃的本质是生成分布被压缩到真实分布的一个或少数几个峰上,多样性荡然无存。

回到老师的比喻:抄答案之所以发生,是因为老师只看单份作业,没有横向对比。我们后面要讲的诊断方法,就是让老师快速识别“全班雷同”;而解决方案,则是逼着学生必须写出各有特色的答案。

理论成因解析

为什么学生会选择抄答案?因为抄答案的成本实在太低了。判别器只抽查单份作业,从不看全班整体分布,生成器花大力气探索新模式的收益几乎为零——反正新答案也可能被打回票。这是模式崩溃最朴素的诱因。

从数学层面看,原始GAN的优化目标是让生成分布逼近真实分布,使用的度量是JS散度。训练过程是一个最小最大化博弈:

当判别器训练得太强时,真实分布与生成分布几乎没有重叠。此时JS散度会退化成常数:

JS散度的“梯度消失”让生成器失去了探索新模式的动力。同时,KL散度是不对称的:$D_{KL}(p_g \parallel p_{\text{data}})$ 对“生成分布覆盖了真实分布没有的地区”惩罚极大,而对“漏掉了真实分布的一部分”惩罚较小。聪明的生成器宁可漏掉很多模式,也不愿生成一些容易被判假的新样本,于是进一步向少数模式坍缩。

就像学生发现“只要答老师讲过的原话就得分,答自己的理解可能被扣分”,那当然所有人都会背原话。这正是模式崩溃的根源——不是生成器笨,而是优化目标在无形中奖励了“走捷径”。

V(D,G)=Ex∼pdata[log⁡D(x)]+Ez∼pz[log⁡(1−D(G(z)))]\displaystyle V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]
  1. 两个分布$p_{\text{data}}$ 是真实分布,$p_g$ 是生成器当前的分布,二者都是高维空间中的概率密度函数。
  2. 中间分布$\frac{p_{\text{data}}+p_g}{2}$ 是取两个分布的平均,当作“合并后的参考分布”。
  3. KL衡量$D_{KL}(P \parallel Q)$ 衡量用 $Q$ 去近似 $P$ 时的信息损失,值越小说明两分布越接近。
  4. JS散度把两个方向上的KL各取一半相加,得到一个对称的距离度量,范围在0到log2之间。
  5. 关键缺陷当 $p_{\text{data}}$ 和 $p_g$ 的支持集不重叠时,两个KL都到达最大值,JS散度恒等于 $\log 2$,梯度为零。生成器听不到任何“该往哪走”的方向信号,只能原地打转。

诊断方法

老师想确认班里是不是存在大规模抄答案,最直接的办法就是把50份作业全部摊开,比一看开头就能发现雷同。诊断模式崩溃也是同样的思路。

第一招是样本可视化。从生成器中采样一批图像,直接排列成网格。如果你用肉眼看一遍,发现很多图几乎相同,或者只有细微的颜色变化,那基本可以断定发生了部分模式崩溃。更精细的做法是把图像映射到低维空间(比如t-SNE)显示,真实样本和生成样本各自聚类。如果生成样本的簇明显少于真实样本的簇,说明坍缩了。

第二招是多样性指标。给定一批生成样本,计算两两之间的距离(如欧氏距离),取平均距离或距离直方图。平均距离越小,多样性越差。也可以计算聚类中心的数量:用简单的聚类算法把生成样本聚成K簇,如果K远小于真实模式数,就是崩溃。这个指标还可以做成训练曲线,每N步计算一次,从数值上监控。

第三招是观察损失曲线。注意判别器损失和生成器损失的走势:当判别器损失持续降低并保持在一个很小的值,而生成器损失不再下降甚至上升时,要警惕。因为这意味着判别器已经能轻松识破所有假样本,生成器只能退守到“最不容易被发现”的那一小块区域里。配合采样可视化,能确认是否崩溃。

诊断的本质是建立一个“多样性仪表盘”。就像老师不能只靠感觉,而要定期统计“哪些句子被用了多少次”。你把多样性指标接入训练循环,一旦低于阈值,就触发接下来的干预措施。

Minibatch Discrimination

老师终于意识到,问题出在“只看单份作业”上。新制度来了:批改时把全班作业摊开对比,任何两份答案相似度超过80%的,判定为可疑。学生从此不敢再撞车,只能各写各的。

Minibatch Discrimination(批量判别)就是给判别器装上“全班对比”的眼睛。传统GAN的判别器对每个样本独立判断真假,从不看其他样本;而批量判别让判别器在看某个样本时,同时参考同批次里其他样本的样子。如果这个样本和别的样本过于相似,判别器就有理由怀疑它是假的。

具体实现时,判别器先在中间层为每个样本提取一个特征向量 $M_i$。然后计算样本之间的相似度,得到“撞车程度”:

有了这个惩罚信号,生成器如果只生成同一类的样本,判别器就会因为“这批太雷同”而轻松判假。生成器被迫把能量分散到不同的模式上,以降低批内相似度。实现时要注意两点:批次大小要足够大,否则统计量不稳定;特征层的选择会影响效果,通常选倒数第二层。

这招相当于给老师配备了一张“雷同度雷达图”,只要有人抄同一页答案,雷达就会报警。但它不是万能的,如果batch太小或者模式本身就有相似的,可能误报,所以后来研究者们又提出了基于Wasserstein距离的更根本解法。

oi=∑j≠iexp⁡(−∥Mi−Mj∥1)\displaystyle o_i = \sum_{j \neq i} \exp\left(-\|M_i - M_j\|_1\right)
  1. 特征向量$M_i$ 是判别器中间层为第 $i$ 个样本提取的特征,它比原始像素更抽象,捕捉了样本的“风格”与“结构”。
  2. 样本对距离$\|M_i - M_j\|_1$ 是第 $i$ 个样本与同批第 $j$ 个样本特征之间的L1距离,两个样本越像,距离越小。
  3. 指数映射$\exp(-距离)$ 把距离转成0到1之间的相似度,距离为0时相似度为1,距离越大越趋近0。
  4. 逐对求和对批次内所有 $j \neq i$ 求和,得到 $o_i$,它反映了第 $i$ 个样本在本批中有多少“同伴”。
  5. 特征拼接最后把 $o_i$ 作为额外特征拼接到原有特征上,让判别器输出时综合“这个样本本身像不像真的”与“这个样本是不是太雷同”两个信息。

Wasserstein距离原理

老师意识到“打对错”的方式太粗暴了。就算学生的答案不是标准答案,只要它沾点边,也应该给一个“差多少分”的反馈。这种平滑的反馈,能引导学生一步步朝正确答案靠拢,而不是被一票否决。

Wasserstein距离正是这种“平滑度量”。它另一个名字叫推土机距离(Earth Mover's Distance):把一堆土(真实数据分布)搬成另一堆土(生成数据分布),最少需要搬运多少距离。哪怕两堆土完全不相邻,也能给出一个实实在在的“搬运量”,而不是一个固定常数。这一性质完美解决了JS散度在分布不重叠时梯度消失的问题。

在实际计算中,直接枚举所有搬运方案不可行,但数学家给出了对偶形式:找一个满足1-Lipschitz条件的评分函数 $f$,让它拉大真实样本和生成样本的得分差:

这个公式意味着我们可以训练一个叫Critic的网络去逼近 $f$。Critic的职责不再是输出“真/假”概率,而是输出一个实数分数,分数越大代表越真实。生成器的目标则是让假样本的分数尽量追上真实样本。由于中间隔着的不是“悬崖”而是“缓坡”,梯度信号能稳定传递,生成器就可以一点点探索更大范围的模式。

打分的老师当然比打钩的老师更能引导学生进步。这也是为什么Wasserstein距离能从更底层缓解模式崩溃。

W(pr,pg)=sup⁡∥f∥L≤1Ex∼pr[f(x)]−Ex∼pg[f(x)]\displaystyle W(p_r, p_g) = \sup_{\|f\|_L \leq 1} \mathbb{E}_{x \sim p_r}[f(x)] - \mathbb{E}_{x \sim p_g}[f(x)]
  1. 两个分布$p_r$ 是真实数据分布,$p_g$ 是生成器的输出分布,我们想知道二者“差多少”。
  2. 上确界$\sup$ 表示在下面所有候选函数中取最大值,也就是找出一个“最挑剔的评分员”。
  3. Lipschitz约束$\|f\|_L \leq 1$ 表示函数 $f$ 的斜率绝对值不超过1。直观说,输入变化一点点,输出最多也只能变化一点点,避免评分员剧烈抖动。
  4. 真实样本期望$\mathbb{E}_{x \sim p_r}[f(x)]$ 是评分员给真实样本打分的平均分,我们希望它越高越好。
  5. 生成样本期望$\mathbb{E}_{x \sim p_g}[f(x)]$ 是评分员给生成样本打分的平均分,我们希望它越低越好。
  6. 距离即差距这两个平均分之差的最大值,就等价于两个分布之间的Wasserstein距离。

WGAN实践要点

给老师换个评分制度容易,但配套规则也得跟上。比如评分不能忽高忽低,否则学生会以为老师心情决定分数;也不能只练一个学生,让另一个学生跟不上进度。WGAN的落地,正是这些配套制度的集合。

第一项改造是损失函数。把原来的判别器换成Critic,输出实数分数,不再经过sigmoid。训练目标是最大化真实样本与生成样本在Critic上的分差,同时保证Critic满足1-Lipschitz约束:

第二项改造是让约束成立。原始WGAN用权值裁剪(weight clipping),把Critic的参数夹在[-c, c]之间,简单但容易让参数两极分化;更常用的WGAN-GP在损失里加入梯度惩罚项,当梯度的L2范数偏离1时给予惩罚,训练更稳定。

第三项改造是训练节奏。通常每个生成器更新步,Critic要多更新好几次(比如5次),因为只有Critic足够准确,Wasserstein距离的估计才可靠。另外,优化器最好用Adam或RMSProp,学习率要小,避免震荡。

在实践中,你会发现WGAN的训练崩坏现象明显减少:生成器损失不再突然跳升,生成样本的多样性也显著提升。但它不是银弹——如果Critic约束没做好,或者batch太小,仍然可能出现局部震荡。把WGAN和Minibatch Discrimination结合,往往能收到更好的效果。

min⁡Gmax⁡∥D∥L≤1Ex∼pr[D(x)]−Ez∼pz[D(G(z))]\displaystyle \min_G \max_{\|D\|_L \le 1} \mathbb{E}_{x \sim p_r}[D(x)] - \mathbb{E}_{z \sim p_z}[D(G(z))]
  1. Critic打分$D(x)$ 是Critic对真实样本的打分,$D(G(z))$ 是对生成样本的打分,分数反映“看起来多真”。
  2. 最大值优化$\max$ 让Critic尽量拉大真实分与假分之间的差距,相当于“火眼金睛地挑剔”。
  3. 约束条件$\|D\|_L \le 1$ 限制Critic的变化率不超过1,这是Lipschitz约束在目标函数中的体现。
  4. 最小值优化生成器 $G$ 要最小化这个差距,也就是让假样本的分数尽量接近真实样本的分数。
  5. 动态博弈Critic和生成器交替训练,最终达到平衡时,$D$ 的加号项与减号项之差就是Wasserstein距离的近似。

方案效果对比

老师现在既会用全班对比抓雷同,又能给出平滑分数引导进步,双管齐下,班级作业质量明显提升。但新制度也带来成本:批改时间变长,偶尔误伤原创答案。我们需要权衡不同方案的效果与代价。

Minibatch Discrimination的优势是直接、针对性极强。它专门打击“批量重复”,一旦生成器开始坍缩,批内相似度惩罚立刻生效。代价是计算量增加,需要构造距离矩阵,且效果受batch大小影响显著。batch太小,统计噪声大,可能误判;batch太大,显存压力大。

Wasserstein GAN的优势是从理论层面修复梯度消失。分布不重叠时JS散度没信号,Wasserstein距离仍有平滑梯度。这使得训练更稳定,生成器有动力探索更多模式。代价是训练技巧要求高:Lipschitz约束需要精心设计(裁剪还是梯度惩罚),Critic训练次数多,计算量更大。而且WGAN并不能100%避免模式崩溃,只是把概率大幅降低。

组合策略是工业落地中的常见选择:用WGAN-GP作为基础框架,再加一个轻量的Minibatch Discrimination分支,同时监控多样性指标。这样既获得了平滑梯度,又能对“雷同”实时亮红灯。缺点是训练复杂度进一步上升,调试时要多盯几个超参数。

回到老师的比喻:单靠“对比雷同”只能治标——学生可能换一种新写法照样扎堆;单靠“平滑评分”只能治本——可评分尺度没校准好也会出偏差。最稳妥的做法是两套制度一起上,再定期统计答案分布,动态调整。模式崩溃的解决,从来不是某一个技巧的胜利,而是一整套诊断与干预体系的胜利。

AI 应用场景

电商商品多角度图生成

阶段:模型训练 / 数据准备

解决的问题:电商平台希望用GAN为每件商品自动生成不同角度的展示图。传统方法直接训练GAN时,生成器经常只输出固定几个角度的重复图,无法覆盖商品全貌,导致图文详情页千篇一律。引入WGAN-GP作为主干,再配合Minibatch Discrimination,生成器被迫探索不同角度和光影模式,商品图多样性显著提升。

具体案例:某服装电商团队用约2万张白底模特图训练生成模型。早期模型生成的结果中,60%的图片角度集中在正面平拍,侧面和背面占比极低。加入多样性指标监控后,他们发现训练到1万步时多样性指数降至0.3,于是紧急接入Minibatch Discrimination,最终将正面、侧面、背面的比例拉回到接近真实数据的分布。

虚拟角色头像批量设计

阶段:模型评估 / 在线服务

解决的问题:游戏公司需要为NPC批量生成不同风格的虚拟头像。传统方法用普通GAN,生成结果会出现大量“同一张脸换发型”的情况,玩家会觉得角色缺乏辨识度。用Wasserstein距离训练Critic,同时计算生成批次内的平均L1距离作为多样性指标,一旦指标低于阈值就自动调整生成器的噪声输入分布。

具体案例:某独立游戏开发组使用WGAN-GP生成8000个NPC头像。训练过程中,他们发现当判别器(Critic)学习率设置过高时,多样性指标骤降。通过回滚学习率并延长Critic的预训练轮数,最终生成结果的多样性提升了约45%,且单个头像的清晰度没有明显下降。

医疗影像异常样本增强

阶段:数据增强 / 少样本学习

解决的问题:医疗影像中正异常样本比例严重失衡,需要生成额外的异常病灶图像。普通GAN在少量真实样本上训练容易崩溃,生成的病灶形态单一,无法覆盖肿瘤的多种形状和位置。Minibatch Discrimination在这里尤其关键:判别器通过批量对比,能识别“生成的病灶全都长得一样”,从而迫使生成器模仿出不同位置、不同大小的病灶。

具体案例:某医院放射科与AI团队合作,用3000张CT切片训练病灶生成模型。原始GAN生成的图像中,90%的病灶都集中在图像右下角。引入WGAN-GP和批量判别后,生成病灶在不同象限的分布从“单点集中”变为“全域覆盖”,辅助诊断模型的召回率提升了约12%。

Python 演示

python34 行
import numpy as np def sample_real(n_per_cluster=128, n_clusters=8):    """从真实分布采样:8个清晰高斯簇"""    centers = np.linspace(-3, 3, n_clusters)    xs, ys = [], []    for c in centers:        xs.append(np.random.normal(c, 0.3, n_per_cluster))        ys.append(np.random.normal(0, 0.3, n_per_cluster))    return np.column_stack([np.concatenate(xs), np.concatenate(ys)]) def sample_collapsed(n=1024):    """模拟崩溃的生成器:只从一个模式采样"""    x = np.random.normal(0, 0.35, n)    y = np.random.normal(0, 0.35, n)    return np.column_stack([x, y]) def minibatch_diversity_features(X, temperature=1.0):    """Minibatch Discrimination的核心统计量"""    n = X.shape[0]    diff = X[:, None, :] - X[None, :, :]    dist = np.sqrt((diff ** 2).sum(-1))    np.fill_diagonal(dist, np.inf)    similarity = np.exp(-dist / temperature)    return similarity.sum(-1) real = sample_real()fake_collapse = sample_collapsed()o_real = minibatch_diversity_features(real)o_fake = minibatch_diversity_features(fake_collapse) print("真实分布样本平均撞车程度:", round(o_real.mean(), 2))print("崩溃生成器样本平均撞车程度:", round(o_fake.mean(), 2))print("比例:", round(o_fake.mean() / o_real.mean(), 2))
目的:用numpy实现Minibatch Discrimination的核心统计量,对比“正常多样分布”和“模式崩溃分布”在批量撞车程度上的差异。崩溃样本的撞车程度会远高于真实样本,说明该特征能有效诊断模式崩溃。
  1. diff = X[:, None, :] - X[None, :, :]通过广播计算所有样本对之间的坐标差,生成三维张量,避免写双重for循环。
  2. dist = np.sqrt((diff ** 2).sum(-1))对每个样本对的坐标差平方求和再开方,得到两两欧氏距离矩阵。
  3. np.fill_diagonal(dist, np.inf)把对角线上的“自己与自己”的距离置为无穷,防止样本把自身当成同类。
  4. similarity = np.exp(-dist / temperature)用指数函数把距离转成0到1的相似度,距离越近相似度越接近1。
  5. return similarity.sum(-1)对每个样本的所有“同伴相似度”求和,得到撞车程度 $o_i$。
  6. fake_collapse.mean() / real.mean()如果比例明显大于1,说明生成分布严重集中,需要警惕模式崩溃。

常见误区

误区我总觉得模式崩溃是训练跑了很多轮之后才出现的问题,一开始的生成样本明明很多样,所以只要盯着后期就行。

正解模式崩溃可能发生在训练的任何阶段。尤其在GAN训练不稳定时,前期生成器很快就会找到“好骗”的区域并钻进去。像那个抄答案的比喻,学生可能第一周就开始抄了。所以必须从训练一开始就监控多样性指标,而不是等到loss出现异常才处理。

为何常见:因为很多教程展示的崩溃案例都是“训练后期样本变差”,让人误以为这是老模型特有的毛病。

误区我把GAN换成WGAN之后,训练曲线确实稳定了很多,所以模式崩溃问题应该就彻底没有了。

正解Wasserstein距离通过平滑梯度缓解了“梯度消失”导致的崩溃,但它并不保证生成器一定覆盖所有模式。实际上WGAN也可能出现轻微的模式丢失,尤其在模式本身极多、数据维度极高时。它更像是把“悬崖”改成了“缓坡”,学生依然可能偷懒只走一条好走的路。

为何常见:因为WGAN论文中演示的效果非常惊艳,给人“万能解”的错觉。

误区我写脚本监控生成样本的平均两两距离,只要这个数字很大,是不是就说明没有模式崩溃?

正解平均距离大只能说明“样本之间不重复”,但生成样本可能完全偏离真实数据,变成毫无意义的“随机噪声”。指标要结合真实数据比较才有意义,比如对比生成样本与真实样本的距离分布,或者计算生成样本落在真实模式附近的占比。就像学生虽然各有各的答案,但全都跑题了,也不能算好作业。

为何常见:因为“多样性”和“真实度”是两个维度,初学者容易只看其中一个。

误区既然批量判别是看一个batch里的样本雷不雷同,那我是不是把batch size设成最大,判定就更准确?

正解batch太大一方面显存爆炸,另一方面距离矩阵是O(n²)复杂度,训练速度急剧下降。更重要的是,真实数据中同一个batch里本来就可能有相似样本,batch过大反而让“撞车”误报率升高。通常batch size在32~128之间即可,并且要对相似度做温度缩放调节灵敏度。

为何常见:因为人对“对比样本越多越公平”的直觉在统计上并不总是成立,噪声也会随样本数增加而被放大。

面试题

Q1. 在GAN训练中,Mode Collapse最典型的症状是什么?

单选题 · easy

  • A.生成器权重全部变成零
  • B.生成样本集中在少数几个模式← 正确答案
  • C.判别器输出全部接近0.5
  • D.生成图像整体模糊不清

答案:B。模式崩溃的核心是生成分布被压缩到少数峰上,生成样本多样性缺失。选项B准确描述了这一症状。A是训练失败但非模式崩溃特征;C表示判别器完全无法区分,但不代表崩塌;D是模式覆盖不足的另一类问题(比如欠训练或网络结构问题),并不等价于模式崩溃。

Q2. 原始GAN中使用JS散度,最常见的理论缺陷是?

单选题 · easy

  • A.计算复杂度太高
  • B.分布不重叠时梯度消失← 正确答案
  • C.无法处理高维数据
  • D.只适合离散数据

答案:B。当真实分布和生成分布的支持集不重叠时,JS散度恒为log2,梯度为零,生成器得不到更新方向。这就是WGAN要换用Wasserstein距离的原因。其他选项均不是JS散度在GAN中的核心缺陷。

Q3. Minibatch Discrimination中,样本i的撞车程度 o_i 是如何计算的?

单选题 · mid

  • A.计算样本i与所有真实样本的距离
  • B.对batch内其他样本的特征距离取指数负值后求和← 正确答案
  • C.统计batch内被判别为假的样本数量
  • D.计算样本i与batch平均特征的距离

答案:B。o_i = Σ_{j≠i} exp(-||M_i - M_j||_1),综合了该样本与批内其他样本的相似度。如果太相似,o_i会较大,判别器可以据此判假。选项D只与平均值比较,丢失了逐对信息。

Q4. 关于Wasserstein距离的1-Lipschitz约束,下列理解正确的是?

单选题 · mid

  • A.要求评分函数必须是线性的
  • B.限制评分函数的输出范围在0到1之间
  • C.限制评分函数的变化速率不超过1← 正确答案
  • D.要求真实样本和生成样本的均值相等

答案:C。1-Lipschitz约束指对任意两点,函数值之差不超过两点距离之差,即斜率不超过1。它保证Wasserstein距离的可估计性和梯度稳定性。选项C正确。A大绝对;B是sigmoid的特征;D是矩匹配,都不满足约束要求。

Q5. WGAN-GP相比原始WGAN的主要改进是?

单选题 · mid

  • A.使用更大的学习率
  • B.用梯度惩罚替代权值裁剪← 正确答案
  • C.增加判别器隐藏层数量
  • D.改用均方误差损失

答案:B。原始WGAN用权值裁剪实现Lipschitz约束,容易导致参数集中在边界值。WGAN-GP通过惩罚梯度的L2范数偏离1来约束,训练更稳定。选项B正确;其他选项不是核心改进。

Q6. 如果生成器已经发生部分模式崩溃,下面哪种诊断结果最典型?

单选题 · hard

  • A.判别器损失一直为0
  • B.生成样本聚类数远小于真实数据聚类数← 正确答案
  • C.生成器损失快速收敛到全局最优
  • D.生成样本的平均距离等于真实样本的平均距离

答案:B。部分模式崩溃意味着生成分布只覆盖真实分布的少数几个簇。用聚类算法统计生成样本的簇数,会明显少于真实数据簇数。选项B直接指向崩溃。A是判别器完全取胜的非正常状态;C不能说明多样性;D只反映一个标量,不能证明模式覆盖。

Q7. 下列哪些手段可以有效缓解或解决GAN模式崩溃问题?

多选题 · mid

  • A.使用Minibatch Discrimination← 正确答案
  • B.改用Wasserstein距离作为训练目标← 正确答案
  • C.同时监控并惩罚批内样本重复← 正确答案
  • D.增大生成器学习率到0.1以上

答案:ABC。Minibatch Discrimination和批量雷同惩罚本质上是同一类方法,能直接抑制重复;Wasserstein距离缓解梯度消失,降低崩溃概率。学习率过大反而容易导致训练不稳定甚至崩溃,选项D错误。

Q8. 关于KL散度的不对称性,下列说法正确的是?

多选题 · mid

  • A.D_KL(p_g||p_data)对“生成虚假样本”的惩罚更大← 正确答案
  • B.D_KL(p_data||p_g)对“漏掉真实模式”有较强要求← 正确答案
  • C.KL散度天然鼓励生成器覆盖所有模式
  • D.KL散度不对称可能让生成器倾向于集中到少数模式← 正确答案

答案:ABD。KL散度不满足对称性。当优化前向KL时,生成器宁可错过一些真实模式,也不愿生成虚假样本,从而加剧模式崩溃。选项A描述了前向KL的惩罚方向,B描述了反向KL的作用,D是结果。C说法相反。

Q9. 在WGAN训练中,为了让Critic近似Wasserstein距离,下列做法正确的是?

多选题 · hard

  • A.对Critic参数做权值裁剪← 正确答案
  • B.在损失中加入梯度惩罚← 正确答案
  • C.让Critic的输入经过sigmoid
  • D.训练时让Critic与生成器交替更新← 正确答案

答案:ABD。权值裁剪和梯度惩罚都是实现Lipschitz约束的常见手段。Critic和生成器交替训练是标准流程。Critic输出是实数,不应接sigmoid,否则会丢失距离的度量性质,C错误。

Q10. 假设你发现训练后的GAN生成样本均匀覆盖了所有模式,但每个模式内部的方差极小,这意味着什么?

单选题 · extreme

  • A.轻度模式崩溃,仍需优化← 正确答案
  • B.完全没崩溃,训练成功
  • C.判别器过弱
  • D.生成器过拟合训练集

答案:A。覆盖所有模式只说明“模式不缺失”,但模式内方差过小说明生成样本仍缺乏细节多样性,是部分崩溃的一种表现。好比学生每道题都写了,但所有解答都是同一句话换了个主语。因此不能算完全成功,需要监控模式内多样性。