想象一间品牌旗舰店有一位经验老到的质检员,专门鉴定每件送来的商品是真品还是假货。隔壁的造假作坊拼命仿制,想蒙混过关。二者你来我往,正是 GAN 的核心画面:生成器(造假者)不断伪造,判别器(质检员)不断识破。问题在于,这位质检员如果不被约束,情绪会大起大落——遇到稍有差别的商品,打分就从 0 分跳到 100 分。造假者面对如此喜怒无常的评分,根本不知从何改进,整个市场陷入混乱。而“谱归一化”就是给质检员立一条上岗铁律:长相相近的商品,评分必须相近,最大变化速率不能超过某个安全值。这条铁律在数学上叫 Lipschitz 连续性,而“量化质检员最大反应幅度”的工具,就是谱范数。本文将从质检员的困境出发,一步步讲清谱范数是什么、怎么高效计算,以及如何用它把 GAN 训练从“摇摇欲坠”变成“稳稳当当”。

岗位关联

对 AI 从业者来说,掌握谱归一化意味着你面对 GAN 训练不稳定、模式坍塌、调参困难时,多了一个几乎零成本、即插即用的稳定器。它是生成模型优化中的关键技能,能显著提升实验效率和生成质量。

目录
  1. 可视化演示
  2. GAN的博弈困境
  3. Lipschitz连续性
  4. 矩阵谱范数
  5. 幂迭代近似
  6. 谱归一化实现
  7. 实战效果对比
  8. 工程落地要点
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示谱归一化的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。

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

谱归一化:谱范数的 谱范数的数学定义与Lipsch 幂迭代法高效计算谱范数 核心机制可视化 谱归一化整体架构与关键组件

GAN的博弈困境

名牌旗舰店的质检员每天面对两种货物:真品和仿冒品。造假作坊(生成器)总想做出以假乱真的商品,质检员(判别器)则必须给出“真或假”的判断。两者不断博弈:造假水平越高,质检标准也越高;质检越严,造假者越拼命。听起来既有竞争又促进进步,但这场博弈有一个隐患——质检员的打分风格如果不加约束,会越来越极端。

在深度学习里,这就是 GAN 的设定:生成器 G 从随机噪声 z 造出图片 G(z),判别器 D 输出 0 到 1 的“真品概率”。训练时两者玩一个最小最大博弈。理想状态是二者均衡进步,但实际中判别器 D 经常“赢太快”,打分曲线变得极端陡峭,梯度随之爆炸或消失,生成器得不到有效反馈,整个训练过程像跷跷板一样猛烈摇晃。

这个博弈的目标函数写成:

min⁡Gmax⁡DV(D,G)=Ex∼pdata[log⁡D(x)]+Ez∼pz[log⁡(1−D(G(z)))]\displaystyle \min_G \max_D 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. 最小最大博弈 min_G max_D:两个玩家目标相反——G 想最小化这个目标,D 想最大化它,就像造假者与质检员在同一个评分规则下较劲。

min⁡Gmax⁡DV(D,G)\min_G \max_D V(D,G)

2. 真品得分期望:对真实数据 x,D(x) 越接近 1,log D(x) 越大,这一项奖励质检员认出真品。

Ex∼pdata[log⁡D(x)]\mathbb{E}_{x\sim p_{\text{data}}}[\log D(x)]

3. 假货被识破的期望:对噪声 z 生成的假图,D(G(z)) 越小,log(1-D(G(z))) 越大,这一项奖励质检员识破假货、同时惩罚生成器。

Ez∼pz[log⁡(1−D(G(z)))]\mathbb{E}_{z\sim p_z}[\log(1 - D(G(z)))]

问题在于,这个 min-max 博弈没有任何“打分规矩”。质检员如果为了赢而不择手段——对一点点差异就判出天壤之别,造假者便无从学习。这正是 GAN 训练不稳定的根源,也引出我们需要的“打分规矩”:Lipschitz 约束。

Lipschitz连续性

