生成式深度学习(第二版)-译文-第一章-生成式建模_生成式深度学习第二版-程序员宅基地

技术标签: 深度学习  生成式深度学习  人工智能  AIGC  

第一部分是 生成式建模 和 深度学习 的一般性介绍 — 在开始生成式深度学习之前这两个领域是我们需要了解的!

第一章中,我们将定义 生成式建模,并考虑一个简单示例,以此我们可以理解一些对所有生成式模型都很重要的关键概念。我们也将给出生成式模型家族的分类,在本书第二部分中我们将详细介绍。

第二章中,我们给出了一个深度学习工具和技术的指引,这是我们开始构建更复杂生成式模型的基础。特别的,我们将使用Keras构建我们的第一个深度神经网络示例 — 一个多层感知机 (multilayer perception, MLP)。进一步的,我们将逐渐在其中扩展融入卷积层和其他改进,以观察性能上的差异。

在第一部分的最后,对于本书后续部分涉及的技术,你将有一个核心概念上的良好理解。

第一章 生成式建模

章节目标

  • 了解生成式和鉴别式的关键差异。
  • 通过简单示例,理解一个生成式模型的理想性质。
  • 学习生成式模型背后的核心概率思想。
  • 探索生成式模型的不同家族。
  • 拷贝本书附带的代码库,以此为基础,你可以开始构建自己的生成式模型。

本章是关于生成式建模领域的一般性介绍。

我们将从一个生成式建模的理论介绍开始,来看看,为什么生成式建模是广泛研究的鉴别式建模的自然对立面。我们也将建立一个框架,来描述一个好的生成式模型需要拥有什么性质。我们还将给出核心的概率概念,以此来全面理解不同的方法如何来解决生成式建模的挑战。

这自然将我们引到倒数第二部分,这部分讲给出当今主流的六类宽泛的生成式模型家族。最后的章节解释了如何开始本书附带的代码库。

什么是生成式建模?

生成式建模可以被宽泛的定义如下:

生成式建模是机器学习的一个分支,它训练一个模型,以产生 与给定数据库高度相似的 新数据。

在实际操作中,这意味着什么呢? 假定我们有一个包含马匹照片的数据库。我们以此为基础可以训练一个生成式模型,该模型可以捕捉 图像中支配像素和马匹形象间复杂关系的规律。然后,我们可以从此模型中采样(sample),来生成全新的,具备真实感的马匹图像,该图像在原始的数据库中并不存在。整个过程如 图1-1所示。
图1-1. 生成式模型的训练过程,用以产生真实感马匹图片
为了构建生成式模型,我们需要一个数据库,其中包含我们要生成实体的多个样本。该数据库称为 训练数据,其中的一个数据点被称为一个观察

每个观察包含很多特征。对于一个图像生成问题,特征通常是个体像素值。对于文本生成,特征则是个体单词或者一组字母。我们的目标是,构建一个模型,该模型可以生成新的特征组,该特征组看起来与原始数据使用相同的规则创造出来的。概念上来讲,对图像生成来说,考虑到每一个单一像素的赋值都有大量可能,而仅仅只有非常少量的像素组合能够构成我们想要生成的实体图像,这是一个非常难的任务。

一个生成式模型 必须是 概率的 而非 确定的,因为我们想要能够采样出输出的不同变种,而不是每次都是得到相同的输出。如果我们的模型仅仅只是一个固定的计算,例如取整个训练数据库中所有图像各个像素的平均值,那它不是生成式的。生成式模型需要包含一个随机部分,该部分可以影响模型产生的个体样本。

换句话说,我们可以设想,有一个未知的概率分布足以解释为何一些图像在训练集中更可能出现,而其它图像则不可能。我们的任务是,构建一个模型来尽可能接近的模拟该分布,并从拟合分布中采样来生成 新的,不同的观察,看起来该观察就应该包含在原始训练集合中。

生成式 vs 鉴别式建模

为了充分理解生成式建模的目标,以及该目标的重要性,有必要将之与其对立面进行比较,即 鉴别式建模。如果你曾经了解过机器学习,那么你面对的大部分问题本质上都是鉴别式的。为了理解这个差别,让我们一起来看一个例子。

