「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸


本文只是简要介绍生成对抗网络(GAN)以及如何构建人脸生成器 。
GAN与其他类型的神经网络采用不同的学习方法 。 GAN的算法体系结构使用了两个神经网络 , 分别称为Generator和Discriminator , 它们相互竞争以产生所需的结果 。 生成器的工作是创建看起来逼真的假图像 , 而判别器的工作是区分真实图像和假图像 。 如果两者均能正常工作 , 则结果是看起来像真实照片的图像 。
为什么首先开发GAN?
大多数主流的神经网络很容易通过在原始数据中加入少量的噪声而被错误地分类 。 出乎意料的是 , 添加噪声后的模型比正确预测的模型对错误预测的置信度更高 。 造成这种的原因是大多数机器学习模型都是从有限的数据中学习的 , 这是一个巨大的缺点 , 因为它很容易过度拟合 。 同样 , 输入和输出之间的映射几乎是线性的 。 尽管看起来各个类之间的分隔边界似乎是线性的 , 但实际上它们是由线性组成的 , 即使特征空间中某个点的微小变化也可能导致数据分类错误 。
例子1
例子2
GAN如何工作?
GAN通过使两个神经网络相互竞争来学习数据集的概率分布 。
一个叫做Generator的神经网络生成新的数据实例 , 而另一个Discriminator评估它们的真实性 。 即 , 判别器决定它检查的数据的每个实例是否属于实际的训练数据集 。
同时 , 生成器正在创建新的合成/伪造图像 , 并将其传递给判别器。 这样做是为了希望即使它们是假的 , 它们也将被认为是真实的 。 伪造的图像是使用称为转置卷积的卷积逆运算从100维噪声(在-1.0到1.0之间的均匀分布)生成的 。
生成器的目标是生成可传递的图像:说谎而不被察觉 。 判别器的目的是将来自生成器的图像识别为伪造的 。
以下是GAN采取的步骤:
生成器接受随机数并返回图像 。
生成的图像与从实际的真实数据集中获取的图像流一起馈入判别器 。
判别器同时获取真实图像和伪造图像 , 并返回概率(介于0和1之间的数字) , 其中1代表真实的 , 0代表伪造的 。
因此 , 您有一个双重反馈循环:
判别器处于反馈循环中 , 具有图像的基本事实 , 这是我们知道的 。
生成器与判别器处于反馈回路中 。
「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸
本文插图
GAN背后的数学
判别器的工作是执行二进制分类以在真实与伪造之间进行检测 , 因此其损失函数为二进制交叉熵 。 生成器所做的就是从噪声到真实数据的密度估计 , 并将其馈送到判别器以使其模糊 。
设计中遵循的方法是将它建模为一个极大/极小的游戏 。 现在让我们来看看成本函数:
「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸
本文插图
第一项J(D)表示将实际数据提供给判别器 , 判别器将要最大化预测一个的对数概率 , 从而表明数据是真实的 。 第二项J(G)代表由生成的样本 。 在此 , 判别器将要最大化预测零的对数概率 , 这表明数据是伪造的 。 另一方面 , 生成器试图使判别器正确的对数概率最小 。 该问题的解是对策的平衡点 。
「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸
本文插图
GAN的架构
D()给出给定样本来自训练数据X的概率 。 对于生成器 , 我们要最小化 , log(1-D(G(z))即 , 当值D(G(z))很高时 , D将假设G(z)X之外什么都不是 , 这使得它1-D(G(z))非常低 , 并且我们希望将其最小化 , 即使降低 。 对于判别器 , 我们要最大化D(X)和(1-D(G(z))) 。 因此 , D的最佳状态为P(x)=0.5 。 但是 , 我们要训练生成器G , 使其生成判别器D的结果 , 以使D无法区分z和X 。
现在的问题是为什么这是一个极小极大函数?这是因为判别器试图最大化目标 , 而生成器试图最小化目标 , 由于这种最小化/最大化 , 我们得到了最小最大项 。 他们都通过交替的梯度下降一起学习 。