想象质检员上岗前签一份承诺书:“如果两件商品肉眼几乎一样,我给它们的评分也几乎一样。”这就是 Lipschitz 连续性的通俗含义:输出的变化不能超过输入变化的一个固定倍数。没有这个承诺,质检员可以前一件打 100 分、后一件打 0 分,即使两者只差一个像素的噪声——这种“暴躁质检员”会让造假者彻底崩溃。

数学上,把判别器看成函数 f,把两张输入图记为 x1、x2,Lipschitz 约束写作:

∥f(x1)−f(x2)∥2≤K∥x1−x2∥2\displaystyle \|f(x_1) - f(x_2)\|_2 \le K \|x_1 - x_2\|_2

1. 输入变化量:两张图片逐像素相减后取二范数,衡量它们有多像。

∥x1−x2∥2\|x_1 - x_2\|_2

2. 输出变化量:质检员给两张图打分的差异的二范数。

∥f(x1)−f(x2)∥2\|f(x_1) - f(x_2)\|_2

3. 放大倍数 K:输出变化最多是输入变化的 K 倍,K 越小函数越“克制”。

∥f(x1)−f(x2)∥2≤K∥x1−x2∥2\|f(x_1) - f(x_2)\|_2 \le K \|x_1 - x_2\|_2

4. 1-Lipschitz 条件:K=1 时,评分的变化永远不会超过商品本身的变化。

K≤1K \le 1

ReLU、LeakyReLU 这类常用激活函数天然是 1-Lipschitz 的——它们的斜率不是 0 就是 1,绝不会放大输入差异。所以判别器里真正会“放大差异”的环节,是那些带权重矩阵的线性层。要约束整个判别器,只需要管住每一层线性映射的“放大倍率”。

质检员的承诺书有了,但怎么量化“最大放大倍率”?这就需要给每个打分环节测一次“手抖幅度上限”,也就是权重矩阵的谱范数。

矩阵谱范数

把质检员的每一项打分标准想象成一根弹簧:输入稍微一变,输出就被拉伸或压缩。弹簧能拉多长,取决于打分标准本身的结构。权重矩阵 W 就是这组弹簧的集合,而“最坏情况下能拉多长”就是这个矩阵的谱范数。

对线性层 f(x)=Wx,输入变化 δ 时输出变化是 Wδ,放大倍数取决于 δ 的方向。谱范数的定义就是“所有方向中最大的放大倍数”:

σ(W)=max⁡∥v∥2=1∥Wv∥2\displaystyle \sigma(W) = \max_{\|v\|_2 = 1} \|Wv\|_2

1. 单位方向 v:遍历所有“长度为一”的输入方向,像在所有角度都试一遍拉弹簧。

∥v∥2=1\|v\|_2 = 1

2. 拉伸后的长度:看 W 把方向 v 拉到多长,得到该方向的放大倍数。

∥Wv∥2\|Wv\|_2

3. 取最大值:所有方向中最大的长度就是谱范数,等于最大奇异值。

σ(W)=max⁡∥v∥2=1∥Wv∥2\sigma(W) = \max_{\|v\|_2=1}\|Wv\|_2

谱范数与奇异值分解密切相关:对 W 做 SVD,得到的奇异值从大到小排列,最大的那个就是 σ(W)。它同时回答了上一节的问题——线性层的 Lipschitz 常数恰好等于 σ(W)。于是“让打分平稳”的任务,变成了“把每层 W 的最大奇异值压到 1”。

但问题来了:SVD 每步训练都做一次会非常昂贵。这台“精确测弹簧的仪器”太慢,我们需要一个又快又够准的近似办法——这就是幂迭代法。

幂迭代近似

质检员想知道自己最大手抖幅度,又不想每件货都做全套仪器检验。换个思路:反复递上“同方向”的商品试探,观察哪个方向让他反应最大。迭代几次,最敏感的方向就会自动浮现。这就是幂迭代法的朴素直觉。

数学上,维护两个单位向量 u、v,让它们交替被 W 和 W^T 作用,再归一化:

