当前位置:AIGC资讯 > AIGC > 正文

一文了解AIGC与ChatGPT

关注微信公众号掌握更多技术动态

---------------------------------------------------------------

一、AIGC简介

1.AIGC基础

(1)AIGC是什么

AIGC是人工智能图形计算的缩写,是一种基于图形处理器(GPU)的计算技术,可以加速各种计算任务,包括机器学习、深度学习、计算机视觉等。

AIGC是一种基于GPU的计算技术,它利用GPU的并行计算能力来加速各种计算任务。GPU是一种专门设计用于图形处理的处理器,它可以同时处理大量的数据,因此被广泛应用于游戏、视频处理等领域。而AIGC则是将GPU的并行计算能力应用于人工智能领域,可以加速各种计算任务,包括机器学习、深度学习、计算机视觉等。

AIGC的优势在于它可以大幅提高计算速度,使得原本需要数小时甚至数天才能完成的计算任务,现在只需要几分钟或几秒钟就能完成。这对于研究人员和开发者来说是非常有价值的,因为它可以大幅提高他们的工作效率,同时也可以让他们更快地得到结果。

AI生成内容(AIGC,人工智能生成内容)是一种新型的内容创作方式,它继承了专业生产内容(PGC,Professional-generated Content)和用户生成内容(UGC,User-generated Content)的优点,并充分发挥技术优势,打造了全新的数字内容生成与交互形态。随着科技的不断发展,AI写作、AI配乐、AI视频生成、AI语音合成以及最近非常热门的AI绘画等技术在创作领域引起了广泛讨论。

(2)AGI

是Artificial General Intelligence的缩写,中文应该是“通用人工智能”,是指一种能够像人类一样思考、学习和执行多种任务的人工智能系统。

(3)模型分类

2.基础概念

(1)in-context learning上下文学习(从类比中学习)

①什么是in-context learning

In-context learning的核心在于从任务相关的类比样本中学习,ICL要求若干示例以特定形式进行演示,然后将当前输入x跟上述示例通过prompt拼接到一起作为语言模型的输入。本质上,它利用训练有素的语言模型根据演示的示例来估计候选答案的可能性。简单理解,就是通过若干个完整的示例,让语言模型更好地理解当前的任务,从而做出更加准确的预测。

②In-context learning能做什么?

在许多NLP基准测试中,in-context learning与使用更多标记数据训练的模型相比具有相当的性能,并且在LAMBADA(常识句子完成)和 TriviaQA(问答)上是最出色的。更令人兴奋的是,in-context learning使人们能够在短短几个小时内启动一系列应用程序,包括根据自然语言描述编写代码、帮助设计应用程序模型以及概括电子表格功能等。

In-context learning允许用户为新用例快速构建模型,而无需为每个任务微调和存储新参数。它通常只需要很少的训练示例就可以使模型正常工作,而且即使对于非专家来说,也可以通过直观的自然语言来进行交互。

(2)什么是预训练模型

给出一段文本,OpenAI 就能返回给你一个 Embedding 向量,这是因为它的背后是 GPT-3 这个超大规模的预训练模型(Pre-trained Model)。事实上,GPT 的英文全称翻译过来就是“生成式预训练 Transformer(Generative Pre-trained Transformer)”。

谓预训练模型,就是虽然我们没有看过你想要解决的问题,比如这里我们在情感分析里看到的用户评论和评分。但是,我可以拿很多我能找到的文本,比如网页文章、维基百科里的文章,各种书籍的电子版等等,作为理解文本内容的一个学习资料。

我们不需要对这些数据进行人工标注,只根据这些文本前后的内容,来习得文本之间内在的关联。比如,网上的资料里,会有很多“小猫很可爱”、“小狗很可爱”这样的文本。小猫和小狗后面都会跟着“很可爱”,那么我们就会知道小猫和小狗应该是相似的词,都是宠物。同时,一般我们对于它们的情感也是正面的。这些隐含的内在信息,在我们做情感分析的时候,就带来了少量用户评论和评分数据里缺少的“常识”,这些“常识”也有助于我们更好地预测。

比如,文本里有“白日依山尽”,那么模型就知道后面应该跟“黄河入海流”。文本前面是“今天天气真”,后面跟着的大概率是“不错”,小概率是“糟糕”。这些文本关系,最后以一堆参数的形式体现出来。对于你输入的文本,它可以根据这些参数计算出一个向量,然后根据这个向量,来推算这个文本后面的内容。用来训练的语料文本越丰富,模型中可以放的参数越多,那模型能够学到的关系也就越多。类似的情况在文本里出现得越多,那么将来模型猜得也就越准。

预训练模型在自然语言处理领域并不是 OpenAI 的专利。早在 2013 年,就有一篇叫做 Word2Vec 的经典论文谈到过。它能够通过预训练,根据同一个句子里一个单词前后出现的单词,来得到每个单词的向量。而在 2018 年,Google 关于 BERT 的论文发表之后,整个业界也都会使用 BERT 这样的预训练模型,把一段文本变成向量用来解决自己的自然语言处理任务。在 GPT-3 论文发表之前,大家普遍的结论是,BERT 作为预训练的模型效果也是优于 GPT 的。

3.模型基础概念

(1)Prompts

设计提示本质上是您“编程”模型的方式,通常是通过提供一些说明或一些示例。这不同于为单一任务设计的大多数其他 NLP 服务,例如情感分类或命名实体识别。相反,完成和聊天完成端点可用于几乎任何任务,包括内容或代码生成、摘要、扩展、对话、创意写作、风格转换等。

(2)Tokens

我们的模型通过将文本分解为标记来理解和处理文本。标记可以是单词或只是字符块。例如,单词“hamburger”被分解为标记“ham”、“bur”和“ger”,而像“pear”这样的短而常见的单词是一个标记。许多标记以空格开头,例如“hello”和“bye”。

在给定的 API 请求中处理的令牌数量取决于输入和输出的长度。根据粗略的经验法则,对于英文文本,1 个标记大约为 4 个字符或 0.75 个单词。要记住的一个限制是,您的文本提示和生成的完成组合不能超过模型的最大上下文长度(对于大多数模型,这是 2048 个标记,或大约 1500 个单词)。查看我们的分词器工具,了解有关文本如何转换为分词的更多信息。

语言模型以称为标记的块形式读取文本。在英语中,token 可以短到一个字符,也可以长到一个单词(例如 a 或 apple),在某些语言中,token 甚至可以短于一个字符,甚至长于一个单词。

例如,字符串“ChatGPT 很棒!”被编码为六个标记:["Chat", "G", "PT", "is", "great", "!"]。

API 调用中的令牌总数会影响:

您为每个令牌支付的 API 调用费用是多少

您的 API 调用需要多长时间,因为写入更多令牌需要更多时间

您的 API 调用是否有效,因为令牌总数必须低于模型的最大限制(gpt-3.5-turbo-0301 为 4096 个令牌)

输入和输出令牌都计入这些数量。例如,如果您的 API 调用在消息输入中使用了 10 个令牌,而您在消息输出中收到了 20 个令牌,则您需要支付 30 个令牌的费用。

