跳到主要内容

GAN:伪钞制造者、警察与深度伪造

这一章讲三件事: GAN 的对抗机制(两个网络怎么互相当教练); 「改损失函数=长出新算法」的家族演化线;以及它最著名的社会后果——深度伪造。 这是「生成」一章:前面九章的模型都在「认」,这里的模型在「造」。

1. 对抗机制:伪钞制造者与警察

书里选的比喻几乎不用再加工1:

一个网络扮演伪钞制造者(生成模型),一直造假钞;另一个扮演警察(判别模型),不断判断真假;伪造者根据警察的反馈不停改良,直到假钞真假难辨。

训练流程三步2:先练判别器(真图要判 1,生成图要判 0);生成器从随机噪声出发造假;关键的第三步——透过判别器的反向传导去更新生成器的权重。警察不用自己教,他「皱一下眉」的力度(梯度),就是伪造者改进的方向。

损失函数的写法延续第 02 章的全部装备:判别器损失=「真图判真的概率+假图判假的概率」,越大越好;概率连乘不好算,照旧取 log 变一次方;两项合并成一个「判别器最大化、生成器最小化」的目标——两个网络目标相反,互相对抗,故名生成对抗网络3

这个想法的分量有市场为证:LeCun 评价它是「近十年最有趣的想法」;2018 年纽约佳士得拍出第一幅 GAN 绘制的肖像画,432500 美金,画角还印着它的损失函数;此后有人统计每 28 分钟就有一篇 GAN 论文发表4

2. 家族演化:改损失函数就能长出新算法

GAN 上百个变体(GAN Zoo 收录),书里抓出一条最清晰的演化脉络——大部分出自同一组学者之手,每步只改一件事5:

在什么基础上改什么得到什么能干什么
原生 GAN加条件 y(损失 D(x)→D(x|y))CGAN指定「生成数字 7」而非随机数字;ColorGAN 拿轮廓图当条件,还能给灰阶图上色
CGAN生成器换成 U-Net(第 09 章那副带跳线的骨架)Pix2Pix成对转换:轮廓图→实物、卫星照↔地图、白天↔夜晚
两个 Pix2Pix头尾相接成环CycleGAN非成对转换:普通马→斑马纹

几个机制值得展开:

DCGAN(卷积版 GAN)的工程细节,每个都是为了图像质量:生成器用反卷积层(Conv2DTranspose)上采样(小图放大),小图逐层放大;激活用 LeakyReLU,「尽可能不要产生 0 的值,以免生成的影像有太多空白」;判别器去掉池化层——池化丢信息,判别器要的是越细越好6。训练量级要有心理准备:名人脸数据集,作者的单卡 1 个周期要 2~3 小时,原程序注释说 100 个周期才有惊艳效果7。Progressive GAN 更狠:小图逐层放大到目标尺寸,能生成比训练图还大的「超分辨率」图;论文用 8 颗 Tesla V100 训了 4 天——书里改用现成的预训练模型来玩8

Pix2Pix 的两个心思:生成器用 U-Net 的跳线,重建时保有原图特征;判别器升级成 PatchGAN——不再对整图打一个分,而是把图切成小区域逐块判真伪,逼生成器在局部纹理上也过得了关9

CycleGAN 解决的是「没有成对数据」:现实里你有无数骏马照和无数斑马照,却没有「同一匹马的斑马版」。CycleGAN 造两个生成器(G:X→Y,F:Y→X),再立一条循环一致的规矩——x 经 G 变 Y 域、再经 F 变回来,应该≈x;骗不过循环的转换就是耍赖。书里实测:马匹成功长出斑马纹,但每个周期约 20 分钟,40 个周期跑了 15 小时;原文作者跑了 200 周期——「三天两夜」10

3. 四大坑:GAN 的训练为什么难

书里把 GAN 的训练难点归纳成四条,每条都有机理11:

  1. 图像模糊:网络本质在做「回归」,输出趋向所有相似样本的平均值——平均出来的图像自然糊。解法只有堆数据堆周期;而且 GAN 对超参数(学习率、滤波器尺寸)格外敏感,初始没调好,生成质量一差就连锁崩坏;
  2. 梯度消失:生成器太烂时,判别器判真的概率≈0,反传的梯度小到没法指导改进——老师放弃学生。解法:LeakyReLU、简化判别器、多训几轮;
  3. 模式崩溃:生成器发现某一种假最安全,就只造那一种。书里的比喻接得妙:伪钞有 100/500/1000 三种面额,伪造者擅长做 500 的,就可能全做 500 元伪钞——警察越严,伪造者越保守;
  4. 训练太久:上一节的 15 小时、2~3 小时一周期,都是这条的注脚。

4. 深度伪造:同一条技术的暗面

Deepfake(深度伪造)的技术基础就是 GAN。书里以 2018 年 BuzzFeed 的伪造奥巴马讲话视频开场——嘴型与声音逼真到震惊世人,自此假新闻灾难成为真实议题12

