想象一条老街上有一对传奇搭档:造假师小G和鉴定师老D。小G每天躲在画室里临摹大师名作,老D则坐在铺子里负责把关“真迹还是赝品”。一开始,小G的画能骗过外行,却骗不了老D的毒眼;可老D每说破一次,小G就越发清楚鉴定师在看哪里、会怎样判断。反过来,小G的画越像,老D的眼力也越被逼得敏锐。两人像在签一份没有第三方的对赌协议:一方赢的,正是另一方输的。这样几百个回合下来,小G的画几乎能以假乱真,老D也练成了火眼金睛。 生成对抗网络(GAN)就是把这段街头江湖写进神经网络:一个网络负责“造假”,一个网络负责“鉴定”,两者用梯度互相出招,最终让生成器学会真实世界才有的纹理、光影和结构。这篇文章就用“造假师与鉴定师”这对主角,带你拆解GAN对抗训练的原理、训练动态与实战调参经验。

岗位关联

对AI从业者而言,理解GAN的对抗训练机制,是掌握生成式AI底层博弈逻辑的必修课;它也能帮你读懂扩散模型、风格迁移等前沿技术的进化脉络。

目录
  1. 可视化演示
  2. 对抗博弈目标
  3. 损失函数设计
  4. 梯度更新策略
  5. 训练动态分析
  6. 收敛性讨论
  7. 缓解方法
  8. 调参经验
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

P_data (真实) P_g (生成) GAN Minimax 博弈:min_G max_D V(D,G) 生成器 G min_G max_D V(D,G) = E[log D(x)] + E[log(1-D(G(z)))] 全局最优:P_g = P_data \u2...

对抗博弈目标

造假师小G和鉴定师老D签的合同写得很清楚:老D每收到一幅画,都要给出“这是真迹”的概率;小G每次从草稿本z里随手抽一张速写,把它“润色”成大师风格。老D的目标是让真画得高分、假画得低分;小G的目标恰好相反,他盼着老D对假画也给出高分。两人盯着同一张分数表,却朝两个相反方向用力,这就是零和博弈。

这张分数表在GAN里叫价值函数V(D,G)。它由两部分组成:对真实样本x,老D判真的概率是D(x),越接近1越好;对生成样本G(z),老D判真的概率是D(G(z)),老D希望它接近0,小G却希望它接近1。于是,训练目标被写成minimax(极小极大)博弈:生成器想压低结果,判别器想抬高结果。

回到老街:合同上只有一句“老D负责挑错,小G负责圆谎”,但正是这个看似简单的零和结构,让两个网络在对抗中互相打磨。注意,这一阶段还没有涉及具体梯度,只定义了“胜负”。

min⁡Gmax⁡DV(D,G)=Ex∼pdata[log⁡D(x)]+Ez∼pz[log⁡(1−D(G(z)))]\min_G \max_D V(D,G) = \displaystyle \mathbb{E}_{x\sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z\sim p_z}[\log(1-D(G(z)))]
这个公式就是“对赌合同”的数学版:左边是生成器和判别器争夺的极值,右边是两人各自关心的分数。
  1. 真实样本打分对真实图片判定为真的概率取对数并求均值,老D越准这一项越大。
    Ex∼pdata[log⁡D(x)]\mathbb{E}_{x\sim p_{\text{data}}}[\log D(x)]
  2. 生成样本惩罚对假画“被判假”带来的收益取对数,老D越能识破假画,这一项越接近0。
    Ez∼pz[log⁡(1−D(G(z)))]\mathbb{E}_{z\sim p_z}[\log(1-D(G(z)))]
  3. 双层极值外层最小值对应生成器G,内层最大值对应判别器D,双方争夺同一个目标。
    min⁡Gmax⁡DV(D,G)\min_G\max_D V(D,G)

损失函数设计

有了对赌合同,双方还要各拿一本记分册。老D的记分册很直观:真画判真得分,假画判真扣分。用损失函数写出来,就是把价值函数加上负号,让“越准越小”。小G的记分册则有个陷阱:如果按原始合同原样抄,G要最小化\(\mathbb{E}[\log(1-D(G(z)))]\)。当老D已经一眼看穿假画时,D(G(z))接近0,\(\log(1-0)=0\),小G的记分册上永远是个平滑的“0”,梯度也趋近于0。造假师收到的反馈太少,完全不知道该改哪里。

