使用 PyTorch 学习生成式人工智能——什么是生成式人工智能以及为什么选择 PyTorch?

75 阅读34分钟

本章内容包括:

  • 生成式人工智能(Generative AI)与非生成式人工智能的区别
  • 为什么 PyTorch 是深度学习和生成式 AI 的理想选择
  • 生成对抗网络(GAN)的概念
  • 注意力机制和 Transformer 的优势
  • 从零开始创建生成式 AI 模型的好处

自从 2022 年 11 月 ChatGPT 问世以来,生成式人工智能引起了全球的广泛关注,极大地改变了世界格局。这项技术革新已经深刻影响了日常生活的诸多方面,开启了技术发展的新纪元,也激发了大量创业公司探索各种生成模型所带来的广阔可能。

以先锋企业 Midjourney 为例,它可以通过简短的文本输入生成高分辨率且逼真的图像。类似地,软件公司 Freshworks 利用 ChatGPT 显著加快了应用程序开发周期,从平均十周缩短到仅几天(详见 Forbes 文章《10 Amazing Real-World Examples of How Companies Are Using ChatGPT in 2023》,作者 Bernard Barr,2023 年,mng.bz/Bgx0)。值得一提的是,本书序言中的部分内容也是借助生成式 AI 进行了润色,展示了其提升内容吸引力的能力。

注意:用生成式 AI 自己来解释生成式 AI,岂不妙哉?我曾请 ChatGPT 以“更具吸引力的方式”重写本序言的初稿,然后才最终定稿。

这项技术的影响远不止于此。各行各业因生成式 AI 的强大能力而发生重大变革。它可以生成媲美人类的文章,创作出类似古典音乐的曲目,快速撰写复杂的法律文书,而这些任务传统上需要大量的人力和时间。ChatGPT 发布后,教育平台 CheggMate 的股价大幅下跌。此外,美国编剧工会在近期罢工期间达成共识,为 AI 在剧本创作和编辑领域的应用设立了限制(详见 WIRED 文章《Hollywood Writers Reached an AI Deal That Will Rewrite History》,作者 Will Bedingfield,2023 年,mng.bz/1ajj)。

:CheggMate 向大学生收费,由人类专家解答问题,而这些工作现在可由 ChatGPT 或类似工具以极低成本完成。

这引发了几个问题:什么是生成式 AI?它与其他 AI 技术有何不同?为何会在各个行业引发如此广泛的冲击?生成式 AI 的核心机制是什么,为什么理解它如此重要?

本书深入探讨了生成式 AI,这一开创性技术通过高效、快速的内容生成能力正在重塑多个行业。你将学习使用最先进的生成模型来创造各种内容形式:形状、数字、图像、文本和音频。此外,书中强调不仅将模型视为黑盒,而是从零开始构建模型,帮助你深入理解生成式 AI 的内部机制。正如物理学家理查德·费曼所言:“我无法创造的东西,我就无法理解。”

这些模型都基于深度神经网络,你将使用 Python 和 PyTorch 来构建、训练和应用它们。我们选择 Python 是因为其语法简洁友好、跨平台且拥有庞大的社区支持。相比 TensorFlow,PyTorch 更易用,且能灵活适配各种模型架构。Python 已成为机器学习的主要工具,而 PyTorch 在 AI 领域的流行度持续提升。借助 Python 和 PyTorch,你能紧跟生成式 AI 的最新进展。由于 PyTorch 支持 GPU 加速训练,你可以在几分钟或几小时内完成模型训练,亲眼见证生成式 AI 的强大魅力!

1.1 生成式人工智能与 PyTorch 介绍

本节介绍了什么是生成式人工智能(Generative AI),以及它与非生成式模型(判别模型,Discriminative Models)的区别。生成式人工智能是一类具有显著能力的技术,能够生成多种形式的新内容,包括文本、图像、音频、视频、源代码以及复杂的模式。生成式 AI 创造出全新且创新的内容世界,ChatGPT 就是其中的著名例子。相比之下,判别模型主要关注识别和分类已有内容的任务。

1.1.1 什么是生成式人工智能?

