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

知识分享系列五:大模型与AIGC

大模型(LLM,Large Language Mode)是指通过在海量数据上依托强大算力资源进行训练后能完成大量不同下游任务的深度学习模型。大模型主要用于进行自然语言相关任务,给模型一些文本输入,它能返回相应的输出,完成的具体任务包括生成、分类、总结、改写等。

2023年以来,ChatGPT引爆全球大模型市场,国内众多大模型先后公测,众多互联网领军者投身大模型事业,使得大模型市场进入“百团大战”阶段,2023年成为公认的“大模型元年”。

企业用户方面,大模型的应用速度之快超乎想象。2023年初,企业管理层对大模型的话题还停留在大模型是什么,是不是概念炒作,现如今,大模型早已经从饭后谈资走向落地应用。大企业管理层们希望了解到大模型能为企业发展带来哪些变革,大模型的应用路径是什么,如何提升大模型的投资回报率,以及应该为拥抱大模型做哪些准备。而且,大模型吸引的人群也愈发广泛,不仅吸引CIO、CTO等技术管理者的关注,CEO、CMO 等非技术类管理者同样期待大模型在业务中发挥价值。这些转变表明,大模型的变革之力正日益得到产业界的认可。

根据“爱分析”的数据显示,2023年中国大模型市场规模约为50亿元(人民币,下同)。2023年,企业在大模型方面的采购特点是论证多、采购少,但各企业纷纷计划在2024年开始大量释放大模型预算,因此市场规模将大幅增长,预计达到120亿元。

希望这篇文章帮助大家对生成式AI大语言模型等建立了更多认知,了解了ChatGPT等火爆应用下的技术根基,在他人为层出不穷眼花缭乱的新应用焦虑时,能看清其中的本质。

目录

一、基本概念

1.1 AI

1.2 机器学习

1.3 监督学习

1.4 无监督学习

1.5 强化学习

1.6 深度学习

1.7 生成式AI

1.8 大语言模型

二、大语言模型

2.1 特点介绍

2.2 Transformer

2.2.1 主要技术

2.2.2 基本原理

2.3 炼成GPT

2.3.1 无监督学习预训练

2.3.2 监督微调

2.3.3 强化学习

2.4 调教GPT

2.4.1 小样本提示

2.4.2 思维链

2.5 武装GPT

2.5.1 索引增强生成

2.5.2 程序辅助语言模型

2.5.3 推理行动结合

参考文献

一、基本概念

在AI技术不断演进的过程中,出现了很多名词,包括机器学习、监督学习、深度学习、生成式AI、无监督学习、强化学习、大语言模型等等,本节来捋一捋它们的关系。先上一张来自于良心B站up主(GenJi是真想教会你)的关系图。

图1 AI相关热点词汇关系图

1.1 AI

AI也叫人工智能,是计算机科学下的一个学科,AI是一个非常大的概念,旨在让计算机系统去模拟人类的智能,从而解决问题和完成任务。早在1956年,AI就被确立为了一个学科领域,在此后数十年间经历过多轮低谷与繁荣。

1.2 机器学习

机器学习是AI的一个子集,它的核心在于不需要人类做“显式编程”,而是让计算机通过算法,自行学习和改进,去识别模式、做出预测和决策。比如如果我们通过代码告诉电脑,图片里有红色的是玫瑰,有橙色的是向日葵,那程序对花种类的判断就是通过人类直接明确编写逻辑达成的,不属于机器学习;但如果我们给电脑大量玫瑰和向日葵的图片,让电脑自行识别模式,总结规律,从而能对没见过的图片进行预测和判断,这种就是机器学习。机器学习领域下有多个分支,包括监督学习、无监督学习、强化学习。

(1)显式编程

(2)机器学习

图2 显式编程与机器学习的区别

1.3 监督学习

在监督学习里,机器学习算法会接受有标签的训练,数据标签就是期望的输出值,所以每个训练数据点都既包括输入特征,也包括期望的输出值。算法的目标是学习输入和输出之间的映射关系,从而在给定新的输入特征后,能够准确预测出相应的输出值。

经典的监督学习任务包括分类(把数据划分为不同的类别)、回归(对数值进行预测)。

分类:难以对猫狗的照片和照片对应的猫狗标签进行训练,然后让模型根据没见过的照片预测是猫还是狗;

回归:拿一些房子特征的数据,比如面积、卧室树是否带阳台等和相应的房价作为标签进行训练,然后让模型根据没见过的房子的特征预测房价。

1.4 无监督学习

和监督学习不同的是,无监督学习的数据是没有标签的,所以算法的任务是自主发现数据里的模式和规律。

经典的无监督学习任务包括聚类(把数据进行分组,比如来一堆新闻文章,让模型根据主题或内容的特征自动把相似文章进行组织)。

1.5 强化学习

强化学习则是让模型在环境里采取行动,获得结果反馈,从反馈里学习,从而能在给定情况下采取最佳行动来最大化奖励或是最小化损失。

强化学习跟训小狗类似,刚开始的时候小狗会随心所欲做出很多动作,但随着与训犬师的互动,小狗会发现某些动作能够获得零食,某些动作没有临时,某些动作甚至会遭受惩罚。通过观察动作和奖惩之间的联系,小狗的行为会逐渐接近训犬师的期望。

强化学习可以应用在很多任务上,比如说让模型下围棋,获得不同行动导致的奖励或损失反馈,从而不停在游戏里优化策略,学习如何采取行动达到高分。

1.6 深度学习

深度学习也是机器学习的子集,但不属于监督学习、无监督学习和强化学习的任何一类。深度学习是机器学习的一个方法,核心在于使用人工神经网络模仿人脑处理信息的方式,通过层次化的方法提取和表示数据的特征。神经网络是由许多基本的计算和储存单元组成,这些单元被称为神经元,这些神经元通过层层连接来处理数据,并且深度学习模型通常有很多层,因此称为深度。

比如要让计算机识别小猫的照片,在深度学习中,数据首先被传递到一个输入层,就像人类的眼睛看到图片一样;然后数据通过多个隐藏层,每一层都会对数据进行一些复杂的数学运算,来帮助计算机理解图片中的特征,例如小猫的耳朵、眼睛等等;最后计算机会输出一个答案,表明这是否是一张小猫的图片。

神经网络可以用于监督学习、无监督学习、强化学习,所以深度学习不属于它们的子集。

图3 深度学习示意图

1.7 生成式AI

生成式AI是深度学习的一种应用,它利用神经网络来识别现有内容的模式和结构,学习生成新的内容,内容形式可以是文本、图片、音频、视频等。

1.8 大语言模型

大语言模型也叫LLM(Large Language Model),也是深度学习的一种应用,专门用于进行自然语言处理任务。大语言模型里面的大字说明模型的参数量非常大,可能有数十亿甚至到万亿个,而且训练过程中也需要海量文本数据集,所以能更好的理解自然语言以及生成高质量的文本。

大语言模型的例子有非常多,比如国外的GPT、LLaMA,国内的ERNIE、ChatGLM等,可以进行文本的理解和生成。以GPT3这个模型为例子,它会根据输入提示以及前面生成过的词,通过概率计算,逐步生成下一个词或token来输出文本序列。

但不是所有的生成式AI都是大语言模型,而所有的大语言模型是否都是生成式AI这也存在些许争议。前半句很好理解,生成图像的扩散模型就不是大语言模型,它并不输出文本。

同时有些人认为不是所有大语言模型都是生成式AI。这是因为有些大语言模型由于其架构特点不适合进行文本生成,比如,谷歌的BERT模型。BERT模型的参数量和训练数据很大,属于大语言模型。在应用方面,BERT理解上下文的能力很强,因此被谷歌用在搜索上,用来提高搜索排名和信息摘要的准确性;它也被用于情感分析、文本分类等任务;但同时BERT不擅长文本生成,特别是连贯的长文本生成,所以有些人认为此类模型不属于生成式AI的范畴。

二、大语言模型

2.1 特点介绍

大语言模型首先需要通过大量文本进行无监督学习,借助海量文本数据,模型能更多了解单词与上下文之间的关系,从而更好地理解文本的含义,并生成更准确的预测。

大语言模型的“大”,不止是指训练数据量的巨大,也是指参数(模型内部变量,可以理解为是模型在训练过程中学到的知识,参数决定了模型如何对输入数据做出反应,从而决定模型的行为)的巨大。在过去的语言模型研究中发现,用更多的数据和算力来训练具有更多参数的模型,很多时候能带来更好的模型表现,特别是当参数大于一定的规模后,模型就能举一反三,具备很多预料之外的能力。以OpenAI的大模型GPT1为例,它有1.17亿个参数;到了GPT2参数有15亿个,而GPT3的参数又增长到了1750亿个。这让大模型不像小模型那样局限于单项或某几项任务,而是具有更加广泛的能力,比如在这之前我们可能要训练单独的模型,分别去做总结、分类、提取等等任务,但现在一个大模型就可以搞定这一切,像ChatGPT、文心一言、通义千问等AI聊天助手,都是基于大语言模型的应用。

如果说2022年年底,ChatGPT的惊艳亮相是大语言模型公众认知被显著提升的里程碑,那它技术发展的里程碑其实要回溯到2017年。2017年6月,谷歌团队发表论文《Attention is all you need》,提出了Transformer架构,自此自然语言处理的发展方向被改变了,随后出现了一系列基于Transformer架构的模型。所以大语言模型的发展早就如火如荼了,并不是像很多人以为的到了2022年才有所突破。但因为ChatGPT直接向公众开放,而且能让用户在网页上用对话的方式进行交互,体验很流畅丝滑,大众的目光才被吸引过去。

2.2 Transformer

2.2.1 主要技术

ChatGPT背后的模型GPT,首字母分别表示Generative Pre-trained Transformer,即生成式预训练Transformer,也表明Transformer是其中的关键。

在Transformer架构被提出之前,语言模型的主流架构主要是循环神经网络,简称RNN,Recurrent Neural Network。RNN有两个较大的弊端:

(1)无法并行计算,训练效率低:RNN按顺序逐字处理,每一步的输出取决于先前的隐藏状态和当前的输入,要等上一个步骤完成后才能进行当前的计算;

图4 RNN按顺序逐字处理

(2)RNN不擅长处理长序列,也就是长文本:由于RNN的架构特点,词之间距离越远,前面对后面的影响越弱,所以它难以有效捕获到长距离的语义关系,但在人类自然语言中,依赖信息之间的距离较远是很常见的情况。

图5 RNN无法很好关联较远信息间的依赖

为了捕获长距离依赖性,后来也出现了RNN的改良版本——LSTM长短期记忆网络。但是这也并没有解决传统RNN的无法并行算的问题,而且在处理非常长的序列时也依然受到限制。

图6 RNN与LSTM

后来,Transformer踏着七彩祥云出现了,它有能力学习输入序列里所有词的相关性和上下文,不会受到短时记忆的影响。能做到这一点的关键在于Transformer的自注意力机制。

(1)主要技术一:自注意力机制

简单来说,Transformer在处理每个词的时候,不仅会注意这个词本身以及它附近的词,还会去注意输入序列里所有其他的词,然后其余每个词不一样的注意力权重。权重是模型在训练过程中通过大量文本逐渐习得的,因此Transformer有能力知道当前这个词和其他词之间的相关性有多强,然后去专注于文本里真正重要的部分。即使两个词的位置隔得很远,Transformer依然可以捕获到他们之间的依赖关系。比如这个例子,单从语法上来讲,it可以指的是离得更近的street,也可以是离得更远的animal。这里,自注意力机制捕获到了it和animal之间更强的关系,因此更集中在animal上。

图 7 自注意力机制说明

(2)主要技术二:位置编码

除了自注意力机制,Transform的另一项关键创新是位置编码。在语言里,顺序很重要,即使句子里包含的字都是一样的,顺序不一样也能导致意思大相径庭,这是为什么自然语言处理领域会用序列这个词,因为它表示一系列按照特定顺序排序的元素。前面提到RNN和人类阅读文本一样,对输入序列同样是按顺序依次处理,这就造成了训练速度的瓶颈,因为只能串行,没办法并行,也就是没法同时去学习所有信息。

Transforming再把词输入给神经网络前,除了会先对词进行嵌入转换成向量,也就是把词各用一串数字表示,还会把每个词在句子中的位置也各用一串数字表示,添加到输入序列的表示中,然后把这个结果给神经网络大模型,既可以理解每个词的意义,又能够捕获词在句子中的位置,从而理解不同词之间的顺序关系。借助位置编码,词可以不按顺序输入给Transformer,模型可以同时处理输入序列里的所有位置,而不需要像RNN那样依次处理。那么在计算时,每个输出都可以独立的计算,不需要等待其他位置的计算结果,这大大提高了训练速度,训练速度一快,训练出巨大的模型也不是那么难了。

图8 位置向量与词向量

自《Attention is All You Need》发表之后,Transformer以及它的变体已经被普遍运用在大型数据集上来训练大语言模型。所以Transformer架构对我们当下能拥有那么多牛叉的大语言模型功不可没。

2.2.2 基本原理

在《Attention is All You Need》的论文里,Transformer可以被看作由两个核心部分组成,编码器encoder以及解码器decoder。

图9 Transformer主要结构

假如我们要这个Transformer做英语翻译法语的任务,给编码器输入一句英语,解码器返回对应的法语。这个过程中发生了什么呢?

(1)编码器部分

① token化

我们先看编码器部分,输入的文本首先会被token化,也就是先把输入拆分成各个token。Token可以被理解为是文本的一个基本单位,短单词可能每个词是一个token,长单词可能被拆成多个token,取决于不同的token化方法。每个token会被用一个整数数字表示,这个数字被叫做token ID,这样做是因为计算机内部是无法储存文字的,任何字符最终都得用数字来表示。

图10 token化过程

② 向量嵌入

有了数字表示的输入文本后,再把它传入嵌入层。嵌入层的作用是让每个token都用向量表示,向量可以被简单的看为一串数字。为了方便示意,这里把向量长度简化为三,但实际中向量长度可以非常长。

图11 向量嵌入过程

问题来了,之前明明已经有单个整数表示各个token了,怎么现在又要用一串数字表示各个token?其中一个原因是,一串数字能表达的含义是大于一个数字的,能包含更多语法、语义、信息等等。这就好比男人和女人这两个词,他们都在描述人类,但性别又是完全相反的。如果只用一个数字表示,这两个数字大小之间应该距离很大,还是应该距离很小的;但如果有多个数字,我们就可以进行更多维度的表示,就比如说第一个数字可以表示性别,第二个表示年龄大的程度,第三个表示社会阶层高的程度。所以,嵌入层的向量不是随便搞出来的,里面包含了词汇之间,语法语义等关系。相似的词所对应的嵌入向量,在向量空间里距离也更近,而一些没啥关系的词之间的距离就更远。这有助于模型通过计算向量空间里的距离,去捕捉不同词在语义和语法等方面的相似性。而且,男人与国王的差异,和女人与女王的差异可以被看作是相似的,这也可以在多维向量空间里展现。因此词向量不仅可以帮模型理解词的语义,也可以捕捉词与词之间的复杂关系。我们这里为了直观是用三维向量空间表示的,把向量长度相应简化成了3,而提出Transformer的论文里向量长度是512,GPT3是12288,所以可以想象能包含多少信息。

图12 向量空间示意图

通过编码器的嵌入层得到此向量后,下一步是对向量进行位置编码。位置编码就是把表示各个词在文本里顺序的向量和上一步得到的词向量相加,然后把得到的结果传给编码器。这样做的意义是模型既可以理解每个词的意义,又能够捕捉词在句子中的位置,从而理解不同词之间的顺序关系。

③ 位置编码

图13 位置编码过程

④ 编码器

接下来就到了编码器这个核心部分,它的主要任务是把输入转换成一种更抽象的表示形式,这个表示形式也是向量,即一串数字,里面既保留了输入文本的词汇信息和顺序关系,也捕捉了语法语义上的关键特征。

图14 编码器编码过程

捕捉关键特征的核心是编码器的自注意力机制。模型在处理每个词的时候,不仅会关注这个词本身和它附近的词,还会关注输入序列中所有其他词。自注意力机制通过计算每对词之间的相关性来决定注意力权重。如果两个词之间的相关性更强,他们之间的注意力权重就会更高。比如这个例子,单从语法上来讲,it可以指animal,也可以指street,而自注意力机制发现it与animal更强的关联,所以给animal的权重会更大一些。

图15 自注意力机制示意图

由于自注意力机制对上下文的全面关注,在输出的表示结果里不仅包含这个词本身的信息,还融合了上下文中的相关信息,上下文在语言里很重要,也能揭露相同词的不同含义。所以在解码器输出的结果里,表示各个词的向量会根据上下文信息进行调整,同一个词根据上下文有不同的抽象表示。

图16 词本身的信息和上下文信息融合

自注意力机制涉及到很多计算步骤,这里主要是做个简单的科普,更多细节可以在论文原文里了解。而且Transformer实际上使用了多头自注意力,也就是编码器不只有一个自注意力模块,而是有多个,每个头都有它自己的注意力权重,用来关注文本里不同特征或方面,比如有的关注动词,有的关注修饰词,有的关注情感,有的关注命名实体等等。而且他们之间可以做并行运算,也就是计算进展上互不影响。每个字注意力头的权重都是模型在之前的训练过程中,从大量文本里逐渐学习和调整的。在多头自注意力后面还有一个前馈神经网络,它会对自注意力模块的输出进行进一步的处理,增强模型的表达能力。

图17 前馈神经网络

编码器在Transform里不止有一个,实际上是有多个堆叠到一起,每个编码器内部结构一样,但不共享权重。这样模型能更深入的理解数据处理更复杂的文本语言内容。

图18 编码器堆叠

(2)解码器部分

解码器是大语言模型生成一个个词的关键。通过前面的编码器,我们有了输入序列里各个token的抽象表示,可以把它传给解码器。解码器还会先接收一个特殊值,这个值表示输出序列的开头。这样做的原因是解码器不仅会把来自编码器的输入序列的抽象表示作为输入,还会把之前已经生成的文本也作为输入,来保持输出的连贯性和上下文相关性。刚开始的这轮还没有任何已生成的文本,所以把表示开头的特殊值先作为输入。

图19 解码器示意图

具体的生成过程仍然是要经过多个步骤。

① 带掩码的多头自注意力

首先,和编码器一样,文本要经过我们已经了解过的嵌入层和位置编码,然后被输入进多头自注意力层。但它和编码器里的自注意力层有点不一样。当编码器在处理各个词的时候,它会关注输入序列里所有其他词,但解码器中自助力只会关注这个词和它前面的其他词,后面的词要被遮住不去关注。这样做是为了确保解码器生成文本时遵循正确的时间顺序,不能给他偷看到后面。在预测下一个词时,只使用前面的词作为上下文,这种类型的多头自注意力被叫做带掩码的多头自注意力。

图20 带掩码的多头自注意力机制

② 另一个多头自注意力层

带掩码的多头自注意力是针对已生成的输出序列的,解码器还有个多头自注意力层,这里就是前面编码器所输出的输入序列的抽象表示所派上用场的地方。注意力会捕捉编码器的输出和解码器即将生成的输出之间的对应关系,从而将原始输入序列的信息融合到输出序列的生成过程中。

图21 解码器的两个多头自注意力层

③ 前馈神经网络、线性层和Softmax层

解码器里的前馈神经网络(Feed Forward)作用和编码器里的类似,也是通过额外的计算来增强模型的表达能力。而且和编码器一样,解码器同样是多个堆叠到一起的这可以增加模型的性能,有助于处理复杂的输入输出关系。

解码器的最后阶段包含一个线性层和一个Softmax层,他们俩加一块儿的作用是把解码器的输出表示转换为词汇表的概率分布。

图 22 线性层和Softmax层

词汇表的概率分布代表下一个被生成token概率,那么有些token的概率就会比其他的高。在大多数情况下,模型会选择概率最高的token作为下一个输出。那现在我们知道了解码器本质上是在猜下一个最可能的输出,至于输出是否符合客观事实,模型无从得知。所以我们能经常看到模型一本正经的胡说八道,这种现象也被叫做幻觉。

图23 词汇表的概率分布

解码器的一整个流程会重复多次,新的token会持续生成,直到生成的是一个用来表示输出序列结束的特殊token,那现在我们就拥有了来自解码器的完整输出序列。

(3)各类Transformer架构

以上描述的是《Attention is all you need》里的原始Transformer,编码器用来理解和表示输入序列,解码器用来生成输出序列。实际上在原始架构的基础上,后续出现了一些变种,主要有三个类别:仅编码器、仅解码器以及编码器解码器。

图24 Transformer主要架构

① 仅编码器模型

仅编码器模型也叫自编码器模型,只保留了原始架构里的编码器,BERT就是这种模型的一个例子。此类模型适用于理解语言的任务,比如掩码语言建模,也就是让模型猜文本里被遮住的词是什么。情感分析,让模型判断文本情感是积极还是消极等等。

② 仅解码器模型

仅解码器模型也叫自回归模型,只保留了原始架构里的解码器,GPT系列都是这种模型的例子。这类模型非常擅长通过预测下一个词来实现文本生成。我们已经在ChatGPT身上见识过了。

(3)编码器解码器模型

编码器解码器模型也叫序列到序列模型,同时保留了原始架构里的编码器和解码器,T5、BART都是这种模型的例子。此类模型适用于把一个序列转换成另一个序列的任务,比如翻译总结等等。

2.3 炼成GPT

要得到一个ChatGPT拢共分几步,需要四步。

(1)第一步:通过大量的文本进行无监督学习预训练,得到一个能进行文本生成的基座模型。

(2)第二步:通过一些人类撰写的高质量对话数据对基座模型进行监督微调,得到一个微调后的模型,此时的模型除了续写文本之外,也会具备更好的对话能力。

(3)第三步:用问题和多个对应回答的数据,让人类标注员对回答进行质量排序,然后基于这些数据训练出一个能对回答进行评分预测的奖励模型。

(4)第四步:接下来让第二步得到的模型对问题生成回答,用奖励模型给回答进行评分,利用评分作为反馈进行强化学习训练。

2.3.1 无监督学习预训练

在第一步的预训练中,首先需要海量文本作为原料,让模型从中学习。比如GPT3这个基座模型的训练数据有多个互联网文本语料库,覆盖书籍、新闻文章、科学论文、维基百科、社交媒体、帖子等等,训练数据的整体规模是3000亿的token。其中,短的英文单词可能一个词是一个token,而长的词可能被分为多个token。而中文的话所占的token数量会相对更多,有些字要用一个甚至更多token表示。

图25 GPT3的训练数据

有了大量可用于训练的文本后,要采用无监督学习的方式训练模型。和无监督学习相对的是,监督学习模型会接受有标签的训练数据,标签就是期望的输出值,所以每个训练数据点都既包括输入特征,也包括期望输出值。而无监督学习则是让模型在没有标签的数据上进行训练,所以模型要自己找出数据中的结构和模式。以GPT3为例,训练过程中它会利用海量文本自行学习人类语言的语法语义,了解表达结构和模式。具体来说,模型会先看到一部分文本,基于上下文尝试预测下一个token,然后通过比较正确答案和它的预测,模型会更新权重,从而逐渐能根据上文来生成合理的下文。并且随着见过的文本越来越多,它生成的能力也会越来越好。但预训练并不是一个容易的过程,也是这四个步骤里最耗时费力烧钱的。以GPT3为例,虽然官方还没有公布准确数据,但大体估计他经过了数月的训练,用了成千上百个V100 GPU烧了几百万美元。

2.3.2 监督微调

预训练的结果是得到一个基座模型,基座模型并不等同于ChatGPT背后的对话模型。因为此时模型有预测下一个偷看的能力,会根据上文补充文本,但并不擅长对话。比如,你给它一个问题,它可能模仿上文帮你继续生成更多的问题,但不回答你的问题。为了解决这点,我们需要进行第二步,对基座模型进行微调。

微调就是在已有模型上做进一步的训练,会改变模型的内部参数,让模型更加适应特定任务。换句话说,为了训练出一个擅长对话的AI助手,需要给基座模型看更多的对话数据,但微调的成本相比预训练低很多,因为需要的训练数据规模更小,训练时长更短。

图26 监督微调示意图

在监督微调过程中,模型不需要从海量文本学习了,而是从一些人类写的专业且高质量的对话里学习。这相当于既给了模型问题,也给了模型我们人类中意的回答,属于监督学习,所以这一过程被叫做监督微调,Supervised Fine-Tuning,简称SFT,完成后会得到一个SFT模型,它与步骤一里的基座模型相比,更加擅长对问题做出回答。

2.3.3 强化学习

为了让模型的实力继续被提升,还可以进行第三步和第四步,让SFT模型进行强化学习。强化学习是让模型在环境里采取行动,获得结果反馈,从反馈里学习,从而能在给定情况下采取最佳行动来最大化奖励或最小化损失。

图27 强化学习示意图

强化学习的过程跟训小狗类似,随着和训犬师的互动,小狗会发现某些动作能获得零食,某些动作没有零食,某些动作甚至会遭受惩罚,通过观察动作和奖惩之间的联系,小狗的行为会逐渐接近训练时的期望,要让ChatGPT的模型乖乖当一个乐于助人的AI助手也是一样的道理。我们可以让ChatGPT对问题做出回答,然后让人类评估员去给回答打分,打分主要是基于3H原则(Helpful有用性、Honest真实性、Harmless无害性)。如果打分高的话,模型能学习到要再接再厉;如果打分低的话,模型就学习到要予以改正。

但是靠人类给回答一个个打分,成本极高效率极低,所以在强化学习前需要训练一个奖励模型,它是从回答以及回答对应的评分里学习得到的,得到评分数据的方式是让微调后的GPT模型,也就是第二步里得到的SFT模型,对每个问题生成多个回答,然后让人类标注员对回答质量进行排序。虽然还是免不了要借助标注员的劳动,但一旦有了足够的排序数据,就可以把数据用在训练奖励模型上,让奖励模型学习预测回答的评分。

图28 ChatGPT强化训练过程

强化学习里,ChatGPT模型的最初参数来自之前得到的SFT模型,但会随着训练被更新;奖励模型的参数则不再会被更新,它的任务就是对模型生成的内容打分。在经过一轮又一轮迭代后,模型会不断优化策略,回答的质量会进一步提升,强大的ChatGPT就在不断学习中炼成了。

2.4 调教GPT

ChatGPT等AI聊天助手有时候像个博览群书又善解人意的天才,有时候像个喝了二两酒后前言不搭后语的傻子。针对这种现象,越来越多人开始研究怎么调教出一个聪明的AI聊天助手。提示工程就是研究如何提高和AI的沟通质量及效率的,核心关注提示的开发和优化。

图 29 ChatGPT的胡说八道现象

提示就是我们给AI聊天助手输入的问题或指令,AI会根据提示内容给予回应。在进入提示工程之前,我们先要了解ChatGPT的聊天助手存在的局限性。他们背后的大语言模型是用海量文本训练出来的,因此擅长模仿人类语言表达,也从那些内容里学到了不少知识。他们的回应都是根据提示以及前面已生成的内容,通过持续预测下一个token的概率来实现的。但同时对于他们不了解的领域,他们并不知道自你缺乏那方面的知识,简单来说就是使劲猜后面应该说什么,加上生成过程中也没有反思能力,所以会经常看到胡说八道的同时还充满着自信。

图30 提示与回答

2.4.1 小样本提示

为了调教AI给出想要的回答,第一个办法是用小样本提示。我们很多时候都是直接丢问题或指令给AI这种属于零样本提示,就是没有给AI任何示范,不一定和我们想要的效果相符。但如果我们让AI回答前给他几个对话作为示例,用样本对他进行引导,AI模型就会利用上下文学习能力,一方面记忆那些内容作为知识,另一方面像示范那样模仿着进行回应。有了小样本提示后,再问AI类似的问题,他就能给出和提示示范相似的回答了。小样本提示的另一个好处是,由于AI回应的内容风格会大概率遵循我们给的示范,我们也就不用多费口舌给AI提要求,可以让它自行从前面的示范回答里领悟。

图31 小样本提示

2.4.2 思维链

小样本提示有时也起不到很大的作用,比如AI非常不擅长做数学相关问题,即使我们用样本示范一些正确的结果,到它做的时候依然掉链子,比如下面的例子里面,所有奇数相加后的结果是四十一不是三十七,但问题在于AI生成每个token所用的时长是差不多的,不会因为某个词需要涉及更多的思考而花费更多时间生成那个token,所以计算结果就被他糊弄过去了,前面有正确的示范答案也没有什么帮助,这时候可以借助思维链。

图32 AI计算数学题

思维链最早是谷歌在2022年1篇论文里提出的,作者发现思维链可以显著提升大语言模型进行复杂推理的能力,特别是在算术常识和符号推理等任务上。运用思维链的方法是我们给AI的小样本提示里不仅包含正确的结果,也展示中间的推理步骤,AI在生成回答时也会模仿着去生成一些中间步骤,把过程进行分解,这样做的好处是肚子小点不容易因为步子太大而扯着,就像被老师点名回答问题时,站起来瞬间就给出正确答案的难度系数很高,但如果说多说些废话,把思考步骤也讲出来,一方面可以拖时间,有更多思考机会,另一方面也有助于我们分步骤想,更有机会得到正确答案。

图33 思维链示意

思维链也可以用在数学计算之外的很多方面,借助思维链,AI可以在每一步里把注意力集中在当前思考步骤上,减少上下文的过多干扰,因此针对复杂的任务有更大概率得到准确的结果。在思维链的相关论文里,作者还提到,即使我们不用小样本提示,只是在问题后面加一句let’s think step by step,让我们来分步骤思考,也能提升AI得到正确答案的概率。这是一种成本非常低的方法,只需要加上简单一句话,AI就会自行生成中间步骤进行推理。

2.5 武装GPT

ChatGPT之类的AI大语言模型虽然博览群书,但在某些方面也始终存在短板,比如编造事实、计算不准确、数据过时等等。为了应对这些问题,可以借助一些外部工具或数据把AI武装起来。实现这一思路的框架包括RAG(索引增强生成)、PAL(程序辅助语言模型)、ReAct(推理行动结合)。

2.5.1 索引增强生成

AI大语言模型所拥有的知识受到训练数据的影响,如果训练数据里对某个领域的文本覆盖不多,AI学到的也不多,就没法很好的帮我们回答相关问题,因此在小众细分领域上,AI的表现有可能不尽人意。而且像公司内部数据,个人私密文件等,也都不可能作为公开大语言模型的训练数据,我们没法指望ChatGPT能帮我们回答相关问题。一个应对方法就是我们可以提供外部文档,让模型访问外部知识库,获得实时且正确的数据,生成更可靠和准确的回答。这种架构叫做检索增强生成Retrieval Augmented Generation(RAG)。

具体来说,外部知识文档要先被切分成一个个段落,因为大语言模型一次性能接收的文本长度有限,然后每个段落会被转换成一系列向量。向量可以被看作是一串固定长度的数字,然后储存进向量数据库里。当我们提出问题的时候,输入的提示也会被转换为向量,然后查找向量数据库里和用户的查询向量最为接近的段落向量。找到以后,段落信息会和原本的用户查询问题组合到一起,一块传给AI,这样AI就能把外部文档的段落作为上下文,其余里面的信息给出更严谨的回答。因此你可以对外部文档里任何内容进行疑问,即使AI模型从来没有受到过那些内容的训练。

图34 向量数据库生成过程

图35 查找向量数据库

RAG有利于搭建企业知识库或个人知识库,ChatGPT的一些插件就是基于RAG架构的,官方也推出了上传PDF后,对PDF提问的功能,如果你会使用GPT的API,还可以用代码实现自己的增强索引生成。

2.5.2 程序辅助语言模型

大语言模型还有一个问题是我们没法把它用作计算器。当我们问他一个数学计算后,他没有真正帮忙做计算,只是在猜下一个最可能出现的token来生成回答。如果我们想让AI充当网店客服,他虽能巧舌如簧的介绍产品,却也会告诉客户错误的订单总额,这很危险。但是如果我们不要他做计算,而是把计算后的结果告诉他?

Program-Aided Language Models(程序辅助语言模型),简称PAL,可以帮助我们应对此类问题,它最早在2022年1篇论文里被提出。PAL的核心在于我们不让AI直接生成计算结果,而是借助其他善于做计算的工具,比如Python,我们给AI的要求变成了在设计计算步骤时生成得到计算结果所需的代码。