v~←WTu~∥WTu~∥2,u~←Wv~∥Wv~∥2\displaystyle \tilde{\mathbf{v}} \leftarrow \frac{W^T \tilde{\mathbf{u}}}{\|W^T \tilde{\mathbf{u}}\|_2}, \qquad \tilde{\mathbf{u}} \leftarrow \frac{W \tilde{\mathbf{v}}}{\|W \tilde{\mathbf{v}}\|_2}

1. v 的更新:用转置矩阵 W^T 把 u 映射回输入空间,再归一化为单位向量。

v~=WTu~∥WTu~∥2\tilde{\mathbf{v}} = \frac{W^T\tilde{\mathbf{u}}}{\|W^T\tilde{\mathbf{u}}\|_2}

2. u 的更新:用原矩阵 W 把 v 映射回输出空间,再归一化。

u~=Wv~∥Wv~∥2\tilde{\mathbf{u}} = \frac{W\tilde{\mathbf{v}}}{\|W\tilde{\mathbf{v}}\|_2}

3. 谱范数近似:当 u、v 收敛到奇异向量时,u^T W v 就等于最大奇异值。

σ(W)≈u~TWv~\sigma(W) \approx \tilde{\mathbf{u}}^T W \tilde{\mathbf{v}}

幂迭代的收敛速度取决于最大奇异值与次大奇异值的差距,差距越大收敛越快。在 GAN 训练中,权重每步只更新一点点,因此我们甚至每步只做一次迭代:上一轮得到的 u 已经非常接近,新一轮只需“微调”它。这样每层每步只多一次矩阵向量乘法,成本极低。

现在“测手抖幅度”有了廉价工具,接下来就是最后一步——把质检员的每项打分标准除以测出的最大手抖幅度,让他在承诺范围内工作。

谱归一化实现

有了谱范数这个“最大手抖值”,规矩就简单了:把每个打分标准都除以自己的最大手抖值。就像给弹簧标定后重新装上——无论原来能拉多长,校准后统统只能拉到"1"。

对每层权重 W,谱归一化就是把整个矩阵除以它的谱范数 σ(W):

WSN=Wσ(W)\displaystyle W_{SN} = \frac{W}{\sigma(W)}

1. 原权重矩阵 W:线性层里待约束的参数,是打分标准的核心。

WW

2. 谱范数 σ(W):上一节用幂迭代求出的最大拉伸倍率,即“最大手抖值”。

σ(W)=u~TWv~\sigma(W) = \tilde{\mathbf{u}}^T W \tilde{\mathbf{v}}

3. 逐元素除法:把 W 里每个元素除以 σ(W),得到归一化后的权重。

WSN=Wσ(W)W_{SN} = \frac{W}{\sigma(W)}

4. 新的谱范数:σ(W_SN)=σ(W)/σ(W)=1,层的 Lipschitz 常数变成 1。

σ(WSN)=σ(W)σ(W)=1\sigma(W_{SN}) = \frac{\sigma(W)}{\sigma(W)} = 1

实现上,PyTorch 的 SpectralNorm 封装会自动维护 u 向量:前向时用 u 快速估计 σ(W),除以它完成归一化;反向传播时梯度照常回传,只是“除过范数”的 W_SN 参与计算。重要的是,这一步不需要额外的正则化超参数,也不需要手动调整裁剪区间。

至此质检员的承诺落实成代码:每个打分环节都被标定到“最大放大 1 倍”。于是整个判别器的反应变得平滑、有界,造假者终于能从稳定的反馈中学习,这就是谱归一化稳定 GAN 的完整逻辑链条。

实战效果对比

有了这套“限速带”,质检员的工作方式发生了质变。造假者终于能读懂打分规律:既然相似商品得分相近,改进方向直接明了。训练从剧烈摇晃变成稳步前进,这正是无数 GAN 工程师梦寐以求的体验。

在真实实验中,谱归一化带来的对比效果体现在三个层面。第一,训练稳定:判别器梯度不爆炸不消失,GAN 无需精心调节就能收敛。第二,生成质量:FID、IS 等指标在多数数据集上明显改善。第三,超参鲁棒:对学习率、初始化不那么敏感,调参成本大幅降低。