假设我们有一个绘画图片库,其中一些是梵高作品,其余的是其他艺术家。只要数据足够,我们可以训练一个鉴别式模型,该模型可以预测一个给定的绘画是否是梵高作品。我们的模型可以学到,何种着色,形状,纹理更可能意味着该作品来自荷兰大师。对于具备这些特征的绘画,模型相应的提升模型的预测权重。图1-2展示了鉴别式模型的过程—注意它与图1-1所示生成式建模过程的差别。
鉴别式模型的训练,用以预测给定绘画作品是否出自梵高
当进行鉴别式建模时,训练样本中的每个观察需要有一个 标签。对于象艺术家鉴别器这样的二类分类问题,梵高绘画将被标注为 1,而非梵高绘画则被标注为0。我们的模型可以学到如何鉴别这两组,并对一个新的观察输出标签为1的概率—也即,该画作出自梵高之手。

相反的,生成式建模不要求数据库是有标签的,因为它所关心的只是能否生成全新的图像,而不是预测给定图像的标签。

让我们将这些建模的不同类型使用数学表示正式表述一下:

鉴别式建模 估计 p ( y ∣ x ) p(y|\bf{x}) p(yx).
也即,鉴别式建模 之 目标,是对于给定观察 x \bf{x} x, 建模其标签 y y y 的概率。

生成式建模 估计 p ( x ) p(\bf{x}) p(x).
也即,生成式建模 之 目标,是建模观测到一个 观察 x \bf{x} x的概率。从该分布中采样允许我们生成新的观察。

条件生成模型: 注意,我们也可以构建一个生成式模型,来建模条件分布 p ( x ∣ y ) p(\bf{x}|y) p(x∣y) — 观测到具有特定标签 y y y的观察 x \bf{x} x的概率。
例如,我们的数据库包含不同类型的水果,我们可以特别指定生成式模型来生成一幅苹果图像。

这里很重要的一点需要注意,即使我们可以构建一幅鉴别梵高画作的完美鉴别模型,我们仍然不知道该如何创作一幅画作,让它看起来出自梵高之手。鉴别模型只能针对给定图像输出概率,因为这就是它的训练目标。而我们需要训练一个生成式模型,并从这个模型进行采样,以此来产生图像,该图像有很大的可能性属于原始训练数据集。

生成式建模的兴起

直到最近,生成式建模还是机器学习大部分进展背后的驱动力。这是因为,对于任何鉴别问题,对应的生成式建模问题一般意义上,都会更难解决。例如,训练一个梵高画作鉴别器,要比从零开始训练一个梵高画作生成器要简单的多。类似的,训练一个模型来预测一页文本是否是查理狄更斯缩写,要比构建一个能按照狄更斯风格生成一段文字的模型要更容易。直到最近,大部分生成式挑战看起来都很难够着,以至很多人怀疑它们是否能得到解决。创造性还被认为是人类特有的能力,AI难以匹敌。

但是,随着机器学习技术的成熟,这个假设逐渐被弱化。在过去十年中,领域内大部分有趣的进展都来自生成式建模任务的新应用。图1-3给出了人脸图像生成领域自2014年以来令人瞩目的进展。
人脸图像生成自2014年来取得了显著进展
不仅仅是更容易被解决,鉴别式建模历史上就得到了更多的研究和应用。例如,医生可以从如下模型受益: 该模型可以判断给定的视网膜图像是否有青光眼指征,相反,如果是一个生成式模型,能够产生新的眼底图片,则很难说该模型对医生有什么意义。

然而,这一情况也正在发生改变,随着提供瞄准特定商业问题的生成式服务公司的繁荣。例如,现如今,使用API服务来生成特定主题的原创blog成为可能 ,还可以以任何设定生成产品的一系列图像,或者撰写匹配特定品牌和信息的社交媒体内容/广告。在工业领域,生成式AI也有清晰的正向应用,例如游戏设计,电影摄影,在这些行业中,用以生成视频和音乐的模型开始带来增值。

生成式建模和AI

除了生成式建模的实际应用(很多还有待发现)外,还有三个深层次原因决定着生成式建模可以被认为解锁更复杂人工智能的关键,且能够比单纯使用鉴别式模型走的更远。

第一,单纯从理论角度来看,我们不能仅仅将机器训练局限于简单的数据分类。从追求完整性的角度,我们应该训练模型来捕获对数据分布更完整的理解,超越任何特定的标签。这毫无疑问是更困难的问题,因为可行输出空间的高维度以及可被分类为数据集的相对少量点。但是,我们可以看到,很多应用于鉴别式模型的相同技术,例如深度学习,也都可以应用于生成式模型。

