【DL】第 1 章 :生成建模

在本章中,您将:

  • 了解生成模型和判别模型之间的主要区别。

  • 通过一个简单示例了解生成模型的理想属性。

  • 了解支撑生成模型的核心概率概念。

  • 探索不同系列的生成模型。

本章是对生成建模领域的一般介绍。我们将从对生成建模的温和理论介绍开始,看看它如何与更广泛研究的判别建模自然对应。然后我们将建立一个框架来描述一个好的生成模型应该具有的理想属性。我们还将列出重要的核心概率概念,以便充分了解不同的方法如何应对生成建模的挑战。这将自然地引导我们进入倒数第二部分,其中列出了当今主导该领域的六大类生成模型。

什么是生成建模

生成模型可以大致定义如下:

生成建模是机器学习的一个分支,涉及训练模型以生成类似于给定数据集的新数据。

这在实践中意味着什么?认为我们有一个包含马匹照片的数据集。我们可以在这个数据集上训练一个生成模型来捕捉控制马匹图像中像素之间复杂关系的规则。然后我们可以从这个模型中采样,以创建原始数据集中不存在的新颖、逼真的马匹图像。这个过程如图1.1所示。

1.1 一个生成模型,经过训练可以生成逼真的马匹照片

为了构建生成模型,我们需要一个由我们尝试生成的实体的许多示例组成的数据集。这被称为训练数据,一个这样的数据点被称为观察

每个观察包括许多特征。对于图像生成问题,特征通常是单个像素值;对于文本生成问题,特征可以是单个单词或字母组。我们的目标是构建一个模型,该模型可以生成新的特征集,这些特征集看起来就像是使用与原始数据相同的规则创建的。从概念上讲,对于图像生成来说,这是一项极其困难的任务,考虑到可以分配单个像素值的方式有很多种,而构成我们试图生成的实体图像的此类排列的数量相对较少。

一个生成器模型还必须是概率性的而不是确定性的,因为我们希望能够对输出的许多不同变化进行采样,而不是每次都获得相同的输出。如果我们的模型只是一个固定的计算,比如取训练数据集中每个像素的平均值,那么它就不是生成式的。一个生成模型必须包含影响模型生成的单个样本的随机成分。

换句话说,我们可以想象存在某种未知的概率分布,它可以解释为什么有些图像很可能在训练数据集中找到,而另一些图像则不然。我们的工作是建立一个模型,尽可能地模仿这种分布,然后从中抽样以生成新的、不同的观察结果,这些观察结果看起来就像它们可以包含在原始训练集中一样。

生成与判别建模

在为了真正理解生成建模旨在实现什么以及为什么这很重要,将其与其对应的判别建模进行比较是很有用的。如果你研究过机器学习,你将面临的大多数问题很可能在本质上都是歧视性的。为了理解差异,让我们看一个例子。

假设我们有一个绘画数据集,一些是梵高画的,一些是其他艺术家画的。有了足够的数据,我们就可以训练一个判别模型来预测给定的画作是否出自梵高之手。我们的模型会了解到某些颜色、形状和纹理更有可能表明一幅画出自荷兰大师之手,对于具有这些特征的画作,该模型会相应地提高其预测的权重。图1.2显示了判别式建模过程——请注意它与图1.1中所示的生成式建模过程有何不同。

图1.2 训练有素的判别模型来预测给定图像是否出自梵高之手。

一关键区别在于,在执行判别建模时,训练数据中的每个观察值都有一个标签。对于像我们的艺术家鉴别器这样的二元分类问题,梵高画作将被标记为1,非梵高画作将被标记为0。然后,我们的模型学习如何区分这两组,并输出新观察具有标签的概率1——即,它是由梵高画的。

为此原因,判别建模与监督学习或学习使用标记数据集将输入映射到输出的函数同义。生成建模通常使用未标记的数据集(即作为无监督学习的一种形式)执行,但它也可以应用于标记的数据集以学习如何从每个不同的类别生成观察结果。

