生成模型之生成器

2024-09-04 07:36
文章标签 模型 生成 生成器

本文主要是介绍生成模型之生成器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        生成模 型中网络会被作为一个生成器(generator)来使用。具体来说,在模型输入时会将一个随机 变量z 与原始输入x一并输入到模型中,这个变量是从随机分布中采样得到。输入时可以采 用向量拼接的方式将x和z一并输入,或在x、z 长度一样时,将二者的加和作为输入。这 个变量z 特别之处在于其非固定性,即每一次我们使用网络时都会从一个随机分布中采样得 到一个新的z。通常,我们对于该随机分布的要求是其足够简单,可以较为容易地进行采样, 或者可以直接写出该随机分布的函数,例如高斯分布(Gaussian distribution)、均匀分布 (uniform distribution)等等。所以每次有一个输入 x 的同时,我们都从随机分布中采样得 到z,来得到最终的输出y。随着采样得到的z 的不同,我们得到的输出y 也会不一样。同 理,对于网络来说,其输出也不再固定,而变成了一个复杂的分布,我们也将这种可以输出一 个复杂分布的网络称为生成器,如图 1所示。

图1 生成器示意图 

        下面我们介绍如何训练这个生成器。首先,我们为什么要需要训练生成器,为什么需要输 出一个分布呢?下面介绍一个视频预测的例子,即给模型一段的视频短片,然后让它预测接下 来发生的事情。视频环境是小精灵游戏,预测下一帧的游戏画面,如图 2所示。

图2 视频预测例子——以小精灵游戏为例

        要预测下一帧的游戏画面,我们只需要输入给网络过去几帧游戏画面。要得到这样的训 练数据很简单,只需要在玩小精灵的同时进行录制,就可以训练我们的网络,只要让网络的输 出y,与我们的真实图像越接近越好。当然在实践中,我们为了保证高效训练,我们会将每一 帧画面分割为很多块作为输入,并行分别进行预测。我们接下来为了简化,假设网络是一次性 输入的整个画面。如果我们使用前几章介绍的基于监督学习的训练方法,我们得到的结果可 能会是的十分模糊的甚至游戏中的角色消失、出现残影的,如图 3所示。

图3 基于监督学习的小精灵游戏的预测值

        造成该问题的原因是,我们监督学习中的训练数据对于同样的转角同时存储有角色向左 转和向右转两种输出。当我们在训练的时候,对于一条向左转的训练数据,网络得到的指示就 是要学会游戏角色向左转的输出。同理,对于一条向右转的训练数据,网络得到的指示就是学 会角色向右转的输出。但是实际上这两种数据可能会被同时训练,所以网络就会学到的是“两 面讨好”。当这个输出同时距离向左转和向右转最近,网络就会得到一个错误的结果———— 向左转是对的,向右转也是对的。

        所以我们应该如何解决这个问题呢?答案是让网络有概率的输出一切可能的结果,或者 说输出一个概率的分布,而不是原来的单一的输出,如图 4 所示。当我们给网络一个随机 分布时,网络的输入会加上是一个z,这时输出就变成了一个非固定的分布,其包含了向左转和向右转的可能。举例来说,假设我们选择的z服从一个二项分布,即就只有0和1并且各 占50%。那么我们的网络就可以学到z采样到1的时候就向左转,采样到0的时候就向右转, 这样就可以解决了。

图4 基于生成模型的小精灵游戏的预测结果

        回到生成器的讨论中,我们什么需要这类的生成模型呢?答案是当我们的任务需要“创造 性”的输出,或者我们想知道一个可以输出多种可能的模型,且这些输出都是对的模型的时候。 这可以类比于,让很多人一起处理一个开放式的问题,或者是头脑风暴,大家的回答五花八门 可以各自发挥,但是回答都是正确的。所以生成模型也可以被理解为让模型自己拥有了创造 的能力。再举两个更具体的例子,对于画图,假设画一个红眼睛的角色,那每个人可能画出来 或者心中想的动画人物都不一样。对于聊天机器人,它也需要有创造力。比如我们对机器人 说,你知道有哪些童话故事吗?聊天机器人会回答安徒生童话、格林童话甚至其他的,没有一 个标准的答案。所以对于我们的生成模型来说,其需要能够输出一个分布,或者说多个答案。 当然在生成模型中,非常知名的就是生成式对抗网络(generative adversarial network), 我们通常缩写为GAN。这一节我们就讲介绍这个生成对抗网络。

        我们通过让机器生成动画人物的面部来形象地介绍GAN,首先介绍的是无限制生成(un conditional generation),也就是我们不需要原始输入 x。其对应的就是需要原始输入 x 的条件型生成(conditional generation)。如图 5 所示,对于无限制的 GAN,它的唯一 输出就是z,这里假设为正态分布采样出的向量。其通常是一个低维的向量,例如50、100的 维度。

图5 基于无限制生成的GAN

        我们首先从正态分布中采样得到一个向量z,并输入到生成器中,生成器会给我们一个对 应的输出——一个动漫人物的脸。我们聚焦一下生成器输出一个动漫人物面部的过程。其实 很简单,一张图片就是一个高维的向量,所以生成器实际上做的事情就是输出一个高维的向 量,比如是一个64×64 的图片(如果是彩色图片那么输出就是64×64×3)。当输入的向量z 不同的时候,生成器的输出就会跟着改变,所以我们从正态分布中采样出不同的z,得到的输 出y 也就会不同,动漫人脸照片也不同。当然,我们也可以选择其他的分布,但是根据经验,分布之间的差异可能并没有非常大。大家可以找到一些文献,并且尝试去探讨不同的分布之 间的差异。我们这里选择正态分布是因为其简单且常见,而且生成器自己会想方设法把这个 简单的分布对应到一个更复杂的分布。所以我们后续的讨论都以正态分布为前提。

这篇关于生成模型之生成器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java使用Javassist动态生成HelloWorld类

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

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

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

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法