生成式人工智能是一种人工智能类型,通过学习已有数据中的模式来创造新的内容,比如文本、图像或音乐。它与判别模型不同,判别模型专门用于识别不同数据实例间的差异,学习类别之间的边界。图 1.1 展示了这两种建模方法的区别。例如,当面对一组包含狗和猫的图像时,判别模型会通过捕捉区分两者的关键特征(如猫有小鼻子和尖耳朵)来判断每张图像是狗还是猫。如图上半部分所示,判别模型以数据作为输入,输出不同标签的概率,我们用 Prob(dog) 和 Prob(cat) 表示。然后根据最高预测概率给输入贴上相应标签。

image.png

图 1.1 生成式模型与判别式模型的对比。判别式模型(图中上半部分)以数据作为输入,输出不同标签的概率,我们用 Prob(dog) 和 Prob(cat) 表示。相比之下,生成式模型(图中下半部分)深入理解这些图像的定义特征,进而合成代表狗和猫的新图像。

生成式模型展现了生成新颖数据实例的独特能力。在我们的狗与猫的例子中,生成式模型通过深入理解图像的关键特征,能够合成新的狗和猫的图像。如图 1.1 下半部分所示,生成式模型以任务描述作为输入(例如潜在空间中不同的取值导致生成图像特征的差异,相关内容将在第 4 至 6 章详细讨论),并生成全新的狗和猫图像。

从统计学角度看,给定包含特征 X 的数据样本,描述输入及其对应的不同标签 Y,判别式模型负责预测条件概率,即 prob(Y|X)。而生成式模型则尝试学习输入特征 X 与目标变量 Y 的联合概率分布,即 prob(X, Y)。掌握该分布后,模型可从中采样,生成新的 X 实例。

根据你想创建的具体内容形式,生成式模型有多种类型。本书主要聚焦两大主流技术:生成对抗网络(GANs)和变换器(Transformers),同时也会涉及变分自编码器和扩散模型。GAN 中的“对抗”指的是两个神经网络在零和博弈框架下的竞争:生成网络试图创造无法区分于真实样本的数据实例,而判别网络则努力识别生成样本和真实样本。两者的博弈推动双方性能提升,最终使生成器能够创造出高度逼真的数据。变换器是一种能够高效解决序列到序列预测任务的深度神经网络,我们将在本章后续详细介绍。

GAN 以其实现简单和多样性著称,使得即使是对深度学习了解有限的个人也能从零开始构建生成模型。这些多功能模型可以创造各种作品,从第 3 章展示的几何形状和复杂图案,到第 4 章你将学会生成的人脸彩色高质量图像。此外,GAN 还能改变图像内容,比如第 6 章讨论的人脸图像从金发无缝变为黑发。值得一提的是,GAN 也展现出音乐生成能力,能创作逼真的音乐作品,如第 13 章所示。

与形状、数字或图像生成相比,文本生成面临更严峻的挑战,主要因文本信息的序列特性——字符和单词的顺序与排列承载着重要意义。为应对这一复杂性,我们使用变换器,这是一种专门设计用来高效处理序列到序列预测任务的深度神经网络。与传统的递归神经网络(RNN)或卷积神经网络(CNN)不同,变换器擅长捕捉输入和输出序列中复杂的长程依赖关系。尤其是它们支持并行训练(一种在多个设备上同时训练模型的分布式方法),极大地缩短了训练时间,使得我们可以在海量数据上训练变换器模型。

变换器的革命性架构催生了大型语言模型(LLMs),即参数数量庞大、在大规模数据集上训练的深度神经网络,包括 ChatGPT、BERT、DALL-E 和 T5。这一架构是近年 AI 突飞猛进的基石,标志着以 ChatGPT 和其他生成预训练变换器(GPT)模型为代表的新纪元的开启。

在接下来的章节中,我们将深入探讨这两项开创性技术的内部机制及其带来的广泛可能性。

1.1.2 Python 编程语言简介

我假设你已经具备一定的 Python 使用基础。为了理解本书内容,你需要掌握 Python 的基础知识,比如函数、类、列表、字典等。如果还不熟悉,网上有很多免费资源可以帮助你入门。请按照附录 A 的说明安装 Python。安装完成后,为本书创建一个虚拟环境,并安装 Jupyter Notebook,作为本书项目的计算环境。

自 2018 年后期以来,Python 已成为全球领先的编程语言,这一点已被《经济学人》所证实(参见《经济学人》数据团队2018年发布的文章“Python 正在成为世界上最受欢迎的编码语言”,链接:mng.bz/2gj0)。Python 不仅对所有人免费开放,还允许用户创建和修改库。Python 拥有庞大的社区驱动生态系统,你可以轻松找到资源和其他 Python 爱好者的帮助。此外,Python 程序员乐于分享代码,避免重复造轮子,你可以直接导入已有的库,也能将自己的库分享给社区。

无论你使用的是 Windows、Mac 还是 Linux,Python 都能支持。它是跨平台语言,虽然不同操作系统的安装流程略有差异,但别担心,我会在附录 A 详细讲解。一旦环境配置好,Python 代码在不同系统间表现一致。

Python 是一种表达力强的语言,适合通用应用开发。其语法简单易懂,使 AI 爱好者也能快速掌握并应用。如果你在使用本书提到的 Python 库时遇到问题,可以在 Python 论坛或 Stack Overflow(stackoverflow.com/questions/t…)搜索答案。如果实在解决不了,也欢迎联系我寻求帮助。

最后,Python 拥有大量库资源,相较于 C++ 或 R 等语言,使得创建生成模型变得更加便捷。在本书中,我们将专注于使用 PyTorch 作为 AI 框架,并将在后文解释为何选择它而非 TensorFlow 等竞品。

1.1.3 选择 PyTorch 作为 AI 框架

既然决定使用 Python 作为本书的编程语言,我们需要选择适合生成模型的 AI 框架。Python 中最流行的两个框架是 PyTorch 和 TensorFlow。本书选择 PyTorch,主要因为其易用性,强烈建议你也这样做。

PyTorch 是 Meta AI 研究实验室开发的开源机器学习库。基于 Python 和 Torch 库,PyTorch 致力于为深度学习模型的创建和训练提供一个灵活且直观的平台。Torch 是 PyTorch 的前身,是用 C 语言并通过 Lua 封装的深度神经网络库,但已停止维护。PyTorch 应运而生,满足研究者和开发者的需求,提供更友好且适应性强的深度学习框架。

计算图是深度学习中的基本概念,对复杂数学运算的高效计算尤为关键,尤其是涉及多维数组(张量)时。计算图是有向图,节点代表数学操作,边表示数据流。计算图的一个重要用途是反向传播和梯度下降时的偏导数计算。图结构允许高效计算训练中更新模型参数所需的梯度。PyTorch 采用动态计算图,即运行时创建和修改计算图,这使其能更好地适应多变的模型架构并简化调试。此外,PyTorch 与 TensorFlow 一样支持 GPU 加速训练,极大缩短训练时间,相较于 CPU 训练有显著优势。

PyTorch 的设计风格与 Python 语言高度契合。其语法简洁明了,适合新手和经验丰富的开发者。研究者和开发者青睐 PyTorch 的灵活性,得益于其动态计算图和简单接口,可以快速试验新想法。这种灵活性对于快速发展的生成式 AI 领域尤为重要。PyTorch 社区也在迅速壮大,活跃地推动其发展,形成了丰富的库、工具和资源生态。

PyTorch 在迁移学习方面表现出色,即使用预训练的通用模型并针对特定任务进行微调。研究人员和从业者可以轻松使用预训练模型,节省时间和计算资源。这对于预训练大型语言模型(LLM)时代尤为重要,使我们能够将 LLM 用于下游任务,如分类、文本摘要和文本生成。

PyTorch 与其他 Python 库如 NumPy 和 Matplotlib 兼容,方便数据科学家和工程师无缝集成 PyTorch 到现有工作流,提升工作效率。PyTorch 致力于社区驱动的发展,更新频繁且基于实际使用反馈不断改进,确保其始终处于 AI 研究和开发的前沿。