让我们看一下一些数学符号来描述生成和判别建模之间的区别。

判别模型估计p( y | x ) — 给定观察值 x 的标签y的概率。

生成建模估计p(x) — 观察观察x的概率。

如果数据集被标记,我们还可以建立一个估计分布的生成模型p( x | y).

换句话说,判别建模试图估计观察值x属于类别y的概率。生成建模不关心标记观察。相反,它试图估计完全看到观察结果的概率。

关键是,即使我们能够建立一个完美的判别模型来识别梵高的画作,它仍然不知道如何创作一幅看起来像梵高的画。它只能输出针对现有图像的概率,因为这是它受过训练的目的。相反,我们需要训练一个生成模型,它可以输出很可能属于原始训练数据集的像素集。

生成建模的兴起

直到最近,判别建模一直是机器学习方法取得大多数进展的驱动力。这是因为对于任何判别问题,相应的生成建模问题通常更难解决。例如,训练一个模型来预测一幅画是否出自梵高,要比训练一个模型从头开始生成一幅梵高风格的画要容易得多。同样,训练一个模型来预测一页文本是否出自查尔斯·狄更斯之手,要比构建一个模型来生成一组狄更斯风格的段落要容易得多。直到最近,大多数生成性挑战还是遥不可及,许多人怀疑它们能否得到解决。创造力被认为是一种纯粹的人类能力,人工智能无法与之匹敌。

然而,随着机器学习技术的成熟,这种假设逐渐弱化。在过去 10 年中,该领域许多最有趣的进步都来自机器学习在生成建模任务中的新颖应用。例如,图1.3显示了已经取得的显着进步自 2014 年以来在面部图像生成方面取得了进展。

图1.3 使用生成模型生成人脸在过去十年中有了显着改善

除了更容易解决之外,判别式建模在历史上比生成式建模更容易应用于跨行业的实际问题。例如,医生可能会受益于预测给定视网膜图像是否显示青光眼迹象的模型,但不会受益于可以生成眼睛后部新图片的模型。

然而,随着提供针对特定业务问题的生成服务的公司激增,这种情况也开始发生变化。例如,现在可以访问 API 生成给定特定主题的原始博客文章,在您想要的任何设置中生成各种产品图像,或者编写社交媒体内容和广告文案以匹配您的品牌和目标信息。生成式人工智能在游戏设计和电影摄影等行业也有明显的积极应用,在这些行业中,经过训练以输出视频和音乐生成的模型开始增加价值。

生成建模和人工智能

除了生成建模的实际用途(其中许多尚未被发现)之外,还有三个更深层次的原因可以说明为什么生成建模可以被视为解锁更复杂形式的人工智能的关键,它超越了判别建模单独可以实现。

首先,单纯从理论的角度来看,我们不应该满足于仅仅擅长对数据进行分类,还应该寻求更全面地了解数据最初是如何产生的。这无疑是一个更难解决的问题,因为可行输出空间的维数很高,而我们归类为属于数据集的创作数量相对较少。然而,正如我们将看到的,许多推动判别建模发展的相同技术,例如深度学习,也可以被生成模型利用。

其次,正如我们将在第 12 章中看到的那样,生成模型正被用于推动 AI 其他领域的进步,例如强化学习(研究学习代理通过反复试验优化环境中的目标)。例如,在训练机器人穿越给定地形时,一种典型的方法是构建地形的计算机模拟,然后运行许多实验,让代理尝试不同的策略。随着时间的推移,代理会了解哪些策略比其他策略更成功,因此会逐渐改进。这种方法的一个困难是环境的物理特性通常非常复杂,需要在每个时间步进行计算,以便将信息反馈给代理以决定其下一步行动。然而,想象中的环境。

最后,如果我们真的要说我们已经建造了一台获得了与人类相当的智能形式的机器,那么生成建模肯定是解决方案的一部分。花点时间想想你是一个多么不可思议的生成模型。您可以闭上眼睛,从任何可能的角度想象大象的样子。您可以为您最喜欢的电视节目想象许多可能的不同结局,并且您可以通过在脑海中思考各种未来并采取相应的行动来计划您的一周。目前的神经科学理论表明,我们对现实的感知并不是一个高度复杂的判别模型,它根据我们的感官输入来预测我们正在经历的事情,而是一种生成模型,从出生开始就接受训练,以生成与未来准确匹配的周围环境模拟。一些理论甚至表明,这种生成模型的输出就是我们直接感知的现实。显然,深入了解我们如何制造机器来获得这种能力,将是我们继续了解大脑和一般人工智能工作原理的核心。

我们的第一个生成模型

考虑到这一点,让我们开始进入激动人心的生成建模世界的旅程。首先,我们将查看生成模型的最简单示例,并介绍一些想法,这些想法将帮助我们处理本书后面将遇到的更复杂的架构。

Hello World

让我们首先玩一个二维的生成建模游戏。我选择了一个规则,该规则已用于生成图1.4 中的点集X。我们称此规则为p data。您的挑战是选择不同的点x=(x1,x2)在看起来是由相同规则生成的空间中。

图1.4 一组二维点,由未知规则p data生成

你选择了哪里?您可能利用现有数据点的知识构建了一个心智模型p model,该模型更可能在空间中找到该点。在这方面,p modelp data估计。也许你认为p model 应该图1.5 所示——一个可以找到点的矩形框,以及一个在框外不可能找到任何点的区域。

图1.5 橙色框p model是对真实数据生成分布p data的估计

要生成新的观察值,您可以简单地在框中随机选择一个点,或者更正式地说,从分布p model中采样。恭喜,您刚刚构建了第一个生成模型!您已经使用训练数据(黑点)构建了一个模型(橙色区域),您可以轻松地从中采样以生成看起来属于训练集的其他点。

生成建模框架

这个简单的例子可以帮助我们理解生成建模试图实现的目标。我们可以在以下框架中捕捉我们构建生成模型的动机和目标:

生成建模框架
  • 我们有一个观察数据集X

  • 我们假设观测值是根据某个未知分布p data 生成的。

  • 我们想建立一个生成模型p model来模拟p data。如果我们实现了这个目标,我们就可以从p model中抽样以生成看起来像是从p data中提取的观察结果。

  • p model的理想属性是:

  • Accuracy:如果p model (x)很高,x 应该喜欢它是从p data中提取的。如果p model (x)较低,则 x看起来不像是从p data中提取的。

  • Generation:应该可以很容易地从p model(x)中抽取一个新的观察值x

  • Representation:应该可以理解数据中不同的高层特征是如何用p model来表示的。

现在让我们揭示真实的数据生成分布p data,并查看该框架如何应用于此示例。从图1.6 可以看出,数据生成规则只是在世界陆地上均匀分布,没有机会在海中找到一个点。

图1.6 橙色框p model是对真实数据生成分布p data(灰色区域)的估计

显然,我们的模型p model是p data的过度简化。我们可以检查点 A、B 和 C,以了解我们的模型在模仿p data的准确性方面的成功和失败。

  • 点 A是由我们的模型生成的观察结果,但似乎不是由p data生成的,因为它位于海中央。

  • 点 B永远不可能由p model生成,因为它位于橙色框之外。因此,我们的模型在对整个潜在可能性范围进行观察的能力方面存在一些差距。

  • 点 C是可以由p modelp data生成的观察结果。

尽管存在缺点,但该模型很容易从中采样,因为它只是橙色框上的均匀分布。我们可以很容易地从这个盒子里面随机选择一个点,以便从中采样。此外,我们当然可以说我们的模型是底层复杂分布的简单表示,它捕获了一些底层的高级特征。真正的分布分为有大量陆地(大陆)的区域和没有大量陆地(海洋)的区域。这是一个高级特征,我们的模型也是如此,除了我们有一个大洲而不是很多。

这个例子展示了生成建模背后的基本概念。

表征学习

学习高维数据的表示形式值得更深入地研究我们的意思,因为这是一个将在本书中反复出现的主题。

假设您想向正在人群中寻找您并且不知道您长什么样的人描述您的外貌。你不会先说你头发的像素 1 的颜色,然后是像素 2,然后是像素 3,等等。相反,你会做出合理的假设,即对方对普通人的长相有一个大致的了解,然后用描述像素组的特征修改这个基线,比如我有很金的头发或者我戴眼镜. 这些陈述不超过 10 条左右,此人就能够将描述映射回像素,从而在他们的脑海中生成您的图像。图像可能不完美,但它与您的实际外貌足够相似,可以让他们在数百人中找到您,即使他们以前从未见过您。

这就是背后的核心思想表征学习。我们不应尝试直接对高维样本空间建模,而应使用一些较低维的潜在空间来描述训练集中的每个观察结果,然后学习一个映射函数,该函数可以在潜在空间中获取一个点并将其映射到一个指向原始域。换句话说,潜在空间中的每个点都是一些高维观察的表示。

这在实践中意味着什么?假设我们有一个由饼干罐的灰度图像组成的训练集(图1.7)。

图1.7 饼干罐数据集

对我们来说,很明显有两个特征可以唯一地代表这些罐中的每一个:罐的高度和宽度。也就是说,我们可以将锡的每个图像转换为有意义的二维潜在空间中的一个点,即使图像的训练集是在高维像素空间中提供给我们的。值得注意的是,这意味着我们还可以通过将合适的映射函数应用于潜在空间中的新点来生成训练集中不存在的罐头图像,如图1.8 f所示。

图1.8 饼干罐的潜在空间和将潜在空间中的点映射到原始图像域的函数 f

意识到原始数据集可以用更简单的潜在空间来描述对于机器来说并不是那么容易——它首先需要确定高度和宽度是最能描述该数据集的两个潜在空间维度,然后学习映射函数f,它可以在这个空间中取一个点并将其映射到灰度饼干罐图像。机器学习(特别是深度学习)使我们能够训练机器,使其无需人工指导即可找到这些复杂的关系。

利用潜在空间训练模型的好处之一是,我们可以通过在更易于管理的潜在空间内操纵其表示向量来执行影响图像高级属性的操作。例如,如何调整每个像素的阴影以使饼干罐的图像更高并不明显 。然而,在潜在空间中,它只是增加高度潜在维度的情况,然后应用映射函数返回到图像域。我们将在下一章看到一个明确的例子,它不是应用于饼干罐,而是应用于面部。

将训练数据集编码到潜在空间中的概念,以便我们可以从中采样并将点解码回原始域,这对于许多生成建模技术都是常见的,我们将在本书的后面章节中看到。从数学上讲,编码器-解码器技术试图将数据所在的高度非线性流形(例如在像素空间中)转换为更简单的可以从中采样的潜在空间,因此潜在空间中的任何点都可能是格式良好的图像的表示,如图1.9 所示。

图 1.9 高维像素空间中的狗流形被映射到可以从中采样的更简单的潜在空间

核心概率论

我们已经看到生成建模与概率分布的统计建模密切相关。因此,现在有必要介绍一些核心概率和统计概念,这些概念将贯穿全书,用于解释每个模型的理论背景。

首先,如果你从来没有学过概率或统计,不用担心。要构建我们将在本书后面看到的许多深度学习模型,对统计理论有深刻的理解并不是必需的。然而,为了充分理解我们正在尝试解决的任务,有必要尝试建立对基本概率论的扎实理解。这样,您将为理解我们将在本章后面介绍的不同系列的生成模型奠定基础。

作为第一步,我们将定义四个关键术语:样本空间密度函数参数建模最大似然估计。我们会将每一个都链接回我们之前的 2D 生成模型示例,该模型对世界地图均匀分布进行建模。

样本空间

样本空间为观察x可以采用的所有值的完整集合。

在我们前面的例子中,样本空间由纬度和经度的所有点组成x=(x1,x2)在世界地图上。