技术拼图并不神秘:视频换脸要先收集目标人物360 度的各种角度脸部图像(所以名人网络素材最多、受害最集中);架构类似 CycleGAN,再结合第 09 章的人脸特征点定位,把原始脸与替换脸对准交换;视频是连续帧,RecycleGAN 在损失函数里加一条「时间一致性」——t+1 帧应是 1~t 帧的延续(类似时间序列的连续性约束)13

反制手段也在生长:看脸部边缘是否模糊、有无随机噪声、左右脸是否对称;微软推出过视频验真工具 Video Authenticator。书里的收尾是一句立场,不是技术:「科学的发展必须兼顾伦理与道德,否则,好莱坞科幻片的剧情就不再只是幻想」14

判断(我们的,不是书里的): GAN 与第 09 章的风格转换共享同一个洞察——损失函数是「你要什么」的形式化。风格转换用 Gram 矩阵定义「像名画」,CycleGAN 用循环一致定义「转换成立」,RecycleGAN 用时间连贯定义「像视频」。读懂这一族,比记住十个模型名更保值。 如果错,会错在: 如果新一代生成模型(如扩散模型)的目标函数与对抗机制不同,「损失函数形式化需求」的框架仍适用,但「必须靠两个网络对抗」的结论就过时了——书出版于 2022 年,扩散模型刚露头,书中未提,这是它的时间边界。

5. 可带走的

  1. GAN=两个网络互当教练:生成器造假,判别器打假,判别器的梯度就是生成器的教材;
  2. 损失函数取 log 延续第 02 章的老规矩;两网络合并成 min-max 问题;
  3. 家族演化一句话:加条件→CGAN;生成器换 U-Net→Pix2Pix;两个 Pix2Pix 循环→CycleGAN(非成对转换靠循环一致 x→G→F≈x);
  4. DCGAN 工程细节皆有理由:反卷积上采样、LeakyReLU 防空白、判别器去池化保细节;PatchGAN 逐块打分;
  5. 生成是很贵的:单周期 2~3 小时、像样要 100 周期、CycleGAN 全程 15 小时至三天两夜——预训练模型(如 Progressive GAN)是普通人的入场券;
  6. 四大坑:模糊(回归取平均)、梯度消失(造假太差梯度枯竭)、模式崩溃(全做 500 元伪钞)、耗时;
  7. 深度伪造=GAN+特征点换脸+时间一致性;反制靠边缘模糊/噪声/对称性检查;
  8. 本书的时间边界:2022 年成书,未覆盖此后兴起的扩散模型——引用本章谈「生成模型」时要意识到这一点。

6. 原文地图