附录 A 详细介绍了如何在你的电脑上安装 PyTorch。请按照指引在本书的虚拟环境中安装。若你的计算机未安装支持 CUDA 的 GPU,书中所有程序同样支持 CPU 训练。更好的是,我将在本书的 GitHub 仓库(github.com/markhliu/DG…)提供训练好的模型示例,方便你观看模型效果(如模型过大,也会放在我个人网站 gattonweb.uky.edu/faculty/liu…)。在第 2 章,你将深入学习 PyTorch。首先了解 PyTorch 的数据结构 Tensor,它保存数字和矩阵,并提供相应的操作函数。随后,你将完成一个端到端的深度学习项目,具体包括用 PyTorch 构建神经网络,利用服装图片及对应标签训练模型。完成后,利用训练好的模型将服装分类为 10 种不同类别。此项目将助你为后续章节构建和训练各类生成模型做好准备。

1.2 GAN(生成对抗网络)

本节首先对 GAN 的工作原理进行高层次的概述。接着以生成动漫头像图像为例,展示 GAN 的内部机制。最后,我们将讨论 GAN 的实际应用。

1.2.1 GAN 的高层次概述

GAN 是一类生成模型,最初由 Ian Goodfellow 及其合作者于 2014 年提出(论文《Generative Adversarial Nets》,arxiv.org/abs/1406.26…)。近年来,GAN 非常流行,因为它们构建和训练相对简单,且能生成多种多样的内容。正如下节示例所展示的,GAN 采用双网络架构:一个生成模型负责捕捉数据的底层分布以生成内容,另一个判别模型负责判断给定样本更有可能来自真实训练数据集(称为“真”)还是生成模型的输出(称为“假”)。模型的核心目标是产生与训练数据集中的样本极为相似的新数据。GAN 生成的数据类型取决于训练数据集的组成。例如,如果训练数据是服装的灰度图像,那么生成的图像也将类似于服装;反之,如果训练数据是彩色人脸图像,生成的图像则类似于人脸。

请看图 1.2——我们的 GAN 架构及其组成部分。训练时,将训练数据集中的真实样本(如图顶部所示)和生成器(左侧)创建的伪造样本同时输入判别器(中间)。生成器的主要目标是创造几乎无法与训练数据中的真实样本区分开的数据实例。判别器则力求分辨出生成器生成的假样本和真实样本。这两个网络像猫捉老鼠一样持续对抗,通过反复较量不断提升各自的能力。

image.png

图 1.2 GAN 的架构及其组成部分。GAN 采用双网络架构,包括一个生成模型(左侧),负责捕捉底层数据分布;以及一个判别模型(中间),用于估计给定样本更可能来源于真实训练数据集(称为“真实”),还是生成模型产生的伪造数据(称为“伪造”)。

GAN 的训练过程包含多次迭代。每次迭代中,生成器接收某种形式的任务描述(步骤 1),并据此生成伪造图像(步骤 2)。这些伪造图像与训练集中的真实图像一同输入判别器(步骤 3)。判别器尝试将每个样本分类为真实或伪造,然后将分类结果与实际标签(真实情况)进行对比(步骤 4)。判别器和生成器都会根据分类反馈(步骤 5)调整和提升自己的能力:判别器改进识别伪造样本的能力,生成器学习提升生成更具说服力的样本以欺骗判别器。随着训练的进行,二者达到一种平衡状态,此时两者都难以进一步提升。此时生成器能够产生几乎无法与真实样本区分的新数据。

为了更好地理解 GAN 的工作原理,我们来看一个具体示例。

1.2.2 示例说明:生成动漫头像

想象一下:你是一位狂热的动漫爱好者,正使用一种强大的工具——深度卷积生成对抗网络(简称 DCGAN,不用担心,我们将在第 4 章深入介绍它)——开启创造属于你自己的动漫头像的激动人心之旅。

如果你看图 1.2 的顶部中间位置,会看到一张标注为“真实图像”的图片。我们将使用 63,632 张彩色动漫头像图片作为训练数据集。翻到图 1.3,你会看到训练集中 32 个示例。这些特别的图像非常关键,因为它们构成判别网络输入的一半。

image.png

图 1.2 左侧是生成器网络。为了每次生成不同的图像,生成器以潜在空间中的向量 Z 作为输入。我们可以将这个向量看作是“任务描述”。在训练过程中,我们从潜在空间中抽取不同的 Z 向量,因此网络每次都会生成不同的图像。这些伪造图像构成判别网络输入的另一半。