为了让小G在“被识破”时也得到强烈信号,实践里改用非饱和损失:让G最大化\(\log D(G(z))\),等价于最小化\(-\log D(G(z))\)。当老D识破假画时,D(G(z))很小,\(-\log\)会给出一个很大的数,小G就知道必须立刻调整构图。

回到造假师视角:老鉴定师越冷漠地说“一眼假”,新损失函数反而像考试卷上的红叉,越刺激造假师重新提笔。这就是非饱和损失能救训练的核心原因。

LD=−Ex∼pdatalog⁡D(x)−Ez∼pzlog⁡(1−D(G(z)))\mathcal{L}_D = - \mathbb{E}_{x\sim p_{\text{data}}}\log D(x) - \mathbb{E}_{z\sim p_z}\log(1-D(G(z)))
LG=−Ez∼pzlog⁡D(G(z))\mathcal{L}_G = - \mathbb{E}_{z\sim p_z}\log D(G(z))
判别器两个负项分别管“求真”和“打假”;生成器则用非饱和损失,保证被识破时仍能获得强烈的改进梯度。
  1. 判别器求真项对真画判真概率取负对数,越小表示越不犯错。
    −Ex∼pdatalog⁡D(x)-\mathbb{E}_{x\sim p_{\text{data}}}\log D(x)
  2. 判别器打假项对假画判假概率取负对数,越小表示越会识破赝品。
    −Ez∼pzlog⁡(1−D(G(z)))-\mathbb{E}_{z\sim p_z}\log(1-D(G(z)))
  3. 生成器骗过项让D对假画判真概率尽量大,非饱和版本避免早期梯度消失。
    −Ez∼pzlog⁡D(G(z))-\mathbb{E}_{z\sim p_z}\log D(G(z))

梯度更新策略

定义好胜负和记分册,接下来是“怎么练”。真实训练采用交替更新:一次迭代里,先抽一批真画,再抽一批噪声让小G画一批假画,用这批混合样本更新老D;随后重新抽噪声,让小G去骗刚更新过的老D,再用这次结果更新小G。这相当于两人轮流出招:鉴定师先盯紧摊位,造假师再研究鉴定师的新习惯。

原始论文里,训练通常每更新k步判别器再更新1步生成器,实践中最常用k=1。梯度方向也分成两半:老D沿着让价值函数增大的方向走,小G沿着让“骗过项”增大的方向走。这里对生成器使用非饱和形式的梯度上升,和上一节的损失函数保持一致。

老街上的两人不是同时出招,而是回合制。这让每一方都能观察对手的最新习惯并做出反应。交替更新是GAN最基础、也最容易被忽视的节奏。

θD←θD+η∇θD1m∑i=1m[log⁡D(xi)+log⁡(1−D(G(zi)))]\theta_D \leftarrow \theta_D + \eta \nabla_{\theta_D} \frac{1}{m}\sum_{i=1}^m \left[\log D(x_i)+\log(1-D(G(z_i)))\right]
θG←θG+η∇θG1m∑i=1mlog⁡D(G(zi))\theta_G \leftarrow \theta_G + \eta \nabla_{\theta_G} \frac{1}{m}\sum_{i=1}^m \log D(G(z_i))
判别器做梯度上升是为了提高自己的鉴定收益;生成器做梯度上升是为了提高自己骗过判别的能力。
  1. 采一批真画与假画从真实分布和噪声分布各抽样m个样本,组成一个训练小批。
    xi∼pdata,zi∼pzx_i \sim p_{\text{data}},\quad z_i \sim p_z
  2. 判别器梯度上升把混合样本的分数累加后沿梯度方向更新,让老D越来越会挑错。
    θD←θD+η∇θD1m∑i[log⁡D(xi)+log⁡(1−D(G(zi)))]\theta_D \leftarrow \theta_D + \eta \nabla_{\theta_D} \frac{1}{m}\sum_i \left[\log D(x_i)+\log(1-D(G(z_i)))\right]
  3. 生成器梯度上升让假画在老D那里得到更高分,小G据此调整自己的画笔。
    θG←θG+η∇θG1m∑ilog⁡D(G(zi))\theta_G \leftarrow \theta_G + \eta \nabla_{\theta_G} \frac{1}{m}\sum_i \log D(G(z_i))

训练动态分析