要查看 API 调用使用了多少令牌,请检查 API 响应中的使用字段(例如,response['usage']['total_tokens'])。gpt-3.5-turbo 和 gpt-4 等聊天模型使用令牌的方式与其他模型相同,但由于它们基于消息的格式,因此更难计算对话将使用多少令牌。

(3)Models

API 由一组具有不同功能和价位的模型提供支持。GPT-4 是我们最新、最强大的模型。GPT-3.5-Turbo 是为 ChatGPT 提供支持的模型,并针对对话格式进行了优化。

(4)参数量

"10b"、"13b"、"70b"等术语通常指的是大型神经网络模型的参数数量。其中的 "b" 代表 "billion",也就是十亿。表示模型中的参数量,每个参数用来存储模型的权重和偏差等信息。例如:

"10b" 意味着模型有大约 100 亿个参数。

"13b" 意味着模型有大约 130 亿个参数。

"70b" 意味着模型有大约 700 亿个参数。

(5)模型参数精度

模型参数的精度通常指的是参数的数据类型,它决定了模型在内存中存储和计算参数时所使用的位数。以下是一些常见的模型参数精度及其含义,以及它们在内存中所占用的字节数:

单精度浮点数 (32位) - float32:

含义:单精度浮点数用于表示实数,具有较高的精度,适用于大多数深度学习应用。

字节数:4字节(32位)

半精度浮点数 (16位) - float16:

含义:半精度浮点数用于表示实数,但相对于单精度浮点数,它的位数较少,因此精度稍低。然而,它可以在某些情况下显著减少内存占用并加速计算。

字节数:2字节(16位)

双精度浮点数 (64位) - float64:

含义:双精度浮点数提供更高的精度,适用于需要更高数值精度的应用,但会占用更多的内存。

字节数:8字节(64位)

整数 (通常为32位或64位) - int32, int64:

含义:整数用于表示离散的数值,可以是有符号或无符号的。在某些情况下,例如分类问题中的标签,可以使用整数数据类型来表示类别。

字节数:通常为4字节(32位)或8字节(64位)

注意: 模型参数精度的选择往往是一种权衡。使用更高精度的数据类型可以提供更高的数值精度,但会占用更多的内存并可能导致计算速度变慢。相反,使用较低精度的数据类型可以节省内存并加速计算,但可能会导致数值精度损失。在实际应用中,选择模型参数的精度需要根据具体任务、硬件设备和性能要求进行权衡考虑。

(6)推理显存计算

 模型推理(inference)是指在已经训练好的模型上对新的数据进行预测或分类。推理阶段通常比训练阶段要求更低的显存,因为不涉及梯度计算和参数更新等大量计算。以下是计算模型推理时所需显存的一些关键因素:

模型结构:模型的结构包括层数、每层的神经元数量、卷积核大小等。较深的模型通常需要更多的显存,因为每一层都会产生中间计算结果。

输入数据:推理时所需的显存与输入数据的尺寸有关。更大尺寸的输入数据会占用更多的显存。

批处理大小BatchSize:批处理大小是指一次推理中处理的样本数量。较大的批处理大小可能会增加显存使用,因为需要同时存储多个样本的计算结果。

数据类型DType:使用的数据类型(如单精度浮点数、半精度浮点数)也会影响显存需求。较低精度的数据类型通常会减少显存需求。

中间计算:在模型的推理过程中,可能会产生一些中间计算结果,这些中间结果也会占用一定的显存。

要估算模型推理时所需的显存,可以按照以下步骤:

模型加载: 计算模型中所有参数的大小,包括权重和偏差。

确定输入数据尺寸: 根据模型结构和输入数据大小,计算推理过程中每个中间计算结果的大小。

选择批次大小: 考虑批处理大小和数据类型对显存的影响。

计算显存大小: 将模型参数大小、中间计算结果大小和额外内存需求相加,以得出总显存需求或者使用合适的库或工具计算出推理过程中所需的显存。

通常情况下,现代深度学习框架(如TensorFlow、PyTorch等)提供了用于推理的工具和函数,可以帮助您估算和管理模型推理时的显存需求。

以 Llama-2-7b-hf 为例

因为全精度模型参数是float32类型, 占用4个字节,粗略计算:1b(10亿)个模型参数,约占用4G显存(实际大小:10^9 * 4 / 1024^3 ~= 3.725 GB),那么LLaMA的参数量为7b,那么加载模型参数需要的显存为:3.725 * 7 ~= 26.075 GB

如果您的显存不足32GB,那么可以设置半精度的FP16/BF16来加载,每个参数只占2个字节,所需显存就直接减半,只需要约13GB。虽然模型效果会因精度损失而略微降低,但一般在可接受范围。

如果您的显存不足16GB,那么可以采用int8量化后,显存再减半,只需要约6.5GB,但是模型效果会更差一些。

如果您的显存不足8GB,那么只能采用int4量化,显存再减半,只需要约3.26GB。

(7)训练显存计算

    模型训练(train)是指在给定训练数据集的基础上,通过优化算法调整模型的参数,使其能够更好地适应训练数据,并在未见过的数据上表现出良好的泛化能力。训练阶段通常比推理阶段要求更多的显存,因为涉及梯度计算和参数更新等大量计算。以下是计算模型推理时所需显存的一些关键因素:

模型权重。模型权重是模型参数中的一部分,通常是指神经网络中连接权重(weights)。这些权重决定了输入特征与网络层之间的连接强度,以及在前向传播过程中特征的传递方式。所以模型

梯度。在训练过程中,计算梯度用于更新模型参数。梯度与模型参数的维度相同。

优化器参数。 一些优化算法(如带有动量的优化器)需要保存一些状态信息,以便在每次更新时进行调整。这些状态信息也会占用一定的显存。比如:

采用 AdamW 优化器:每个参数占用8个字节,需要维护两个状态。意味着优化器所使用的显存量是模型权重的 2 倍;

采用 经过 bitsandbytes 优化的 AdamW 优化器:每个参数占用2个字节,相当于权重的一半;

采用 SGD 优化器:占用显存和模型权重一样。

输入数据和标签。训练模型需要将输入数据和相应的标签加载到显存中。这些数据的大小取决于每个批次的样本数量以及每个样本的维度。

中间计算。 在前向传播和反向传播过程中,可能需要存储一些中间计算结果,例如激活函数的输出、损失值等。

临时缓冲区。在计算过程中,可能需要一些临时缓冲区来存储临时数据,例如中间梯度计算结果等。减少中间变量也可以节省显存,这就体现出函数式编程语言的优势了。

硬件和依赖库的开销。显卡或其他硬件设备以及使用的深度学习框架在进行计算时也会占用一些显存。

以 Llama-2-7b-hf 为例

数据类型:Int8

模型参数: 7B * 1 bytes = 7GB

梯度:同上7GB

优化器参数: AdamW 2倍模型参数 7GB * 2 = 14GB

LLaMA的架构(hidden_size= 4096, intermediate_size=11008, num_hidden_lavers= 32, context.length = 2048),所以每个样本大小:(4096 + 11008) * 2048 * 32 * 1byte = 990MB

A100 (80GB RAM)大概可以在int8精度下BatchSize设置为50

综上总现存大小:7GB + 7GB + 14GB + 990M * 50 ~= 77GB