图36 PAL应用

具体来说,首先为了让AI遵循我们的要求,可以借助思维链。首先在提示里通过小样本提示给模型示范如何分步骤思考,写出解决问题所需的变量赋值、数学运算等等代码,让模型照猫画虎。

图37 借助思维链提取变量等

在用户提问后,把用户的问题和我们已有的提示模板进行拼接,一并给到AI,让AI生成代码。接下来把AI返回的回答给到Python解释器,让Python解释器执行,并返回计算的结果。这个结果可以再给回到AI,让AI带着计算答案对用户的问题进行妥善回复。那相当于我们借用了大语言模型接受问题的耳朵、思考的脑子、说话的嘴,以及代码解释器做运算的手。

图38 Pyhton解释器生成结果

ChatGPT的Advanced Data Analysis功能可以被看成PAL的一个示例。借助内置的python解释器,ChatGPT能用编程逻辑和代码执行更准确的解答问题。如果会写代码的话,结合GPT的API自行实现程序辅助也是比较容易的。

图39 ChatGPT的Advanced Data Analysis功能

2.5.3 推理行动结合

AI大语言模型还有一个局限性,那就是它所了解的知识天然受到训练数据日期的影响,比如说模型是去年训练完成的,训练数据里必然不包含今年的新闻,但模型也无从得知训练完成后发生的事情,这被称为知识截断。当我们问模型最近发生的事实时,模型要么会回复已经过时的信息,要么会胡编乱造一通,但重新训练模型的成本又是相当高的,也无法彻底解决数据过时的问题。

如果AI能对不了解的知识上网搜索,把找到的答案告诉我们就好了。但它怎么知道要去浏览什么网站,浏览时应该关注什么关键词,去找相关信息呢?2022年,一篇标题为《ReAct:在语言模型中协同推理与行动》的论文提出了ReAct框架,它不是热门前端框架那个react,而是Reason和Action,推理与行动结合的意思。React的核心在于让模型进行动态推理,并采取行动与外界环境互动,它同样可以和思维链结合。

我们会用小样本提示展示给模型一个推理与行动结合的框架,也就是针对问题把步骤进行拆分,每个步骤要经过推理、行动观察。推理是针对问题或上一步观察的思考,行动是基于推理与外界环境的一些交互,比如用搜索引擎对关键字进行搜索,观察是对行动得到的结果进行查看。

举个例子,如果问一个知识阶段在2022年1月的AI大约模型,2022年欧冠的冠军是哪个球队?他是无法回答上来的,但如果把搜索引擎作为AI可交互的工具,结合ReAct框架,他得到答案的过程可能会是这样:

(1)首先针对问题他会思考,要回答这个问题需要去查找赛果信息。这个AI能借助Bing,所以他的后续行动是搜索。

(2)接下来他开始观察行动带来的结果,也就是得到了一系列包含欧冠信息的网页。针对上一步行动的结果,他开始了新一轮推理,某个新闻网站的链接标题提到了决赛,所以可能包含需要的信息,因此对应这一步的行动就是点进那个链接。

(3)进入网页后,他观察到有一段话提到了夺冠球队,并且有决赛对手和比分信息。于是针对这些信息,他继续思考下一步应该进行引用,给用户提供答案。因此最后一步行动就是把查到的信息进行总结,告知用户最终答案。

图40 ReAct解题过程

通过ReAct可以看到模型一步步接近答案的任务解决轨迹与人类很相似了。通过分布推理的思维链,模型不仅可以获得更准确的答案,而且我们也可以通过这些轨迹进行验证。观察和行动步骤增加了与外界环境的交互,能够帮助模型突破一些固有限制,比如在搜索引擎输入关键字,查看网页上的信息等等,可以减少知识阶段带来的影响。将ChatGPT的Web Browsing功能,就是增加了与Bing搜索进行交互的能力,从而能够回答实时信息。这有利于用户对信息来源的可靠性和真实性进行验证。

而且ReAct框架的action行动不专指搜索和浏览网页,而是AI大语言模型所支持的任何行动。比如如果模型可以和代码解释器交互,那运行代码可以被作为行动选项;如果模型可以访问外部文档,那从文档里查找关键字可以被作为行动选项;如果模型可以调用某个应用的API,那和那个应用交互也可以被作为行动选项。要把不同外部数据和工具为模型所用,用代码实现的话,可以借助langchain等框架,帮助简化构建大语言模型应用程序的流程。

参考文献

1. 2023大模型厂商全景报告——爱分析

2. 【包教包会】一条视频速通AI大模型原理——GenJi是真想教会你——https://www.bilibili.com/video/BV17t4218761?p=1&vd_source=b5a8d779f9baa477c71fc9faad3e2e0c

3. ChatGPT调研报告——哈工大

更新时间 2024-05-26