第二,如我们将在十二章所看到的,生成式建模目前正在用来驱动其他AI领域之创新,如强化学习 (教会代理通过试错在特定环境优化目标的研究)。假设我们想要训练一个机器人,使其通过给定地貌。传统方法是运行大量实验,代理在地貌中尝试不同策略,或者通过计算机仿真地貌。随着时间推移,代理会学习到更成功的策略,并逐渐提升。这种策略的一大挑战是不够灵活,因为他需要针对特定任务进行优化策略的训练。最近广受关注的一个替代策略是,使用生成式模型训练代理学习关于环境的 世界模型,独立于任何特定的任务。代理可以通过在其世界模型(而非在真实环境)中尝试策略快速适应新的任务, 这种方式通常具有更高的计算效率,也无需针对每个新任务从零开始训起。

最后,如果我们一定要说我们已经构造了一个具备与人类智能等同的机器,那么生成式建模无疑需要囊括其中。自然世界中关于生成式模型的一个最精细的例子就是本书的读者。停下来仔细想想,你是一个多么不可思议的生成式模型。你可以闭上眼,想象一头任意角度的大象。你可以为你喜欢的电视剧想象出一系列的结局,你可以提前进行一周的规划。当前的神经科学理论指出我们对于现实的感知并不是一个高度复杂的鉴别式模型(感知输入,产生预测),而是一个生成式模型,该模型从出生训练起,以模拟我们周围的环境。一些理论甚至指出,该生成式模型的输出就是我们直接感受到的现实。显然的,对于我们如何构建机器的深入理解将非常重要,可以帮助我们理解大脑的工作机制和通用人工智能。

我们的第一个生成式模型

让我们开启令人兴奋的生成式建模世界之旅。作为开始,我们首先看一个关于生成式模型的简单示例,并介绍一些可以帮助我们理解更复杂架构 (本书后续将遇到)的理念。

Hello World!

让我们以一个二维世界的生成式建模游戏作为开始。我选择了一个规则,来生成图1-4中一系列点 X \bf{X} X. 我们将该规则称为 p d a t a p_{data} pdata。你的挑战是,在空间中选择另一个不同的点 x = ( x 1 , x 2 ) \bf{x} = (x_1, x_2) x=(x1,x2) ,使得其看起来像是由同样的规则产生。
二维空间的点集,由未知规则生成

你该选择哪里呢?我猜你很可能使用你关于当前数据点的知识在脑中构建一个模型, p m o d e l p_{model} pmodel, 以此来猜想具体在空间的什么位置更可能找到该点。在这个意义上, p m o d e l p_{model} pmodel 是对于 p d a t a p_{data} pdata的估计。也许你决定, p m o d e l p_{model} pmodel应该看起来像图1-5所示 — 点只能在矩形盒子区域产生,任何盒子之外的区域都不可能找到任何数据点。
橙色盒子区域是关于真实数据产生分布的一个估计
要生成一个新的观察,你可以简单的在盒子内随机选取一个点,或者更正式的,从 p m o d e l p_{model} pmodel中进行一次采样。祝贺,你刚刚构建了自己的第一个生成式模型!你使用训练数据(黑色的点) 来构建了一个模型 (橙色区域),从中你可以很容易采样来生成其他可能属于训练集合的点。

现在,我们将这个思考进一步规范化为一个框架,以帮助我们理解生成式建模到底要达到什么目标。

生成式建模框架

关于我们构建生成式模型的动机和目标,我们可以使用下列框架表示。

生成式建模框架

  • 我们有观察数据集 X \bf{X} X
  • 我们假定所有的观察都由某个未知分布 p d a t a p_{data} pdata产生。
  • 我们想要生成一个生成式模型 p m o d e l p_{model} pmodel来模拟 p d a t a p_{data} pdata。如果我们实现了这个目标,那么我们可以从 p m o d e l p_{model} pmodel 进行采样来生成新的观察,使得其看起来像是从 p d a t a p_{data} pdata中产生。
  • 因此, p m o d e l p_{model} pmodel 应该具备下面的性质
    准确性: 如果对于一个生成的观察, p m o d e l p_{model} pmodel值很高,它必须看起来像是由 p d a t a p_{data} pdata生成。 如果 p m o d e l p_{model} pmodel值很低,它必须看起来不像是由 p d a t a p_{data} pdata生成。
    生成性:我们应该能够比较容易从 p m o d e l p_{model} pmodel 采样。
    表达性:我们需要能够理解数据中的不同高层次特征到底是如何通过 p m o d e l p_{model} pmodel进行表达的。

现在,我们来揭示真正的数据生成分布, p d a t a p_{data} pdata,来看看这一框架到底是如何应用于这个例子。如图1-6所示,数据生成规则是陆地区域的简单均匀分布,而在海洋区域则毫无可能。
在这里插入图片描述
显然的,我们的模型, p m o d e l p_{model} pmodel ,是真实分布 p d a t a p_{data} pdata的一个过分简化。我们可以检测三个点A,B,C来理解我们模型的成功和失败,以此来看 p m o d e l p_{model} pmodel p d a t a p_{data} pdata 的模拟如何:

  • 点A是我们模型产生的一个观察,但是由于它在海中,不可能是由 p d a t a p_{data} pdata产生。
  • 点B不可能由 p m o d e l p_{model} pmodel生成,因为它在橙色盒子区域之外。因此,我们的模型在能力上距离产生全部的真实分布还有一定的差距。
  • 点C是一个观察,既符合 p m o d e l p_{model} pmodel,又符合 p d a t a p_{data} pdata

尽管由诸多缺点,但是该模型易于采样,因为它是一个橙色盒子区域的简单均匀分布。为了从中采样,我们可以在盒子内随机选择一点。

另外,我们当然可以说,我们的模型是底层复杂分布的简单表示,它捕获了一些底层高级特征。真实分布被陆地分隔成大量的陆地,和无陆地的海域。这一高层特征事实上对于我们的模型也成立,只是我们的模型中只有一块大的大陆,而非很多。

这一例子展示了生成式建模背后的基础概念。本书中我们将解决的问题将更为复杂和高维,但是底层的框架则是一样。

表示学习

上面提到高维数据的表示,我们有必要进一步深入探讨一下,因为这一概念将在本书中贯穿始终。

假定你要向一个素未谋面,在人群中找你的陌生人描述你的样子。你不会从自己某张照片的像素1颜色开始,然后像素2,接着像素3,等等。相反,你会做出合理假设,其他人有关于人类长相的一般知识,然后使用描述一组像素的特征来修订这一基准,比如"我有金色的头发"或者”我戴着眼镜“。通过不超过10句类似描述,其他人足以将描述映射回到像素来在他们的脑中生成一幅你的图像。图像或许并不完美,但是他与你的真实长相将足够近似,可以帮助他们从数百人群中找到你,即使他们之前从未见过你。

这就是表示学习的核心理念。为了描述训练集中的每个观察,我们不会从高维样本空间直接建模,而是会使用某些低维隐空间,然后学习一个映射函数,该函数可以将隐空间中的一个点映射到原始空间中的一个点。换句话说,隐空间中的每个点是某个高维观察的一个表示。

在实际中,这个到底意味着什么?让我们假定我们有一个训练集,包含一系列饼干盒的灰度图像(图1-7)。
在这里插入图片描述
对于我们来说,很显然,有两个特征可以唯一描述上述每个罐头: 罐子的高和宽。也即,我们可以将罐头的每张图像转换到某个二维隐空间的一个点,尽管训练图像集是在高维像素空间给出。注意,这也意味着我们可以生成在训练集中不存在的罐子图像,只需要使用一个合适的映射函数 f f f 到隐空间的一个新点即可,如图1-8所示。
在这里插入图片描述
对机器来讲,要认识到原始的数据集可以被更简单的隐空间来描述,并不容易 — 它首先需要建立 高度和宽度 是两个最适合描述数据库的隐空间维度,然后学习映射函数 f f f, 该函数可以接收该空间中的一个点,并将它映射到一个灰度饼干罐图像。机器学习(或者更特定的,深度学习) 给了我们训练可以发现复杂关系之机器的能力,而无需人类引导。

使用隐空间训练模型的一大好处在于,我们可以通过在更可控之隐空间来操纵其表示向量,最终实现对图像高层特性的操作。比如,如何调整单一像素的阴影可以使得饼干罐头图像更高?这一点并不明确。但是,在隐空间,我们只需要增加高度这一隐维度即可,并进一步的使用映射函数来回到图像域。我们将在下一章看到更明显的例子,不是应用于饼干盒,而是人脸。

我们将在本书后续章节中看到,将训练数据集编码到一个隐空间,进而我们可以从隐空间采样,并将该点反向解码到原空间,这一概念在诸多生成式建模技术中非常常见。从数学上讲,编码器-解码器 技术试图将数据依附的高度非线性流形(如,像素空间) 转换到更简单的隐空间,以方便采样,因此,隐空间中的任何点都是一个良好图像的表示,如图1-9所示。
在这里插入图片描述