Llama-2-7b-hf模型Int8推理由上个章节可得出现存大小6.5GB, 由此可见,模型训练需要的显存是至少推理的十几倍。

备注:模型训练所需GPU显存是本地笔记本所不能完成的,但是我们一般正常使用模型的预测推理服务还是没多大问题的

       显存的总占用可以通过将上述各部分的大小相加来计算。在实际应用中,需要根据模型结构、数据批次大小、优化算法等因素来估计和管理显存的使用,以防止内存不足导致训练过程中断。使用一些工具和库(如TensorFlow、PyTorch等)可以帮助您监控和管理显存的使用情况。实际影响显存占用的因素还有很多,所以只能粗略估计个数量级。

监听显卡,每 1 秒刷新一次:watch -n -1 -d nvidia-smi

4.大语言模型是怎么工作的

训练LLM的主要工具是监督学习,在监督学习中,计算机使用带有标签的训练数据来学习输入输出或X和Y的映射关系。在监督学习中的流程通常是获取标记数据,然后在数据上训练一个模型,训练完成后,部署和调用该模型,并给它一个新的输入,希望它输出一个结果。

(1)LLM

Large Language Model(LLM),也称为大型语言模型,是一种基于机器学习和自然语言处理技术的模型,它通过对大量的文本数据进行训练,来学习服务人类语言理解和生成的能力。

LLM的核心思想是通过大规模的无监督训练来学习自然语言的模式和语言结构,这在一定程度上能够模拟人类的语言认知和生成过程。与传统的NLP模型相比,LLM能够更好地理解和生成自然文本,同时还能够表现出一定的逻辑思维和推理能力

(2)两种大语言模型

①Base LLM

从互联网直接抓取了大量文本数据进行训练,可以回答一下基础的问题,可以根据已知的信息,为了回答或是续写后面的内容,例如你问“法国的首都是什么?” ,它会回答“巴黎” ,这种信息都可以从互联网中搜集得到。但其也有可能回答错误,或是不知道。

②Instruction Tuned LLM(经过指令调整后的LLM)

其根据用户输入的指令,以及回答的反馈进行优化,也就是被称为RLHF(人类反馈强化学习技术)进一步进行细化,更加符合具体的场景,还可以考虑到安全,回答的无害性,这种LLM将来更符合生产或是使用场景。

③如何训练Instruction Tuned LLM

千亿单词,在大型计算机,花费数月

通过在一个较小的示例集上对其进行微调来进一步训练模型,使其输出符合输入的指令

(3)大语言问题

可能无法正确分词,我们可以使用符号帮助正确分词

40-90%:在提示词中加入“Be Concise”节约的成本

使用LLM是按照回复的token数量付费的,因此让LLM的回答简明扼要可以节约成本。

在提示词中加入“Be Concise”(答案简明些),可以节约40-90%的成本。

每个单词的平均token数

LLM是对token进行操作的,token可能包含完整单词或其中的一部分。

如“eating”是由“eat”和后缀“ing”两个token组成。

一篇750词的英文文章中大约含有1000个token。

而对于其他语言,每个词所含的token数量可能更多。

(4)大语言优势

传统机器学习可能需要通过几个月训练才能正常进行工作,有了大语言模型后可能几天后就可以进行工作。

5.大模型能力

大模型除了开放世界的理解能力之外,还具有很多其他能力特性,在领域应用中尤为值得关注:

(1)组合创新能力

通过在训练阶段引导大模型学习多个不同任务,从而可以让大模型组合创造出解决更多复合任务的能力。例如,我们可以让大模型根据李清照的诗词风格写一个Python代码的注释,这要求它既具备写诗的能力,又具备编写代码的能力。大模型通过对指令学习的结果进行组合泛化,模拟了人类举一反三的能力,从而让机器能够胜任一些从未学习过的新任务。

(2)评估评价能力

通用大模型具有出色的。具有一定规模的大模型(特别是百亿以上的大模型)在常见的文本任务结果评估方面具有优良性能。传统的文本任务,其结果评估工作往往需要人工参与,耗费昂贵的人力成本。而现在,我们可以利用大模型进行很多评估任务。例如,我们可以让大模型扮演一个翻译专家的角色,对翻译质量进行评估。通过设计合理的评价标准、给出有效的评分示例、给出翻译专家评价过程思维链,巨型大模型(比如GPT4)是能够出色的完成诸如习语翻译这类非常专业的评价工作。大模型的评价能力能够显著领域任务中的人工评价的成本,从而显著降低领域智能化解决的方案的落地成本。

(3)复杂指令理解及其执行能力

复杂指令理解及其执行能力是大模型的核心特点之一。只需给予大模型详细的指令,清晰表达任务约束或规范,超大模型就能够按指令要求地完成任务。这种忠实于指令要求的能力与大模型的情境化生成能力高度相关。给定合理提示,且提示越是丰富、细致,大模型往往越能生成高质量内容。大模型的情景化生成能力刷新了我们对智能本质的认识,传统关联认为智能是人类的知识发现和应用能力。这类定义是从人类视角出发,知识是人类认知世界的产物。而从大模型的角度来看,只要在给予的情境提示做出合理生成,就是一种智能。这种情景化生成能力本质上体现了一种建模世界的能力,且无关于人类对于世界的认知方式。

(4)复杂任务的分解能力和规划能力

复杂任务的分解能力和规划能力是大模型的另一项优势。它可以将复杂任务分解为多个步骤,并合理规划任务的执行顺序。这为垂域应用提供了重要的机会,使得大模型能够与传统信息系统协同工作,将传统IT系统中数据库、知识库、办公自动化系统、代码库等众多系统高效协同,完成以往传统智能系统难以胜任的复杂决策任务,从而提升整个信息系统的智能水平。

(5)符号推理能力

此外,大模型还具备符号推理能力,可以进行常识推理、以及一定程度的逻辑推理、数值推理。虽然这些推理能力在面对复杂的领域文本任务时仍需进一步提升其专业水平。此外,价值观对齐能力也是大模型落地的重要特性,以确保大模型的输出与我们人类的伦理道德、意识形态、价值观念相一致。

二、ChatGPT基础

1.ChatGPT简介

(1)ChatGPT历程

ChatGPT是一个经过长期技术储备、通过大量资源投入、带有一定成功偶然性的人工智能“核爆点”。ChatGPT的发展经历了3个阶段(如下图所示),前期GPT-1(2018年)、GPT-2(2019年)、GPT-3(2020年)等版本已经投入了大量资源(包括购买高性能芯片、雇佣数据标注人员、占用计算资源等),效果并不理想,后期在采用“基于强化学习的人类反馈学习”技术后发生“蝶变”,迅速成为爆款应用。

ChatGPT关键在于“三大支撑”。一是“大模型”。全称是“大语言模型”(Large Language Model),指参数量庞大(目前规模达千亿级)、使用大规模语料库进行训练的自然语言处理模型,是ChatGPT的“灵魂”。二是“大数据”。GPT-1使用了约7000本书籍训练语言模型。GPT-2收集了Reddit平台(美国第五大网站,功能类似于国内的百度贴吧)800多万个文档的40GB文本数据。GPT-3使用维基百科等众多资料库的高质量文本数据,数据量达到45TB,是GPT-2的1150倍。三是“大算力”。以GPT-3为例,其参数量达1750亿,采用1万颗英伟达V100 GPU组成的高性能网络集群,单次训练用时14.8天,总算力消耗约为3640PF-days(假如每秒进行一千万亿次计算,需要3640天)。ChatGPT标志着里程碑式的技术进步。