轮流练几十轮之后,老街出现新问题:天平会左右乱摆。如果老D练得太强,一眼看穿所有假画,小G拿到的梯度几乎为零,直接罢工;如果小G进步太快,老D变成瞎猜,假画全都蒙混过关,老D也不再提供有效监督。理想的动态是两者始终处在“追平—再超越”的拉锯中。

从数学上看,当生成分布固定时,判别器有一个最优解:对任意样本x,它判真的概率等于真实分布密度在x处的占比。若生成分布和真实分布完全重合,这个占比就是0.5,老D只能抛硬币。

造假师最擅长的偷懒,就是反复临摹同一张《蒙娜丽莎》:既然鉴定师对这幅画偶尔走神,那就把整个画廊都挂满它。这种“生成样本单一重复”的现象叫模式崩溃,是训练动态中必须盯住的红色警报。

DG∗(x)=pdata(x)pdata(x)+pg(x)D_G^*(x)=\frac{p_{\text{data}}(x)}{p_{\text{data}}(x)+p_g(x)}
最优判别器不是一个固定网络,而是随着生成分布变化而变化的“最优反应”。当两个分布相同时,它无法再区分真假。
  1. 最优判别器对任意样本x,D的最优输出是真实分布密度与总分布密度的比例。
    DG∗(x)=pdata(x)pdata(x)+pg(x)D_G^*(x)=\frac{p_{\text{data}}(x)}{p_{\text{data}}(x)+p_g(x)}
  2. 真假难辨当生成分布等于真实分布时,判真概率是0.5,鉴定师完全靠猜。
    pg(x)=pdata(x)  ⇒  DG∗(x)=12p_g(x)=p_{\text{data}}(x) \;\Rightarrow\; D_G^*(x)=\frac{1}{2}

收敛性讨论

如果两人都按理论最优行动,最后会停在什么位置?博弈论里叫纳什均衡:小G以\(p_g=p_{\text{data}}\)的分布画画,老D以0.5的概率猜真伪,任何一方单方面改变策略都不会让自己更赚。原始GAN证明,当老D取到最优时,小G的目标等价于最小化真实分布与生成分布之间的JS散度。

但理论很丰满,现实很骨感。两个用神经网络参数化的玩家玩的是高维非凸博弈,交替梯度上升下降并不保证收敛。你常看到的loss上下乱跳,正是“纸上均衡”与“真实地形”之间的落差。

min⁡GV(G,DG∗)=2⋅JSD(pdata∥pg)−2ln⁡2\min_G V(G,D_G^*) = 2 \cdot \mathrm{JSD}(p_{\text{data}} \parallel p_g) - 2\ln 2
在最优判别器下,造假师其实是在努力减小两个分布的差异;当JS散度为0时,就等于完全复刻了真实分布。
  1. 代入最优判别器把\(D_G^*\)写回价值函数,生成器的目标变成两个分布之间的JS散度。
    min⁡GV(G,DG∗)=2⋅JSD(pdata∥pg)−2ln⁡2\min_G V(G,D_G^*) = 2 \cdot \mathrm{JSD}(p_{\text{data}} \parallel p_g) - 2\ln 2
  2. 全局最优JS散度非负且仅在两分布重合时取0,因此生成器的全局最优就是让生成分布等于真实分布。
    JSD(pdata∥pg)=0  ⇔  pg=pdata\mathrm{JSD}(p_{\text{data}} \parallel p_g)=0 \;\Leftrightarrow\; p_g=p_{\text{data}}

缓解方法

既然对局容易失控,实战经验就诞生了一批“防暴装置”。第一个是标签平滑:不要用硬标签1去给真画打分,而是用0.9之类的软标签,意思是“鉴定师别把话说死,留一点反应空间,否则造假师又被噎死”。第二个是特征匹配:让小G不再只看老D的最终判词,还要匹配老D中间层对真画和假画的“印象”,相当于要求造假师连鉴定师脑中的构图习惯也一起模仿。

此外还有谱归一化:把判别器每一层权重的谱范数限制住,让D作为函数不会变化过猛,梯度更平稳;小批量判别则让老D不再只看单幅画,而是抽查整批画——如果一批假画长得太像,就集体扣分,这专门对付模式崩溃。

这些方法本质上都是给两个对手加规则:要么让鉴定师语气柔和,要么让造假师模仿内部特征,要么让裁判看整批画而不是单幅画。规则越合理,老街上的军备竞赛才不至于打成一团乱麻。