核心概率论

我们已经看到,生成式建模与概率分布的统计建模联系紧密。因此,有必要介绍一些贯穿全书的核心概率和统计概念,来解释每个模型的理论背景。

如果你之前从未学过概率论或者统计,也无需担心。要构建本书中用到的多数深度学习模型,并不需要对统计理论的深入理解。但是,要充分了解我们面临的任务,有必要构建对基础概率论的坚实理解。这样的话,你将有必要的基础来理解本章稍后涉及的不同的生成式模型家族。

山手线,我们先定义五个关键术语,并将每一个与我们之前关于二维世界地图的生成式模型的示例链接起来:

样本空间
样本空间是观察\bf{x}所能取值的完全集合。

注意
在我们之前的例子中,样本空间包含世界地图上所有的点(以经纬度表示), x = ( x 1 , x 2 ) \bf{x} = (x_1,x_2) x=(x1,x2)。例如, x = ( 40.7306 , − 73.9352 ) \bf{x} = (40.7306,-73.9352) x=(40.730673.9352)表示样本空间的一个点(纽约市),该点术语真实的数据分布。 x = ( 11.3493 , 142.1996 ) \bf{x} = (11.3493,142.1996) x=(11.3493142.1996)也是样本空间的一个点,但它不属于真实的数据生成分布(它在海里)

概率密度函数
概率密度函数(或简称为 密度函数) 是这样一个函数 p ( x ) p(\bf{x}) p(x): 它将样本空间中的一个点 x \bf{x} x映射到 [ 0 , 1 ] [0,1] [0,1]区间的一个数。密度函数在样本空间所有点上的积分需要等于1,因此它是定义良好的概率分布。

注意
在世界地图的示例中,我们的生成式模型之密度函数在橙色盒子外为0,在橙色区域内为常数,因此密度函数在整个样本空间的积分为1.

注意,虽然仅有唯一正确的密度函数 p d a t a ( x ) p_{data}(\bf{x}) pdata(x) 来生成观察到的数据集,却存在无穷多可能的密度函数 p m o d e l ( x ) p_{model}(\bf{x}) pmodel(x) 来对 p d a t a ( x ) p_{data}(\bf{x}) pdata(x)进行估计。

参数化建模
参数化建模是这样一种技术: 我们可以利用它来寻找合适的 p m o d e l ( x ) p_{model}(\bf{x}) pmodel(x)。一个 参数化模型 是一族可用有限数目参数 θ \theta θ进行刻画的密度函数 p θ ( x ) p_{\theta}(\bf{x}) pθ(x)

注意
如果我们假定均匀分布式我们的模型族,那么我们在图1-5上所能画的所有盒子的集合就是一个参数化模型。在这里,一共有四个参数,分别对应盒子的两个角: 左下坐标 ( θ 1 , θ 2 ) (\theta_1,\theta_2) (θ1,θ2), 右上坐标 ( θ 3 , θ 4 ) (\theta_3,\theta_4) (θ3,θ4)。因此,该参数化模型中的每个密度函数 p θ ( x ) p_{\theta}(\bf{x}) pθ(x) (也即,每个盒子),都可以用四个数字唯一标识,即 ( θ 1 , θ 2 , θ 3 , θ 4 ) (\theta_1, \theta_2, \theta_3, \theta_4) (θ1,θ2,θ3,θ4)

似然(likelihood)
一组参数集 θ \theta θ的似然 L ( θ ∣ x ) \mathcal{L}(\theta | \bf{x}) L(θx)是一个函数,给定输入观察点 x ) \bf{x}) x), 它可以度量参数 θ \theta θ 的合理性。似然的定义如下:
L ( θ ∣ x ) = p θ ( x ) \mathcal{L}(\theta | \bf{x})=p_{\theta}(\bf{x}) L(θx)=pθ(x)

也就是说,给定输入观察点 x ) \bf{x}) x) θ \theta θ的似然 被定义为 参数为 θ \theta θ时其密度函数在 x ) \bf{x}) x)的值。如果我们有一整个包含独立观察的数据集 X \mathbf{X} X,那么我们可以得到:
L ( θ ∣ X ) = ∏ x ∈ X p θ ( x ) \mathcal{L}(\theta | \mathbf{X})=\prod_{\bf{x} \in \mathbf{X}}p_{\theta}(\bf{x}) L(θX)=xXpθ(x)

注意
在我们的世界地图示例中,一个仅包含左半边地图的橙色盒子,其似然值为0 — 它不可能生成对应的数据集,因为我们已经观察到地图右半边的点存在。图1-5的橙色盒子有正的似然,因为在这个模型设定下,密度函数对所有的点都是正值。

因为大量取值介于0和1之间的数之积在计算上比较难以处理,我们一般使用 对数似然 来替代:
l ( θ ∣ X ) = ∑ x ∈ X l o g    p θ ( x ) \mathcal{l}(\theta | \mathbf{X})=\sum_{\bf{x} \in \mathbf{X}} log \; p_{\theta}(\bf{x}) l(θX)=xXlogpθ(x)

事实上,这么定义似然背后有统计的原因,但是我们也可以看到这个定义在直觉上合理。一组参数 θ \theta θ的似然被定义为这样的概率: 如果真实的数据生成分布恰巧就是参数 θ \theta θ驱动的模型,那么我们有多大的概率看到当前的数据集。

警告
注意,似然是参数的函数,而非数据的函数。它不可被理解为给定参数集是否正确的概率 — 换句话说,它不是一个参数空间的概率分布 (也即,对于参数,它的和和积分并不为1)

直觉上,参数化建模的焦点是寻找最优的参数值 θ \theta θ,最大化我们观察到数据集 X \mathbf{X} X之似然。

最大似然估计
最大似然估计是这样一种技术: 它允许我们估计 θ \theta θ — 密度函数 p θ ( x ) p_{\theta}(\bf{x}) pθ(x)的一组参数—使得我们观察到观测数据 X \mathbf{X} X的可能性最大。更正式的:
θ ^ = a r g θ m a x    l ( θ ∣ X ) \hat{\theta} = arg_{\theta} max \; \mathcal{l}(\theta | \mathbf{X}) θ^=argθmaxl(θX)
$\hat{\theta} $ 被称为最大似然估计 (maximum likelihood estimate, MLE)
*译者注: 原书中将arg 之后的 θ \theta θ 误标注为 x \bf{x} x,一并做订正如上。

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

神经网络通常最小化一个损失函数,因此,等价的,我们就是在探求一组参数,使得负的对数似然最小:
θ ^ = a r g θ m i n    ( − l ( θ ∣ X ) ) = a r g θ m i n    ( − l o g    p θ ( X ) ) \hat{\theta} = arg_{\theta} min \; (\mathcal{-l}(\theta | \mathbf{X})) = arg_{\theta} min \; (-log \; p_{\theta}(\mathbf{X})) θ^=argθmin(l(θX))=argθmin(logpθ(X))

生成式建模可以被看作是一种最大似然估计,其中参数 θ \theta θ是模型中神经网络的权重。我们要找的就是这组权重,使得给定观察数据具备最大化似然 (或等价的,最小化负的对数似然)。

然而,对于高维问题,一般很难直接计算 p θ ( x ) p_{\theta}(\mathbf{x}) pθ(x)。如我们将在下节所见,不同生成式模型族用不同的办法来解决这个问题。

生成式模型分类

尽管所有不同类别的生成式模型最终瞄准同样的任务,但是它们各自使用了不同的方法去对 p θ ( x ) p_{\theta}(\mathbf{x}) pθ(x)进行建模。宽泛的看,一共有三类可能的方法:

  1. 显式建模密度函数,但是通过某种方式对模型进行限制,使得密度函数是可计算的;
  2. 显式建模一个密度函数的可计算近似;
  3. 非显式建模密度函数,通过一个统计过程来直接生成数据。

下面的图1-10给出了分类图,包含我们将在第二部分探索的6大类生成式模型。注意,这些生成式模型的分类并不是完全互斥的 — 有不少模型的实例其实是两种不同方法的混合。我们应该将这些大类看做是生成式建模的一般方法,而不是特定的模型架构。
在这里插入图片描述
我们可做的第一个划分在 显式 或 隐式 的对概率密度函数进行建模。

隐式密度模型 目标完全不在于估计概率密度,而是仅关注于构建 生成数据的 统计过程。最知名的隐生成模型是 生成对抗网络 (generative adversial network)。我们可以进一步将显式密度模型 划分为直接优化密度函数(可计算模型),以及优化密度函数的可计算近似。

可计算模型 在模型架构上施加了限制,使得密度函数具有某种易于计算的形式。例如,自回归模型 (autoregressive models) 强制了输入特征的序,所以输出可以序列生成 — 例如,一个字一个字,或者 一个像素一个像素。规范流模型 (Normalizing flow models) 使用了一系列可计算,可逆的函数作为分布假设,以此来生成更为复杂的分布。

近似密度模型 包括 ”变分自编码器“, 其引入了一个隐变量,并优化联合密度函数的一个近似。”基于能量的模型“ 也使用了近似方法,但是是通过马尔可夫链采样来做到的,而非变分方法。”扩散模型“通过训练一个模型来逐步对一个预先腐蚀的图像去噪来近似密度函数。

所有生成式模型家族的一条常见主线是深度学习。几乎所有复杂的生成式模型其内核都包括深度神经网络,因为DNN可以从零开始训练,并学到主宰数据结构的复杂关系,而不需要用任何先验信息进行硬编码。我们将在第二章探讨深度学习,并给出实际的例子来演示如何构建自己的深度神经网络。

生成式深度学习代码库

本章最后一节将引导搭建 生成式深度学习模型 的环境基础,我们会引入本书附带的代码库。

小贴士
本书中的很多例子都来源于Keras官网的优秀开源实现。强烈建议读者校验资源,因为该资源更新频繁。

克隆代码仓

作为开始,你需要先克隆代码仓。Git 是一个开源的版本控制系统,它可以让你将代码复制到本地,使得在本地机器上或者云环境中也可以运行对应的notebooks。你应该已经装了git,如果没有,遵循操作系统相关的安装指引即可。

为了将本书的代码仓克隆下来,切换到你想存放代码的文件夹路径,并在终端输入下面的命令:

git clone https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition.git

现在,你应该已经能在机器对应的文件夹中找到代码了。

使用Docker

本书代码库需要配合Docker使用,Docker是一个免费的容器化技术,该技术可以使得快速运行一个新的代码库变得特别容易,而无需顾虑你的计算机架构或者操作系统。如果你从没使用过Docker,也无需着急 — 在本书的代码仓中有个 README 文件,它会教你如何开始。

在GPU上运行

如果你没有自己的GPU资源,问题也不大。本书所有的示例都可以在CPU上进行训练,尽管这会比在GPU机器上耗费更多的时间。本书代码仓的README 文件中也有关于如何在谷歌云上配置的描述,这可能需要付费。

总结

本章中,我们介绍了生成式建模这个领域,它是机器学习的重要分支,并与广泛研究的鉴别式建模互补。我们讨论了为什么生成式建模如今是最活跃和令人兴奋的AI研究领域,也介绍了理论和应用上的不少最新进展。

我们从一个简单的示例开始,并看到了生成式建模如何最终聚焦到建模底层数据分布上。这引起了很多复杂而有趣的挑战,我们将之总结到一个框架,来理解任何生成式模型的理想特性。

接着,我们接触了核心的概率概念,以帮助理解生成式建模各个方法的理论基础,并给出了六大类不同的生成模型分类。我们也介绍了如何通过克隆本书附带代码仓。

在第二章中,我们将开始对深度学习的探讨,并一起看看如何用Keras来构建我们自己的模型,完成鉴别式建模任务。这会给我们必要的基础来解决后续章节的生成式深度学习问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GarryWang1248/article/details/133706501

智能推荐

展讯平台手机camera驱动移植_2_展讯resource_cost-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏5次。在之前的文章里我们讲到了展讯平台camera驱动移植的简单介绍。然而在安卓q开始,展讯camera这一块的目录结构都进行了较大的改变。在这里我们主要讲一下安卓q的camera驱动移植。此处仅陈述点亮,OTP、AF、FLASH等等暂未配置。_展讯resource_cost

python 新闻摘要_每日新闻摘要:运营商承诺他们不再出售您的位置…-程序员宅基地

文章浏览阅读174次。python 新闻摘要Last year it was discovered that Verizon, Sprint, AT&T, and T-Mobile were all selling your real-time location data to third-party companies. They offered no oversight of what the compan...

【调剂】辽宁科技大学材料与冶金学院夏垒招收材料、金属加工、化学及相关学科调剂考生...-程序员宅基地

