【keras之父】GAN & VAE

            RNN已经被成功应用于音乐生成,对话生成,图像生成,语音合成和分子设计,甚至还可以用于制作电影剧本。如何生成序列数据?使用前面的标记作为输入训练一个网络(通常是RNN或CNN)来预测序列中接下来的一个或多个标记。

这个过程涉及名词:标记、潜在空间、采样、条件数据、soft Max模型等

~~~~~~~~~~~采样策略的重要性~~~~~~~~~~~~~

  1. 贪婪采样(greedy sampling

始终选择可能性最大的下一个字符,缺点:重复、可预测的字符串

  1. 随机采样(stochastic sampling

在采样过程中引入随机性,即从下一个字符的概率分布中进行采样。

      字符均匀概率分布具有最大的/entropy更小的熵可以让生成的序列觉有更加可预测的结构,而更大的熵会得到更加出人意料且更有创造性的序列。训练语言模型并从中采样即给定一个训练好的模型和一个种子文本片段,通过以下步骤完成采样:

(1) 给定目前已生成的文本,从模型中得到下一个字符的概率分布。

(2) 根据某个温度对分布进行重新加权。

(3) 根据重新加权后的分布对下一个字符进行随机采样。

           (4) 将新字符添加到文本末尾。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

         生成离散的序列数据的方法是: 给定前面的标记,训练一个模型来预测接下来的一个或多个标记

         对于文本来说,这种模型叫作语言模型。它可以是单词级的,也可以是字符级的。对下一个标记进行采样,需要在坚持模型的判断与引入随机性之间寻找平衡。处理这个问题的一种方法是使用 softmax 温度。一定要尝试多种不同的温度,以找到合适的那一个。

          DeepDream 的过程是反向运行一个卷积神经网络,基于网络学到的表示来生成输入。得到的结果是很有趣的,有些类似于通过迷幻剂扰乱视觉皮层而诱发的视觉伪影

【注意】这个过程并不局限于图像模型,甚至并不局限于卷积神经网络。它可以应用于语音、音乐等更多内容。

 

        用深度学习进行图像生成,就是通过对潜在空间进行学习来实现的,这个潜在空间能够捕捉到关于图像数据集的统计信息。通过对潜在空间中的点进行采样和解码可以生成前所未见的图像。这种方法有两种重要工具: 变分自编码器(VAE)和生成式对抗网络(GAN)

        VAE 得到的是高度结构化的、连续的潜在表示。因它在潜在空间中进行各种图像编辑的效果很好,比如换脸、将皱眉脸换成微笑脸等。它制作基於潜在空间的动画效果也很好,比如沿着潜在空间的一个横截面移动,从而以连续的方式显示从一张起始图像缓慢变化为不同图像的效果。

          GAN 可以生成逼真的单幅图像,但得到的潜在空间可能没有良好的结构,也没有很好的连续性。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【提示】建议使用大规模名人人脸属性(CelebA)数据集。 它是一个可以免费下载的图像数据集,里面包含超过 20 张名人肖像,特别适合用概念向量进行实验,其结果肯定能打败 MNIST

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GAN

        生成式对抗网络(GAN,generative adversarial network)由Goodfellow 等人2014年提出,替代VAE来学习图像的潜在空间。其工作的原理:一个伪装者网络和一个专家网络,二者训练的目的都是为了打败彼此,这就是传说的相互博弈。主要由以下两部分组成:

  1. 生成器网络 generator network:它以一个随机向量(潜在空间中的一个随机点)作为输入,并将其解码为一张合成图像。
  2. 判别式网络 discriminator network或对手adversary:以一张图像(真是的或合成的均可)作为输入,并预测该图像是来自训练集还是由生成器网络创建。

        训练生成器网络的目的是使其能够欺骗判别器网络,因此随着训练的进行,它能够逐渐生成越来越逼真的图像,即看起来与真实图像无法区分的人造图像,以至于判别器网络无法区分二者。与此同时,判别器也在不断适应生成器逐渐提高的能力,为生成图像的真实性设置了很高的标准。一旦训练结束,生成器就能够将其输入空间中的任何点转换为一张可信图像 。与 VAE 不同,这个潜在空间无法保证具有有意义的结构,而且它还是不连续的 。

         GAN的优化最小值不是固定的,通常梯度下降是沿着静态的损失地形滚下山坡。但对于GAN而言,每下山一步都会对整个地形造成一点改变。更确切的说它是一个动态的系统,其最优化过程寻找的不是一个最小值,而是两股力量之间的平衡。因此GAN训练过程极其困难,需要对模型架构和训练参数进行大量的仔细调整。

=============【GAN简要的实现过程】================

         以实现一个深度卷积生成式对抗网络(DCGAN,deep convolution GAN)即生成器和判别器都是深度学习卷积神经网络的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模型的损失相对于生成器权重的梯度。这就意味着在每一步都要移动生成器的权重,其移动方向是让判别器更有可能将生成器街吗的图像划分为“真”。也就是训练生成器来欺骗判别器。

Keras之父推荐使用的GAN相关的技巧】

  1. 使用tanh作为生成器最后一层的激活,而不用sigmoid,后者在其他类型的模型中更加常见。
  2. 使用正态分布(高斯分布)对潜在空间中的点进行采样,而不是均匀分布。
  3. 随机性能够提高稳健性。训练GAN得到的是一个动态平衡,所以GAN可能以各种方式“卡住“。在训练过程中引入随机性有助于防止出现这种情况。通过两种方式引入随机性:一种是在判别器中使用dropout;另一种是向判别器的标签添加随机噪声
  4. 有两件事情可能导致梯度稀疏: 最大池化运算和 ReLU 激活。推荐使用步进卷积代替最大池化来进行下采样,还推荐使用 LeakyReLU 层来代替 ReLU 激活。LeakyReLU 和 ReLU 类似,但它允许较小的负数激活值,从而放宽了稀疏性限制。
  5. 为了解决棋盘状伪影,每当在生成器和判别器中使用步进的conv3DTranpose或Conv2D时,使用的内核大小要能够被步幅大小整除

【如何训练DCGAN

(1) 从潜在空间中抽取随机的点(随机噪声)

(2) 利用这个随机噪声用generator生成图像。

(3) 将生成图像与真实图像混合。

(4) 使用这些混合后的图像以及相应的标签(真实图像为“真”,生成图像为“假”)来训练 discriminator

(5) 在潜在空间中随机抽取新的点。

(6) 使用这些随机向量以及全部是“真实图像”的标签来训练gan。这会更新生成器的权重(只更新生成器的权重,因为判别器在 gan 中被冻结),其更新方向是使得判别器能够 将生成图像预测为“真实图像”。这个过程是训练生成器去欺骗判别器。

========================【小结】==============================

  1. GAN 由一个生成器网络和一个判别器网络组成。判别器的训练目的是能够区分生成器的 输出与来自训练集的真实图像,生成器的训练目的是欺骗判别器。值得注意的是,生成器从未直接见过训练集中的图像,它所知道的关于数据的信息都来自于判别器。
  2. GAN 很难训练,因为训练 GAN 是一个动态过程,而不是具有固定损失的简单梯度下降过程。想要正确地训练 GAN,需要使用一些启发式技巧,还需要大量的调节。
  3. GAN 可能会生成非常逼真的图像。但与 VAE 不同,GAN 学习的潜在空间没有整齐的连 续结构,因此可能不适用于某些实际应用,比如通过潜在空间概念向量进行图像编辑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章