深度学习-生成模型: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使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?