GAN:生成器与判别器
极小极大博弈论、GAN 训练不稳定、模式崩溃,以及 DCGAN 实现。
GAN:生成器与判别器 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
什么是 GAN
生成对抗网络让两个网络相互对抗:由Generator创建虚假数据,由Discriminator判断数据是真实的还是虚假的。二者相互竞争,生成器逐渐学会生成令人信服的样本。
对抗博弈
可以把它想象成造假者(生成器)和侦探(判别器)。造假者不断改进伪造品来欺骗侦探;侦探则不断提高辨别能力。这场军备竞赛推动双方持续进步,直到伪造品看起来像真的一样。
生成器
生成器将随机的噪声向量映射为虚假图像。它学会将毫无意义的随机数转换为具有结构且看起来真实的数据。
class Generator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(100, 256), nn.ReLU(),
nn.Linear(256, 784), nn.Tanh()
)
def forward(self, z):
return self.net(z)噪声向量
输入 z 从标准正态分布中采样得到。不同的噪声向量会生成不同的图像,因此噪声就是生成过程的“种子”。它的维度(此处为 100)就是潜在空间的大小。
z = torch.randn(batch_size, 100)
fake_images = generator(z)判别器
判别器接收一张图像,并输出一个概率值:它有多大可能是真实的。Sigmoid 会给出 [0,1] 范围内的值,其中 1 表示真实,0 表示虚假。
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(784, 256), nn.LeakyReLU(0.2),
nn.Linear(256, 1), nn.Sigmoid()
)训练判别器
使用标记为 1 的真实图像批次和标记为 0 的虚假图像批次训练 D。它通过二元交叉熵学习提高真实样本的分数并降低虚假样本的分数。
d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()为什么要对伪样本使用 detach()
训练 D 时,我们使用 fake.detach(),使梯度不会流入生成器。此步骤只更新判别器;生成器会在单独的步骤中进行更新。
训练生成器
现在训练 G 来欺骗 D:将伪样本输入 D,并在 D 输出真实(标签为 1)时奖励生成器。生成器通过让 D 相信其伪样本是真实的来不断改进。
g_loss = criterion(D(fake), ones) # want D to say "real"
g_loss.backward()
g_optimizer.step()交替训练
每次迭代都进行交替训练:先更新 D,再更新 G。让二者大致保持平衡非常关键:如果 D 过强,G 就得不到有用的梯度;如果 D 过弱,G 就没有挑战。
# per step
# 1) update Discriminator
# 2) update Generator模式崩溃
一种经典的失败情况是模式崩溃:生成器找到一个或少数几个能够欺骗 D 的输出,然后只生成这些输出,忽略数据的多样性。其表现是:每个生成样本看起来几乎完全相同。
训练不稳定性
GAN 众所周知不稳定:损失会振荡,一个网络可能压制另一个网络,而收敛也很脆弱。LeakyReLU、谨慎设置学习率以及标签平滑等技巧有助于稳定训练。
快速检查
测试您对 GAN 的理解。
回顾:GAN
您学习了对抗式设置:生成器将噪声向量转换为伪样本,判别器输出样本为真实或虚假的概率,二者通过先 D 后 G 的方式进行交替训练。您还学习了如何识别模式崩溃,以及使 GAN 难以训练的整体不稳定性。
常见问题解答
「GAN:生成器与判别器」课时是免费的吗?
是的 — 「GAN:生成器与判别器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「GAN:生成器与判别器」这节课中我会学到什么?
极小极大博弈论、GAN 训练不稳定、模式崩溃,以及 DCGAN 实现。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「GAN:生成器与判别器」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 用于表示学习的自编码器
- 变分自编码器(VAE)
- GAN:生成器与判别器
- 条件 GAN 与风格迁移