注意:通过改变向量 Z 的数值,我们可以生成不同的输出。在第 5 章中,你将学习如何选择向量 Z 来生成具有特定特征的图像(例如男性或女性特征)。

但这里有个转折:在我们教会这两个网络创造和识别的技巧之前,生成器产生的图像,嗯,可以说是一团乱七八糟!它们看起来完全不像图 1.3 中那些逼真的动漫头像。实际上,它们更像是电视屏幕上的雪花点(你将在第 4 章亲眼见到这一过程)。

我们对模型进行多次迭代训练。在每次迭代中,我们将生成器产生的一组图像与训练集中的动漫头像图像一起呈现给判别器。我们让判别器预测每张图像是由生成器制作的伪造图像,还是训练集中的真实图像。

你可能会好奇:判别器和生成器在每次训练迭代中是如何学习的?在做出预测后,判别器不会袖手旁观;它会根据每张图像预测的错误进行学习。通过这些新获得的知识,判别器微调其参数,使下一轮能做出更准确的预测。生成器也不会闲着。它从自身的图像生成过程和判别器的预测结果中“汲取经验”,据此调整自身网络参数,力求在下一次迭代中生成越来越逼真的图像。它的目标是降低被判别器识破伪造的概率。

随着迭代的进行,生成器网络逐渐演变,产生的动漫头像越来越真实,逐步接近训练集中的图像。同时,判别器网络提升了识别伪造图像的能力,成为一名经验丰富的“侦探”。这是一场创造与识别的精彩博弈。

渐渐地,魔法时刻到来了。双方达到了一种平衡状态。生成器创造的图像变得如此逼真,以至于无法与我们训练档案中的真实动漫头像区分开来。在此时,判别器对每张图像都无法确定真假,只能赋予 50% 的真实性概率,无论图像来自训练集还是生成器。

最后,请看生成器创作的一些示例作品,如图 1.4 所示:它们看起来确实和训练集中的图像难以区分。

image.png

1.2.3 为什么你应该关注GAN?

GAN易于实现且用途广泛:仅在本书中,你就将学会生成几何图形、复杂图案、高分辨率图像以及听起来逼真的音乐。

GAN的实际应用不仅限于生成逼真的数据。它们还可以将一种图像域中的属性转换到另一种域中。正如你将在第6章看到的,你可以训练一个CycleGAN(GAN家族中的一种生成模型)将人脸图像中的金发转换为黑发。同一个训练好的模型也可以将黑发转换为金发。图1.5展示了四排图像。第一排是原始的金发图像,训练好的CycleGAN将其转换成黑发图像(第二排)。最后两排分别是原始的黑发图像和转换成金发的图像。

image.png

图1.5 使用CycleGAN改变发色。如果我们将带有金发的图像(第一排)输入训练好的CycleGAN模型,模型会将这些图像中的金发转换成黑发(第二排)。同一个训练好的模型也可以将黑发(第三排)转换成金发(底排)。

想想你通过训练GAN所掌握的那些惊人技能——它们不仅酷炫,而且非常实用!比如,你经营一家采用“定制生产”(Make to Order)策略的在线服装店,允许用户在生产前定制购买的商品。你的网站上展示了大量独特的设计供顾客选择,但问题是:你只在有人下单后才制作服装。制作这些高质量的服装图片成本很高,因为你必须先生产服装,然后再拍摄照片。

这时候,GAN大显身手!你不需要大量已生产的服装及其图片;相反,可以利用类似CycleGAN的模型将一组图像中的特征转换成另一组,创造出全新的款式。这只是使用GAN的一个巧妙方法。GAN的可能性无穷无尽,因为这些模型非常多才多艺,能处理各种类型的数据——这使它们在实际应用中成为改变游戏规则的利器。

1.3 Transformer

Transformer 是一种深度神经网络,擅长处理序列到序列的预测问题,比如给定一句输入句子,预测最可能的下一个词。本节将介绍 Transformer 的关键创新——自注意力机制。接着,我们会讲解 Transformer 的架构以及不同类型的 Transformer。最后,我们会讨论 Transformer 的一些最新发展,比如多模态模型(输入不仅包括文本,还包括音频、图像等其他数据类型)和预训练大语言模型(LLMs,即在大规模文本数据上训练,可执行多种下游任务的模型)。

