翻译|朱宪忠评论|孙淑娟红葡萄园(作者:文森特·梵高)据《纽约时报》称,数据中心90%的能源都被浪费了,因为公司收集的大部分数据从未以任何形式进行分析或使用。更具体地说,这称为“暗数据”。“暗数据”是指通过各种计算机网络操作获得的数据,但不以任何方式用于得出见解或做出决策。组织收集数据的能力可能超过其分析数据的吞吐量。在某些情况下,组织甚至可能不知道正在收集数据。IBM估计,大约90%的传感器和模数转换生成的数据从未被使用过。–维基百科上的“暗数据”定义从机器学习的角度来看,此数据无助于得出任何见解的关键原因之一是缺乏标签。这使得无监督学习算法对于利用这些数据的潜力非常有吸引力。生成对抗网络2014年,IanGoodfello等人。提出了一种通过对抗过程估计生成模型的新方法。它涉及同时训练两个独立的模型:一个试图对数据分布建模的生成器模型,以及一个试图通过生成器将输入分类为训练数据或假数据的鉴别器。这篇论文在现代机器学习领域树立了一个非常重要的里程碑,为无监督学习开辟了新的途径。2015年,DeepConvolutionalRadford等人发表的GAN论文在论文中继续基于这一思想,应用卷积网络的原理成功生成了2D图像。通过这篇文章,我试图解释上述论文中讨论的关键组件,并使用PyTorch框架实现它们。GAN在哪里脱颖而出?要了解GAN或DCGAN(深度卷积生成对抗网络)的重要性,让我们首先了解是什么让它们如此受欢迎。1.由于大部分真实数据是未标记的,GAN的无监督学习特性使其非常适合此类用例。2.对于标记数据有限的用例,生成器和鉴别器充当非常好的特征提取器,或者生成额外的数据以改进二次模型训练,因为它们可以生成假样本而不是使用增强技术。3.GAN提供了最大似然技术的替代方案。它们的对抗性学习过程和非启发式成本函数使它们对强化学习非常有吸引力。4.GAN的研究非常有吸引力,其结果引起了对ML/DL影响的广泛争论。例如,deepfakes是一种使用GAN将人脸覆盖在目标人物身上的应用,由于它们有可能被用于邪恶目的,因此在本质上极具争议性。5.最后但并非最不重要的一点是,使用这种网络很酷,而且该领域的所有新研究都令人着迷。OverallArchitectureDeepConvolutionalGANArchitecture正如我们之前讨论的那样,我们将通过DCGAN工作,它试图实现GAN的核心思想,一个用于生成逼真图像的卷积网络。DCGAN由两个独立的模型组成:生成器(G)尝试将随机噪声向量建模为输入并尝试学习数据分布以生成假样本,鉴别器(D)获取训练数据(真实样本)并生成数据(假样本)样本)并尝试对它们进行分类。这两种模型之间的斗争就是我们所说的对抗性训练过程,其中一个模型的损失就是另一个模型的收益。GeneratorGeneratorArchitecture图生成器是我们最感兴趣的部分,因为它是一个生成假图像以试图愚弄鉴别器的生成器。现在,让我们更详细地了解一下生成器的架构。线性层:噪声向量被馈送到全连接层,其输出被扭曲为4D张量。BatchNormalizationLayer:通过将输入归一化为零均值和单位方差来稳定学习,避免梯度消失或爆炸等训练问题,并允许梯度在网络中流动。上采样层:根据我对论文的解释,它提到使用上采样,然后在其上应用一个简单的卷积层,而不是使用卷积转置层进行上采样。但是我看到有人用卷积转置,所以具体的应用策略还是看你自己了。2D卷积层:当我们对矩阵进行上采样时,我们将其传递给步幅为1的卷积层,并使用相同的填充,使其能够从上采样数据中学习。ReLU层:本文提到使用ReLU而不是LeakyReLU作为生成器,因为它可以让模型快速饱和并覆盖训练分布的颜色空间。TanH激活层:论文建议我们使用TanH激活函数来计算生成器输出,但没有详细说明原因。如果我们必须做出猜测,那是因为TanH的属性允许模型更快地收敛。其中,第2层到第5层构成核心生成器块,可以重复N次以获得所需的输出图像形状。下面是我们如何在PyTorch中实现它的关键代码(完整源代码参见地址https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py)。使用PyTorch框架的生成器实现关键代码判别器架构图从图中不难看出,判别器更像是一个图像分类网络,只是做了一些细微的调整。例如,它没有使用任何池化层进行下采样,而是使用一种特殊类型的卷积层,称为跨步卷积层,允许它学习自己的下采样。接下来,让我们更详细地了解鉴别器架构。Concat层:该层将假图像和真实图像批量组合以提供给鉴别器,但这也可以单独完成,只是为了获得生成器损失。卷积层:我们在这里使用步长卷积,它允许我们在一次训练过程中对图像进行下采样和学习过滤器。LeakyReLU层:正如论文中提到的,它发现Leakyrelus对于鉴别器非常有用,因为与原始GAN论文的最大输出函数相比,它可以更轻松地进行训练。Dropout层:仅用于训练,有助于避免过拟合。该模型有记忆真实图像数据的倾向,此时训练可能会崩溃,因为鉴别器不能再被生成器“愚弄”。BatchNormalizationLayer:论文提到它在每个判别器块的末尾应用批归一化(第一个除外)。论文中提到的原因是在每一层上应用batchnormalization会导致样本振荡和模型不稳定。线性层:一个完全连接的层,它从应用的2D批量归一化层中获取重塑的向量。Sigmoid激活层:由于我们正在处理判别器输出的二元分类,因此选择Sigmoid层是合乎逻辑的。在该架构中,第2层到第5层构成鉴别器的核心模块,可以重复计算N次,使每个训练数据的模型更加复杂。下面是我们如何在PyTorch中实现它(完整源代码参见地址https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py)。在PyTorch中实现的判别器关键代码部分的对抗训练我们训练判别器(D)以最大化将正确标签分配给训练样本和来自生成器(G)的样本的概率,这可以通过最小化log(D(x))待完成。我们同时训练G以最小化log(1?D(G(z))),其中z表示噪声向量。换句话说,D和G都使用价值函数V(G,D)来玩下面的两人minimax游戏:可能无法为G提供足够的梯度来很好地学习。在学习早期,当G较差时,D可以拒绝具有高置信度的样本,因为它们与训练数据有显着差异。在这种情况下,log(1?D(G(z)))函数饱和。我们不是训练G来最小化log(1?D(G(z))),而是训练G来最大化logD(G(z))。该目标函数能够为动态G和D生成相同的固定点,但在学习早期提供更强的梯度计算。——arxiv论文由于我们同时训练两个模型,这可能会很棘手,而且众所周知,GAN难以训练,我们稍后将讨论的已知问题之一称为模式崩溃。).论文推荐使用学习率为0.0002的Adam优化器,如此低的学习率表明GAN倾向于很快发散。它还使用值为0.5和0.999的一阶和二阶动量来进一步加速训练。模型初始化为正态权重分布,均值为零,标准差为0.02。下面显示的是我们如何为此实现训练循环(完整源代码在https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py)。DCGAN的训练循环模式崩溃(ModeCollapse)理想情况下,我们希望生成器生成各种输出。例如,如果它生成面孔,它应该为每个随机输入生成一张新面孔。然而,如果生成器产生的合理输出足以欺骗鉴别器,它可能会一遍又一遍地产生相同的输出。最终,生成器过度优化单个鉴别器并在一小组输出之间轮换,这种情况称为“模式崩溃”。可以使用以下方法来纠正这种情况。Wasserstein损失:Wasserstin损失通过允许您将鉴别器训练到最佳状态而不必担心梯度消失来减轻模式崩溃。如果鉴别器没有陷入局部最小值,它就会学会拒绝生成器的稳定输出。所以生成器必须尝试新的东西。展开的GAN:展开的GAN使用生成器损失函数,该函数不仅包括当前鉴别器的分类,还包括鉴别器未来版本的输出。因此,生成器不能针对单个鉴别器进行过度优化。应用风格转移:面部修饰应用程序现在都在大肆宣传。面部老化、哭脸和名人面部变形只是最近在社交媒体上广泛流行的一些应用程序。视频游戏:3D对象的纹理生成和基于图像的场景生成只是帮助视频游戏行业更快开发更大游戏的一些应用程序。电影行业:CGI(计算机生成图像)已成为模型电影的重要组成部分,并且借助GAN带来的潜力,电影制作人现在可以比以往任何时候都梦想更大。语音生成:一些公司正在使用GAN来改进文本到语音应用程序,方法是使用它们生成更逼真的语音。图像修复:使用GAN对损坏的图像进行去噪和修复,对历史图像进行着色,并通过生成缺失帧来提高帧率来改善旧视频。结论综上所述,本文前面提到的关于GAN和DCGAN的论文可以称为里程碑论文,因为它在无监督学习中开辟了一条新途径。其中提出的对抗性训练方法提供了一种新的方法来训练与真实世界学习过程非常相似的模型。因此,看看该领域如何发展将非常有趣。最后,你可以在我的GitHub源码仓库中找到本文示例项目的完整实现源码。译者介绍朱宪忠,社区编辑,潍坊某高校计算机教师,自由编程资深人士。原标题:ImplementingDeepConvolutionalGAN,作者:AkashAgnihotri
