《python深度学习》笔记---8.5、生成式对抗网络简介
一、总结
一句话总结:
【gan可以替代VAE来学习图像的潜在空间,它能够迫使生成图像与真实图像在统计上几乎无法区分】:生成式对抗网络(GAN,generative adversarial network)由Goodfellow 等人于2014 年提 出 a,它可以替代VAE 来学习图像的潜在空间。它能够迫使生成图像与真实图像在统计上几乎无 法区分,从而生成相当逼真的合成图像。
1、GAN 的工作原理?
【打败彼此】:GAN有一个伪造者网络和一个专家网络,二者训练的目的都是为了打败彼此。因此,GAN 由以下两部分组成。
【生成器网络(generator network)】:它以一个随机向量(潜在空间中的一个随机点)作 为输入,并将其解码为一张合成图像。
【判别器网络(discriminator network)或对手(adversary)】:以一张图像(真实的或合成的 均可)作为输入,并预测该图像是来自训练集还是由生成器网络创建。
2、值得注意的是,GAN 这个系统与本书中其他任何训练方法都不同,它的优化最小值是不固 定的?
【对于GAN而言,每下山一步,都会对整个地形造成一点改变】:通常来说,梯度下降是沿着静态的损失地形滚下山坡。但对于GAN 而言,每下山一步, 都会对整个地形造成一点改变。
【寻求两股力量之间的平衡】:它是一个动态的系统,其最优化过程寻找的不是一个最小值, 而是两股力量之间的平衡。
【GAN的训练极其困难】:因此,GAN的训练极其困难,想要让GAN 正常运行,需要对模型 架构和训练参数进行大量的仔细调整。
3、DCGAN?
【生成器和判别器都是深度卷积神经网络的GAN】:深度卷积生成式对抗网络(DCGAN,deep convolutional GAN),即生成器和判别器都是深度卷积神经网络的GAN。
【生成器中使用Conv2DTranspose层进行图像上采样】:特别地,它在生成器中 使用 Conv2DTranspose 层进行图像上采样。
4、GAN 的简要实现流程?
(1) generator网络将形状为(latent_dim,)的向量映射到形状为(32, 32, 3)的图像。 (2) discriminator 网络将形状为 (32, 32, 3) 的图像映射到一个二进制分数,用于评 估图像为真的概率。
(3) gan 网络将 generator 网络和 discriminator 网络连接在一起:gan(x) = discriminator (generator(x))。生成器将潜在空间向量解码为图像,判别器对这些图像的真实性进 行评估,因此这个 gan 网络是将这些潜在向量映射到判别器的评估结果。
(4) 我们使用带有“真”/“假”标签的真假图像样本来训练判别器,就和训练普通的图像 分类模型一样。
(5) 为了训练生成器,我们要使用 gan 模型的损失相对于生成器权重的梯度。这意味着, 在每一步都要移动生成器的权重,其移动方向是让判别器更有可能将生成器解码的图像 划分为“真”。换句话说,我们训练生成器来欺骗判别器。
5、gan的随机性能够提高稳健性,那么如何在gan中加入随机性?
【一种是在判别器中使用dropout,另一种是向判别器的标签添加随机噪声】:训练GAN得到的是一个动态平衡,所以GAN可能以各种方式“卡 住”。在训练过程中引入随机性有助于防止出现这种情况。我们通过两种方式引入随机性: 一种是在判别器中使用 dropout,另一种是向判别器的标签添加随机噪声
6、稀疏性在深度学习中的使用情况?
在深度学习中,稀疏性通常是我们需要的属性,但在 GAN 中并非如此。
7、深度学习中可能导致梯度稀疏的两种情况?
最大池化运算和 ReLU 激活
8、为什么gan中使用步进卷积代替最大池化来进行下采样?
【在深度学习中,稀疏性通常是我们需要的属性,但在 GAN 中并非如此】:有两件事情可能导致梯度稀疏:最大池化运算和 ReLU 激活。我们推 荐使用步进卷积代替最大池化来进行下采样,还推荐使用 LeakyReLU 层来代替 ReLU 激 活。LeakyReLU 和 ReLU 类似,但它允许较小的负数激活值,从而放宽了稀疏性限制。
9、为什么gan中使用 LeakyReLU 层来代替 ReLU 激 活?
【在深度学习中,稀疏性通常是我们需要的属性,但在 GAN 中并非如此】:有两件事情可能导致梯度稀疏:最大池化运算和 ReLU 激活。我们推 荐使用步进卷积代替最大池化来进行下采样,还推荐使用 LeakyReLU 层来代替 ReLU 激 活。LeakyReLU 和 ReLU 类似,但它允许较小的负数激活值,从而放宽了稀疏性限制。
10、GAN 训练的大量技巧?
【tanh激活函数和正态分布】:我们使用 tanh 作为生成器最后一层的激活,而不用 sigmoid,后者在其他类型的模型中 更加常见。我们使用正态分布(高斯分布)对潜在空间中的点进行采样,而不用均匀分布。
【随机性能够提高稳健性】:训练GAN得到的是一个动态平衡,所以GAN可能以各种方式“卡 住”。在训练过程中引入随机性有助于防止出现这种情况。我们通过两种方式引入随机性: 一种是在判别器中使用 dropout,另一种是向判别器的标签添加随机噪声。
【稀疏的梯度会妨碍GAN的训练】:在深度学习中,稀疏性通常是我们需要的属性,但在 GAN 中并非如此。有两件事情可能导致梯度稀疏:最大池化运算和 ReLU 激活。我们推 荐使用步进卷积代替最大池化来进行下采样,还推荐使用 LeakyReLU 层来代替 ReLU 激 活。LeakyReLU 和 ReLU 类似,但它允许较小的负数激活值,从而放宽了稀疏性限制。
【棋盘状伪影是由生成器中像素空间的不均匀覆盖导致的】:在生成的图像中,经常会见到棋盘状伪影,这是由生成器中像素空间的不均匀覆盖导致的。为了解决这个问题,每当在生成器和判别器中都使用步进的 Conv2DTranpose 或 Conv2D 时,使用的内核大小要能够被步幅大小整除。
11、gan的生成器 和 判别器?
【将一个向量转换为一张候选图像】:首先,我们来开发 generator 模型,它将一个向量(来自潜在空间,训练过程中对其随机 采样)转换为一张候选图像。
【判别器和生成器中都使用dropout】:GAN 常见的诸多问题之一,就是生成器“卡在”看似噪声的生成 图像上。一种可行的解决方案是在判别器和生成器中都使用 dropout。
【判别器将图片划分到两个分类】:接下来,我们来开发 discriminator 模型,它接收一张候选图像(真实的或合成的)作 为输入,并将其划分到这两个类别之一:“生成图像”或“来自训练集的真实图像”。
12、生成器训练时要将判别器冻结?
请注意,有一点很重要,就是在 训练过程中需要将判别器设置为冻结(即不可训练),这样在训练 gan 时它的权重才不会更新。
13、DCGAN每轮循环的大致流程?
(1) 从潜在空间中抽取随机的点(随机噪声)。 (2) 利用这个随机噪声用 generator 生成图像。 (3) 将生成图像与真实图像混合。
(4) 使用这些混合后的图像以及相应的标签(真实图像为“真”,生成图像为“假”)来训练 discriminator
(5) 在潜在空间中随机抽取新的点。
(6) 使用这些随机向量以及全部是“真实图像”的标签来训练 gan。这会更新生成器的权重 (只更新生成器的权重,因为判别器在 gan 中被冻结),其更新方向是使得判别器能够 将生成图像预测为“真实图像”。这个过程是训练生成器去欺骗判别器。
14、gan训练的时候,如果出现 对抗损失开始大幅增加,而判别损失则趋向于零,即判别器最终支配了生成器,该怎么办?
【减小判别器的学习率,并增大判别器的dropout比率】:如果出现了这种情况,你可以尝试减小判别器的学习率,并增大判别器的 dropout 比率。
15、gan 小结?
【GAN 由一个生成器网络和一个判别器网络组成】:判别器的训练目的是能够区分生成器的 输出与来自训练集的真实图像,生成器的训练目的是欺骗判别器。值得注意的是,生成 器从未直接见过训练集中的图像,它所知道的关于数据的信息都来自于判别器。
【GAN 很难训练,因为训练GAN 是一个动态过程】:而不是具有固定损失的简单梯度下降 过程。想要正确地训练 GAN,需要使用一些启发式技巧,还需要大量的调节。
【GAN 可能会生成非常逼真的图像】:但与VAE 不同,GAN 学习的潜在空间没有整齐的连 续结构,因此可能不适用于某些实际应用,比如通过潜在空间概念向量进行图像编辑。
二、内容在总结中
博客对应课程的视频位置: