本文主要是介绍深度学习-生成模型:Generation(Tranform Vector To Object with RNN)【PixelRNN、VAE(变分自编码器)、GAN(生成对抗网络)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
深度学习-生成模型:Generation(Tranform Vector To Object with RNN)【PixelRNN、VAE(变分自编码器)、GAN(生成对抗网络)】
- 一、Generator的分类
- 二、Native Generator (AutoEncoder's Decoder)
- 三、PixelRNN
- 1、生成句子序列
- 2、生成图片
- 3、生成音频:WaveNet
- 4、生成视频:Video Pixel Network (VPN)
- 四、Variational Autoencoder (VAE,变分自编码器)
- 1、原始AutoEncoder
- 2、Variational Autoencoder (VAE)
- 3、Gaussian Mixture Model(高斯混合模型)
- 4、Problems of VAE
- 五、Generative Adversarial Network (GAN,对抗生成网络)
- 六、Tips for Generation
- 2.1 Scheduled Sampling
- 2.2 Beam Search
- 2.3 Reinforcement learning
一、Generator的分类
- Generator:Generating a structured object component by component。
- Generator:逐个组件(pixel/word…)地生成一个有结构的Object。
- 我们可以生成很多东西,比如生成一句话,一段音乐等等。
Generative Models { Native Generator(AutoEncoder’s Decoder) PixelRNN VAE(Variational AutoEncoder) GAN(Generative Adversarial Network) \begin{aligned} \text{Generative Models} \begin{cases} \text{Native Generator(AutoEncoder's Decoder)} \\[2ex] \text{PixelRNN} \\[2ex] \text{VAE(Variational AutoEncoder)} \\[2ex] \text{GAN(Generative Adversarial Network)} \end{cases} \end{aligned} Generative Models⎩ ⎨ ⎧Native Generator(AutoEncoder’s Decoder)PixelRNNVAE(Variational AutoEncoder)GAN(Generative Adversarial Network) - 生成模型就是用机器学习去生成我们想要的数据,正规的说法是,获取训练样本并训练一个模型,该模型能按照我们定义的目标数据分布去生成数据。
- 比如autoencoder自编码器,它的decoding部分其实就是一种生成模型,它是在生成原数据。又比如seq2seq序列到序列模型,其实也是生成另一个我们想要的序列。Neural style transfer的目标其实也是生成图片。
- 上图涵盖了基本的生成式模型的方法,主要按是否需要定义概率密度函数分为:
- Explicit density models:这之中又分为tractable explicit models和approximate explicit model。
- tractable explicit model通常可以直接通过数学方法来建模求解,
- approximate explicit model通常无法直接对数据分布进行建模,可以利用数学里的一些近似方法来做数据建模, 可分为:
- 确定性(变分方法:如VAE的lower bound)
- 随机性的方法(马尔科夫链蒙特卡洛方法, MCMC)。
- Implicit density models:无需定义明确的概率密度函数,代表方法包括马尔科夫链、生成对抗式网络,该系列方法无需定义数据分布的描述函数。
- Explicit density models:这之中又分为tractable explicit models和approximate explicit model。
二、Native Generator (AutoEncoder’s Decoder)
- 通过原始AutoEncoder训练的Decoder作为Generator,此Generation的效果不好,因为此Generator是一个Network,是非线性模型;
- 如果给此Generator喂进去的vector不是训练时训练过的,则无法通过Generator输出有效数据。
三、PixelRNN
1、生成句子序列
- 拿生成句子为例,在我们生成好的RNN模型里,我们输入开头,模型可以输出一系列的输出。
- 如下图,我们根据输出得到了“床”,然后把“床”作为下一个时间点的输入,得到“前”,依次类推。
- 当然,这是测试时的一种做法,并不是唯一做法。
- 而在训练RNN模型的时候,并不是拿上一时刻的输出当作下一时刻的输入,而是拿真正的句子序列当作输入的。
2、生成图片
- 同样道理也可以用来生成一张照片,只要将每一个Pixel想成是一个Word,给模型一个讯号,它就会开始生成颜色。
- 一般生成照片(绿框)的时候如果单纯的按序生成可能会无法考量到照片之间的几何关系(上绿框图),但如果在生成Pixel的同时可以考量周围Pixel的话(下绿框图),那就可以有好的生成,这部份可以利用之前课程提过的『Grid-LSTM』。
- 首先filter在左下角计算,经过Grid-LSTM得到蓝色。filter右移一格,这时候会考量蓝色的资讯,而Grid-LSTM的输入会往三个维度丢出,因此在计算第二个颜色的时候它会考虑到左边蓝色那排的资讯,得到红色。相同方式再一次得到黄色。filter往上一格移至左边起始点,一样同时会考量蓝色的资讯才产生灰色。filter右移一格,这时候的filter计算是含盖了灰、蓝、红三个维度的资讯,得到黑色。
3、生成音频:WaveNet
- WaveNet,一种原始音频波形的深度生成模型。我们展示了WaveNets可生成模仿任何人类声音的语音,它听起来比现存的最先进的语音合成(Text-to-Speech)系统更自然,这使得机器与人类表现的差距缩小了50%以上。
- 人能与机器交流是一个长久以来的关于人机交互的梦想。由于深度神经网络的使用,机器在理解自然语言上的能力在过去几年有了革命性的进步(例如,谷歌语音搜索)。然而,用计算机产生语音——通常被称为语音合成(speech synthesis)或文本到语音(TTS)——仍然主要基于所谓的连接式TTS(concatenative TTS),它要求记录单一的录制者大量的短语音片段来形成一个巨大的数据库,然后重新组合这些片段以形成完整的话语。这使得在没有重新录制整个新的数据库的情况下,修改声音变得十分困难(比如转换成不同的说话者,或者改变他们声音的重点或情感)。
- 这导致了对参数式TTS(parametric TTS)的迫切需求,其中生成数据所需要的所有信息都保存在模型的参数中,并且语音的内容和特征可以通过模型的输入来控制。但目前为止,参数式TTS比连接式TTS听起来更不自然。现有的参数式模型往往将输出通过名为声码器(vocoders)的信号处理算法来生成音频信号。
- WaveNet改变了这种范例,它直接对音频信号的原始波形进行建模,一次一个样本。使用原始波形意味着,除了生成听起来更自然的声音外,WaveNet可以模拟任何音频,包括音乐。
- 研究人员常常避免对原始音频建模,因为它的速度非常快:通常每秒有16000个或更多样本,且在许多时间尺度上具有重要结构。构建一个完全自回归(autoregressive)模型显然是一项具有挑战性的任务,其中每个样本的预测都受到先前所有样本的影响(从统计学上来说,每个预测的分布都以先前所有观察为条件)。
- 然而,我们在今年(2016年)早些时候发布的PixelRNN和PixelCNN模型显示,不仅可以通过一次生成一个像素,而且可以通过一次生成一个颜色通道,来生成复杂的自然图像,其中每幅图像需要上千次这样的预测。这促使我们将二维的PixelNets改编为一维的WaveNet。
- 上面的动画显示了WaveNet是如何构建的。它是一个完全的卷积神经网络,其中卷积层具有多种扩张因子,这使得其感知场(receptive field)随着深度呈现指数增长,以此覆盖上千的步长。
- 训练时,输入序列是从记录人类声音的真实波形。训练之后,我们可以对网络采样生成合成声音。在采样的每个步骤中,我们从网络计算出的概率分布中抽取数值。将这一数值反馈到输入中,就可产生下一步的新的预测。像这样一次一步的建立样本的计算成本很高,但我们发现这对于生成复杂且逼真的音频十分重要。
4、生成视频:Video Pixel Network (VPN)
四、Variational Autoencoder (VAE,变分自编码器)
1、原始AutoEncoder
- 通过原始AutoEncoder训练Decoder作为Generation,此Generation的效果不好;
2、Variational Autoencoder (VAE)
3、Gaussian Mixture Model(高斯混合模型)
4、Problems of VAE
- VAE may just memorize the existing images, instead of generating new images
- VAE只能 “尽可能像” 地 “拷贝” 训练时给Autoencoder喂进去的图片,不能自己生成新图片。
- 通过VAE产生的图片中的每个pixel之间的relation非常重要,这是构成该张图片为该张图片的关键因素。
- 但是,如果构建的VAE结构的深度不是特别深,那么该VAE无法学习到图片中的每个pixel之间结构信息。因此通过该Generator产生的图片中的每个pixel之间是独立生成的,pixel之间无法相互影响。
- 也就是说深度不深的VAE模型很难学习到样本的各个component之间的结构信息(Structure Information)。
- 因此,VAE需要构造更深的Layers来学习并储存样本的各个component之间的结构信息(Structure Information);
- 即使VAE增加深度,VAE对样本内部的结构信息(Structure Information)的学习效果也不是特别好,而且深度的增加又会带来计算量的增大。
- 解决方案:引入Discriminator来储存结构信息(Structure Information),即:Generative Adversarial Network(GAN)。
五、Generative Adversarial Network (GAN,对抗生成网络)
GAN能够有效地解决很多生成式方法的缺点,主要包括:
- 并行产生samples;
- 生成式函数的限制少,比如无需合适马尔科夫采样的数据分布(Boltzmann machines),生成式函数无需可逆、latent code无需与sample同维度(nonlinear ICA);
- 无需马尔科夫链的方法(Boltzmann machines, GSNs);
- 相对于VAE的方法,无需variational bound;
- GAN比其他方法一般来说性能更好。
在实践中: - GANs are difficult to optimize.
- No explicit signal about how good the generator is
- In standard NNs, we monitor loss
- In GANs, we have to keep “well-matched in a contest”
- When discriminator fails, it does not guarantee that generator generates realistic images
- Just because discriminator is stupid
- Sometimes generator find a specific example that can fail the discriminator
- Making discriminator more robust may be helpful.
六、Tips for Generation
- 在上面提到过,在使用RNN生成句子的时候,通过初始的输入得到生成的第一个词,然后把这个词当作下一次的输入得到第二个词,依次类推,那么问题就来了,当这个序列中有一个词错误的时候,那么其实后面的整个句子序列就错了,就是所谓的一步错,步步错。
解决这个一步错,步步错的方法:1、Scheduled Sampling;2、Beam Search;3、Reinforcement learning;
2.1 Scheduled Sampling
- Scheduled Sampling通过修改我们的训练过程来解决上面的问题,一开始我们只用真实的句子序列进行训练,而随着训练过程的进行,我们开始慢慢加入模型的输出作为训练的输入这一过程。
2.2 Beam Search
- Beam Search方法不再是只得到一个输出放到下一步去训练了,我们可以设定一个值,拿多个值放到下一步去训练,这条路径的概率等于每一步输出的概率的乘积。
2.3 Reinforcement learning
参考资料:
WaveNet:A Generative Model for Raw Audio
视频研究入门经典
Video Pixel Networks
高斯混合模型的终极理解
详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
一文详解高斯混合模型原理
An introduction to Generative Adversarial Networks (with code in TensorFlow)
Image Completion with Deep Learning in TensorFlow
Generative Adversarial Nets in TensorFlow (Part I)
这篇关于深度学习-生成模型:Generation(Tranform Vector To Object with RNN)【PixelRNN、VAE(变分自编码器)、GAN(生成对抗网络)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!