LFM=∥Ex∼pdataf(x)−Ez∼pzf(G(z))∥22\mathcal{L}_{FM} = \left\| \mathbb{E}_{x\sim p_{\text{data}}} f(x) - \mathbb{E}_{z\sim p_z} f(G(z)) \right\|_2^2
特征匹配损失让生成器在判别器的“内行视角”下对齐分布,而不是只追求一句“像真画”的结论。
  1. 中间层特征\(f(x)\)是判别器某一中间层对输入样本输出的特征向量。
    f:X→Rdf: \mathcal{X} \to \mathbb{R}^d
  2. 分布均值差距把真实样本和生成样本的中间层特征分别取均值,再求欧氏距离平方。
    ∥Ex∼pdataf(x)−Ez∼pzf(G(z))∥22\left\| \mathbb{E}_{x\sim p_{\text{data}}} f(x) - \mathbb{E}_{z\sim p_z} f(G(z)) \right\|_2^2

调参经验

最后是老师傅们的实操口诀。第一,优化器选Adam,学习率常用2e-4,beta1调成0.5;学习率太大,两边会像喝醉了酒一样互相追尾,太小则几百轮不见长进。第二,别让D和G的“体能”差距过大:D可以用LeakyReLU,G常用ReLU加BatchNorm,但参数量要大致匹配。第三,不要只看loss曲线判断收敛,要同时看样本质量和FID指标。FID把真实与生成图片的特征分布拿到统计距离上比较,数字越小越接近。

最后,把每次实验的G/D loss曲线、FID曲线和样本截图存档。造假师和鉴定师的对局没有标准答案,但完整实验日志能让你在下一次训练翻车时,迅速锁定是节奏失衡、D太强还是G崩了。

FID=∥μr−μg∥22+Tr(Cr+Cg−2(CrCg)1/2)\mathrm{FID} = \|\mu_r-\mu_g\|_2^2 + \mathrm{Tr}\left(C_r+C_g-2(C_r C_g)^{1/2}\right)
FID从均值和协方差两个角度比较两组特征分布,比生成器loss曲线的视觉欺骗性小得多。
  1. 均值距离\(\|\mu_r-\mu_g\|_2^2\)衡量真实与生成特征中心之间的差距。
    ∥μr−μg∥22\|\mu_r-\mu_g\|_2^2
  2. 协方差匹配\(\mathrm{Tr}\left(C_r+C_g-2(C_r C_g)^{1/2}\right)\)衡量两个分布的离散程度和相关性是否一致。
    Tr(Cr+Cg−2(CrCg)1/2)\mathrm{Tr}\left(C_r+C_g-2(C_r C_g)^{1/2}\right)
  3. 符号含义\(\mu_r,C_r\)来自真实样本特征分布,\(\mu_g,C_g\)来自生成样本特征分布。
    μr,μg,  Cr,Cg\mu_r,\mu_g,\;C_r,C_g

AI 应用场景

老照片修复与图像超分辨率

阶段:模型训练

解决的问题:传统超分模型用L2像素误差约束,输出容易模糊、过于平滑;对抗训练逼迫生成器交出“经得起鉴定师细看”的纹理细节。

具体案例:某老照片修复产品输入一张低分辨率旧照,小G负责生成高清版本,老D负责对比真实高清照片。经过上万轮对抗,修复图不再有塑料感,皮肤纹路和发丝都更自然。

艺术风格迁移

阶段:模型训练与评估

解决的问题:风格迁移如果没有判别器,容易陷入“内容像但风格不伦不类”;有了对抗博弈,生成器必须骗过专门识别“莫奈风”的鉴定师。

具体案例:一款短视频App上线“一键莫奈”滤镜:用户把雪中小镇视频逐帧输入生成器,判别器打分决定画面是否足够像印象派,最后用FID筛选最佳模型版本。

图像数据增强

阶段:数据处理

解决的问题:工业场景中正样本多、负样本极少,直接训练分类器容易过拟合;用GAN学习正常样本的分布,可以补充高质量合成样本。

具体案例:某工厂用GAN生成表面瑕疵样本,让检测模型在小样本条件下也能学会区分划痕和污渍。造假师负责合成逼真缺陷图,鉴定师负责剔除一眼假的合成图。

Python 演示