在2017年,谷歌的一组研究人员(Vaswani 等人,论文《Attention Is All You Need》,arxiv.org/abs/1706.03…)发明了 Transformer 架构。在此之前,自然语言处理(NLP)及其他序列到序列预测任务主要由循环神经网络(RNNs)处理。然而,RNN 在保持序列早期信息方面存在困难,导致它们难以捕捉长期依赖关系。即使是能够处理较长距离依赖的高级 RNN 变体——长短期记忆网络(LSTM),在面对极长距离依赖时依然表现不佳。

更重要的是,RNN(包括 LSTM)是顺序处理输入的,也就是说,这些模型一次处理一个元素,无法同时看到整个序列。由于 RNN 是沿着输入和输出序列的位置依次计算,这阻止了并行训练,导致训练速度缓慢,也使得在大规模数据集上训练模型变得不可能。

Transformer 的关键创新是自注意力机制,它擅长捕捉序列中的长期依赖关系。此外,Transformer 在模型中不按顺序处理输入,因此可以并行训练,大大缩短了训练时间。更重要的是,并行训练使得 Transformer 能够在大量数据上训练,这使得大语言模型(LLMs)变得智能且知识丰富(能够处理和生成类人文本、理解上下文并执行多种语言任务)。这推动了 ChatGPT 及近期 AI 热潮的兴起。

1.3.1 注意力机制

注意力机制会为序列中每个元素与其他所有元素(包括它自身)之间的关联赋予权重。权重越高,表示两个元素的关联越紧密。这些权重通过大规模训练数据学习得到。因此,像 ChatGPT 这样的训练完成的 LLM 能够理解句子中任意两个词之间的关系,从而理解人类语言。

你可能会好奇:注意力机制是如何为序列中的元素赋分,以捕捉长期依赖的呢?计算注意力权重的第一步,是通过三个神经网络层将输入映射成查询(Q)、键(K)和值(V)(第9章将详细解释)。使用查询、键和值来计算注意力的方法源于检索系统。比如,你去图书馆查找书籍,可能会在搜索引擎输入“金融中的机器学习”。这里的查询 Q 就是“金融中的机器学习”,键 K 是图书名称、描述等。图书馆的检索系统会根据查询与键的相似度推荐一系列图书(值 V)。带有“机器学习”或“金融”字样的图书会排在前面,而不包含这些词的图书则排在后面,因为匹配得分较低。

在第9和10章,你将详细学习注意力机制——更重要的是,你将从零实现注意力机制,构建并训练一个 Transformer,实现英法翻译。

1.3.2 Transformer 架构

Transformer 最初是为机器语言翻译设计的模型(例如英德或英法翻译)。图1.6展示了 Transformer 架构。左侧是编码器,右侧是解码器。在第9和10章,你将学习从零构建 Transformer,训练模型实现英法翻译,并详细讲解图1.6。

Transformer 中的编码器负责“理解”输入序列的含义(例如英文短语“How are you?”),并将其转换为表示含义的向量,然后传递给解码器。解码器根据序列中已有的词和编码器输出,逐词构建输出(例如英文短语的法语翻译)。训练完成后,模型能将常见英文短语翻译成法语。

Transformer 分为三种类型:仅编码器、仅解码器和编码器-解码器架构。仅编码器 Transformer 没有解码器,能将序列转换为抽象表示,适用于情感分析、命名实体识别、文本生成等下游任务,比如 BERT。仅解码器 Transformer 只有解码器,没有编码器,适合文本生成、语言建模和创作写作,比如 GPT-2(ChatGPT 的前身)和 ChatGPT。在第11章,你将学习从零创建 GPT-2,然后从 Hugging Face(一个托管和协作机器学习模型、数据集和应用的 AI 社区)下载预训练权重,加载权重到你的 GPT-2 模型,并开始生成连贯文本。

image.png

图1.6 Transformer架构。Transformer中的编码器(图示左侧)学习输入序列的含义(例如英文短语“How are you?”),并将其转换为抽象表示以捕捉其意义,然后将该表示传递给解码器(图示右侧)。解码器根据序列中前面的词以及编码器提供的抽象表示,一次预测一个词,逐步构建输出(例如该英文短语的法语翻译)。

