RNN已经被成功应用于音乐生成,对话生成,图像生成,语音合成和分子设计,甚至还可以用于制作电影剧本。如何生成序列数据?使用前面的标记作为输入训练一个网络(通常是RNN或CNN)来预测序列中接下来的一个或多个标记。
这个过程涉及名词:标记、潜在空间、采样、条件数据、soft Max模型等
~~~~~~~~~~~采样策略的重要性~~~~~~~~~~~~~
始终选择可能性最大的下一个字符,缺点:重复、可预测的字符串
在采样过程中引入随机性,即从下一个字符的概率分布中进行采样。
字符均匀概率分布具有最大的熵/entropy,更小的熵可以让生成的序列觉有更加可预测的结构,而更大的熵会得到更加出人意料且更有创造性的序列。训练语言模型并从中采样即给定一个训练好的模型和一个种子文本片段,通过以下步骤完成采样:
(1) 给定目前已生成的文本,从模型中得到下一个字符的概率分布。
(2) 根据某个温度对分布进行重新加权。
(3) 根据重新加权后的分布对下一个字符进行随机采样。
(4) 将新字符添加到文本末尾。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
生成离散的序列数据的方法是: 给定前面的标记,训练一个模型来预测接下来的一个或多个标记。
对于文本来说,这种模型叫作语言模型。它可以是单词级的,也可以是字符级的。对下一个标记进行采样,需要在坚持模型的判断与引入随机性之间寻找平衡。处理这个问题的一种方法是使用 softmax 温度。一定要尝试多种不同的温度,以找到合适的那一个。
DeepDream 的过程是反向运行一个卷积神经网络,基于网络学到的表示来生成输入。得到的结果是很有趣的,有些类似于通过迷幻剂扰乱视觉皮层而诱发的视觉伪影。
【注意】这个过程并不局限于图像模型,甚至并不局限于卷积神经网络。它可以应用于语音、音乐等更多内容。
用深度学习进行图像生成,就是通过对潜在空间进行学习来实现的,这个潜在空间能够捕捉到关于图像数据集的统计信息。通过对潜在空间中的点进行采样和解码可以生成前所未见的图像。这种方法有两种重要工具: 变分自编码器(VAE)和生成式对抗网络(GAN)。
VAE 得到的是高度结构化的、连续的潜在表示。因它在潜在空间中进行各种图像编辑的效果很好,比如换脸、将皱眉脸换成微笑脸等。它制作基于潜在空间的动画效果也很好,比如沿着潜在空间的一个横截面移动,从而以连续的方式显示从一张起始图像缓慢变化为不同图像的效果。
GAN 可以生成逼真的单幅图像,但得到的潜在空间可能没有良好的结构,也没有很好的连续性。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【提示】建议使用大规模名人人脸属性(CelebA)数据集。 它是一个可以免费下载的图像数据集,里面包含超过 20 万张名人肖像,特别适合用概念向量进行实验,其结果肯定能打败 MNIST。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GAN
生成式对抗网络(GAN,generative adversarial network)由Goodfellow 等人2014年提出,替代VAE来学习图像的潜在空间。其工作的原理:一个伪装者网络和一个专家网络,二者训练的目的都是为了打败彼此,这就是传说的相互博弈。主要由以下两部分组成:
训练生成器网络的目的是使其能够欺骗判别器网络,因此随着训练的进行,它能够逐渐生成越来越逼真的图像,即看起来与真实图像无法区分的人造图像,以至于判别器网络无法区分二者。与此同时,判别器也在不断适应生成器逐渐提高的能力,为生成图像的真实性设置了很高的标准。一旦训练结束,生成器就能够将其输入空间中的任何点转换为一张可信图像 。与 VAE 不同,这个潜在空间无法保证具有有意义的结构,而且它还是不连续的 。
GAN的优化最小值不是固定的,通常梯度下降是沿着静态的损失地形滚下山坡。但对于GAN而言,每下山一步都会对整个地形造成一点改变。更确切的说它是一个动态的系统,其最优化过程寻找的不是一个最小值,而是两股力量之间的平衡。因此GAN训练过程极其困难,需要对模型架构和训练参数进行大量的仔细调整。
=============【GAN简要的实现过程】================
以实现一个深度卷积生成式对抗网络(DCGAN,deep convolution GAN)即生成器和判别器都是深度学习卷积神经网络的GAN。流程如下:
【Keras之父推荐使用的GAN相关的技巧】
【如何训练DCGAN】
(1) 从潜在空间中抽取随机的点(随机噪声)。
(2) 利用这个随机噪声用generator生成图像。
(3) 将生成图像与真实图像混合。
(4) 使用这些混合后的图像以及相应的标签(真实图像为“真”,生成图像为“假”)来训练 discriminator。
(5) 在潜在空间中随机抽取新的点。
(6) 使用这些随机向量以及全部是“真实图像”的标签来训练gan。这会更新生成器的权重(只更新生成器的权重,因为判别器在 gan 中被冻结),其更新方向是使得判别器能够 将生成图像预测为“真实图像”。这个过程是训练生成器去欺骗判别器。
========================【小结】==============================