JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

自编码器与生成对抗网络

网络学会“想象”的两种方式:先把数据挤过一个瓶颈,直到只剩下精华;再让一个造假者和一个侦探彼此较量,直到赝品看起来像真的。本文带你认识自编码器、习得的嵌入,以及生成器与判别器之间的博弈。

从分类到创造

在本阶梯到目前为止,你遇到的网络在精神上都是“判别器”:输入一张图像,输出一个标签。一个卷积网络看到一张照片,说“猫”。这非常有用,但它只是智能的一半。另一半是“生成”——在没有特定输入的情况下,产出某种看似合理的东西:一张从未存在过的脸,一句从未被写出的话。本文讲的,正是深度网络学会做这件事的两种最早、也最有启发性的方式。

两者共享一个安静却激进的想法,你已经以[[representation-learning|表示学习]]的名义见过它:网络不是被告知哪些特征重要,而是自己发现数据的一种紧凑内部描述。于是“生成”就成了把这种描述“倒着跑”的艺术——把一段短码还原成一个完整、丰富的样本。自编码器通过重建来学习这段码;GAN 则通过竞争来学习它。

自编码器:在挤压中学习

[[autoencoder|自编码器]]是一种被训练去把输入复制成输出的网络——这听起来毫无意义,直到你看见其中的玄机。它的中间是一层狭窄的层,即“瓶颈”,远小于输入。前半部分,即[[encoder-decoder|编码器]],把输入压缩成那段紧凑的码;后半部分,即“解码器”,再把这段码展开还原成重建结果。由于瓶颈太小,无法记住一切,网络被迫只保留重要的部分,丢弃其余。

训练信号美得出奇地简单:一个重建[[loss-function|损失]],衡量输出偏离原始输入有多远,并用普通的梯度下降来最小化它。不需要标签——输入“本身”就是目标。这使自编码器成为自监督学习的一个干净范例:它从未标注的原始数据里,给自己出作业。

x       --> [ encoder ] --> z   (the code: small)
z       --> [ decoder ] --> x'  (reconstruction)
loss = distance(x, x')          (push x' toward x)
四行写尽整个自编码器:编码成小码 z,再解码回来,并惩罚两者之间的差距。

中间那段码有个你会不断遇到的名字:[[embedding|嵌入]]。它是一个短向量——也许用 32 个数字代表一张 784 像素的图像——在那里,“距离即相似度”。两个相似的输入彼此靠近;不相似的则相距甚远。这正是让词嵌入把“国王”放在“王后”附近的同一个把戏,也正因如此,编码器一旦训练好,本身就可以作为下游任务的特征提取器,独立地发挥价值。

自编码器有许多共享这副骨架的变体。“去噪”自编码器被喂入一个被破坏的输入,要求它重建出干净的那个,这迫使它去学习结构,而不是照搬像素。而当编码器和解码器是互为镜像的卷积堆叠时,你就得到了U-Net的形状——它后来成了现代扩散图像生成器内部的主力。这证明这个朴素的想法并没有退休,而是升了职。

GAN:造假者与侦探

[[generative-adversarial-network|生成对抗网络]],简称 GAN,走了一条通往生成的完全不同的路——不是重建,而是一场竞赛。想象两个网络锁在一场决斗里。“生成器”是造假者:它拿一个随机噪声向量,试图画出一张以假乱真的图像。“判别器”是侦探:它被展示真假混杂的图像,必须把每一张判定为真或假。

它们彼此对抗着训练。每当侦探抓住一张赝品,这次失败就被反向传播回造假者,教它下次更好地骗过侦探。每当造假者蒙混过关,侦探就磨利自己的眼力。两者都没有一个固定的目标去照抄——生成器从不直接看到任何一张真图;它“唯一”的学习信号,就是判别器的判决。两者步调一致地共同进步,这是一场军备竞赛——当它奏效时,会把赝品推向以假乱真的程度。

  1. 从数据集中取一批真实样本,并让生成器从随机噪声中产出一批赝品。
  2. 训练判别器把真的判为真、假的判为假——这是一个普通的分类器步骤。
  3. 接着冻结判别器,训练生成器去做出能让判别器判为真的赝品——把目标反过来。
  4. 重复。随着双方相互适应,生成的样本慢慢从噪声走向逼真。

留意它与自编码器的共同点和被翻转之处。两者都构建了一个类似“解码器”的网络,把一段小码变成完整的样本。但自编码器通过要求忠实重建来学习它的码,而 GAN 从不重建任何东西——它纯粹从一个随艺术家一同变聪明的评论家所施加的压力中学习。正是这种对抗压力,赋予了 GAN 样本那种著名的清晰锐利,而自编码器的重建往往会显得模糊。

为什么 GAN 如此难训练

这里是这个领域太常略过的诚实之处。GAN 不是在把一个损失推向某个唯一的底部;它是两个网络在追逐一个由对方控制的“移动靶”。这使训练成为一种微妙的平衡术,而非平滑的下降。如果判别器太快变得太强,它会以十足的把握拒绝每一张赝品,生成器收不到有用的梯度,学习就停滞了。如果生成器跑到了前面,它又会钻侦探的盲区的空子。

最臭名昭著的失败是模式坍塌:生成器发现某一张图像(或极少数几张)能可靠地骗过侦探,于是就一遍又一遍地只产出那一张。它的赝品很逼真,却毫无多样性——它找到了一条廉价的捷径,而不是学会整个数据分布。一大堆工程技巧(梯度惩罚、谨慎的学习率、替代的损失形式)能驯服这些问题,但一个第一次就训练得干净利落的 GAN,是例外,而非常态。

它的位置,以及之后发生了什么

从大约 2014 到 2020 年,GAN 是图像生成无可争议的王者,制造出那些填满“这个人不存在”演示页面的、诡异逼真的人脸。但有一点值得看清:这顶王冠基本上已经易主。扩散模型——通过学习逆转一个逐步加噪的过程来生成——如今能产出更多样、更可控的图像,训练也稳定得多,你听说过的大多数文本生成图像系统都由它驱动。GAN 在看重速度的场景里仍被使用(它一次前向传播就能生成),但这个领域已经向前走了。

那为什么还要学它们?因为这些“想法”比那个架构活得更久。自编码器“瓶颈—解码”的骨架,是扩散模型的脊梁,也是大语言模型压缩文本的方式。对抗的想法——让一个网络对抗一个习得的评论家——在现代 AI 中四处重现:从某些图像和音频模型加上一个锐化损失,到基于偏好的微调让模型对抗一个奖励评论家。把“造假者与侦探”这场博弈弄懂一次,之后一打系统都会瞬间豁然开朗。

在你结束本阶梯时,请抓住一条主线。你遇到的每一种架构——卷积网络、循环网络、自编码器、GAN——其实都是对同一个问题的不同回答:“一个网络该是什么形状,才能自己学到正确的内部表示?”下一阶梯将把图像和序列抛在身后,去认识那个把这个问题回答得如此有力、以至于吞下了整个领域的架构——但你现在已经握住了识别与生成这两半,而它之后的一切都建立在这两半之上。