编码器-解码器架构的Transformer适用于复杂任务,比如能够处理文本到图像生成或语音识别的多模态模型。编码器-解码器Transformer结合了编码器和解码器的优势:编码器高效处理和理解输入数据,解码器擅长生成输出。这个组合使模型能够有效理解复杂输入(如文本或语音),并生成复杂输出(如图像或转录文本)。

1.3.3 多模态Transformer与预训练大语言模型(LLMs)

生成式AI的最新发展催生了各种多模态模型:这些Transformer不仅可以处理文本,还能处理音频、图像等其他数据类型作为输入。文本到图像的Transformer就是其中一个例子。DALL-E 2、Imagen和Stable Diffusion都是文本到图像模型,因其能够根据文本提示生成高分辨率图像而备受媒体关注。文本到图像的Transformer融合了扩散模型的原理,扩散模型通过一系列变换逐步增加数据的复杂度。因此,在讨论文本到图像Transformer之前,我们需要先了解扩散模型。

想象你想用基于扩散的模型生成高分辨率的花卉图像。首先,你会获取一组高质量的花卉训练图像。然后,模型逐步向这些花卉图像添加噪声(即扩散过程),直到图像完全变成随机噪声。接着,训练模型逐步从这些噪声图像中去除噪声,生成新的数据样本。扩散过程如图1.7所示。左栏为四张原始花卉图像,向右移动时,每一步图像中逐渐加入噪声,直到最右栏四张图变成纯随机噪声。

image.png

图1.7 扩散模型向图像中不断添加越来越多的噪声,并学习如何重建它们。左栏包含四张原始花卉图像。向右移动时,每个时间步都会向图像中加入一些噪声,直到最右栏,四张图像变成纯随机噪声。然后,我们利用这些噪声图像训练基于扩散的模型,逐步去除噪声,从而生成新的数据样本。

你可能会想:文本到图像的Transformer和扩散模型之间有什么关系?文本到图像的Transformer以文本提示作为输入,生成与该文本描述相对应的图像。文本提示作为一种条件输入,模型通过一系列神经网络层将文本描述转换成图像。类似扩散模型,文本到图像的Transformer采用分层架构,多个层次逐步为生成的图像添加更多细节。两者的核心理念都是通过迭代不断优化输出,我们将在第15章详细讲解。

扩散模型因其训练稳定性和生成高质量图像的能力,现已比其他生成模型(如GAN和变分自编码器)更受欢迎。在第15章,你将学习如何使用Oxford Flower数据集训练一个简单的扩散模型;同时,你还会了解多模态Transformer的基本概念,并编写Python程序,通过文本提示调用OpenAI的DALL-E 2生成图像。例如,当我输入提示“穿宇航服骑独角兽的宇航员”时,DALL-E 2生成了图1.8所示的图像。

image.png

第16章中,你将学习如何调用预训练的大型语言模型(LLM),如ChatGPT、GPT-4和DALL·E 2。这些模型是在大量文本数据上训练而成,从数据中学习到了通用知识。因此,它们能够执行多种下游任务,如文本生成、情感分析、问答和命名实体识别。由于预训练的大型语言模型所使用的信息都是几个月前的数据,因此它们无法提供过去一两个月内发生的事件和发展情况,更不用说实时信息,比如天气状况、航班状态或股票价格了。我们将使用LangChain(一款专为构建基于LLM的应用设计的Python库,提供提示管理、LLM链式调用和输出解析等工具),将LLM与Wolfram Alpha和维基百科API串联起来,打造一个无所不知的个人助理。

1.4 为什么要从零开始构建生成模型?

本书的目标是带你从零开始构建和训练所有生成模型。通过这样做,你将深入理解这些模型的内部机制,并能更好地加以利用。从零开始构建是理解事物的最佳方式。关于生成对抗网络(GAN),你将完成这个目标:所有模型,包括DCGAN和CycleGAN,都将从头开始构建,并使用公开领域中精心整理的数据进行训练。