例如,x = (40.7306, –73.9352) 是样本空间(纽约市)中属于真实数据生成分布的一个点。x = (11.3493, 142.1996) 是样本空间中不属于真实数据生成分布的点(在海中)。

概率密度函数

一个概率密度函数(或简称为密度函数),p(x), 是将样本空间中的点x映射到 0 到 1 之间的数字的函数。样本空间中所有点的密度函数的和必须等于 1,因此它是一个定义明确的概率分布。

在世界地图示例中,我们的生成模型的密度函数在橙色框外为 0,在框内为常数,因此密度函数在整个样本空间上的积分等于 1。

虽然假设只有一个真实的密度函数p data生成了可观察数据集,但我们可以使用无限多个密度函数p model来估计p data。为了构造我们的方法来寻找合适的p model (x),我们可以使用一种称为参数建模的技术。

参数化建模

一个参数模型,pθ(x), 是一族密度函数,可以使用有限数量的参数θ来描述。

您可以在图 1-5中绘制的所有可能框的族是参数模型的一个示例。在这种情况下,有四个参数:左下角的坐标(θ1,θ2)和右上角(θ3,θ4)盒子的角落。

因此,每个密度函数pθ(x)在这个参数模型中(即每个盒子)可以用四个数字唯一表示,θ=(θ1,θ2,θ3,θ4).

可能性

可能性 ℒ(θ∣x)参数集θ是一个函数,它在给定某个观察点x的情况下测量θ的合理性。

它的定义如下:

ℒ(θ|x)=pθ(x)

也就是说,给定某个观测点xθ 的似然定义为在点x处由θ参数化的密度函数的值。

如果我们有独立观察的整个数据集X那么我们可以写:

以这种方式定义可能性有统计上的原因,但我们也可以看出这个定义在直觉上是有道理的。如果真实数据生成分布是由θ参数化的模型,则一组参数θ 的似然等于看到数据的概率。

在世界地图示例中,仅覆盖地图左半部分的橙色框的可能性为 0 ——它不可能生成数据集,因为我们在地图右半部分观察到了点。图1.5 中的橙色框具有正似然,因为密度函数对于该模型下的所有数据点都是正的。

请注意,可能性是参数而非数据的函数。它不应被解释为给定参数集正确的概率- 换句话说,它不是参数空间上的概率分布(即,相对于参数,它不求和/积分为 1)。

由于 0 和 1 之间的大量项的乘积在计算上可能非常难以处理,因此我们经常使用对数似然 ℓ 代替:

因此,从直觉上讲,参数化建模的重点应该是找到最优值θ^最大化观察数据集X的可能性的参数集。这种技术很恰当地称为最大似然估计

最大似然估计

最大似然估计是使我们能够估计的技术θ^—密度函数的一组参数θ ,pθ(x), 这最有可能解释一些观察到的数据X

更正式地说:

θ^也称为最大似然估计(MLE)。

在世界地图示例中,MLE 是仍然包含训练集中所有点的最小矩形。

神经网络通常会最小化损失函数,而不是最大化,因此我们可以等价地讨论找到最小化负对数似然的参数集:

因此,生成建模可以被认为是最大似然估计的一种形式,其中参数θ是模型中包含的神经网络的权重。我们正试图找到这些参数的值,以最大化观察给定数据的可能性(或等效地,最小化负对数似然)。

但是对于高维问题,一般不能直接计算pθ(𝐗)- 这是棘手的。正如我们将在下一节中看到的,不同的生成模型系列采用不同的方法来解决这个问题。

生成模型分类

虽然所有类型的生成模型最终都旨在解决相同的任务,但它们都采用略有不同的方法来对密度函数进行建模pθ(𝐗). 从广义上讲,存在三种可能的方法。

  1. 显式建模密度函数,但以某种方式约束模型,以便密度函数易于处理(即可以计算)。

  1. 显式建模密度函数的易处理近似值

  1. 通过直接生成数据的随机过程,对密度函数进行隐式建模。