从理论上,判别器由 L 层组成,若每层的谱范数都被归一化到约 1,那么整个判别器的 Lipschitz 常数满足:

∥D(x1)−D(x2)∥2≤(∏l=1Lσ(W(l)))∥x1−x2∥2≤∥x1−x2∥2\displaystyle \|D(x_1) - D(x_2)\|_2 \le \left(\prod_{l=1}^{L} \sigma(W^{(l)})\right)\|x_1 - x_2\|_2 \le \|x_1 - x_2\|_2

1. 每层谱范数归一化:每一层的最大拉伸都约等于 1,像每根弹簧都被标定过。

σ(W(l))≈1,l=1,…,L\sigma(W^{(l)}) \approx 1, \quad l=1,\dots,L

2. 复合上界:判别器整体的放大倍率不超过每层放大倍率的乘积。

∥D(x1)−D(x2)∥2≤∏l=1Lσ(W(l)) ∥x1−x2∥2\|D(x_1)-D(x_2)\|_2 \le \textstyle\prod_{l=1}^{L}\sigma(W^{(l)})\,\|x_1-x_2\|_2

3. 整体 1-Lipschitz:乘积约等于 1,判别器整体平滑有界。

∏l=1Lσ(W(l))≤1\textstyle\prod_{l=1}^{L}\sigma(W^{(l)}) \le 1

与 WGAN 的权重裁剪、WGAN-GP 的梯度惩罚相比,谱归一化的独特优势是“轻”:权重裁剪要调超参 c 且压缩容量;梯度惩罚每步要额外算一次梯度;而谱归一化只是每层多一次矩阵向量乘法,几乎没有额外负担。可以说,它是目前性价比最高的 Lipschitz 约束手段。

工程落地要点

质检员顺利上岗后,团队还要注意一些使用细则:承诺书贴在哪个环节、学习率怎么配、效果怎么评估。这些工程细节决定了谱归一化能否发挥最大威力。

第一,谱归一化优先加在判别器的每个线性层(包括卷积层)上,生成器通常不加,以免限制其表达能力。第二,训练时可以用稍大的学习率(如 2e-4),因为判别器已被“限速”,不易梯度爆炸。第三,用 FID、IS 等指标监控生成质量,而不是只看损失曲线。第四,在扩散模型、自编码器等非 GAN 任务中,当需要约束某一子网络光滑性时,同一招也可以用。

训练循环里,u 向量沿训练步不断演进:

u~(t+1)=W(t+1) u~(t)∥W(t+1) u~(t)∥2\displaystyle \tilde{\mathbf{u}}^{(t+1)} = \frac{W^{(t+1)}\,\tilde{\mathbf{u}}^{(t)}}{\|W^{(t+1)}\,\tilde{\mathbf{u}}^{(t)}\|_2}

1. 继承上一步的 u:训练中权重变化缓慢,上一步的 u 已经接近主奇异方向。

u~(t)→主奇异向量\tilde{\mathbf{u}}^{(t)} \to \text{主奇异向量}

2. 单步更新:用新权重 W^{(t+1)} 作用一次并归一化。

u~(t+1)=W(t+1) u~(t)∥W(t+1) u~(t)∥2\tilde{\mathbf{u}}^{(t+1)} = \frac{W^{(t+1)}\,\tilde{\mathbf{u}}^{(t)}}{\|W^{(t+1)}\,\tilde{\mathbf{u}}^{(t)}\|_2}

3. 同步演进:每步一次迭代足以跟上权重的变化,这就是谱归一化轻量性的来源。

σ(W(t+1))≈u~(t+1) TW(t+1)v~(t+1)\sigma(W^{(t+1)}) \approx \tilde{\mathbf{u}}^{(t+1)\,T} W^{(t+1)} \tilde{\mathbf{v}}^{(t+1)}

