深度学习-生成模型:Generation(Tranform Vector To Object with RNN)【PixelRNN、VAE(变分自编码器)、GAN(生成对抗网络)】

本文主要是介绍深度学习-生成模型: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:无需定义明确的概率密度函数,代表方法包括马尔科夫链、生成对抗式网络,该系列方法无需定义数据分布的描述函数。

二、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(生成对抗网络)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128927

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应