最近,大语言模型军备战争占据了朋友圈的大部分篇幅,关于这些模型能做什么和有什么商业价值,已经有很多文章探讨。然而,作为一个在人工智能领域浸淫多年的小小研究员,我更关注的是这场军备竞赛背后的技术原理,以及这些模型是如何工程化并造福人类的。相比于看这些模型怎样赚钱和工程化以便为更多人带来好处,我更想探索的是这个现象背后的原因,以及在 AI 取代人类之前,我们这些研究员还能为实现 “被 AI 取代然后光荣退休” 做些什么。
三年前,当 GPT-3 在技术界掀起轩然大波时,我曾尝试以史书的方式剖析 GPT 背后的庞大家族。我按时间顺序梳理了 GPT 背后的技术脉络(图 1),并试图解释 GPT 的成功背后的技术原理。今年,GPT-3 的小儿子 ChatGPT 似乎更加聪明,能够用聊天的方式与人交流,这让更多人了解了自然语言处理领域的最新进展。在这个历史性的时刻,作为 AI 史官,我们或许应该花些时间回顾一下最近几年发生了什么。第一篇文章是以 GPT-3 作为起点,所以这个系列其实是对于后 GPT 时代的记录(后 GPT 书),而在探索 GPT 家族的变化时,我意识到大多数故事都与 Transformer 有关,因此这篇文章的名字就是 Transformer 世家。
图 1. GPT 旧族谱
前情回顾
在正式开始介绍 Transformer 世家前,我们先按照图 1 回顾一下过去发生了什么。从 Word Embedding [1,2] 开始,向量(一串数字)以一种奇特但有效的方式将文字的语义包含了进来,图 2 展示这种表征方式的说明:用数字表示的(国王 - 男人 + 女人 = 女王)。以这个为基础,这一支庞大的 NLP(自然语言处理)家族就创立了。
图 2. Word2Vec 图解 (King - Man + Woman = Queen)
在这之后,他的大儿子 ELMo [3] 发现了语境的重要性,比如以下两句话:
“哦!你买了我最爱的披萨,我爱死你了!”
“啊,我可真爱死你了!你把我最爱的披萨给蹭到地上了?”
“我爱死你了” 的意思显然不同。ELMo 顺利的通过 “给定一个模型一串词,然后让模型预测下一个词和上一个词(前后文语境)” 解决了这个问题。
与此同时,Word Embedding 的一个远房表亲发现了另一个问题 —— 人在理解一句话的时候,是会有重点的关注一部分词的,一个很明显的现象就是我们在读自己母语的时候很多错别字会被轻易地忽略掉,这是因为我们在理解这段话的时候注意力并不在这上面。因此,他提出了 Attention(注意力)机制 [4],但是此时的 Attention 机制很初期,并不能单独工作,因此只能依附在类似于 RNN,LSTM 这种序列模型上。图 3 展示了 attention 机制与 RNN 的结合过程,也说明了为什么 Attention 自身无法单独工作。这里简单说一下 NLP 模型的工作过程,首先我们有一句话,比如 “我爱你中国”,这就是五个字符,可以变成图 3 里的 x_1-x_5,然后每个字符会变成刚刚所说的 word embedding (一串数字),也就是图 3 里的 h_1-h_5,然后他们再最后变成输出,比如 “I love China”(翻译任务),也就是图 3 里的 x_1’-x_3’。图 3 里剩下没说的部分就是 attention 机制了,也就是图 3 里的 A,他相当于给每个 h 赋予了一个权重,这样我们就知道在转换当前这个词的时候,哪些字比较重要了。具体的细节可以参考我最开始写的那篇文章(从 word2vec 开始,说下 GPT 庞大的家族系谱 )。可以看出,这里的数字表征是整个任务的基础,这也是为什么 Attention 机制无法单独工作的原因。
图 3. 早期照片 - Attention 与 RNN 强强联合(source: Attention for RNN Seq2Seq Models (1.25x speed recommended) - YouTube)
此时,作为骄傲的皇族直系亲属,Transformer 不认可这种依附他人的工作方式,在论文 “Attention is all you need”(你只需要注意力机制就够了)[5] 中提出了自己独立的方式, 将 “注意力机制” 加了一个字变成了 “自注意力机制”,只用注意力机制就能生成那串数字。我们用中医开药来说明这个变化。最开始的 Attention 机制可以说是每种材料的剂量,但是最终去拿药的时候,药品是存在 RNN 或者 LSTM 这种采药者手里的,我们开出的药方当然也要基于药房(RNN、LSTM)里有什么药。Transformer 做的只是将采药权要了回来(加入了 value 矩阵),然后换了一种开药方的方式(加入 key 和 query 矩阵)。此时,Source 可以看作一个中药铺子的储物箱,储物箱里的药品由地址 Key(药品名)和值 Value(药品)组成,当前有个 Key=Query(药方)的查询,目的是取出储物箱里对应的 Value 值(药品),即 Attention 数值。通过 Query 和储物箱内元素 Key 的地址进行相似性比较来寻址,之所以说是软寻址,指的是我们不只从储物箱里面找出一中药物,而是可能从每个 Key 地址都会取出内容,取出内容的重要性(量的多少)根据 Query 和 Key 的相似性来决定,之后对 Value 进行加权求和,这样就可以取出最终的 Value 值(一副中药),也即 Attention 值。所以不少研究人员将 Attention 机制看作软寻址的一种特例,这也是非常有道理的 [6]。
从此之后,Transformer 正式开始带领家族走向繁荣。
Transformer 继位
其实从图 1 也可以看出,transformer 就是爷爷家族里子嗣最旺盛的一支了,也证实了当年”Attention is all you need” 这个题目狂的确实有理有据。虽然刚刚讲过他提出的自注意力机制是什么,前面那篇文章 (从 word2vec 开始,说下 GPT 庞大的家族系谱 ) 已经详细讲过 transformer 的演化过程了,这里还是快速给新来的同学回顾一下 transformer 这个架构到底是什么。
简单来说,我们可以将 Transformer 看作一个 “演员”,对这个 “演员” 来说,编码器就像是演员的记忆,负责将台词转化为一个中间表示(抽象成脑海里我们不知道是什么的东西,也就是演员的理解),而解码器则像是演员的表演,负责将脑海里的理解转化成荧幕上的展示。这里面最重要的自注意力机制则充当了演员的专注力,能够自动调整演员在不同位置的注意力,从而更好地理解所有台词,使其在不同的情境中表演得更加自然流畅。
更具体一点来说,我们可以将 Transformer 看作一个大型 “语言处理工厂”。在这个工厂中,每个工人(编码器)都负责处理输入序列中的一个位置(比如说一个字),对其进行加工和转换,然后将其传递给下一个工人(编码器)。每个工人都有一份详细的工作说明书(自注意力机制),其中详细描述了如何处理当前位置的输入以及如何与前面的位置建立关联。在这个工厂中,每个工人都可以同时处理自己的任务,因此整个工厂可以高效地处理大量的输入数据。
Transformer 一登场,直接因为其强大的实力和两个争气的儿子(BERT 和 GPT)毫无悬念的夺下皇位。BERT (Bidirectional Encoder Representations from Transformers) [1] 继承了 Transformer 的 Encoder 部分,赢得了前半程比赛,但是因为其限制性,在通用性上输给了 GPT。老实的 GPT (Generative Pre-trained Transformer)[7-10] 继承了 Decoder 部分,老老实实从头学起,学习人类的交流方式,最终在后半程实现了了反超。
当然,Transformer 的野心显然不止于此,”Attention is all you need”,指的并不只是 NLP 领域。在介绍 GPT 和 BERT 之间的恩怨情仇之前,先看看他们老当益壮的父亲都做了些什么吧。
新族谱 - 诸侯林立
“父亲,时代变了。我们家族会因为我的努力,走上真正的辉煌。”
——Transformer
在了解了 Transformer 的机制之后,我们可以来看看在 Transformer 的强力发展下,Transformer 世家现在发展到什么程度了(新族谱)。从前面的 “演员” 例子可以看出,Transformer 代表了一种符合人类逻辑的学习方式,因此它不仅可以处理文字,还可以处理图像。图 2 总结了 Transformer 世家强大的家族背景。除了让 GPT 和 BERT 在最开始的 NLP(自然语言处理)领域继续开疆裂土外,Transformer 还开始涉足计算机视觉领域。它的小儿子(谷歌提出的 ViT 等)也在这个领域发光发热。2021 年,Vision Transformer 迎来了大爆发,一大批基于 Vision Transformer 的工作席卷了计算机视觉任务。自然而然地,作为一个世家,Transformer 家族总会互通有无,连接文本和图像(AI 作画)的 CLIP 应运而生。2022 年底,Stable Diffusion 在 ChatGPT 之前风光无限。除此之外,CLIP 还为 Transformer 世家打开了多模态的新大门。除了文字和图像,文字是否也能做音乐,是否也能画图?多模态和多任务 Transformer 也应运而生。总之,每个领域都是一个诸侯,一个 NLP 领域白手起家的 Transformer,在努力发展后成了可以分封诸侯的 “周王”。
诸侯林立,当是盛世。
图 4. Transformer 世家日益繁盛的家族族谱
牛刀小试 - Vision Transformer [12]
在说 GPT 之前,还是要先说说 Transformer 做出的第一个大胆尝试 - 那就是让小儿子去掺和 CV 领域。先看看小儿子生平:
- 其父亲 Transformer 出生于 2017 年一篇叫做 Attention is All You Need 的论文中。
- 2019 年,Google 提出了一种 Vision Transformer(ViT)的架构,可以直接处理图像,而不需要使用卷积层(CNN)。论文题目一如既往的直白:“An image is worth 16x16 words”(一张图片就是 16*16 个词)。如图 5 所示,它的基本思想是把输入的图像分成一系列的小块,每个小块可以理解成过去处理文章时候的一个文字,然后把这些小块转换成向量,就像在普通的 Transformer 中处理文字一样。如果说在自然语言处理(NLP)领域,Transformer 的注意力机制试图捕捉文本中不同单词之间的关系,那么在计算机视觉(CV)领域,ViT 则试图捕捉图像中不同部分之间的关系。
图 5. ViT 如何处理图片(source: Are Transformers better than CNN’s at Image Recognition? | by Arjun Sarkar | Towards Data Science)
在那之后,各种基于 Transformer 的模型层出不穷,而且在相应的任务上都取得了超越 CNN 的成绩。那 Transformer 的优势是什么呢,我们先回到电影的例子上,看看 Transformer 和 CNN 的区别:
想象你是一位导演,要拍摄一部电影,你需要给演员安排好位置,把不同的元素放在合适的位置上,比如说,将演员放在适当的背景下,使用合适的光线,使整个画面看起来和谐美观。对于 CNN 来说,它像是一个专业的摄影师,会逐像素地拍摄每一帧画面,然后从中提取出一些边缘、纹理等低层次特征。然后,它将这些特征组合起来,形成更高层次的特征,例如人脸、动作等,最终得到一帧画面。随着电影的进行,CNN 会不断重复这个过程,直到完成整部电影的拍摄。
而对于 ViT 来说,它像是一个艺术指导,会把整个画面看作是一个整体,考虑到背景、光线、颜色等因素,为每个演员分配合适的位置和角度,创造出一个完美的画面。然后,ViT 会把这些信息汇总成一个向量,并使用多层感知器对它们进行处理,最终得到一帧画面。随着电影的进行,ViT 会不断重复这个过程,直到完成整部电影的创作。
回到图像处理任务上,假设我们有一张 224x224 像素的猫的图片,我们想要用一个神经网络对它进行分类。如果我们使用传统的卷积神经网络,它可能会采用多个卷积层和池化层来逐渐缩小图像的大小,最终得到一个较小的特征向量,然后通过全连接层进行分类。这种方法的问题是,在卷积和池化的过程中,我们会逐渐丢失图像中的信息,因为我们不能同时考虑所有像素点之间的关系。此外,由于卷积和池化层的顺序限制,我们无法进行全局的信息交互。相比之下,如果我们使用 Transformer 和 self-attention 机制来处理这个图像,我们可以直接将整个图像视为一个序列,并对它进行 self-attention 计算。这种方法不会丢失任何像素点之间的关系,并且可以进行全局的信息交互。
此外,由于 self-attention 计算是可并行化的,因此我们可以同时处理整个图像,大大加快了计算速度。举个例子,假设我们有一个句子:“I like to eat ice cream”, 其中包含 6 个单词。现在假设我们正在使用一个基于自注意力机制的模型来理解这个句子,Transformer 可以:
- 最小化每层的总计算复杂度:基于自注意力机制的模型中,我们只需要计算每个单词与所有其他单词之间的注意力权重,这样每一层的计算量只取决于输入长度而不是隐藏层的大小。在这个例子中,输入长度为 6 个单词,因此每一层的计算复杂度只取决于这 6 个单词的数量。
- 最大化可并行化的计算量:基于自注意力机制的模型可以同时计算每个单词与其他所有单词之间的注意力权重,因此计算可以高度并行化,从而加速模型的训练和推断。
然而,ViT 需要大规模数据集和高分辨率图像才能发挥其全部潜力 ,因此,虽然 Vision Transformers 在 CV 领域表现不凡,CNN 在计算机视觉领域的应用和研究仍然更为广泛,并且在目标检测和分割等任务中具有优势 。
但是没关系,你做的已经够好了,你父亲涉足 CV 的初衷也不是为了取代 CNN,他有更宏大的目标。
这个目标的基础,就是前面我说的 “此外”。
初露峥嵘 - CLIP [13]
前面我说过,Transformer 还有更宏大的目标,那就是 “大模型”,超级超级大的模型。除了我在前一篇文章里说的 transformer 可以更好地获得全局信息外,更小的计算复杂度和更好的并行度成为了支撑大模型的基础。
2021 年,除了 Vision Transformer 有了长足进展以外,GPT 那一支还在紧锣密鼓的筹备 GPT3.5,闲不下来的劳模 Transformer 又引领了一个新的高潮 —— 连结文本和图像。这个高潮也为 “大模型” 计划打响了除 NLP 领域外的第一枪。而此时,Transformer 在视觉任务上的缺点,在这里反而变成了优势。”ViT 需要大规模数据集和高分辨率图像才能发挥其全部潜力 “如果换个说法,就是 “ViT 可以处理大规模数据集和高分辨率图像”。
老规矩,先说 CLIP 是什么。
CLIP 的全称是 Contrastive Language-Image Pre-Training,很明显其基本思想就是传统 CV 领域里的对比学习 (Contrastive learning)。当我们学习新知识时,我们会阅读不同的书籍和文章,获取大量的信息。但是,我们并不是只记住了每个书籍或文章中的所有单词和句子。相反,我们会试图找到这些信息之间的相似性和区别。例如,我们可能会注意到在不同的书中,某个主题的描述方式和关键概念的表述方式可能会有所不同,但它们所描述的概念本质上是相同的。这种寻找相似性和区别的方式就是对比学习的基本思想之一。我们可以将每本书或文章看作不同的样本,而相同主题的书籍或文章可以被视为来自同一类别的不同实例。在对比学习中,我们会训练模型来学习如何区分这些不同类别的样本,以此来学习它们的相似性和区别。
接下来更学术一点,假设你想训练一个模型来识别汽车品牌。你可以有一组带标签的汽车图像,每个图像都有一个品牌标签,例如 “奔驰”、“宝马”、“奥迪” 等等。在传统的监督学习中,您可以将图像和品牌标签一起输入模型,并让模型学习如何预测正确的品牌标签。
但在对比学习中,你可以使用未标记的图像来训练模型。假设你有一组未标记的汽车图像,你可以将这些图像分为两组:正样本和负样本。正样本是同一品牌的不同角度的图像,而负样本是不同品牌的图像。接下来,就可以使用对比学习来训练模型,以便将同一品牌的正样本彼此靠近,而将不同品牌的负样本彼此远离。这样,模型可以学会从图像中提取品牌特定的特征,而不必明确地告诉它每个图像的品牌标签。
很明显,这是一个自监督学习模型,CLIP 也是一个类似的自监督学习模型,只不过它的目标是将语言和图像联系起来,从而使计算机能够理解文本和图像之间的关系。
想象你正在学习一组词汇表,其中每个单词都有其定义和相应的图像。对于每个单词和其对应的图像,你可以将它们视为一对(pair)。你的任务是找出这些单词和图像之间的相互关系,即哪些单词与哪些图像匹配,哪些不匹配。
如图 6 所示,对于对比学习算法而言,这些单词和图像对就是所谓的 “anchor”(锚定样本)和 “positive”(正样本)。“anchor” 指的是我们想要学习的对象,而 “positive” 则是与 “anchor” 匹配的样本。与之相对的是 “negative”(负样本),即与 “anchor” 不匹配的样本。
在对比学习中,我们将 “anchor” 和 “positive” 组成一对,并尝试将它们区分开来。同时,我们也会将 “anchor” 和 “negative” 组成一对,并尝试将它们区分开来。这个过程可以理解为是在寻找 “anchor” 和 “positive” 之间的相似性,以及在排除 “anchor” 和 “negative” 之间的相似性。
图 6. 对比学习(Contrastive Learning)图示 [14]。Anchor 就是原始图像,positives 一般是经过裁切、旋转后的原始图像,或是已知的相同类别的图像,negatives 可以被简单粗暴的定义为未知的图像(有可能是同一类别),或者是已知的不同类别的图像。
为了达到这个目标,CLIP 首先对大量的图像和文本进行预训练,然后使用预训练的模型进行下游任务,例如分类、检索和生成等。CLIP 模型采用了一种新的自监督学习方法,即同时处理文本和图像,通过训练来学习如何将它们联系起来。它在文本和图像之间共享注意力机制,并使用一组简单的可调参数来学习这个映射。它用的是基于 transformer 的文本编码器和基于 CNN 的图像编码器,然后计算图像和文本嵌入之间的相似度。CLIP 通过使用对比学习目标来学习关联图像和文本,该目标最大化数据中存在的图像 - 文本对之间的一致性,并最小化随机采样的图像 - 文本对之间的一致性。
图 7. CLIP 图示 [13]。相比图 6,可以简单理解成图 6 中的 positive 和 negative 都是文字了。
举个例子,如果我们想用 CLIP 来识别一张图片是否是 "红色的沙滩",我们可以输入这个文本描述和一张图片,CLIP 将生成一个向量对来表示它们的联系。如果这个向量对的距离很小,那么就说明这张图片可能是 "红色的沙滩",反之则不是。通过这种方法,CLIP 可以实现图像分类和图像搜索等任务。
回到全称,CLIP 的最后一个词是 pretraining,所以其本质还是预训练模型,但是它可以用于涉及匹配图像和文本的各种下游任务,例如图像分类、零样本学习和图像描述生成等。例如,CLIP 可用于将图像分类为自然语言标签给出的类别,例如 “狗的照片” 或 “风景画”。CLIP 还可用于通过使用以 CLIP 提取的图像特征为条件的语言模型来为图像生成说明文字。此外,CLIP 可用于通过使用以 CLIP 提取的文本特征为条件的生成模型从文本生成图像。
DALL-E & Stable Diffusion
在 CLIP 的帮助下,一个新的诸侯崛起了 - 他叫 AIGC(AI generated content)。其实 ChatGPT 本质上也是 AIGC 的一种,但是在这个小节,我们主要说的是 AI 作画。先来看看 AI 作画这个小家族的发展史:
- 2021.01,OpenAI 发布 DALL-E [15](AI 作画软件),它改进了 GPT-3 从而让 GPT-3 生成图像,而不是文本 (Image Transformer Network)
- 几乎同时(2021.01),OpenAI 发布 CLIP [13]
- 2021.05,Google Brain 和 DeepMind 发布 Stable diffusion [17],并持续迭代新版本。它采用 frozen CLIP 文本编码器来根据文本提示调整模型。Stable diffusion 将图像生成过程分解为运行时的 “扩散”(diffusion)过程。从仅有的噪声开始,它逐渐修正图像,直到没有任何噪声,让其更接近提供的文本描述。
- 2022.04,DALL-E-2 [16] 发布。它可以根据自然语言的描述创建逼真的图像和艺术品。DALL-E-2 采用由先验和解码器组成的两部分模型。先验是一个 GPT-3 模型,根据文本提示生成 CLIP 图像嵌入。解码器是一个扩散模型,根据 CLIP 嵌入生成图像。DALL-E-2 还可以进行 outpainting, inpainting,以及对现有图像的变化。
这个家族的脉络可见一斑,大哥 CLIP 连结了图像和文本,其双胞胎兄弟 DALL-E 顺势提出了文本到图像的任务。为了改进这个任务,一个远房表亲 Stable diffusion 改进了生成图像的算法,最后 DALL-E-2 取长补短,结合了 GPT-3,CLIP 以及 stable diffusion 的优势,完成了自己的 AI 作画系统。
对于最开始的 DALL-E, 假设你是一位画家,而 DALL-E 就是你的工具箱。在这个比喻中,工具箱中有两个主要的工具:一个是画笔,另一个是调色板。
画笔是 DALL-E 的解码器,它可以将给定的文字描述转换为一张图像。调色板则是 DALL-E 的编码器,它可以将任意的文字描述转化为一个特征向量。
当你得到一句文字描述时,你会首先用调色板来生成一个特征向量。然后你就可以拿起画笔,并使用特征向量来生成一张与描述相符的图像。当你需要细节时,你会使用更精细的画笔,反之则会使用更粗糙的画笔。
与画家不同的是,DALL-E 使用的是神经网络,而不是画笔和调色板。这个神经网络使用了一种名为 Image Transformer Network 的结构。在生成图像时,DALL-E 使用先前提到的 GPT-3 模型生成与文本描述相对应的 CLIP 图像嵌入。然后,DALL-E 使用束搜索算法生成一系列可能的图像,这些图像与输入的文本描述相匹配,并将它们送入一个解码器来生成最终的图像。这种嵌入向量是通过使用称为对比学习的技术来训练的,该技术可以将相似的图像和文本嵌入到相邻的空间中,以便更容易地将它们组合起来。注意,这里 DALLE 并没有直接包含 CLIP,但是它使用了 CLIP 的文本和图像嵌入来训练变换器和 VAE。
至于在生成图像过程中使用的束搜索算法,实际上是一种贪心搜索算法,它可以在有限的候选集合中找到最优的序列。束搜索的基本思想是,每次扩展当前序列时,只保留概率最高的 k 个候选(k 称为束宽度),并舍弃其他低概率的候选。这样可以减少搜索空间,提高效率和准确度。DALLE 中使用束搜索生成图像的具体步骤如下:
- 将输入的文本描述编码为一个向量,并作为变换器模型的初始输入。
- 从一个特殊的开始符号开始,逐像素地生成图像序列。每次生成一个像素时,都用变换器模型预测下一个像素的概率分布,并从中选择概率最高的 k 个候选像素,作为当前序列的延伸。
- 对每个延伸后的序列,计算其累积概率,并保留概率最高的 k 个序列,舍弃其他序列。
- 重复步骤 2 和 3,直到生成一个特殊的结束符号或达到最大长度限制。
- 返回概率最高的序列作为最终生成的图像。
同样一幅画,stable diffusion 是怎么画的呢?当我们想要画一幅艺术作品时,通常需要一个良好的构图和一些具体的元素来构建。Stable diffusion 就是这样一种生成图像的方法,它将图像生成的过程分成了两个部分:扩散过程和重构过程。扩散过程可以想象成是将一堆零散的画笔、颜料和画板混合在一起,慢慢地在画板上创造出越来越多的元素。这个过程中,我们并不知道最终画面会是什么样子,也无法确定每个元素最终的位置。但是,我们可以逐渐添加和调整这些元素,直到整幅画完成。然后,输入的文本描述就像是我们对于要画的作品的大致描述,通过束搜索算法来在文本描述和生成的图像之间进行精细的匹配。这个过程就像是我们在不断地修改和调整元素,让它们更好地匹配我们想要的画面。最终,生成的图像将与文本描述紧密匹配,呈现出我们想象中的艺术作品。
如图 8 所示,这里的扩散模型是一种生成模型,它通过逐渐向数据添加噪声,然后逆向恢复原始数据的过程来学习数据的分布。stable diffusion 使用了一个预训练的变分自编码器(VAE)来将图像编码成低维潜在向量,并使用一个基于变换器的扩散模型来从潜在向量生成图像。stable diffusion 还使用了一个冻结的 CLIP 文本编码器来将文本提示转换成图像嵌入,从而对扩散模型进行条件化。
图 8. Stable Diffusion 过程。首先是上面的箭头,一张图片被不断加入噪声,最后变成纯噪声图,然后走下面的箭头,逐渐消除噪声,然后重建最开始的图片。(图源:From DALL・E to Stable Diffusion: how do text-to-image generation models work? | Tryolabs)
值得注意的是,Stable Diffusion 中的扩散过程是一种随机的过程,因此每次生成的图像都会有所不同,即使是相同的文本描述。这种随机性使得生成的图像更加多样化,同时也增加了算法的不确定性。为了让生成的图像更加稳定,Stable Diffusion 使用了一些技巧,如在扩散过程中加入逐步增加的噪声,以及使用多次重构过程来进一步提高图像质量。
Stable Diffusion 在 DALL-E 的基础上有了很大的进步:
- 分辨率:stable diffusion 可以生成高达 1024×1024 像素的图像,而 DALL-E 目前只能生成 256×256 像素的图像。
- 速度:stable diffusion 需要进行多次迭代才能生成图像,因此速度较慢。DALL-E 则可以一次性生成图像,因此速度较快。
- 灵活性:stable diffusion 可以对现有的图像进行扩画、修补和变化,而 DALL-E 只能从文本提示生成图像。
- 真实性:stable diffusion 可以生成更真实和细致的图像,尤其是在复杂和抽象的描述下。DALL-E 则可能生成一些不符合物理规律或常识的图像。
这也是为什么 DALL-E-2 也将扩散模型加入到其模型中去了。
潜伏的强者 - GPT3.5 [18]
& Instruct GPT [19]
在其他诸侯把改革开展的如火如荼的时候,GPT 这一支也一直在默默努力着。开头说过,GPT-3 刚发布的时候已经有很强的能力了,但是使用方式不那么 “非技术人员友好”,所以掀起的浪花都是在技术界,这些本就不算很热烈的浪花,又因为它不低的收费而日益消散。
Transformer 十分不满意,GPT 想了想,那就改革!
第一个响应改革号召,迈出第一步的是 GPT 3.5:
“我比较笨,想不出什么好办法改革,那就先把基础打牢吧。”
于是,GPT3.5 基于 GPT-3 ,使用了一种叫做 Text+Code 的训练数据,即在文本数据的基础上,增加了一些编程代码的数据。简单来说,就是用了更大的数据集。这样可以使模型更好地理解和生成代码,提高模型的多样性和创造性。Text+Code 是一种基于文本和代码的训练数据,它是由 OpenAI 从网上收集并整理的。它包括两部分:文本和代码。文本是一些用自然语言描述的内容,如文章、评论、对话等。代码是一些用编程语言编写的内容,如 Python、Java、HTML 等。
Text+Code 训练数据可以使模型更好地理解和生成代码,提高模型的多样性和创造性。例如,在编程任务中,模型可以根据文本描述生成相应的代码,并且代码具有较高的正确性和可读性。在内容生成任务中,模型可以根据代码描述生成相应的文本,并且文本具有较高的一致性和有趣性。Text+Code 训练数据也可以使模型更好地处理多语言,多模态,多领域的数据和任务。例如,在语言翻译任务中,模型可以根据不同语言之间的对应关系,进行准确和流畅的翻译。在图像生成任务中,模型可以根据文本或代码描述,生成相应的图像,并且图像具有较高的清晰度和逼真度。
第二个响应号召的是 Instruct GPT,他发现了新的问题:
“要想跟人类打成一片,我们就需要更有效的听取他们的意见。”
于是,出现了大名鼎鼎的新晋外援,也就是 RLHF 训练策略。RLHF 是一种基于强化学习的训练策略,它的全称是 Reinforcement Learning from Human Feedback。它的核心思想是在训练过程中,给模型提供一些指令,并根据模型的输出给予奖励或惩罚。这样可以使模型更好地遵循指令,提高模型的可控性和可信度。其实 GPT-3.5 也有人类反馈(Human Feedback),那加入了强化学习(Reinforcement learning)之后,发生了什么改变呢?
- GPT3.5 的人类反馈是直接用于微调模型的参数,而 Instruct GPT 的 RLHF 是用于训练一个奖励模型,然后用这个奖励模型来指导模型的行为。
- GPT3.5 的人类反馈是基于单个输出的评价,而 Instruct GPT 的 RLHF 是基于多个输出之间的比较。
- GPT3.5 的人类反馈只进行了一次,而 Instruct GPT 的 RLHF 可以进行多次迭代,不断收集新的比较数据,训练新的奖励模型,优化新的策略。
也就是说,更少的人力投入,但是给模型带来了更大的收益。
图 9. RLHF 过程(图源:GPT-4 (openai.com))
如图 9 所示,RLHF 训练策略分为两个阶段:预训练和微调。在预训练阶段,模型使用和 GPT-3 相同的数据集进行无监督学习,学习语言的基本知识和规律。在微调阶段,模型使用一些人工标注的数据进行强化学习,学习如何根据指令生成合适的输出。
人工标注的数据包括两部分:指令和反馈。指令是一些用自然语言描述的任务,如 “写一首关于春天的诗” 或 “给我一个关于狗的笑话”。反馈是一些用数字表示的评分,如 “1” 表示很差,“5” 表示很好。反馈是由人类标注者根据模型的输出给出的,反映了模型输出的质量和合理性。
在微调阶段,模型使用一个叫做 Actor-Critic 的算法进行强化学习。Actor-Critic 算法包括两个部分:Actor 和 Critic。Actor 是一个生成器,它根据指令生成输出。Critic 是一个评估器,它根据反馈评估输出的奖励值。Actor 和 Critic 之间相互协作和竞争,不断地更新自己的参数,以提高奖励值。
RLHF 训练策略可以使模型更好地遵循指令,提高模型的可控性和可信度。例如,在写作任务中,模型可以根据指令生成不同风格和主题的文本,并且文本具有较高的连贯性和逻辑性。在对话任务中,模型可以根据指令生成不同情感和语气的回复,并且回复具有较高的相关性和礼貌性。
终于,经过前辈们的改革积累,GPT 家族里更加灵活的小儿子 ChatGPT 觉得是时候了,顺势基于 Instruct GPT 推出了更贴合人类交流方式的对话模式,直接在人类社会掀起巨大的浪花(几亿用户),而且它又是免费的,GPT 家族经过几年的蛰伏,终于一鸣惊人,成为 Transformer 世家最受宠的皇子,直接在继位之争上一举夺魁,成为太子。
与此同时,对于 ChatGPT 来说,太子还不是全部,ChatGPT 继承了 Transformer 巨大的野心:
“现在的局面太乱了,强大的王朝不需要这么多诸侯,是时候统一他们了。“
统一诸侯 – 大模型时代
GPT-4:” 这个时代,是大模型的时代,我说的。”(bushi)
现在的 ChatGPT 已经是基于 GPT-4 的大门面了。GPT-4 因为惧怕于其竞争对手的快速反应,其实大部分技术细节都是封闭的。但是从其功能上,已经看出 GPT 家族统一各诸侯的野心了,除了文字对话以外,GPT-4 也加入了 AI 作图功能。GPT 家族从过去几年的蛰伏经验里悟出了一个道理,大模型即正义,并想将这个道理推广到各个领域。
如果深究这个道理背后的底气,那可能就是大模型训练的方式吧。GPT-3 是目前最大的语言模型之一,它拥有 1750 亿个参数,比其前身 GPT-2 多了 100 倍,比之前最大的同类 NLP 模型要多 10 倍,也可以算是大预言模型的先驱者了。
所以,我们先来看看 GPT-3 的模型架构和训练方法是如何实现这样的规模和性能的:
- 分布式训练:GPT-3 使用了分布式训练的方法,即将模型和数据分散在多个计算节点上,并通过通信协议进行协调和同步。这样可以利用多个节点的计算资源和内存空间,加速模型训练的过程,并支持更大规模的模型和数据。
- GPT-3 使用了约 2000 个 GPU 节点来进行分布式训练,每个节点有 多块 GPU,每块 GPU 有 相同 的显存。
- GPT-3 使用了两种分布式训练的方法:数据并行和模型并行。
- 数据并行是指将数据分成多个子集,每个节点处理一个子集,并在每个节点上更新模型的参数,然后在所有节点间同步参数。
- 模型并行是指将模型分成多个部分,每个节点处理一个部分,并在每个节点上计算部分的输出和梯度,然后在所有节点间传递输出和梯度。
- GPT-3 使用了一种混合的数据并行和模型并行的方法,即在每个节点内部使用数据并行,在不同节点之间使用模型并行。这样可以充分利用 GPU 的计算能力和通信带宽,同时减少通信开销和内存占用。
- 激活函数检查点:GPT-3 使用了一种叫做激活函数检查点的技术,即在模型的前向传播过程中,只保存部分层的激活函数的值,而不是所有层的值。这样可以节省显存空间,因为激活函数的值占用了大部分的显存。在模型的反向传播过程中,如果需要用到某些层的激活函数的值,就重新计算它们,而不是从显存中读取。这样可以牺牲一些计算时间来换取更多的显存空间,从而支持更大规模的模型和批量大小。
- 稀疏注意力机制:GPT-3 使用了一种叫做稀疏注意力机制的技术,即在计算自注意力时,只考虑部分输入序列中的词,而不是所有词。这样可以减少计算量和内存占用,因为自注意力的复杂度和输入序列的长度成平方关系。GPT-3 使用了一种基于局部窗口和全局块的稀疏注意力机制,即将输入序列划分为多个块,并且每个块只与相邻的几个块进行注意力计算,同时每个块还与一些随机选择的全局块进行注意力计算。这样可以保证模型既能捕捉局部信息,又能捕捉全局信息,同时也能降低计算复杂度和内存占用。
看到这里,ChatGPT 眉头微皱,似乎有些不满意 GPT-3 的方案:“这还不够。”
"大模型确实是当下的趋势,但是不应该只是为了竞争而盲目追求规模。在训练大模型之前,我们需要考虑更多的细节和技术挑战,才能确保其能够稳定、高效地运行,并产生有用的结果。"
“首先,选择合适的训练超参数和模型初始化非常关键。学习率、批量大小、迭代次数等超参数的选择对模型的收敛速度、稳定性和性能影响重大。而模型初始化则决定了训练开始前的权重值,会影响到最终结果的质量。这些参数需要根据经验实验或理论分析进行仔细调整,以确保模型的最佳表现。”
“其次,为了获得高吞吐量并避免瓶颈,我们需要优化训练过程中的各个环节,比如硬件配置、网络带宽、数据加载速度和模型架构等。优化这些环节可以显著提高模型的处理速度和效率。例如,使用更快的存储设备或数据格式可以减少数据加载时间;使用更大的批量大小或梯度累积可以减少通信开销;使用更简单或更稀疏的模型可以减少计算时间等等。”
“最后,训练大模型时可能会遇到各种不稳定和失败的情况,例如数值错误、过拟合、硬件故障、数据质量问题等等。为了避免或恢复这些问题,我们需要密切监控模型的行为和性能,并使用调试工具和技术来识别和修复任何错误或缺陷。此外,我们还可以使用各种安全措施和防护机制,如裁剪、正则化、丢弃、噪声注入、数据过滤、数据增强等等,以提高模型的鲁棒性和可靠性。”
“在这个时代,大模型的确是重要的,但是仅仅是追求规模并不能让模型产生有用的结果。只有经过深思熟虑的训练和优化,才能让大模型真正发挥其潜力,为人类带来更多的价值。”
太子说得对。
没落的强诸侯 - BERT
最后,瘦死的骆驼比马大,虽然 BERT 最近被 GPT 压过风头,但毕竟是曾经的强诸侯,在 GPT 势不可挡的发展下,BERT 依然保留了自己的一份封地。当谈及自然语言处理模型的时候,BERT(Bidirectional Encoder Representations from Transformers)一度是非常受欢迎的模型,因为它在很多任务上都表现得非常出色。当它第一次发布时,它几乎是无人能敌的,甚至比 GPT 更为成功。这是因为 BERT 的设计与 GPT 有着不同的目标和优势。
BERT 的目标是将上下文建模的能力推到一个全新的高度,以便更好地支持下游任务,例如文本分类和问答。它通过训练一个双向 Transformer 编码器来实现这个目标。这个编码器能够同时考虑输入序列的左侧和右侧,从而获得更好的上下文表示,因此 BERT 能够对上下文更好地进行建模,提高了模型在下游任务中的表现。
但是,随着时间的推移,GPT 系列模型的出现使得 GPT-3 在多项任务上超越了 BERT。一个可能的原因是 GPT 系列的模型在设计上更加专注于生成性任务,比如文本生成和对话系统,而 BERT 则更注重分类和问答任务。此外,GPT 系列模型使用了更大的参数和更多的数据进行训练,这也使得它们能够在更广泛的任务上取得更好的表现。
当然,BERT 仍然是一个非常有用的模型,特别是对于一些需要对文本进行分类或回答问题的任务。而 GPT 系列的模型则更适合用于生成性任务,例如文本生成和对话系统。总体来说,这两个模型都有它们独特的优势和局限性,我们需要根据具体任务的需求来选择适合的模型。
夺嫡之争 - 来势汹汹的 Segment Anything Model (SAM) [20]
前面说过,在大哥 GPT 默默努力的时候,劳模 Transformer 在 CV 领域(ViT)和多模态领域 (CLIP) 都掀起了不小的浪花,但是最终都成为了经验宝宝,被老父亲 Transformer 教给了受宠的太子 GPT,最终成就了 GPT-4 的所谓大一统。
骨子里流淌着 Transformer 血液的 ViT 和 CLIP 当然很不开心:“王侯将相宁有种乎?大哥不是学我们吗,我们也可以学他。”
“但是,他在 NLP 领域太强大了,我们要找个新的战场。”
于是,SAM 横空出世。在官网,他们自己是这么描述的:
Segment Anything Model (SAM): a new AI model from Meta AI that can "cut out" any object, in any image, with a single click
简单来说,我们可以将 SAM 看作一个高效的 “图像剪辑大师”,它能够通过各种输入提示来精确地识别和分割图像中的各种对象。例如,当我们在图像中用鼠标点击一个点时,SAM 会像一个经验丰富的画家一样,自动剪切出该点所在的对象;当我们输入 “猫” 这个词时,SAM 就会像一个聪明的侦探一样,自动找出并剪切出图像中所有的猫;当我们给 SAM 一个目标检测框时,SAM 就会像一个熟练的手术医生一样,准确地剪切出框内的对象。SAM 的零样本泛化能力使其成为一个真正的 “通用剪辑大师”。这意味着无论是常见的对象,如汽车、树木和建筑,还是罕见的对象,如恐龙、外星人和魔法棒,SAM 都可以毫不费力地识别和剪切。这种强大的能力源于其先进的模型设计和庞大的数据集。我从原论文里选了四张很复杂的场景实例(图 10),说明了 SAM 到底可以做什么。
图 10. SAM 的效果实例。图片里每个颜色的东西你都可以剪辑提取出来,相当于一个高效的 PS 大师(图像剪辑大师)。
简单来说,以前别人跟我们眉飞色舞地提需求的时候,我们总要无奈地问一句,先等一下,你们能提供什么样的数据?现在不需要了,至少在 CV 领域,已经更贴近非技术人群对 AI 的理解了。
为了实现上面说的强大能力,我们来看看 ViT 和 CLIP 是如何大声密谋的:
ViT: “我虽然之前主要是做图像分类任务,但我的架构同样适用于图像分割。因为我是利用 Transformer 架构将图像分解成一系列块然后对其进行并行处理的,如果集成我的优势,SAM 就可以继承我并行处理和全局注意力的优势,从而实现高效的图像分割。”
CLIP:“好呀,那我就带着我联合训练的方法入股,基于这个思想,SAM 也可以处理不同类型的输入提示(问题提示和视觉提示)。”
于是,SAM 的模型架构成型了 (图 11),ViT 用来做 image encoder(图像编码器),而 CLIP 来编码 prompt(提示)的信息。想法是好的,具体该怎么做呢 —— 当然是学习大哥啦!
“我们想要利用预训练的语言模型来做图像分割任务,就像用文字提示(prompt)来让语言模型生成或预测文字一样。有了 CLIP,我们的提示就可以很丰富了,可以是一些 point (点)、box(框)、mask,还有 Text (文本),它们告诉语言模型要在图像中分割出什么。我们的目标就是,给定任何提示,都能得到一个有效的分割 mask (分割结果)。有效的 mask 意味着,即使提示有歧义(比如说衬衫还是人),输出也应该是其中一个对象的合理 mask。这就像大哥 GPT(语言模型)对一个有歧义的提示也能给出一个连贯的回应一样。我们选择这个任务,因为它可以让我们用一种自然的方式来预训练语言模型,并且通过提示来实现零样本迁移到不同的分割任务上。”
图 11. SAM 模型架构
至于结果,前面提到的其强大能力已经证实了这个想法的可行性。但是,不得不提的是,虽然 SAM 确实不再需要重新训练模型,但是像 chatGPT 刚推出时一样,他还是有一些限制的。在论文的 Limitation 部分,作者页明确指出了 SAM 的一些局限性和不足,比如在细节、连通性、边界等方面的缺陷,以及在交互式分割、实时性、文本提示、语义和全景分割等任务上的挑战,同时也承认了一些领域专用工具的优势。
举个例子,我在 demo 里做了两个简单的测试:一个是医疗图像领域的病灶检测,因为病灶太小了,很难检测到;第二个是人像切割,切出来的人像乍看不错,但是发丝还是不是很自然,仔细看还是能看出来切割痕迹。
当然,这毕竟是一个很好的开始,这小哥俩创业未半,还在努力,要啥自行车?所以,这场夺嫡的结果如何,还是让我们拭目以待吧!
总结
Transformer 世家的庞大家族显然不是这一篇文章可以说明的,当谈到基于 Transformer 的成果时,我们可以看到这个领域的持续创新:Vision Transformer(ViT)展示了 Transformer 在计算机视觉领域的成功应用,它可以直接处理图像像素数据,不需要手工特征工程。DALL-E 和 CLIP 则将 Transformer 应用于图像生成和图像分类任务,展示了它在视觉语义理解中的优越表现。Stable Diffusion 则提出了一种稳定的扩散过程,可以对概率分布进行建模,这可以应用于图像分割、生成等任务。这些成果共同揭示出 Transformer 模型的广泛应用前景,让我们不得不承认,未来某一天,可能真的”Attention is all you need”。
总之,我们可以从这些成果中看到人工智能领域持续创新的活力。无论是 GPT 还是 BERT,还是 Vision Transformer、DALL-E、CLIP、Stable diffusion 等,这些成果都代表着人工智能领域的最新进展。
而大考(ChatGPT)当前,现在的情景大概是这样的:
学霸们这学期好好上课,翻开书本就能回想起当时那节课老师说这个知识点时的音容笑貌,甚至开始规划下学期的学习计划。
伪学霸们天天到课,占据前排,打开课本却是一脸懵逼,开始跟学渣们一起 “一天一本书,一周一学期”,唯一的区别就是课本不是全新的,对课本内容还有一点点记忆,不算是在完全的学习新知识。
至于真正的学渣们……
“知识来,知识来,知识从四面发八方来”
其实我倒觉得,不管是伪学霸还是学渣,都应该在期末考面前保持冷静,看看这学期讲了什么,找学霸们借一下笔记,甚至可以选择缓考。对学霸们来说,快是水到渠成的。对伪学霸和学渣们来说,快是有害的。
在人工智能领域的竞争中,持续创新是至关重要的。因此,作为研究员,我们应该密切关注这个领域的最新发展,并且保持谦虚和开放的心态,以促进人工智能领域的不断进步。