回到质检员的比喻:只有把承诺书贴到每一个打分环节、配好合理的工作节奏(学习率)、用规范的方法(FID)检验结果,这位“克制”的质检员才能真正让造假者心服口服。谱归一化的价值,正在于用极小的代价换来整个博弈过程的秩序与稳定。

AI 应用场景

高分辨率人脸生成(StyleGAN)

阶段:模型训练与稳定性优化

解决的问题:在高分辨率图像上,判别器极易“一眼看穿”生成图,导致梯度巨大、生成器训练崩溃。传统权重裁剪需要反复调超参,仍然难以稳住训练。谱归一化让判别器评分曲线平滑、梯度有界,如同给脾气火爆的质检员上了“限速带”。

具体案例:StyleGAN 系列在人脸生成中,判别器使用谱归一化后,1024×1024 人脸图像的训练过程显著变稳,FID 从几十降至个位数,生成的人脸细节更真实、更少出现畸形伪影。

图像超分辨率重建

阶段:模型训练与质量评估

解决的问题:超分任务中判别器容易对细节噪声过度惩罚,评分震荡导致生成器产生虚假纹理。谱归一化限制评分变化速率,让生成器学到真实的细节分布而不是“骗过高分”的捷径。

具体案例:在老照片修复、医疗影像超分项目中,判别器加入谱归一化后,感知质量指标(LPIPS)和主观清晰度同时提升,且无需为每张图单独调判别器超参数。

语音波形生成(WaveGAN 类)

阶段:模型训练与稳定性优化

解决的问题:音频波形是长序列数据,判别器在时间维度上极易产生剧烈梯度波动,导致训练震荡。谱归一化使判别器对相邻采样点的打分保持连续,生成器能稳定学习声音的细粒度结构。

具体案例:WaveGAN 使用谱归一化约束判别器后,语音合成训练过程平稳,生成的音频在 MOS(主观平均意见分)测试中明显优于未加约束的版本。

Python 演示

python39 行
import numpy as np  def power_iteration(W, num_iters=10):    """Estimate the largest singular value of W by power iteration."""    u = np.random.randn(W.shape[0])    u = u / np.linalg.norm(u)    for _ in range(num_iters):        v = W.T @ u        v = v / np.linalg.norm(v)        u = W @ v        u = u / np.linalg.norm(u)    return u, v, u @ W @ v  def spectral_normalize(W, num_iters=10):    """Divide W by its estimated spectral norm."""    u, v, sigma_approx = power_iteration(W, num_iters)    return W / sigma_approx, sigma_approx  def main():    rng = np.random.default_rng(42)    W = rng.standard_normal((32, 16))     W_norm, sigma_approx = spectral_normalize(W)    true_sigma = np.linalg.svd(W, compute_uv=False)[0]    sigma_after = np.linalg.svd(W_norm, compute_uv=False)[0]     print("estimated spectral norm :", round(sigma_approx, 4))    print("true spectral norm      :", round(true_sigma, 4))    print("spectral norm after SN  :", round(sigma_after, 4))     assert abs(sigma_approx - true_sigma) < 0.05, "power iteration error too large"    assert abs(sigma_after - 1.0) < 0.05, "normalization not working"  if __name__ == "__main__":    main()
目的:演示谱归一化的两个核心环节——用幂迭代法近似权重矩阵的谱范数,再把权重除以该值,使其谱范数约等于 1。运行后输出对比,验证近似精度与归一化效果。
  1. v = W.T @ u用转置矩阵把 u 映射回输入空间,得到右奇异方向的估计。
  2. v = v / np.linalg.norm(v)归一化,防止向量长度无限增长。
  3. u = W @ v用原矩阵把 v 映射回输出空间,逼近左奇异方向。
  4. return u, v, u @ W @ v用 u、v 的“投影”算出谱范数近似值。
  5. W_norm, sigma_approx = spectral_normalize(W)执行谱归一化,权重除以手抖幅度。
  6. true_sigma = np.linalg.svd(W, compute_uv=False)[0]用 SVD 这把“精确秤”验证幂迭代结果。
  7. assert abs(sigma_after - 1.0) < 0.05验证归一化后谱范数确实约等于 1。

