在当今世界,深度学习技术正以惊人的速度发展,其中生成对抗网络(GANs)作为一种前沿技术,引起了广泛的关注。本文将带了解GANs的基础知识,并指导如何实践应用这一技术。
可能听说过关于Deepfakes的激烈讨论,这是一种基于自编码器的神经网络架构技术。Deepfakes的高级版本结合了自编码器和GANs。虽然不会深入探讨Deepfakes,但将探索GANs的工作原理。视频的引入旨在激发读者对GANs主题的兴趣和好奇心。在深入探讨GANs之前,先来解释判别器和生成器的概念。
判别器是一种模型,当输入具有一组特征时,它能够给出输入属于特定类别的概率。例如,如果构建了一个判别模型来检查给定输入是否为猫,如果输入特征包括“实体有毛、胡须、爪子,并发出喵喵声”,那么模型将表示该实体有很大概率属于猫类,而属于狗类的概率较低。它基本上对给定输入进行分类或判别到相应的类别。
生成模型是无监督的,它们的工作方式完全不同。它们是可以从中抽取样本或生成新数据实例的模型。假设想生成一张狗的真实图像,那么使用这种模型,将输入随机噪声,有时还需要输入想要生成的对象的类别,这将创建出一张狗的真实图像。在输入中使用随机噪声,以确保每次模型创建新数据实例时,不会创建出重复或之前见过的个体。
直觉其实非常简单易懂,它是两者之间的竞争,以赢得对方。这场竞争的参与者是判别器和生成器。为了让理解这场竞争,让告诉一个简单的故事。
故事的主题围绕着艺术画作。故事中有两个角色,一个是制作画作假复制品的伪造者,另一个是专门识别画作假复制品的艺术商店老板。伪造者制作画作的假复制品,并试图在艺术商店出售。艺术商店老板的任务是检测画作是否为假。老板在从外界购买画作时非常谨慎,因为他不希望商店的信誉受损。他总是试图提高自己在检测假画作领域的技能,而伪造者也试图增加努力以智胜商店老板。
这就是故事,现在可能已经理解了为什么向介绍判别器和生成器。伪造者实际上是生成器,商店老板是判别器。
判别器是一个全连接的神经网络模型,它将输入分类到特定类别。这里有两个类别,假和非假。成本函数比较预期输出和预测标签,进一步计算损失,然后更新参数。判别器模型希望成本函数最小化。
如前所述,生成器的工作方式不同。它们以随机噪声为食,有时还需要想要生成的对象的类别。然后模型输出属于所需类别的新个体的特征。现在来检查生成器是如何学习的。
在这里可以看到,从生成器生成的特征被输入到判别器,如前所述,它将输入分类为假或非假。然后计算生成器损失,并进一步更新参数。生成器从判别器那里获取反馈。请记住,生成器希望最大化成本函数。它希望为判别器创造最大的混乱。如前所述,判别器希望最小化成本函数。这有点像一个最小-最大竞争,其中一个竞争者努力胜过另一个。
import argparse
import os
import numpy as np
import math
import torchvision.transforms as transforms
from torchvision.utils import save_image
from torch.utils.data import DataLoader
from torchvision import datasets
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
import torch
# 省略其他代码实现...