模范爸爸 训练,损失函数和算法,了解GAN背后的设计

假设我们有一个卧室图像数据集和一个在这个数据集上训练的图像分类器CNN , 它告诉我们给定的输入图像是否是卧室 。 假设图像大小为16*16 。 每个像素可以有256个可能的值 。 所以存在无限大量的可能输入(即25616*16或~10616可能的组合) 。 这使得我们的分类器模型成为一个高维概率分布函数 , 它给出了来自这个大输入空间的给定输入作为卧室的概率 。
那么 , 如果我们可以从卧室图像的数据分布中学习这种高维知识来进行分类 , 我们肯定能够利用相同的知识甚至生成全新的卧室图像 。
虽然有多种生成建模方法 , 但我们将在本文中探讨生成对抗网络 。 GAN的原始论文(arxiv.org/pdf/1406.2661.pdf)发表于2014年 , 在这篇论文(arxiv.org/pdf/1511.06434.pdf)引入了深度卷积生成对抗网络(deeptionalgenerateadversarialnetworks,DCGAN) , 并作为一种流行的参考 。 这篇文章是基于这两篇论文的研究 , 对GAN做了很好的介绍 。
GAN是同时训练生成模型G和判别模型D的网络 。 生成模型将通过捕获与训练数据集相关的数据分布来生成新的卧室图像 。 训练判别模型将给定的输入图像正确分类为真实(即来自训练数据集图像)或虚假(即生成模型生成的合成图像) 。 简单的说 , 判别模型是典型的CNN图像分类器模型 , 或者更具体地说是二元图像分类器 。
生成模型与判别模型略有不同 。 它的目标不是分类而是生成 。 当判别模型给出一个代表不同的类的激活向量时给出一个输入图像 , 生成模型就会反向执行 。
它可以被认为是反向CNN , 在某种意义上它将随机数的向量作为输入并生成图像作为输出 , 而正常的CNN则相反地将图像作为输入并生成数字向量或激活(对应于不同的类)作为输出 。
但是这些不同的模型如何协同工作?下图给出了网络的图示 。 首先 , 我们将随机噪声向量作为生成模型的输入 , 生成模型生成图像输出 。 我们将这些生成的图像称为伪图像或合成图像 。 然后判别模型将训练数据集中的假图像和真图像都作为输入 , 并生成一个输出来分类图像是假图像还是真图像 。
使用这两个模型对该网络的参数进行训练和优化 。 判别模型的目标是最大限度地正确分类图像的真伪 。 相反 , 生成模型的目标是最小化判别器正确地将假图像分类为假的 。
反向传播和普通卷积神经网络(CNN)一样 , 是用来训练网络参数的 , 但是由于涉及到两个目标不同的模型 , 使得反向传播的应用有所不同 。 更具体地说 , 涉及的损失函数和在每个模型上执行的迭代次数是GAN不同的两个关键领域 。
判别模型的损失函数将是一个与二元分类器相关的正则交叉熵损失函数 。 根据输入图像 , 损失函数中的一项或另一项将为0 , 结果将是模型预测图像被正确分类的概率的负对数 。 换句话说 , 在我们的上下文中 , 对于真实图像 , “y”将为“1” , 对于假图像 , “1-y”将为“1” 。 “p”是图像是真实图像的预测概率 , “1-p”是图像是假图像的预测概率 。
上面的概率p可以表示为D(x) , 即判别器D估计的图像“x”是真实图像的概率 。 重写 , 如下图所示:


推荐阅读