一是在最具挑战性的自然语言处理领域实现了革命性突破。相比视频、图像、语音等,自然语言的语法、语义、逻辑复杂,存在多样性、多义性、歧义性等特点。文本数据稀缺,通常表现为非结构化的低质量数据。自然语言处理任务种类繁多,包括语言翻译、问答系统、文本生成、情感分析等。因此,长期以来自然语言处理被认为是人工智能最具挑战性的领域。ChatGPT不仅实现了高质量的自然语言理解和生成,并且能够进行零样本学习和多语言处理,为自然语言处理领域带来了前所未有的突破。

二是标志着通用人工智能的起点。在此之前,人工智能在不同场景应用需要训练不同模型。而ChatGPT利用单一大模型即可完成人机对话、机器翻译、编码测试等多种任务,已经具备通用人工智能的一些核心技术和特征:能够自动化地学习各种知识、信息,不断自我优化;充分理解和流畅表达人类语言,逻辑推理强,实现了具备一般人类智慧的机器智能;拥有一定的自适应和迁移学习能力,可以适用于多种应用场景和任务。

三是代表着强人工智能的拐点。ChatGPT证明了大模型的学习和进化能力,将推动强人工智能(机器拥有知觉和意识,有真正的推理和解决问题的能力)加速演进。目前大模型智能程度已接近人类水平,甚至一些业界人士认为,将来会逐渐产生自我认知和感知,进而出现意识并且超越人类。

(2)大语言模型发展中的关键技术突破

(3)ChatGPT是范式突破

过往ML:需要“喂”,之后“模仿”,基于的是“对应关系”;

ChatGPT:需要“教”,之后“懂”,基于的是“内在逻辑”;

①过往机器学习的范式 -- 鹦鹉学舌

机器学习,包括深度学习,所遵循的范式是“data fitting”,即找到数据中的“对应关系”并应用。具体来说,就是Y=f(X),给定一些优化目标,机器学习寻找X和Y的对应关系,来优化一个特定的方程。对应关系找得好,让我们在见到一个未知的X‘的时候,也能根据规律,总结出Y‘是什么,能最好达到设定的目标。

从信息论的角度,这样的范式,所能总结的规律,应该是在“已有X所包含信息的范畴之内”。换句话说,遇到一个新的X‘,虽然没见过,但是应该和过去的X长得差不多。用图像识别举例,如果模型只在小狗小猫的数据上训练过,是无法区分马车和汽车的。

由此可见。过往AI应用的拓展主要是来自几点:

高质量的数据,模型的发展,算力的提升,让模型越来越准、快、和发现更多更深的“对应关系”,能进行更好的优化;

更好地把商业问题转化为优化问题;

和其他能力的深度结合;

但是这些都是基于“鹦鹉学舌”这一范式的。过往的NLP(natural language processing,自然语言处理)就是一个很好的例子。发展了那么多年,语音助手能根据指令来达成一些目标,但是从来都没有真的“懂”那些指令。过往的NLP只能做“填表”,必须背后有一个人设定好具体的任务,规划好如何把语音或者文字形成固定的function,该function如何调用相应的能力。如果没有人提前规划,那模型就无法实现。

亚马逊Alexa的思路和大多数商业语音助手的思路就是招一群程序员来写if then,高情商说法是针对具体使用场景做深度优化。这里有总结。[9]

谷歌的思路是用一个大模型做底座,一堆小模型做输入,另一堆小模型做输出。这条路也遇到明显瓶颈。

归根结底,离开了“懂”的能力,鹦鹉的设计师,是很难穷尽世界上所有的语言应用组合的。说这么多,是为了告诉大家,“懂”这件事,是过往AI梦寐以求都想突破的瓶颈。

“懂”字,如果深究的话,会发现大家对它的定义其实存在很大分歧。我如果让狗狗伸手,狗狗伸手了,是“懂”吗?过去NLP的懂和ChatGPT的懂,又有什么区别呢?同样的问题存在其他词汇中,比如理解、推理、演绎、创新,等等。所以想要真的抓住ChatGPT新能力的本质,描述就要更加精确和具体。

②ChatGPT可能的新范式 -- 乌鸦

总结一下,城市中的乌鸦通过观察,自主串通了:

汽车能压碎坚果;

红绿灯能控制汽车;

车能撞死我;

这三件事情,从而利用红绿灯和汽车,来帮自己达到“安全打开坚果”这一任务结果。

如果类比成机器学习模型,过往“鹦鹉学舌”范式的解法,是要求所有乌鸦可以共享一个大脑,它们有很清晰的优化目标,即“保住性命的前提下打开坚果”。它们的方式是,随机尝试所有事件的组合,并向着最优解的方向不断演化。

但现实世界的乌鸦无法共享大脑,也不能去冒着死亡风险去尝试所有可能。乌鸦只有一次机会,把观测到的两个现象,产生了一个新的可能性,并应用在一个全新的场景下。这里最接近的词汇可能是“inference”,是“基于证据和逻辑推演,得到结论”的过程,有的时候,还要加入很多猜测、抽象、泛化。举个例子,这篇文章把朱教授对于乌鸦的比喻,跟ChatGPT最本质的能力联系起来,就是在做inferencing这件事。

但很明显,inferencing不是乌鸦智能的全部。而且在机器学习领域里,inferencing特指使用训练好的深度学习模型来预测新的数据这一件事,会产生误解。其他词汇也有类似问题,所以我们在自己文章里,会直接使用“乌鸦能力”来指代ChatGPT的新能力。在对外交流时,我们没办法每次都把乌鸦能力是什么解释一遍,所以我们会用“理解”能力来进行指代。从“乌鸦”到“理解”,当然是一个信息量损失很大的过度概括。但是好处是可以把ChatGPT的本质能力凸显出来。过往互联网的两次能力跃进一次来自于搜索,一次来自于推荐,现在ChatGPT带来了“理解”,也非常有结构感。

③ChatGPT看似拥有乌鸦能力的证据

之所以说“看似”,是因为我们并不知道乌鸦为什么会有和鹦鹉不一样的能力,我们也不完全知道LLM为什么会有“乌鸦”的能力。甚至朱教授本人在AAAI 2023上明确说了,不认为LLM/ChatGPT具备乌鸦能力,而是一只巨鹦鹉。

ChatGPT从表现上来看,具备了一定程度,但远超过往ML范式的智能,我们注意到这个智能的局限性,但也应该在没有搞清楚原理的情况下,积极探索这个智能的应用可能性。

接下来的这几点感受,让我很明显感觉到了ChatGPT的“乌鸦”能力

ChatGPT拥有in-context correction的能力,即如果说错了,给出矫正,ChatGPT能“听懂”错在哪儿了,并向正确的方向修正。in-context correction要比in-context learning难了太多

描述越详细清楚,ChatGPT回答得越好。要知道,越详细的描述,在预训练的文本里越难匹配到

能通过Winograd测试

在询问ChatGPT互联网上并不存在内容的时候,能给出较好答案(案例:我用ChatGPT学UE5)

ChatGPT能通过信息猜你心中的想法(案例:跟ChatGPT玩20 questions)

你可以制定一个全新的游戏规则让ChatGPT和你玩,ChatGPT可以理解

④ChatGPT已经接近于目前“人类调用算力”的究极界面

算力和存储能力的进步:以摩尔定律为代表。在云之后,更让个人可以调用的算力几乎无上限;

对数据的生产、总结,和使用:比如App上记录了很多用户行为,才能做更好的推荐;

“调用算力与数据手段”的抽象与进化:从机器语言、汇编语言、高级语言,到虚拟机(对硬件的抽象)、云服务(对API的抽象)

2.ChatGPT的交互

“交互” 这个特性,是 ChatGPT 之后,NLP 最为主流的技术发展路径之一!作者们的论文首次定义并系统解构了 “交互式 NLP”,并主要基于交互对象的维度,尽可能全面地讨论了各种技术方案的优劣以及应用上的考虑,包括:

LM 与人类交互,以更好地理解和满足用户需求,个性化回应,与人类价值观对齐 (alignment),并改善整体用户体验;

LM 与知识库交互,以丰富语言表达的事实知识,增强回应的知识背景相关性,并动态利用外部信息生成更准确的回应;

LM 与模型和工具交互,以有效分解和解决复杂推理任务,利用特定知识处理特定子任务,并促进智能体社会行为的涌现;

LM 与环境交互,以学习基于语言的实体表征(language grounding),并有效地处理类似推理、规划和决策等与环境观察相关的具身任务(embodied tasks)。

因此,在交互的框架下,语言模型不再是语言模型本身,而是一个可以 “看”(observe)、可以 “动作”(act)、可以 “获取反馈”(feedback) 的基于语言的智能体。与某个对象进行交互,作者们称之为 “XXX-in-the-loop”, 表示这个对象参与了语言模型训练或者推理的过程,并且是以一种级联、循环、反馈、或者迭代的形式参与其中的。

(1)与人交互

①使用提示进行交流

“使用提示进行交流” 主要着重于交互的实时性和持续性,也就是强调连续性质的多轮对话。这一点和 Conversational AI [8] 的思想是一脉相承的。也就是,通过多轮对话的方式,让用户连续地问下去,让语言模型的响应在对话中慢慢地对齐于用户偏好。这种方式通常在交互中不需要模型参数的调整。

②使用反馈进行学习

“使用反馈进行学习” 是当前进行 alignment 的主要方式,也就是让用户给语言模型的响应一个反馈,这种反馈可以是描述偏好的 “好 / 坏” 的标注,也可以是自然语言形式的更为详细的反馈。模型需要被训练,以让这些反馈尽可能地高。比较典型的例子就是 InstructGPT 所使用的 RLHF [7],首先使用用户标注的对模型响应的偏好反馈数据训练奖励模型,然后使用这个奖励模型以某种 RL 算法训练语言模型以最大化奖励(如下图)。

③使用配置进行调节

“使用配置进行调节” 是一种比较特殊的交互方式,允许用户直接调整语言模型的超参数(比如 temperature)、或者语言模型的级联方式等。典型的例子比如谷歌的 AI Chains [9], 带有不同预设 prompt 的语言模型互相连接构成了一个用于处理流程化任务的推理链条,用户可以通过一个 UI 拖拽调整这个链条的节点连接方式。

“从人类模拟中学习” 可以促进上述三种方式的规模化部署,因为尤其在训练过程,使用真实的用户是不现实的。比如 RLHF 通常需要使用一个 reward model 来模拟用户的偏好。另一个例子是微软研究院的 ITG [10], 通过一个 oracle model 来模拟用户的编辑行为。

(2)与知识库交互

总的来说,与知识库进行交互可以减轻语言模型的 “幻觉” 现象 (hallucination), 即提升其输出的事实性、准确性等,还能帮助改善语言模型的时效性问题,帮助补充语言模型的知识能力

①确定补充知识的来源:Knowledge Source

“Knowledge Source” 分为两种,一种是封闭的语料知识 (Corpus Knowledge), 如 WikiText 等 [15];另一种是开放的网络知识 (Internet Knowledge), 比如使用搜索引擎可以得到的知识

②检索知识:Knowledge Retrieval

基于语言的稀疏表示以及 lexical matching 的稀疏检索 (sparse retrieval):如 n-gram 匹配,BM25 等。

基于语言的稠密表示以及 semantic matching 的稠密检索 (dense retrieval):如使用单塔或者双塔模型作为检索器等。

基于生成式检索器:属于比较新的方式,代表工作是谷歌 Tay Yi 等人的 Differentiable Search Index [12], 将知识都保存在语言模型的参数当中,给一个 query 后,直接输出对应知识的 doc id 或者 doc content. 因为语言模型,就是知识库 [13]!

基于强化学习:也是比较前沿的方式,代表工作比如 OpenAI 的 WebGPT [14],使用 human feedback 训练模型,以进行正确知识的检索。

(3)与模型或者工具交互

语言模型与模型或者工具交互,主要的目的是进行复杂任务的分解,比如将复杂的推理任务分解为若干子任务,这也是 Chain of Thought [17] 的核心思想。不同的子任务可以使用具有不同能力的模型或者工具解决,比如计算任务可以使用计算器解决,检索任务可以使用检索模型解决。因此,这种类型的交互不仅可以提升语言模型的推理 (reasoning)、规划 (planning)、决策 (decision making) 能力,还能减轻语言模型的 “幻觉” (hallucination)、不准确输出等局限。特别地,当使用工具执行某种特定的子任务时,可能会对外部世界产生一定影响

另外,有时候显式地分解一个复杂的任务是很困难的,这种时候,可以为不同的语言模型赋予不同的角色或者技能,然后让这些语言模型在互相协作、沟通的过程当中,隐式、自动地形成某种分工方案 (division of labor),进行任务的分解。这种类型的交互不仅仅可以简化复杂任务的解决流程,还可以对人类社会进行模拟,构造某种形式的智能体社会。

①Thinking: 模型与自己本身进行交互,进行任务的分解以及推理等;

Thinking 主要论及的是 “多阶段思维链” (Multi-Stage Chain-of-Thought),即:不同的推理步骤。首先将一个复杂问题分解为若干简单的模块子问题,然后迭代式地调用语言模型逐个击破。

②Acting:模型调用其他的模型,或者外部工具等,帮助进行推理,或者对外部世界产生实际作用;

将语言模型的预训练语料处理成了带有 tool-use prompt 的形式,因此,经过训练后的语言模型,可以在生成文本的时候,自动地在正确的时机调用正确的外部工具(如搜索引擎、翻译工具、时间工具、计算器等)解决特定的子问题。

③Collaborating: 多个语言模型智能体互相沟通、协作,完成特定的任务,或者模拟人类的社会行为。

闭环交互:比如 Socratic Models [23] 等,通过大型语言模型、视觉语言模型、音频语言模型的闭环交互,完成特定于视觉环境的某些复杂 QA 任务。