常见误区

误区谱归一化和 L2 正则化都是让权重变小的手段,只要把权重压小,梯度自然就小,效果应该差不多。

正解两者机制完全不同。L2 正则化惩罚权重整体平方和,把每个元素都往零拉,压缩了网络容量;谱归一化是对权重做“除法”,把最大拉伸比例标定到 1,并不惩罚具体数值,其余方向仍可自由学习。打个比方:L2 是给质检员绑小鞋,谱归一化是给他一张“打分范围表”,前者限制能力,后者规范行为。

为何常见:因为两者都会让权重数值看起来“变小”,初学者容易从数值表象推断机制相同。

误区谱归一化是判别器的专属工具,生成器用了反而会坏,所以绝对不能加在生成器上。

正解谱归一化并不是判别器专属。生成器同样可以加,在一些任务中还能稳定生成器训练、抑制模式坍塌。只是生成器不需要 Lipschitz 约束来保证“评分平滑”,而且加上后可能稍微限制表达能力,所以默认只在判别器使用。“可以用但通常不用”才是准确说法。

为何常见:大多数教程和论文示例都把谱归一化放在判别器上,看多了就误以为是硬性规定。

误区幂迭代法只做几次迭代,算出的谱范数肯定不准,归一化后的 Lipschitz 常数并不是严格的 1,这种做法不靠谱。

正解幂迭代的收敛速度取决于最大奇异值与次大奇异值的差距,更重要的是,GAN 训练中权重每步只更新一点点,上一训练步的 u 已经非常接近主奇异方向,每步做一次迭代就能跟上,误差完全在可接受范围内。论文和大量实验都验证了这一点。追求“严格等于 1”不如追求“快速且足够接近”。

为何常见:初学者习惯用数值分析的精确性标准来要求工程方法,忽略了“权重缓慢变化”这一关键前提。

误区只要给判别器加上谱归一化,GAN 训练就永远不会崩溃,损失曲线一定笔直下降。

正解谱归一化是强有力的稳定器,但不是万能药。学习率过大、生成器结构缺陷、数据集分布极端不平衡等情况仍然会导致训练失败。它解决的是“判别器梯度爆炸或消失”这一环,其他环节该调还得调。把它当成安全带,而不是自动驾驶。

为何常见:看到谱归一化在多个模型上效果显著,容易产生“一招鲜”的错觉,忽略了训练系统的整体复杂性。

面试题

Q1. 谱归一化的核心操作是把权重矩阵做哪种处理?

单选题 · easy

  • A.除以矩阵的最大奇异值← 正确答案
  • B.减去矩阵所有元素的均值
  • C.乘以一个固定的小常数
  • D.加上一个小的对角扰动

答案:A。谱归一化把每层权重除以其最大奇异值(谱范数),使该层 Lipschitz 常数降为 1。就像给质检员的“手抖幅度”划红线——不是删掉打分能力,而是限制变化有多快。B 是减均值归一化,C、D 与约束拉伸能力无关。

Q2. ReLU 激活函数的 Lipschitz 常数是?

单选题 · easy

  • A.常数等于 0
  • B.常数等于 1← 正确答案
  • C.常数等于 2
  • D.常数等于无穷

答案:B。ReLU(x)=max(0,x),导数只会是 0 或 1,输出变化永远不会超过输入变化,所以它是 1-Lipschitz——像只会“原样放行或扣下”的检查员,绝不放大差异。因此判别器要约束的核心是带权重的线性层,而不是激活函数。

Q3. 谱归一化后,单层权重矩阵的谱范数大约是多少?

单选题 · easy

  • A.恰好等于 0
  • B.恰好等于 1← 正确答案
  • C.恰好等于 2
  • D.无法被估计

答案:B。W 除以 σ(W) 后,新的最大奇异值为 σ(W)/σ(W)=1。由于 σ 由幂迭代近似得到,所以严格说是“约等于 1”。这正好满足 1-Lipschitz 条件,让打分变化不超过商品差异。