文章浏览阅读162次。公众号【计算机与软件考研】每天都会发布最新的计算机考研调剂信息!点击公众号界面左下角的调剂信息或者公众号回复“调剂”是计算机/软件等专业的所有调剂信息集合,会一直更新的。夏垒,博士,2020年入选辽宁省“百千万人才工程”,担任《轧钢》、《特殊钢》、《机械工程导报》等期刊首届青年编委,中国机械工程学会高级会员,中国材料研究学会会员,中国化学会会员。长期致力于金属加工摩擦、磨损与工艺润滑;材料腐蚀与防..._辽宁省自然科学学术成果 鞍钢

PyCharm更换pip源为国内源、模块安装、PyCharm依赖包导入导出教程_pycharm换源-程序员宅基地

文章浏览阅读2.9w次,点赞10次,收藏93次。PyCharm更换为国内pip源后,下载速度超级快!_pycharm换源

elasticsearch+logstash+kibana+kafka日志分析系统的安装和配置(一:安装篇)_elasticsearch(7.13.3) + logstash(7.13.3) + kibana(-程序员宅基地

文章浏览阅读252次。安装jdkyum install -y java-1.8.0-openjdk.x86_64 yum安装ElasticSearchCreate a file called elasticsearch.repo in the /etc/yum.repos.d/[elasticsearch]name=Elasticsearch repository for 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgche_elasticsearch(7.13.3) + logstash(7.13.3) + kibana(7.13.3) + kafka

tf.global_variables_initializer()使用-程序员宅基地

文章浏览阅读5.3k次,点赞4次,收藏12次。# 必须要使用global_variables_initializer的场合# 含有tf.Variable的环境下,因为tf中建立的变量是没有初始化的,也就是在debug时还不是一个tensor量,而是一个Variable变量类型size_out = 10tensor = tf.Variable(tf.random_normal(shape=[size_out]))init = tf.global_variables_initializer()with tf.Session() as sess:_tf.global_variables_initializer()

随便推点

SSH修改登录端口并配置免密登录(非root)_ssh ip默认为非root如何调-程序员宅基地

文章浏览阅读2.4k次。实验环境本地 MacOS 10.14.4远程服务器CentOS 7.5 64位Firewalld本地命令前缀 [admin@MacBookPro]$服务器命令前缀 [A@CentOS]$​ 最近在建站后,发现不到2天我的小破站就有600次ssh远程登录的尝试。心中不免一阵寒意,为了解决这个问题特地读取了ssh官方的文档,对网站的ssh登录进行了一些措施。​ 首先要了解 SSH免密登录的原理,免密登录需要使用 ssh 的非对称加密方式,登录无需密码,但是需要携带秘钥。本地若想登录._ssh ip默认为非root如何调

oracle电子书百度云盘,ypzdnoracle-e7-bb-8f-e5-85-b8-e6-95-99-e7-a8-8b.pdf-程序员宅基地

文章浏览阅读323次。ypzdnoracle-e7-bb-8f-e5-85-b8-e6-95-99-e7-a8-8b.pdf-e6-98-af-e7-99-be-e5-ba-a6-e7-bd-91-e7-9b-98-e5-ad-98-e5-82-a8-e5-86-85-e5-ae-b9-3cbr-2f-3eoracle-e7-bb-8f-e5-85-b8-e6-95-99-e7-a8-8b.pdf-e7-9a-84-e..._%e5%9b%bd%e7%8e%8b%e6%b8%b8%e6%88%8f%e5%a6%88%e5%a6%88

Cheering Gym-101522C_cheering lsc pcms-程序员宅基地

文章浏览阅读145次。Cheering Gym-101522C_cheering lsc pcms

Domain agnostic feature learning-程序员宅基地

文章浏览阅读821次。Paper-infotitle :Domain Agnostic Feature Learning forImage and Video Based Face Anti-spoofing[2019-arXiv] author:Suman Saha,Wenhao Xu,Menelaos Kanakis,Stamatios Georgoulis, et al. insight ..._agnostic feature

快速入门Jdbc原理+Jdbc实战-程序员宅基地

文章浏览阅读664次。Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。

【数据结构】Splay树 + 文艺平衡树-程序员宅基地

文章浏览阅读1k次,点赞38次,收藏8次。就是一个长这样的树,树中每个结点都有一个父结点(除了根结点没有父结点)和最多两个子结点,每个结点的左儿子一定比它小,右儿子一定比它大。这棵树的先序遍历很容易知道就是:1 2 3 4 5 6 7 (根左右)我们还可以从另一个角度理解先序遍历:把整棵树映射到 x 轴上,也就是把它压扁也就是这样:先序遍历从左到右读出来就可以了。

推荐文章

热门文章

相关标签