心智理论 (Theory of Mind): 旨在让一个智能体能够理解并预测另一个智能体的状态,以促进彼此的高效交互。例如 EMNLP 2021 的 Outstanding Paper, MindCraft [24], 给两个不同的语言模型赋予了不同但互补的技能,让他们在交流的过程中协作完成 MineCraft 世界中的特定任务。著名教授 Graham Neubig 最近也非常关注这一条研究方向,如 [25].

沟通式代理 (Communicative Agents): 旨在让多个智能体能够进行彼此交流协作。最为典型的例子就是斯坦福大学最近震惊世界的 Generative Agents [26]:搭建一个沙盒环境,让好多个由大模型注入 “灵魂” 的智能体在其中自由活动,它们竟然可以自发地呈现一些类人的社会行为,比如聊天打招呼等,颇有一种 “西部世界” 的味道(如下图)。除此之外,比较出名的工作还有 DeepGCN 作者的新工作 CAMEL [27],让两个大模型赋能的智能体在彼此沟通的过程当中开发游戏,甚至炒股,而不需要人类的过多干预。作者在文章中明确提出了 “大模型社会” (LLM Society) 的概念。

(4)与环境交互

语言模型和环境属于两个不同的象限:语言模型建立在抽象的文字符号之上,擅长 high-level 的推理、规划、决策等任务;而环境建立在具体的感知信号之上(如视觉信息、听觉信息等),模拟或者自然发生一些 low-level 的任务,如提供观察 (observation)、反馈 (feedback)、状态更新 (state transition) 等(如:现实世界中一个苹果落到了地上,模拟引擎中一个 “苦力怕” 出现在了你的面前)。

因此,要让语言模型能够有效且高效地与环境进行交互,主要包括了两个方面的努力:

Modality Grounding: 让语言模型可以处理图像、音频等多模态信息;

Affordance Grounding: 让语言模型在环境具体场景的尺度下对可能的、恰当的对象执行可能的、恰当的动作。

(5)用什么交互:交互接口

自然语言:如 few-shot example, task instruction, role assignment 甚至结构化的自然语言等。主要讨论了其在泛化性、表达性上的特点及作用等。

形式语言:如代码、语法、数学公式等。主要讨论了其在可解析性、推理能力上的特点及作用等。

机器语言:如 soft prompts, 离散化的视觉 token 等。主要讨论了其在泛化性、信息瓶颈理论、交互效率上的特点及作用等。

编辑:主要包括了对文本进行的删除、插入、替换、保留等操作。讨论了它的原理、历史、优势以及目前存在的局限。

共享记忆:主要包括了 hard memory 和 soft memory. 前者将历史状态记录在一个 log 里面作为记忆,后者使用一个可读可写的记忆外置模块保存张量。论文讨论了两者的特点、作用以及存在的局限等。

(6)怎么交互:交互方法

Prompting: 不调整模型参数,仅仅通过 prompt engineering 的方式调用语言模型,涵盖了上下文学习(In-Context Learning)、思维链提示 (Chain of Thought)、工具使用提示 (Tool-use)、级联推理链 (Prompt Chaining) 等多种方法,详细讨论了各种 Prompting 技巧的原理、作用、各种 trick 和局限等,比如在可控性和鲁棒性上的考虑等。

Fine-Tuning: 进行模型参数的调整,以让模型从交互信息中进行学习更新。本节涵盖了监督指令精调 (Supervised Instruction Tuning)、参数高效精调 (Parameter-Efficient Fine-Tuning)、持续学习 (Continual Learning)、半监督学习 (Semi-Supervised Fine-Tuning) 等方法。详细讨论了这些方法的原理、作用、优势、在具体使用时的考虑、及其局限。其中还包括了部分 Knowledge Editing 的内容(即编辑模型内部的知识)。

Active Learning: 交互式的主动学习算法框架。

Reinforcement Learning: 交互式的强化学习算法框架,讨论了在线强化学习框架、离线强化学习框架、从人类反馈中学习(RLHF)、从环境反馈中学习(RLEF)、从 AI 反馈中学习 (RLAIF) 等多种方法。

Imitation Learning: 交互式的模仿学习算法框架,讨论了在线模仿学习、离线模仿学习等。

Interaction Message Fusion: 为上述所有交互方法提供了一个统一的框架,同时在这个框架中,向外扩展,讨论了不同的知识、信息融合方案,比如跨注意力融合方案 (cross-attention)、约束解码融合方案 (constrained decoding) 等。

3.NLP 研究范式的转换

(1)范式转换 1.0: 从深度学习到两阶段预训练模型

这个范式转换所涵盖的时间范围,大致在深度学习引入 NLP 领域(2013 年左右),到 GPT 3.0 出现之前(2020 年 5 月左右)。

在 Bert 和 GPT 模型出现之前,NLP 领域流行的技术是深度学习模型,NLP 领域深度学习的主要研究目标,如果归纳一下,是如何有效增加模型层深或模型参数容量。就是说,怎么才能往 encoder 和 decoder 里不断叠加更深的 LSTM 或 CNN 层,来达成增加层深和模型容量的目标。这种努力,尽管确实不断增加了模型层深,但是从解决具体任务的效果角度看,总体而言,不算很成功,或者说和非深度学习方法相对,带来的优势不算大。

深度学习之所以不够成功,我认为主要原因来自于两个方面:一方面是某个具体任务有限的训练数据总量。随着模型容量的增加,需要靠更大量的训练数据来支撑,否则即使你能把深度做起来,任务效果也做不上去。而在预训练模型出现之前,很明显这是 NLP 研究领域一个严重问题;另外一个方面是 LSTM/CNN 特征抽取器,表达能力不够强。意思是就算给你再多的数据也没用,因为你不能有效地吸收数据里蕴含的知识。主要应该是这两个原因,阻碍了深度学习在 NLP 领域的成功突围。

Bert/GPT 这两个预训练模型的出现,无论在学术研究角度看,还是工业应用角度来看,都代表了 NLP 领域的一个技术飞跃,并带来了整个领域研究范式的转换。这种范式转换带来的影响,体现在两个方面:首先,是部分 NLP 研究子领域的衰退乃至逐步消亡;其次,NLP 不同子领域的技术方法和技术框架日趋统一,在 Bert 出现后一年左右,技术栈基本收敛到两种技术模式中

①影响一:中间任务的消亡

NLP 是一个宏观研究领域的统称,里面有五花八门具体的子领域与子方向,如果仔细分析,从任务的性质角度,可以把这些任务分成两大类:一类可以叫做 “中间任务”,一类可以称为 “最终任务”。

典型的中间任务包括:中文分词、词性标注、NER、句法分析、指代消解、语义 Parser 等,这类任务一般并不解决应用中的实际需求,大多数是作为那些解决实际需求任务的中间阶段或者辅助阶段存在的,比如几乎没有需求说,我要一个句法 Parser,把这个句子的句法分析树给用户看看,用户不需要看到这些 NLP 的中间阶段处理结果,他只关心某个具体任务你有没有干好。“最终任务” 包括比如文本分类、文本相似性计算、机器翻译、文本摘要等等,有很多。这类任务的特点是每个子领域都解决某个实际需求,任务结果基本能直接呈现给用户,比如用户确实存在给你一句英文,告诉他中文是什么的需求。