Q4. 幂迭代法每次迭代交替执行的两类运算是?

单选题 · mid

  • A.矩阵与向量相乘并做归一化← 正确答案
  • B.矩阵与矩阵相乘并求迹
  • C.向量与向量做逐元素乘法
  • D.对矩阵元素做平方和运算

答案:A。幂迭代反复执行 W^T u 与 W v 两类矩阵向量乘法,每次乘完都归一化,使 u、v 分别逼近左右奇异向量。每步只多一次矩阵乘法,成本极低,这正是它能嵌入训练循环的原因。

Q5. 关于线性层 f(x)=Wx 的性质,下列说法正确的有?

多选题 · mid

  • A.Lipschitz 常数等于谱范数← 正确答案
  • B.谱范数是最大奇异值← 正确答案
  • C.谱范数等于矩阵的迹
  • D.谱范数衡量最大拉伸方向← 正确答案

答案:ABD。线性映射的最大放大倍率就是谱范数,等于最大奇异值,对应最大拉伸方向,所以 A、B、D 正确。迹是特征值之和,与拉伸能力无关,C 错误。这也是谱归一化能把每层 Lipschitz 常数压到 1 的理论根据。

Q6. 谱归一化通常加在 GAN 网络结构的哪个位置?

单选题 · mid

  • A.判别器的每一个线性层← 正确答案
  • B.生成器的输出激活层
  • C.判别器的损失函数项
  • D.生成器的输入噪声向量

答案:A。判别器负责度量真假分布差异,需要其评分函数光滑有界(满足 Lipschitz),所以谱归一化加在判别器每层权重上。生成器一般不依赖此约束,A 正确,其余位置都不涉及权重矩阵的拉伸能力。

Q7. 与 WGAN 的权重裁剪相比,谱归一化的主要优势是?

单选题 · hard

  • A.无需人工设定裁剪范围← 正确答案
  • B.训练速度一定更快
  • C.完全消除所有模式坍塌
  • D.不需要任何矩阵运算

答案:A。权重裁剪需要调超参 c,还会把权重压扁、减弱表达能力;谱归一化只约束最大奇异值方向,几乎不引入超参。B 不保证,C 过于绝对,D 错误——它恰恰需要一次矩阵向量乘法。

Q8. 谱归一化能够带来哪些好处?

多选题 · mid

  • A.判别器梯度变得平滑有界← 正确答案
  • B.GAN 训练过程更加稳定← 正确答案
  • C.生成样本质量得到提升← 正确答案
  • D.完全不需要任何超参数

答案:ABC。谱归一化把判别器限制为近似 1-Lipschitz,梯度不爆炸不消失,训练更稳定,FID 等指标更好,A、B、C 正确。但它仍需学习率等超参数,D 的说法过于绝对。

Q9. 判别器由 L 个都做了谱归一化的线性层组成时,整体的 Lipschitz 常数满足什么条件?

单选题 · extreme

  • A.恰好等于层数的平方
  • B.上界恰好不超过一← 正确答案
  • C.等于每层谱范数之和
  • D.等于各层谱范数之积

答案:B。复合函数的 Lipschitz 常数不超过各层常数之积;每层 σ≈1,因此整体上界≤1。A 凭空构造,C 混淆了“和”与复合关系,D 忽略了“不超过乘积”的上界含义,只有 B 准确描述了约束结果。

Q10. 关于训练中幂迭代向量 u 的使用,下列说法正确的有?

多选题 · hard

  • A.初始向量逼近主奇异向量← 正确答案
  • B.每步少量迭代就够用← 正确答案
  • C.每次重新随机初始化
  • D.旧向量近似依然有效← 正确答案

答案:ABD。权重每步变化缓慢,上一步的 u 已接近主奇异方向,每步只需一次迭代即可跟上,不必重新初始化;若重新随机初始化反而丢失历史信息。A 描述迭代收敛目标,B、D 描述训练中的工程技巧,C 错误。