python75 行
import mathimport torchimport torch.nn as nn torch.manual_seed(0)  class Generator(nn.Module):    def __init__(self):        super().__init__()        self.net = nn.Sequential(            nn.Linear(2, 16),            nn.ReLU(),            nn.Linear(16, 2)        )     def forward(self, z):        return self.net(z)  class Discriminator(nn.Module):    def __init__(self):        super().__init__()        self.net = nn.Sequential(            nn.Linear(2, 16),            nn.ReLU(),            nn.Linear(16, 1),            nn.Sigmoid()        )     def forward(self, x):        return self.net(x)  def sample_real(batch):    theta = torch.rand(batch) * 2 * math.pi    circle = torch.stack([torch.cos(theta), torch.sin(theta)], dim=1)    return circle + 0.08 * torch.randn(batch, 2)  def train():    G = Generator()    D = Discriminator()    opt_G = torch.optim.Adam(G.parameters(), lr=1e-3)    opt_D = torch.optim.Adam(D.parameters(), lr=1e-3)    loss = nn.BCELoss()     for step in range(2000):        # 训练判别器:真画判真,假画判假        real = sample_real(64)        z = torch.randn(64, 2)        fake = G(z).detach()        d_real = loss(D(real), torch.ones(64, 1))        d_fake = loss(D(fake), torch.zeros(64, 1))        d_loss = d_real + d_fake         opt_D.zero_grad()        d_loss.backward()        opt_D.step()         # 训练生成器:让判别器对假画判真        z = torch.randn(64, 2)        fake = G(z)        g_loss = loss(D(fake), torch.ones(64, 1))         opt_G.zero_grad()        g_loss.backward()        opt_G.step()         if step % 400 == 0:            print(step, 'D', round(d_loss.item(), 3), 'G', round(g_loss.item(), 3))  if __name__ == '__main__':    train()
目的:用PyTorch在二维环形数据上训练一个迷你GAN,演示判别器与生成器交替更新、非饱和损失和Adam优化。
  1. fake = G(z).detach()训练判别器时断开生成器梯度,避免反向传播误伤小G。
  2. d_loss = d_real + d_fake老D同时学习“真画判真”和“假画判假”。
  3. g_loss = loss(D(fake), torch.ones(64, 1))小G使用非饱和损失,目标是让老D对假画判真。
  4. opt_D.step()先更新鉴定师,让老D先变强一点点。
  5. opt_G.step()再更新造假师,让小G根据老D的最新反应重新调笔。

常见误区

误区我训练GAN时看到D的loss一路下降到0,以为判别器练到位了,GAN很快就能收敛。

正解D的loss太低,往往意味着老D把真假彻底分开,小G的梯度会趋近于0,双方失去对局。GAN不是普通分类任务,不能单看D loss。理想状态是D对真实样本给0.9左右,对假样本给0.1左右,留出梯度空间。

为何常见:因为分类任务里loss越低越准,这个惯性思维被直接带到了对抗训练中。

误区我觉得D越强,给G的反馈越有信息量,所以应该先把D训练到近似完美,再开始训练G。

正解如果老D达到100%准确,小G拿到的原始损失梯度会消失,几乎学不到任何东西。正确做法是让D强到能提供有效信号,但又要给小G留一条“改画”的坡道,所以通常D和G交替更新,保持势力均衡。

为何常见:人们容易把“标准答案”思维套到博弈中,忽略了对抗任务需要的是难度适中的陪练。

误区小G生成的全是同一张画,我以为是loss太高,于是加大学习率继续训练。

正解模式崩溃是小G找到的一条“偷懒捷径”:“只要画这幅,老D就会放行。”此时loss不一定高,甚至可能很漂亮。解决办法是引入小批量判别、特征匹配或多样性奖励,让造假师不能靠复读过关。

为何常见:只看数值不看样本分布,自然发现不了复制粘贴式的生成结果。

误区既然原始GAN证明了存在全局最优,那只要训练够久,模型就一定会收敛到纳什均衡。

正解理论最优是在“判别器取最优反应”的假设下推导的,而神经网络训练是高维非凸博弈,交替梯度上升下降并不保证收敛。实际中loss震荡、模式崩溃都是常态,需要靠调参和约束手段逼近好的局部均衡。

为何常见:把数学证明中的“存在性”误当成了“算法可达性”,忽略了优化过程的非凸复杂性。

面试题

Q1. GAN中生成器和判别器的关系最适合类比为?

单选题 · easy

  • A.造假师与鉴定师← 正确答案
  • B.厨师与食客
  • C.教师与学生
  • D.股东与经理