按理说,“中间任务” 就不应该出现,而之所以会存在,这是 NLP 技术发展水平不够高的一种体现。在技术发展早期阶段,因为当时的技术相对落后,很难一步做好有难度的最终任务。比如机器翻译,早期技术要做好机器翻译是很困难的,于是科研人员就把难题分而治之,分解成分词、词性标注、句法分析等各种中间阶段,先把每个中间阶段做好,然后再拼起来完成最终任务,这也是没办法的事情。

但是自从 Bert/GPT 出现之后,其实就没有必要做这些中间任务了,因为通过大量数据的预训练,Bert/GPT 已经把这些中间任务作为语言学特征,吸收到了 Transformer 的参数里,此时我们完全可以端到端地直接解决那些最终任务,而无须对这种中间过程专门建模。这里可能争议最大的是中文分词,其实道理也是一样的,哪些字应该组成一个词,这个其实你不用管,让 LLM 自己当特征去学就行了,只要对于解决任务有帮助,它自然会去学该学的合理分词方式,也未必一定要和我们人类理解的分词规则相同。

②影响二:不同研究方向技术路线的统一

在说明具体影响前,我们先讨论下另外一种 NLP 任务划分方式,这对于理解后面内容有帮助。如果对 “最终任务” 进一步进行分类,又大致可以分为两大不同类型的任务:自然语言理解类任务和自然语言生成类任务。如果排除掉 “中间任务” 的话,典型的自然语言理解类任务包括文本分类、句子关系判断、情感倾向判断等,这种任务本质上都是分类任务,就是说输入一个句子(文章),或者两个句子,模型参考所有输入内容,最后给出属于哪个类别的判断。自然语言生成也包含很多 NLP 研究子方向,比如聊天机器人、机器翻译、文本摘要、问答系统等。生成类任务的特点是给定输入文本,对应地,模型要生成一串输出文本。这两者的差异主要体现在输入输出形式上

其次,大多数 NLP 子领域的研发模式切换到了两阶段模式:模型预训练阶段 + 应用微调(Fine-tuning)或应用 Zero/Few Shot Prompt 模式。更准确地说,NLP 各种任务其实收敛到了两个不同的预训练模型框架里:对于自然语言理解类任务,其技术体系统一到了以 Bert 为代表的 “双向语言模型预训练 + 应用 Fine-tuning” 模式;而对于自然语言生成类任务,其技术体系则统一到了以 GPT 2.0 为代表的 “自回归语言模型(即从左到右单向语言模型)+Zero /Few Shot Prompt” 模式。

(2)范式转换 2.0: 从预训练模型走向通用人工智能 (AGI,Artificial General Intelligence)

ChatGPT 是触发这次范型转换的关键节点,但是在 InstructGPT 出现之前,其实 LLM 处于这次范式转换前的一个过渡期。过渡期:以 GPT 3.0 为代表的 “自回归语言模型 + Prompting” 模式占据统治地位

在预训练模型发展的早期,技术框架收敛到了 Bert 模式和 GPT 模式这两种不同的技术范型,而且人们普遍更看好 Bert 模式一些,相当多数的后续技术改进,都是沿着 Bert 那条路走的。但是,随着技术的继续发展,你会发现,目前规模最大的 LLM 模型,几乎清一色都是类似 GPT 3.0 这种 “自回归语言模型 + Prompting” 模式的,比如 GPT 3、PaLM、GLaM、Gopher、Chinchilla、MT-NLG、LaMDA 等,没有例外。为什么会这样呢?背后一定有其必然性,我认为可能主要源于两个原因。

首先,Google 的 T5 模型,在形式上统一了自然语言理解和自然语言生成任务的外在表现形式。如上图所示,标为红色的是个文本分类问题,黄色的是判断句子相似性的回归或分类问题,这都是典型的自然语言理解问题。在 T5 模型里,这些自然语言理解问题在输入输出形式上和生成问题保持了一致,也就是说,可以把分类问题转换成让 LLM 模型生成对应类别的字符串,这样理解和生成任务在表现形式就实现了完全的统一。这说明自然语言生成任务,在表现形式上可以兼容自然语言理解任务,若反过来,则很难做到这一点。这样的好处是:同一个 LLM 生成模型,可以解决几乎所有 NLP 问题。而如果仍然采取 Bert 模式,则这个 LLM 模型无法很好处理生成任务。既然这样,我们当然倾向于使用生成模型,这是一个原因。

第二个原因,如果想要以零示例提示语(zero shot prompting)或少数示例提示语(few shot prompting)的方式做好任务,则必须要采取 GPT 模式。现在已有研究(参考:On the Role of Bidirectionality in Language Model Pre-Training)证明:如果是以 fine-tuning 方式解决下游任务,Bert 模式的效果优于 GPT 模式;若是以 zero shot/few shot prompting 这种模式解决下游任务,则 GPT 模式效果要优于 Bert 模式。这说明了,生成模型更容易做好 zero shot/few shot prompting 方式的任务,而 Bert 模式以这种方式做任务,是天然有劣势的。这是第二个原因。

为什么我们要追求 zero shot/few shot prompting 这种方式来做任务呢?

首先,LLM 应该具备强大的自主学习能力。假设我们把世界上能获得的所有文本或者图片等不同类型的数据喂给它,它应该能够自动从中学习到里面包含的所有知识点,学习过程不需要人的介入,并且能灵活应用所学知识,来解决实际问题。因为数据是海量的,要吸收所有知识,就要非常多的模型参数来存储知识,所以这个模型必然会是一个巨无霸模型。

其次,LLM 应该能解决 NLP 任何子领域的问题,而不仅支持有限领域,甚至它应该可以响应 NLP 之外其它领域的问题,最好是任意领域的问题都能得到很好地回答。

再者,当我们使用 LLM 解决某个具体领域问题的时候,应该用我们人类习惯的表达方式,就是说 LLM 应该理解人类的命令。这体现出让 LLM 适配人,而不是反过来,让人去适配 LLM 模型。人适配 LLM 的典型例子,比如绞尽脑汁去尝试各种不同的 prompt,以试图找到好的提示语,才能很好地解决手头问题。关于这点,上图在人类和 LLM 交互的接口层,举了几个例子,说明什么是好的人使用 LLM 模型的接口形式。

看完这个理想中的 LLM,我们再回头解释上面遗留的问题:为什么我们要追求 zero shot/few shot prompting 这种方式来做任务呢?有两个原因。

第一,这个 LLM 模型规模必然非常巨大,有能力作出这个模型,或改动这个模型参数的机构必然很少。而任务需求方是千千万万的中小机构甚至是个人,就算你把模型开源出来,他们也无力部署这个模型,更不用说再用 Fine-tuning 这种模式去修改模型参数了。所以,我们应该追求不修正模型参数,就能让任务需求方完成任务的方式,也就是应该采取 prompt 模式完成任务,而非 Fine-tuning 模式(由此可看出,soft prompting 技术方向是违背这个发展趋势的)。模型制作方则将 LLM 作成公用服务,以 LLM as Service 的模式运行。作为服务支持方,考虑到千变万化的用户需求,所以 LLM 模型制作方更要追求让 LLM 能完成尽可能多类型的任务,这是附带的影响,也是为何超级大模型一定会追求走向 AGI 的现实因素。