这些在图1.10 中显示为分类法,以及我们将在本书第 3-8 章中探讨的六个生成模型家族。请注意,这些系列并不相互排斥 - 有许多混合两种不同方法的模型示例 - 例如,VAE-GAN ( https://arxiv.org/abs/2006.12226 )。您应该将族视为生成模型的不同通用方法,而不是显式模型架构。

图1.10 生成建模方法的分类

我们可以进行的第一个拆分是在概率密度函数p(x)显式的模型和它是隐式的模型之间进行的。隐式模型根本不旨在估计概率分布,而是仅专注于生成直接生成数据的随机过程。隐式生成模型最著名的例子是生成对抗网络

我们可以进一步将显式密度模型分为直接优化密度函数的模型(易处理模型)和仅优化它的近似值的模型。

易处理模型对模型架构施加了约束,因此密度函数具有易于使用的形式。例如,自回归模型对输入特征进行排序,以便可以按顺序生成输出 - 例如逐字或逐像素。归一化流通过将一系列可逆函数应用于简单分布来实现易处理性,以生成更复杂的分布。

相反,近似密度模型包括变分自动编码器,它通过引入潜在变量来优化密度函数的近似值。基于能量的模型也使用近似方法,但通过马尔可夫链采样而不是变分方法来做一些。扩散模型通过训练模型逐渐对先前已损坏的给定图像进行去噪来逼近密度函数。

贯穿所有生成模型系列类型的共同主线是深度学习。几乎所有复杂的生成模型都以深度神经网络为核心,因为它们可以从头开始训练以学习控制数据结构的复杂关系,而不必先验信息进行硬编码。我们将在第 2 章介绍深度学习,并通过实际示例说明如何开始构建自己的深度神经网络。

生成式深度学习代码库

在本章的最后一节中,我们将通过介绍本文附带的代码库来开始构建生成式深度学习模型。本文中的许多示例改编自可通过 Keras 网站 ( https://keras.io/examples/generative/ )获得的优秀开源实现。

到开始,您首先需要克隆 Git 存储库。Git 是一个开源版本控制系统,允许您在本地复制代码,以便您可以在自己的机器上或在基于云的环境中运行笔记本。您可能已经安装了它,但如果没有,请按照与您的操作系统相关的说明进行操作。

要克隆本书的存储库,请导航到要存储文件的文件夹,然后在终端中键入以下内容:

示例1.1 克隆存储库
git clone https://github.com/davidADSP/GDL_code.git

通过运行以下命令,始终确保您拥有最新版本的代码库:

示例1.2 拉取存储库
git pull

您现在应该能够在计算机上的文件夹中看到这些文件。

本书的代码库旨在与 Docker 一起使用——Docker 是一种免费的容器化技术,无论您的架构或操作系统如何,它都能让您非常轻松地开始使用新的代码库。README如果您从未使用过 Docker,请不要担心 - 在本书存储库的文件中有关于如何入门的描述。

此外,如果您无法访问自己的 GPU,那也没问题!本书中的所有示例都将在 CPU 上进行训练,尽管这会比使用支持 GPU 的机器花费更长的时间。或者,在关于设置 Google Cloud 环境的部分中README,您可以使用即付即用的方式访问 GPU。

概括

本章介绍了生成建模领域,这是机器学习的一个重要分支,它补充了更广泛研究的判别建模。我们讨论了生成建模目前如何成为 AI 研究中最活跃和令人兴奋的领域之一,并且随着它在整个行业中变得越来越普遍,现在开始影响我们的日常生活。

我们从生成模型的一个简单示例开始,了解生成建模最终如何侧重于对p(x)数据的底层分布进行建模。这提出了许多复杂而有趣的挑战,我们将这些挑战总结成一个框架,以理解任何生成模型的理想属性。

然后我们介绍了关键的概率概念,这些概念将有助于充分理解每种生成建模方法的理论基础,并列出了我们将在本书中探索的六个不同的生成模型系列。我们还了解了如何通过克隆存储库开始使用生成式深度学习代码库。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值