答案:A。生成器努力造假,判别器努力识破,两者收益完全相反,这正是“造假师与鉴定师”的零和关系。厨师的菜品不是为欺骗食客而存在,教师和股东也不以对抗为本质。

Q2. 在原始GAN的价值函数中,判别器D的目标是?

单选题 · easy

  • A.最大化价值函数← 正确答案
  • B.最小化价值函数
  • C.保持价值函数不变
  • D.让价值函数取负值

答案:A。原始GAN是一个minimax博弈,D扮演“鉴定师”,希望把真画和假画分得越开越好,因此要最大化价值函数;生成器G才负责最小化它。

Q3. 原始生成器损失\(\log(1-D(G(z)))\)在训练初期容易梯度消失,原因是?

单选题 · easy

  • A.判别器对假样本信心过低← 正确答案
  • B.判别器对假样本信心过高
  • C.生成器参数发生梯度爆炸
  • D.噪声向量服从正态分布

答案:A。当D一眼识破假画时,D(G(z))接近0,原始损失\(\log(1-0)=0\),梯度也趋近于0,小G得不到改进信号。B选项会让损失很大而不是消失,C和D与梯度消失无直接关系。

Q4. 关于原始损失和非饱和损失,下列哪些说法正确?

多选题 · mid

  • A.原始损失在判别器过强时梯度易消失← 正确答案
  • B.非饱和损失在假画被识破时仍有强梯度← 正确答案
  • C.非饱和损失不再需要判别器参与
  • D.原始损失和非饱和损失的目标完全等价

答案:AB。原始损失在D过于自信时梯度消失;非饱和损失用\(-\log D(G(z))\),D判假概率越小,惩罚越大,梯度越强。非饱和损失仍需要D参与,且两者数学目标并不完全等价。

Q5. 训练GAN时,判别器更新太强可能会导致?

单选题 · mid

  • A.生成器梯度消失← 正确答案
  • B.生成器梯度爆炸
  • C.判别器参数为零
  • D.噪声向量全部失效

答案:A。老D如果太强,小G生成的画全部被一眼识破,原始生成器损失落在一个饱和区,梯度接近零。这不是梯度爆炸,也不会让参数归零。

Q6. 模式崩溃最典型的表现是?

单选题 · mid

  • A.生成样本单一重复← 正确答案
  • B.生成样本全是噪声
  • C.D的loss持续为零
  • D.G的参数量急剧膨胀

答案:A。模式崩溃指小G发现某幅假画总能骗过D,于是反复生成同一幅或同一类图像,多样性严重丢失。它不直接表现为参数膨胀或D loss恒定为零。

Q7. 在最优判别器下,当生成分布等于真实分布时,判别器输出应为?

单选题 · mid

  • A.约等于0.5← 正确答案
  • B.约等于1.0
  • C.约等于0.0
  • D.约等于0.25

答案:A。当真假分布完全重合时,最优判别器公式给出0.5,相当于抛硬币,老D再也无法区分哪边是真、哪边是假。

Q8. 谱归一化主要缓解GAN训练不稳定的原因是?

单选题 · hard

  • A.把判别器权重按谱范数归一化← 正确答案
  • B.把生成器的输出归一化到单位长度
  • C.用更大的学习率加快收敛
  • D.把真实和生成样本取平均

答案:A。谱归一化限制判别器每一层权重矩阵的谱范数,让D满足Lipschitz条件,避免梯度变化过猛。它不是作用于生成器输出,也不是单纯调学习率。

Q9. 下列哪些做法专门用于缓解模式崩溃?

多选题 · mid

  • A.小批量判别← 正确答案
  • B.特征匹配← 正确答案
  • C.增加噪声维度
  • D.去除判别器

答案:AB。小批量判别让D检查整批样本是否重复,特征匹配让G对齐D的中间层特征,都能抑制单一样本复读。增加噪声维度只能扩大采样空间,去除判别器则直接摧毁对抗训练。

Q10. 关于GAN收敛性的数学结论,哪些正确?

多选题 · extreme

  • A.最优判别器下生成损失等价于JS散度← 正确答案
  • B.交替梯度更新必然收敛到纳什均衡
  • C.全局最优时真假分布完全一致← 正确答案
  • D.模式崩溃即达到纳什均衡

答案:AC。当D取最优时,G的损失确实可等价为JS散度;全局最优对应\(p_g=p_{\text{data}}\)。但交替梯度上升下降在高维非凸博弈中不保证收敛,模式崩溃是坏的局部解,不是纳什均衡。