在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

生成对抗网络

生成对抗网络(GAN)交替训练两个网络。判别器学习区分真实与生成样本,生成器通过判别器的梯度学习生成样本。单个输出看起来合理还不够,整体分布也要覆盖真实数据的多样性。

判别器像一个仍在修改评分标准的评委。生成器按当前标准改进,评委再适应新的生成结果。弱评委可能被差样本骗过,生成器也可能反复输出同一种合理结果,因此要看整个分布。

两种更新

生成器 G 把潜在输入 z 映射到 G(z)。图像 GAN 输出大量像素,这里只输出一个数,便于在横轴逐点检查。真实训练样本均分在 [-1.5,-1.1] 与 [1.1,1.5] 两个区间。

判别器 D 接收真实或生成值,输出 [0,1] 的真实来源分数。训练标签真实为 1、生成为 0。曲线高度是 D 对 x 的评分,不是 G 在 x 生成频率的密度曲线。

阶段改变保持固定
训练 DD 的权重与评分曲线G 参数、固定输入的输出位置
训练 GG 参数及输出D 参数和曲线,但梯度仍穿过 D
训练后生成采样的 z两网络参数,仅运行 G

先更新判别器

固定 G,最小化:

L_D = -mean(log D(real)) - mean(log(1 - D(G(z))))

两项均值各含 64 例,再相加。自信的来源误判损失大。D 更新会改评分曲线,却不能移动固定 z 在不变 G 下的输出。共享参数优化的是批总目标,不保证每个真实例都升分、每个生成例都降分。

再通过 D 更新生成器

固定 D 参数,用非饱和目标:

L_G = -mean(log D(G(z)))

梯度从 D 的输出传到生成样本,再穿过 G 到其参数。冻结 D 参数不应删除它对输入的导数;detach D 的输出会切断 G 需要的对抗反馈。

若 a 是 D 的输出 logit,单例 −log(sigmoid(a)) 对 a 的导数为 D(G(z)) − 1。再由 D 传回输入。G 不收到配对的真实图像来重建,画上的点也不是独立可优化粒子;它们因共享 G 参数变化而移动。D 曲线固定,点移到曲线另一位置,其分数仍会变。

默认首个高亮样本的 dℓ/dx ≈ +0.1351,局部向左可减该例损失。随后的批更新让其输出约从 0.903 移到 0.734。箭头解释局部反馈,不表示每点各有优化器,也不保证批更新顺着每个样本的偏好移动。

原 GAN 论文第 3 节说明交替更新与非饱和目标。原始 minimax 生成器目标是最小化 mean(log(1 − D(G(z))));D 起初强烈拒绝生成例时,该目标可能给很弱的梯度。

逐步演示

默认噪声范围 1、每次 G 更新前 D 更新三次、初始化种子 42。训练有 64 固定真实例与 64 等距潜在输入;画布跟踪另一组 48 个固定评估输入,覆盖 [-1,1]。固定探针让位置变化归因于学习,而非重新抽样。

  1. 未训练 G:48 输出约覆盖 [-1.508,1.508],左右邻域各十个,28 个都不在邻域内;D 平均分已为 0.500,显然不能据此认定分布学好。
  2. D 更新三次:每次各有节拍,G 输出位置固定,D 改曲线以区分训练来源。
  3. 经固定 D 传反馈:用最新 D 算 G 批梯度,D 参数不更新,输入导数保留。
  4. G 更新一次:同一探针产生新位置,左邻域十个、右七个。首轮邻域计数未改善,因为目标是学得的对抗评分,不是直接优化这个诊断。
  5. 第二轮:D 再更新三次,G 再更新一次,结束时左十一、右七。
  6. 继续到 400 轮:后段把重复轮分组。点移向下一轮时,覆盖条仍显示最后已完成轮。第 160 轮左右各十八;默认浏览器末尾左二十二、右二十,仍有六个在外。
  7. 比较两种多样性失败:保持种子、数据、网络、优化器、比例,将潜在输入全设零,48 输出最终都约 1.197,落在右群。再看每次 G 前 D 更新五次的配对实验:范围 1 与 0.25;后者输入仍不同,输出却在右群近乎重合。
  8. 生成新批次:固定最终 G 参数,抽新 z,每例只经过 G 一次。不需要 D,也不再训练。

邻域指距中心 −1.3 或 1.3 不超过 0.25,比真实训练区间两端各宽 0.05。计数与输出标准差只描述有限批次,不能证明分布相等,标准差也不能确认形状和左右频率正确。

为什么 0.5 不足以证明成功

理想匹配分布下,最优判别器在支持集给 0.5,反过来不成立。弱 D 可能对坏输出犹豫,均值 0.5 也可能混合接近 0 与 1 的强判断。

起始例均分 0.500,却多数点不在真实邻域,是直接反例。要看位置和频率,不能由理想结论推断有限网络、交替更新、固定预算必达均衡。

先固定更新比为 3,将噪声范围降为零;再恢复 1,比较每次 G 前 D 更新 1、3、5 次。多更新 D 同时改变动力学和计算量,不保证覆盖单调改善。

输入多样不保证输出多样

“模式坍塌”预设为范围 0.25、D/G 比 5。48 个不同探针的初始输出标准差约 0.291,训练后约 0.005,全部靠右群,左半分布缺失。这是模式崩塌,不同于零输入必然相同的退化。

对照范围 1 保持五次 D 更新、相同种子、数据、结构、优化器和 400 轮,覆盖两个群。这只说明输入变化不足以保证输出多样,不给通用噪声范围或治愈方法。

实际检查时,跨检查点保留一组固定 z 观察学习,再抽新 z 检查探针外表现。多张重复却合理的图像同样可能隐藏缺失类型。生成时只需训练好的 G 前向计算,D 的作用是提供训练反馈。

边界情况

  • 相同潜在输入:确定性函数返回同一值。训练能移动该值,却不能让同一输入同时产生多值。范围零时新随机数乘零仍相同。
  • 不同输入的崩塌:范围 0.25、比例 5 是已发生的学习失败。其他非零范围和比例也可能覆盖差,控制项不保证收敛。
  • 改变更新比:G 始终更新 400 次,D 次数不同,所以不是等计算预算比较。
  • 最终仍不完整:默认有样本留在群间或外侧,预算结束不等于宣告收敛。
  • 数值回放:同一浏览器配置轨迹相同,长期对抗训练可放大运行时微差,独立 NumPy 计算的末尾小数可能不同,但主要对照可复现。

常见错误

  • 冻结 D 时也切掉输入导数,导致 G 无对抗梯度。
  • 给每个生成例配一个真实重建目标;这不是自编码器损失。
  • 把 D 分数当图像质量百分比。它是随训练状态变化的来源判断。
  • 独立移动点到真实例。优化器更新共享权重,点移动是输出结果。
  • 只要样本合理就认定分布正确。全部落右群仍遗漏左群。
  • 生成时继续把 D 放在必经路径;训练好的 G 加新噪声即可。

模型范围

一维合成数据、小型 tanh 网络、固定训练批、确定性探针和有界 G 输出,在浏览器实际训练,不生成图像,也不证明普遍收敛。省略图像结构、随机小批量、归一化、正则化与高级稳定方法。

G 有八个 tanh 隐藏单元和一个有界输出,D 有十二个 tanh 隐藏单元与 sigmoid 输出。分别使用 Adam:学习率 0.01、beta1 = 0.5、beta2 = 0.999、epsilon = 1e-8。这是复现实验的设置,不是图像生成推荐值。

继续阅读反向传播、训练循环,或对照扩散模型的反复去噪与这里训练后单次 G 前向生成。