对于Transformer模型,除了大型语言模型外,你也将从零开始构建和训练所有模型。之所以不从零训练大型语言模型,是因为这类模型需要海量数据和超级计算资源。但你会在这方面取得实质性进展。具体来说,在第9和第10章中,你将逐行实现2017年开创性的论文《Attention Is All You Need》,并以英法翻译为示例(该Transformer也可以训练其他数据集,比如中英翻译或英德翻译)。你还会构建一个小型的仅解码器Transformer,并用欧内斯特·海明威的几部小说(包括《老人与海》)进行训练。训练后的模型可以生成具有海明威风格的文本。ChatGPT和GPT-4体积庞大且结构复杂,不适合我们从零构建和训练,但你将了解它们的前辈GPT-2,学习如何从零构建GPT-2。你还将从Hugging Face提取训练好的权重,加载到自己构建的GPT-2模型中,开始生成能以假乱真的自然文本。

从这个角度看,本书采取了比大多数书籍更为基础的路线。它不将生成式AI模型当作“黑盒”,而是让读者有机会深入“打开引擎盖”,详细研究这些模型的内部运作机制。目标是帮助你更深刻地理解生成模型,这有助于你构建更优秀、更负责任的生成式AI,原因主要有以下几点:

首先,深入理解生成模型的架构有助于读者更好地实际应用这些模型。例如,在第5章,你将学习如何在生成图像中选择特征,比如男性或女性特征、有无眼镜。通过从零构建条件生成对抗网络(Conditional GAN),你会明白图像的某些特征是由潜空间中随机噪声向量Z决定的。因此,你可以选择不同的Z值作为输入,生成带有期望特征(如男性或女性特征)的图像。没有对模型设计的理解,这种属性选择是很难做到的。

对于Transformer,了解架构(以及编码器和解码器的作用)可以让你创建并训练Transformer来生成你感兴趣的内容类型(比如简·奥斯汀风格的小说,或莫扎特风格的音乐)。这种理解也有助于你使用预训练的大型语言模型。例如,尽管从零训练有15亿参数的GPT-2很难,你可以在模型基础上增加额外层,对其进行微调,应用到文本分类、情感分析和问答等下游任务。

其次,深入理解生成式AI还能帮助读者对AI潜在风险进行客观、公正的评估。尽管生成式AI的强大能力已经在我们的日常生活和工作中带来了巨大益处,但它也可能造成严重危害。埃隆·马斯克甚至曾表示,“AI可能会出错,甚至毁灭人类”(参考Julia Mueller在The Hill的文章,2023年,“Musk:AI可能出错并毁灭人类”,mng.bz/Aaxz)。越来越多的学者和科技界人士担忧AI,特别是生成式AI带来的风险。许多技术领域的先驱也警告过生成式AI,尤其是大型语言模型,可能引发意想不到的后果(参考Stuart]() Russell,2023年,“如何阻止失控的AI”,mng.bz/ZVzP)。值得注意的是,ChatGPT发布仅五个月后,包括Steve]() Wozniak、Tristan Harris、Yoshua Bengio和Sam Altman在内的1100多位科技专家和企业家联合签署公开信,呼吁暂停训练任何比GPT-4更强大的AI系统,至少暂停六个月(参考Connie Loizos在TechCrunch的文章,“1100+知名签名者联合公开信呼吁‘所有AI实验室立即暂停至少6个月’”,mng.bz/RNEK)。深入理解生成模型的架构,有助于我们对AI的优势与潜在风险做出深入且客观的评估。

总结

生成式人工智能是一类能够生成多种形式新内容的技术,包括文本、图像、代码、音乐、音频和视频。

判别模型专注于对数据进行分类和标签分配,而生成模型则致力于创造新的数据实例。

PyTorch 以其动态计算图和支持GPU训练的能力,非常适合深度学习和生成模型的开发。

生成对抗网络(GAN)是一种生成建模方法,由两个神经网络组成:生成器和判别器。生成器的目标是创造逼真的数据样本,以最大化判别器将其识别为真实样本的概率;判别器的目标则是准确区分真假样本。

Transformer 是一种利用注意力机制捕捉序列中元素间长期依赖关系的深度神经网络。原始的Transformer包含编码器和解码器。例如,在英法翻译中,编码器将英文句子转换成抽象表示,再传递给解码器。解码器则基于编码器的输出和已生成的词语,逐词生成法语翻译。