主题原书章原文位置
伪钞比喻、对抗流程10-1 生成对抗网络介绍text/80-ch10-10-1.txt:5(搜「伪钞制造者」) · text/80-ch10-10-1.txt:17(搜「透过判别网络的反向传导」)
取 log10-1 生成对抗网络介绍text/80-ch10-10-1.txt:30(搜「取log」)
LeCun 评价、佳士得拍卖第10章 生成对抗网络text/79-ch10.txt:9(搜「最有趣的想法」) · text/79-ch10.txt:13(搜「432500」) · text/79-ch10.txt:21(搜「每28分钟」)
GAN Zoo、改损失长新算法10-2 生成对抗网络种类text/81-ch10-10-2.txt:53(搜「修改原创者GAN的损失函数」) · text/87-ch10-10-8-gan.txt:7(搜「演化的脉络」)
DCGAN 工程细节10-3 DCGANtext/82-ch10-10-3-dcgan.txt:23(搜「use_bias=False」) · text/82-ch10-10-3-dcgan.txt:25(搜「LeakyReLU」) · text/82-ch10-10-3-dcgan.txt:27(搜「Conv2DTranspose」) · text/82-ch10-10-3-dcgan.txt:39(搜「去除池化层」)
训练量级10-3 DCGANtext/82-ch10-10-3-dcgan.txt:113(搜「100次」) · text/82-ch10-10-3-dcgan.txt:115(搜「2~3小时」)
Progressive GAN 与超分辨率10-4 Progressive GANtext/83-ch10-10-4-progressive-gan.txt:15(搜「超分辨率」) · text/83-ch10-10-4-progressive-gan.txt:19(搜「8颗Tesla V100」)
CGAN 条件、ColorGAN10-5 Conditional GANtext/84-ch10-10-5-conditional-gan.txt:11(搜「D(x
Pix2Pix:U-Net 与 PatchGAN10-6 Pix2Pixtext/85-ch10-10-6-pix2pix.txt:31(搜「U-net结构」) · text/85-ch10-10-6-pix2pix.txt:35(搜「PatchGAN」) · text/85-ch10-10-6-pix2pix.txt:7(搜「像素的转换」)
CycleGAN 循环一致、耗时10-7 CycleGANtext/86-ch10-10-7-cyclegan.txt:25(搜「循环机制」) · text/86-ch10-10-7-cyclegan.txt:91(搜「1200秒」) · text/86-ch10-10-7-cyclegan.txt:95(搜「三天两夜」)
四大坑10-8 GAN挑战text/87-ch10-10-8-gan.txt:15(搜「图像模糊」) · text/87-ch10-10-8-gan.txt:17(搜「梯度消失(Vanishing Gradient」) · text/87-ch10-10-8-gan.txt:19(搜「模式崩溃(Mode Collapse」)
深度伪造与反制10-9 深度伪造text/88-ch10-10-9.txt:19(搜「Recycle-GAN」) · text/88-ch10-10-9.txt:61(搜「Video Authenticator」) · text/88-ch10-10-9.txt:63(搜「自我毁灭」)

Footnotes

  1. 出处:「10-1 生成对抗网络介绍」第 5 段(text/80-ch10-10-1.txt:5,搜「伪钞制造者」)与第 7 段(text/80-ch10-10-1.txt:7,搜「生成模型」)。

  2. 出处:「10-1 生成对抗网络介绍」第 13 段(text/80-ch10-10-1.txt:13,搜「先训练判别」)与第 17 段(text/80-ch10-10-1.txt:17,搜「透过判别网络的反向传导」)。

  3. 出处:「10-1 生成对抗网络介绍」第 30 段(text/80-ch10-10-1.txt:30,搜「取log」)与第 40 段(text/80-ch10-10-1.txt:40,搜「互相对抗」)。

  4. 出处:「第10章 生成对抗网络」第 9 段(text/79-ch10.txt:9,搜「最有趣的想法」)、第 13 段(text/79-ch10.txt:13,搜「432500」)与第 21 段(text/79-ch10.txt:21,搜「每28分钟」)。深度伪造的统计(「名人色情片八成都是伪造的」)在第 7 段(text/79-ch10.txt:7,搜「名人色情片八成」)。

  5. 出处:「10-2 生成对抗网络种类」第 53 段(text/81-ch10-10-2.txt:53,搜「修改原创者GAN的损失函数」)与「10-8 GAN挑战」第 7 段(text/87-ch10-10-8-gan.txt:7,搜「演化的脉络」)。

  6. 出处:「10-3 DCGAN」第 23~27 段(text/82-ch10-10-3-dcgan.txt:23,搜「use_bias=False」)与第 39 段(text/82-ch10-10-3-dcgan.txt:39,搜「去除池化层」)。

  7. 出处:「10-3 DCGAN」第 113 段(text/82-ch10-10-3-dcgan.txt:113,搜「100次」)与第 115 段(text/82-ch10-10-3-dcgan.txt:115,搜「2~3小时」)。

  8. 出处:「10-4 Progressive GAN」第 15 段(text/83-ch10-10-4-progressive-gan.txt:15,搜「超分辨率」)与第 19 段(text/83-ch10-10-4-progressive-gan.txt:19,搜「8颗Tesla V100」)。

  9. 出处:「10-6 Pix2Pix」第 31 段(text/85-ch10-10-6-pix2pix.txt:31,搜「U-net结构」)与第 35 段(text/85-ch10-10-6-pix2pix.txt:35,搜「PatchGAN」)。

  10. 出处:「10-7 CycleGAN」第 25 段(text/86-ch10-10-7-cyclegan.txt:25,搜「循环机制」)、第 91 段(text/86-ch10-10-7-cyclegan.txt:91,搜「1200秒」)与第 95 段(text/86-ch10-10-7-cyclegan.txt:95,搜「三天两夜」)。

  11. 出处:「10-8 GAN挑战」第 15 段(text/87-ch10-10-8-gan.txt:15,搜「图像模糊」)、第 17 段(text/87-ch10-10-8-gan.txt:17,搜「梯度消失(Vanishing Gradient」)、第 19 段(text/87-ch10-10-8-gan.txt:19,搜「模式崩溃(Mode Collapse」)与第 21 段(text/87-ch10-10-8-gan.txt:21,搜「执行训练时间过久」)。

  12. 出处:「10-9 深度伪造」第 5 段(text/88-ch10-10-9.txt:5,搜「震惊了世人」)。BuzzFeed 影片名在第 5 段(搜「You Won't Believe」)。

  13. 出处:「10-9 深度伪造」第 7 段(text/88-ch10-10-9.txt:7,搜「360度」)、第 9 段(text/88-ch10-10-9.txt:9,搜「脸部特征点」)与第 19 段(text/88-ch10-10-9.txt:19,搜「时间同步的相关性」)。

  14. 出处:「10-9 深度伪造」第 61 段(text/88-ch10-10-9.txt:61,搜「Video Authenticator」)与第 63 段(text/88-ch10-10-9.txt:63,搜「自我毁灭」)。