初学者教程网络GAN(生成器网络概率面孔图像)「网络的概率」

最终的初学者指南,用于使用防弹Python代码理解,构建和培训GAN
本文介绍了生成对抗网络所需的一切
不需要GAN的先验知识
我们提供了有关如何在大型图像数据集上训练GAN以及如何使用它们通过Keras生成新名人脸的分步指南
Facebook副总裁兼首席AI科学家Yann LeCun," AI教父"提出了"生成式对抗网络-过去十年来机器学习中最有趣的想法"
> Photo by Alex Iby on Unsplash 尽管Generative Adversarial Network(GAN)是一种起源于博弈论的古老观念,但在2014年由Ian J.Goodfellow及其共同作者在Generative Adversarial Nets一文中引入了机器学习社区
GAN如何工作,它有什么用?GAN可以创建看起来像人脸照片的图像,即使这些人脸不属于任何真实的人
> fake photo-realistic faces created by a GAN (source) 在上一篇文章中,我们了解了如何使用变体自动编码器生成新的逼真的图像
我们的VAE受过著名的Celebrity Faces数据集的培训
> Example of image and its reconstruction using our VAE code (self-created) VAE通常会产生模糊和非真实感的面孔
这是建立生成对抗网络(GAN)的动机
在本文中,我们将研究GAN如何提供完全不同的方法来生成与训练数据相似的数据
概率游戏生成新数据是一种概率游戏
当我们观察周围的世界并收集数据时,我们正在进行实验
一个简单的例子是拍摄一张名人脸的照片
这可以被视为概率实验,结果X未知,也称为随机变量
如果实验重复了很多次,我们通常将随机变量X的值定义为x的几率,即x出现的几率
例如,我们可以定义面孔是著名名人歌手泰瑞斯(Tyrese)面孔的概率
这些实验的所有可能结果都会建立一个称为Ω的所谓样本空间(所有可能的名人面孔)
因此,我们可以将概率视为具有结果的函数,即样本空间中的元素(照片)并将结果映射到非负实数,以便所有这些数的总和等于1
我们也称其为概率分布函数P(X)
当我们知道样本空间(所有可能的名人面孔)和概率分布(每个面孔出现的概率)时,我们就可以对实验进行全面描述,并可以对不确定性进行推理
您可以在下面的文章中重新获得关于概率的知识
名人脸概率分布可以通过随机变量生成问题来表示生成新面孔
用随机变量描述该面部,该变量通过其RGB值表示,展平为N个数字的向量
名人脸的高度为218px,宽度为178px,具有3个颜色通道
因此,每个向量都是116412维
如果我们建立一个具有116412轴的空间,则每个面将是该空间中的一个点
名人面孔概率分布函数P(X)将每个面孔映射到非负实数,以使所有面孔的所有这些数字的总和等于1
该空间中的某些点很可能代表名人脸,而其他一些点则不太可能
> Celebrity-face probability distribution function (self-created) GAN通过在116412维向量空间上按照名人脸概率分布生成新向量来生成新名人脸
简而言之,GAN将针对特定概率分布生成随机变量
如何从复杂分布中生成随机变量?116412维向量空间上的名人面孔概率分布是一个非常复杂的分布,我们不知道如何直接生成复杂的随机变量
> Image from TheDigitalArtist on Pixabay 幸运的是,我们可以通过应用于统一随机变量的函数来表示复杂的随机变量
这就是变换方法的思想
它首先生成116412个不相关的统一随机变量,这很容易
然后,它将一个非常复杂的函数应用于该简单随机变量
非常复杂的功能自然可以通过神经网络来近似
训练后,网络将能够以简单的116412维均匀随机变量作为输入,并返回遵循我们名人脸概率分布的另一个116412维随机变量作为输入
这是生成对抗网络背后的核心动机
为什么要建立对抗性网络?在变换神经网络的每次训练迭代中,我们可以将名人训练集中的面孔样本与生成的面孔样本进行比较
从理论上讲,我们将使用最大平均差异(MMD)方法基于样本比较真实分布与生成的分布
这将产生分布匹配错误,可用于通过反向传播更新网络
这种直接方法实际上实施起来非常复杂
GAN不会直接比较真实分布和生成的分布,而是解决真实样本和生成的样本之间的非歧视任务
GAN具有三个主要组成部分:用于生成新数据的生成器模型,用于对生成的数据是真实面孔还是伪造进行分类的鉴别模型,以及使它们相互竞争的对抗网络
生成部分负责将116412维统一随机变量(噪声)作为输入并生成假脸
生成器捕获概率P(X),其中X是输入
判别部分是一个简单的分类器,用于评估和区分生成的面孔和真实的名人面孔
鉴别器捕获条件概率P(Y | X),其中X是输入,Y是标签
> generative adversarial network for celebrity faces (self-created) 训练生成对抗网络训练生成网络使最终分类误差(在真实数据和生成的数据之间)最大化,而对区分网络进行训练以使误差最小化
这就是对抗网络的概念
从博弈论的角度来看,当生成器生成遵循名人面孔概率分布的样本并且鉴别器以相等的概率预测伪造或非伪造就好像会抛硬币一样,就达到了平衡
重要的是,两个网络在训练过程中均应学习并融合在一起
当判别网络在识别伪造品方面变得更好时,就会导致生成网络被卡住,从而发生典型情况
在鉴别器训练期间,我们忽略生成器损失,而仅使用鉴别器损失,这会歧视鉴别器将真实的面部错误分类为假的或将生成的面部错误分类为真实的
发生器的权重通过反向传播进行更新
发电机的重量不会更新
在生成器训练期间,我们使用生成器损耗,这会惩罚生成器,因为它无法欺骗鉴别器并生成歧视者将其分类为假的面孔
鉴别器在生成器训练期间被冻结,并且仅通过反向传播更新生成器的权重
这是使用GAN合成名人面孔的魔力
收敛通常被认为是短暂的,而不是稳定的
当您一切正常时,GAN会提供令人难以置信的结果,如下所示
> GAN-synthesized App by Streamlit (source)建立和训练DCGAN模型在本节中,我们将完成为名人脸部数据集创建,编译和训练DCGAN模型所需的所有步骤
深度卷积生成对抗网络(DCGAN)是使用卷积层的GAN
鉴别器鉴别器可以是任何图像分类器,甚至可以是决策树
我们改为使用具有4个层块的卷积神经网络
每个块包括卷积,批处理归一化和另一次卷积,其中跨步大步将图像缩小两倍,并进行另一批处理归一化
结果经过平均池化,然后是密集的S型层,返回单个输出概率
发电机生成器获取潜在尺寸的噪声矢量并生成图像
图片的形状应与鉴别器输入的形状相同(spatial_dim x space_dim)
生成器首先使用密集层对噪声矢量进行上采样,以便具有足够的值以重整为第一个生成器块
投影的目标是与鉴别器体系结构中的最后一块具有相同的尺寸
这相当于鉴别器最后一个卷积层中4 x 4 x滤波器的数量,我们将在本文稍后进行演示
每个生成器块都应用反卷积来对图像进行上采样和批量归一化
我们使用4个解码器块和最后一个卷积层来获得3D张量,该张量表示具有3个通道的伪图像
GAN通过在生成器顶部添加区分符来构建加入的DCGAN
在编译完整设置之前,我们必须将鉴别器模型设置为不可训练的
这将冻结其权重,并告知整个网络中唯一需要训练的部分就是生成器
尽管我们编译了鉴别器,但是我们并不需要编译生成器模型,因为我们不会自己使用生成器
此顺序可确保鉴别器在正确的时间更新并在必要时冻结
因此,如果我们训练整个模型,它将仅更新生成器,而当我们训练鉴别器时,它将仅更新鉴别器
> generator architecture > discriminator architecture > DCGAN architecture GAN 训练现在出现了困难和缓慢的部分:训练生成的对抗网络
由于GAN由两个单独训练的网络组成,因此很难确定融合
> Image by 024–657–834 on Pixabay 来回执行以下步骤,使GAN可以解决其他棘手的生成问题
步骤1 —从训练集中选择一些真实图像
第2步-生成大量伪造图像
这是通过采样随机噪声矢量并使用生成器从它们创建图像来完成的
第3步-使用伪图像和真实图像训练鉴别器一个或多个时期
通过将所有真实图像标记为1,将伪图像标记为0,这将仅更新鉴别器的权重
> Discriminator training schema (self-created) — Generator's weights are not updated. Only the disc 步骤4 —生成其他数量的伪造图像
第5步-仅使用假图像训练一个或多个时期的完整GAN模型
通过将所有伪造的图像标记为1,这将仅更新生成器的权重
> Generator training schema (self-created) —Discriminator weights are not updated. Only the generat > GAN training performance is fleeting > Fake faces generated by the Generator during GAN training 从上方我们可以看到我们的GAN表现不错
即使照片质量不如CelebA训练组中的照片,生成的面孔看起来也很合理
这是因为我们在重塑的64x64图像上训练了GAN,该图像比原始的218x178变得更小,更模糊
VAE和GAN之间的区别与我们之前的文章中的变分自动编码器生成的面孔相比,DCGAN生成的面孔看起来足够生动,可以表示足够接近真实的有效面孔
> Fake faces generated by a Variational AutoEncoder during training (source) 与VAE相比,GAN通常是更好的深度生成模型
尽管VAE势必会在潜在的空间中工作,但它们更容易训练
VAE可以看作是半监督学习者,因为他们经过了培训,可以最大程度地减少复制特定图像的损失
另一方面,GAN正在解决无人监督的学习问题
结论在本文中,我解释了生成对抗网络如何能够近似估计大量图像的概率分布并使用它来生成逼真的图像
我提供了有效的Python代码,使您可以构建和训练GAN来解决自己的任务
您可以通过Google Developers或Joseph Rocca的文章了解有关GAN的更多信息
我下面的文章将进一步探讨变体自动编码器
傻瓜变型自动编码器(VAE)-分步教程DIY实用指南,具有动手实践的代码,可使用Keras在名人脸上构建和训练VAE
感谢Towards Data Science的Amber Teng的社论评论
(本文翻译自Michel Kana, Ph.D的文章《Generative Adversarial Network (GAN) for Dummies — A Step By Step Tutorial》,参考:https://towardsdatascience.com/generative-adversarial-network-gan-for-dummies-a-step-by-step-tutorial-fdefff170391)
初学者教程网络GAN(生成器网络概率面孔图像)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息