第二,zero shot prompting 也好,few shot prompting 也好,甚至促进 LLM 推理能力的思维链(CoT,Chain of Thought)Prompting 也好,就是上图中接口层中的现有技术。具体而言,zero shot prompting 的初衷,其实就是人类和 LLM 的理想接口,直接用人类所习惯的任务表述方式让 LLM 做事情,但是发现 LLM 并不能很好地理解,效果也不好。经过继续研究,转而发现:对于某项任务,如果给 LLM 几个示例,用这些示例来代表任务描述,效果会比 zero shot prompting 好,于是大家都去研究更好的 few shot prompting 技术。可以理解为,本来我们希望 LLM 能够用人类常用的命令方式来执行某个任务,但是目前技术还做不到,所以退而求其次,用这些替代技术来表达人类的任务需求。

如果理解了上述逻辑,很容易得出如下结论:few shot prompting(也被称为 In Context Learning)只是一种过渡时期的技术。如果我们能够更自然地去描述一个任务,而且 LLM 可以理解,那么,我们肯定会毫不犹豫地抛弃这些过渡期的技术,原因很明显,用这些方法来描述任务需求,并不符合人类的使用习惯。

①影响一:让 LLM 适配人的新型交互接口

如果归纳下 ChatGPT 最突出特点的话,我会用下面八个字:“能力强大,善解人意”。

“能力强大” 这一点, ChatGPT 尽管加入了人工标注数据,但是量级只有数万,这个规模的数据量,和训练 GPT 3.5 模型使用的几千亿 token 级别的数据量相比,包含的世界知识(数据中包含的事实与常识)可谓沧海一粟,所以它的强大功能,应该主要来自于隐藏在背后的 GPT 3.5。GPT 3.5 对标理想 LLM 模型中的那个巨无霸模型。

那么,ChatGPT 向 GPT 3.5 模型注入新知识了吗?应该是注入了,这些知识就包含在几万人工标注数据里,不过注入的不是世界知识,而是人类偏好知识。所谓 “人类偏好”,包含几方面的含义:首先,是人类表达一个任务的习惯说法。比如,人习惯说:“把下面句子从中文翻译成英文”,以此表达一个 “机器翻译” 的需求,但是 LLM 又不是人,它怎么会理解这句话到底是什么意思呢?你得想办法让 LLM 理解这句命令的含义,并正确执行。所以,ChatGPT 通过人工标注数据,向 GPT 3.5 注入了这类知识,方便 LLM 理解人的命令,这是它 “善解人意” 的关键。其次,对于什么是好的回答,什么是不好的回答,人类有自己的标准,例如比较详细的回答是好的,带有歧视内容的回答是不好的,诸如此类。这是人类自身对回答质量好坏的偏好。人通过 Reward Model 反馈给 LLM 的数据里,包含这类信息。总体而言,ChatGPT 把人类偏好知识注入 GPT 3.5,以此来获得一个听得懂人话、也比较礼貌的 LLM。

可以看出,ChatGPT 的最大贡献在于:基本实现了理想 LLM 的接口层,让 LLM 适配人的习惯命令表达方式,而不是反过来让人去适配 LLM,绞尽脑汁地想出一个能 Work 的命令(这就是 instruct 技术出来之前,prompt 技术在做的事情),而这增加了 LLM 的易用性和用户体验。是 InstructGPT/ChatGPT 首先意识到这个问题,并给出了很好的解决方案,这也是它最大的技术贡献。相对之前的 few shot prompting,它是一种更符合人类表达习惯的人和 LLM 进行交互的人机接口技术。

②影响二:很多 NLP 子领域不再具备独立研究价值

就 NLP 领域而言,这次范式转换,意味着很多目前独立存在的 NLP 研究领域,将被纳入 LLM 的技术体系,进而不再独立存在,逐步消失。经过第一次范式转换,尽管 NLP 中很多 “中间任务”,继续作为独立研究领域存在不再必要,但是大多数 “最终任务”,仍然是以独立研究领域存在的,只是切换成在 “预训练 + fine-tuning” 框架下,面对领域独有问题,陆续提出新的改进方案。

目前研究表明,很多 NLP 任务,随着 LLM 模型规模增长,效果会大幅提升。据此,我觉得可得到如下推论:大多数某领域所谓 “独有” 的问题,大概率只是缺乏领域知识导致的一种外在表象,只要领域知识足够多,这个所谓领域独有的问题,就可以被很好地解决掉,其实并不需要专门针对某个具体领域问题,冥思苦想去提出专用解决方案。也许 AGI 的真相超乎意料地简单:你只要把这个领域更多的数据交给 LLM,让它自己学习更多知识即可。

在这个背景下,同时,ChatGPT 证明了我们现在是可以直接去追求理想 LLM 模型的,那么,未来的技术发展趋势应该是:追求规模越来越大的 LLM 模型,通过增加预训练数据的多样性,来涵盖越来越多的领域,LLM 自主从领域数据中通过预训练过程学习领域知识,随着模型规模不断增大,很多问题随之得到解决。研究重心会投入到如何构建这个理想 LLM 模型,而非去解决某个领域的具体问题。这样,越来越多 NLP 的子领域会被纳入 LLM 的技术体系,进而逐步消失。

判断某个具体领域是否该立即停止独立研究,其判断标准可采取以下两种方法,占其一即可:第一,判断某个任务,是否 LLM 的研究效果超过人类表现,对于那些 LLM 效果超过人类的研究领域,已无独立研究的必要。举个例子,GLUE 与 SuperGLUE 测试集合里的很多任务,目前 LLM 效果已超过人类表现,与这个数据集合密切相关的研究领域,其实就没有继续独立存在的必要。第二,对比两种模式的任务效果,第一种模式是用较大的领域专用数据进行 Fine-tuning,第二种是 few-shot prompting 或 instruct-based 方法。如果第二种方法效果达到或超过第一种方法,则意味着这个领域没有继续独立存在的必要性。如果用这个标准来看,其实很多研究领域,目前 fine-tuning 效果还是占优的(因为这种模式领域训练数据量大),看似还可独立存在。但是考虑到很多任务随着模型规模增大,few shot prompting 效果持续增长,随着更大模型的出现,这个拐点很可能短期就会达到。

③影响三:更多 NLP 之外的研究领域将被纳入 LLM 技术体系

ChatGPT 除了展示出以流畅的对话形式解决各种 NLP 任务外,也具备强大的代码能力。很自然的,之后越来越多其它的研究领域,也会被逐步纳入 LLM 体系中,成为通用人工智能的一部分。

LLM 从 NLP 向外进行领域拓展,一个自然的选择就是图像处理及多模态相关任务。目前已经有些工作在尝试把多模态融入,让 LLM 成为一个支持多模态输入输出的通用人机接口,典型的例子包括 DeepMind 的 Flamingo 和微软的 “Language Models are General-Purpose Interfaces”,上图展示了这种方式的概念结构。

LLM从NLP向外进行领域拓展,一个自然的选择就是图像处理及多模态相关任务。目前已经有些工作在尝试把多模态融入,让LLM成为一个支持多模态

更新时间 2024-01-22