当前位置:   article > 正文

如何构建和训练ChatGPT【复旦大学自然语言处理实验室】

chatgpt在线训练

点击蓝字

fdfd2fe48948032057d3e382431a776e.jpeg

关注我们

AI TIME欢迎每一位AI爱好者的加入!

郑骁庆

复旦大学计算机科学技术学院副教授、博士生导师,美国麻省理工学院International Faculty Fellow,加州大学洛杉矶分校访问学者,主要研究方向为自然语言处理和机器学习,在Computational Linguistics、NeurIPS、ICLR、ACL、AAAI、IJCAI、EMNLP、WWW、T-ASL等自然语言处理和人工智能领域的顶级国际会议和期刊发表论文50余篇。

    2022年11月美国人工智能研究实验室OpenAI发布了聊天机器人ChatGPT,它能使用英语、汉语、法语等多种人类语言写诗做对、编写程序、回答问题、翻译撰文、闲聊对话等。发布后仅三个月,用户量就突破了一个亿,也使得OpenAI的估值也达到290亿美元。近一年多来,学术和工业界已经诞生了上百个类似的生成式语言大模型,甚至还出现了多模态(包括文本、图像、音频、视频等不同媒体类型)生成式大模型,相关构建和训练技术与方法的“神秘面纱”也慢慢被揭开了。

    构建类似ChatGPT的语言大模型一般包括语言模型提示精调强化学习三个主要训练步骤,其中第一步大语言模型的训练要求较高的硬件条件和海量的数据资源,技术难度反而相对较低,而第三步使用强化学习实现对人类期望对齐既有在技术上有一定挑战,又需要多次人工标注反馈,因而实现上有一定困难。本文先用简单介绍ChatGPT的基本原理和使用方法,然后希望以通俗易懂方式介绍类似ChatGPT模型的构建和训练的完整过程(重点介绍使用强化学习与人类期望对齐这一步)。

一、深度学习与语言模型

    深度学习就是用层数较多(深)的人工神经网络从数据中学习输入与输出之间映射关系的算法,而人工神经网络是受生物神经网络的结构和功能启发下设计的计算模型。

    用深度学习训练得到的网络就叫深度神经网络,它可以简单看成一个函数,能够完成任何输入到输出的转换。比如:我们可以用它玩成语补全的游戏,输入成语的前三个字,让网络输出最后一个字(见图1)。

22ee7374ec5a34f3bb45a4f7e1b5ab00.png

图1.成语补全的深度神经网络

    语言模型可以看成是成语补全的扩展版,它能够给定任意上文的情况下,预测下一个字或词。比如:输入“床前明月光,疑是地”,模型会输出“上”,然后将“上”添加到原输入中变成“床前明月光,疑是地上”,再输入到模型中,则会输出“霜”。如此这般,可以生成出完整的唐诗《静夜思》。使用这样的语言模型就可以完成文本生成任务了,类似技术被称为生成式人工智能(当然也还要包括生成图像、声音和视频等等啦)。

    能够依据多长的上文来预测下一个字或词对模型的性能影响较大,目前一般从几千到几万个字或词不等,能够处理的上文越长,模型越强大。很多情况下,相同的上文,可以有多个不同的下文,所以模型输出实际上是不同可选字或词的概率分布。基于这些概率分布,使用随机采样方法就可以为同一个上文生成不同的下文,这种能力对于ChatGPT这种聊天和对话模型非常有用,因为它可以带来回答的多样性。

二、ChatGPT训练三步走

    第一步语言模型“学会说话”:我们用深度神经网络来训练语言模型,先收集包含了各种语言(英文、中文、法文等)的尽可能多的文本,每次随机抽一段上文,让模型学会接着往下“背诵” (见图2)。由于看过和背过的文字实在是太多了(实际训练使用了几乎所有能从各种渠道获得的文字和图书资源),模型就可以像模像样地说话了。训练时除了使用海量文本,还会包括大量的代码(就当普通文本一样对待)。一般认为代码有助于提高模型的“逻辑推理”能力,因为代码实现的算法就是对求解问题所需逻辑步骤的描述。

10e456eddfa4b6e636de5d920605a1f4.png

图2. 使用海量包含多种语言的文本训练语言模型

    第二步提示精调“理解意图”:光会文字接龙肯定是不够的,最终目标是要用它来替我们干活的。所以这一步我们让模型统一以“给上文、补下文”方式来学习完成各种各样的任务。问答任务直接可以用“给上文(问题)、补下文(回答)”方式实现,但有些任务还需要在上文中加上提示(见图3)。以翻译为例,除了告诉模型需要翻译的内容外,还要指示模型翻译成哪种目标语言。这一步提示学习完成之后,模型即已“博览群书”(第一步)而“胸有成竹”,又能“领会意图”(第二步)而“对答如流”,已经处于基本可用的状态了。

c2ba84c06de73caa3d3bc2a1903e98d3.png

图3. 多任务提示学习让模型学会各种任务(绿色字体为提示语)

    第三步强化学习“反馈择优”:对于某些问题,模型可能会生成带有偏见、歧视或者令人不适的回答。另外,之前提到过,对于同一个问题,模型能够生成多个不同的回答。这一步中我们让人们对同一问题的不同回答进行排序,然后采用强化学习算法(从交互中得到反馈,迭代优化模型的生成策略)进一步调整模型,使其输出更符合人们期望的回答,达到与人们期望对齐的效果(见图4)。

cefff54335cb852167244c5c896619b1.png

图4. 使用强化学习提高模型生成与人们期望相符回答的概率

    经过以上学会说话、理解意图和反馈择优三个主要训练步骤,能够以自然语言对话方式完成各种任务的生成式大模型就构建出来了,之后当然还可以用领域数据或强化学习进一步对模型进行迭代精调。一般而言,模型的规模越大,能够存储和融合的信息和知识就越多,性能也就越好。

情景学习与思维链

    使用ChatGPT时,情景学习(In-context Learning)方法能够显著提高其回答的质量,它的原理其实也非常简单。比如:问一位年幼的孩子4乘以5等于多少,他可能答不上来。但你先告诉他:“1乘以5等于5;2乘以5等于10;3乘以5等于15。”接着再问他:“4乘以5等于多少?”,他回答正确的可能性就增加了。同样,情景学习也是在提问前列举一些相似的例子作为输入喂给模型。

    以影评的情感分析为例(见图5),先给出三个影评及其情感极性(好评、中性和差评),然后让模型分析“看完后让人感慨万分,久久不能忘怀。”的极性。

2e4210478e17997a562d241371792c0c.png

图5. 影评情感分析中使用情景学习的例子

    一般来讲,使用情景学习时,所给出的例子越多越好。这里有一个有趣的现象值得一提,测试表明在所给出的例子中标签(即图5中的“差评”、“中性”和“好评”)是否正确与性能关系不大。比如:我们将“主演表情作作、略显浮夸。”的标签改成“好评”,又将“这部电影叙事紧凑、特技一流。”的标签改成“差评”,并不会影响模型对于影评“看完后让人感慨万分,久久不能忘怀。”的分析结果。但是例子呈现的格式(图5为一则影评后跟相应的情感标签,中间以空格隔开)要与提问形式一致,并且文字内容要来自同一领域(图5中的例子不宜是餐馆或旅店评价的语句,因为问题是对电影

评价的情感分析)。

    我个人认为出现以上现象的原因是:ChatGPT是一种集成了语言运用、语义理解和世界知识的模型。模型其实已经具备了回答所需要的知识,少量的例子并不足于改变模型对于问题的判断和回答,难点是如何引导模型准确提取出与问题相关的知识来。所以情景学习中的例子要来自同一领域,这有利于模型检索出回答问题所需的相关信息和知识。同时,以统一的格式呈现例子和问题,这有利于模型按格式规定的顺序依次生成回答。

    思维链(Chain-of-Thought)可以看成是情景学习的扩展,它不仅给出例子及相应结果,还给出得到该结果的计算或推理步骤(见图6)。本人猜想思维链有效的原因是给模型解题提供了一种模板或过程的指引,这种序列化的文本模板易于被生成模型所使用,它为生成较长内容的整体结构和中间步骤进行了预先的规划。这种模板也为模型在特定步骤上调取计算或推理所需知识提供了约束,从而引导模型得出正确的答案。

3c8842c70c63bb2ceeba5728abfe5b1e.png

图6. 求解数学应用题时使用思维链的例子

四、修改提示语优化结果

    提示语(本文第二节的第二步提到过)的好坏确实会影响ChatGPT的回答质量(情景学习和思维链都可以看成是特殊的提示),现在已经出现了提示工程(Prompt Engineering)这个研究方向和提示工程师这种职位。撰写好的提示语有两个基本原则:

    (1) 指令清晰并且具体;

    (2) 给模型思考的时间。

    第一条原则比较好理解,一般不要担心指令写得过长。在没有冗余的情况下,宜长不宜短。第二条原则的意思是复杂问题不要让模型直接得出结论,而要详细指示所需步骤,然后让模型根据每一步得到的中间结果再给出最终的判断。比如:对于一道比较复杂的数学应用题,不要直接问某个答案是否正确。可以参考以下形式来写提示语:

    第一步:先求解这道数学应用题;

    第二步:将求解出的答案与给出的答案进行比较;

    第三步:根据比较的结果,回答给出的答案是否正确。

    如果以API方式批量调用ChatGPT的话,这里提醒一个小技巧。可以指示ChatGPT以JSON、HTML等结构化形式返回结果,以方便提取所需的内容。

    最近斯坦福大学的Andrew Ng和OpenAI的Isa Fulford联合出了个“ChatGPT Prompt Engineering for Developers”的免费短课,值得听一下。课程的网络链接是https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/

五、能力评估和注意问题

    2022年11月所推出的ChatGPT已经非常可怕了,OpenAI公司又于2023年3月推出比ChatGPT更为强大的GPT-4,并且还开始支持网页搜索、图片生成、计算器等插件(Plugins),使其能够在必要时调用插件来提高解决问题的能力。

    ChatGPT在没有针对医学知识精调和强化的情况下,在美国医学执照考试的三个部分中达到或接近通过的门槛。Google公司对ChatGPT进行了程序员招聘面试,结果其编程能力可匹敌一位三级水平的软件工程师,每年攒得工资可达18.3万美元。ChatGPT还在MBA核心课程《运营管理》的期末考试中的基本运营管理和流程分析方面表现出色,不仅答案正确,而且能给出合理的解释。我们近期借助认知心理学习方面的理论对ChatGPT认知能力进行了评测,它在词汇的任务上表现相对出色,与英语母语的16岁左右高中生的认知能力相当,但逻辑推理和数字处理方面的能力相对较弱,相当于10岁左右的小学生水平,整体表现文强理弱。

    ChatGPT和GPT-4等本质上是能够执行生成任务的机器学习模型,其天生会存在或衍生出以下一些问题:

    (1) “幻觉”问题,即生成看起来似乎可信,但不准确或虚假的信息;

    (2) 容易生成带有偏见、歧视和不符合伦理内容;

    (3) 某些任务的返回结果受提示词的影响较大;

    (4) 缺乏及时更新信息和知识的方法(使用网页搜索插件会有所缓解);

    (5) 使用和交互时可能会泄露个人的隐私;

    (6) 可能被某些人滥用来制造虚假信息和内容等。

六、构建与训练类ChatGPT模型

    第一步:语言模型

    语言模型就是给定任意上文的情况下,预测下一个字或词(实际是Token)的模型。模型结构一般选择Transformer结构的人工神经网络[1](建议从Hugging Face上获取代码)。这一步需要考虑的主要设计因素包括:

    (1)上下文建模的长度(从几千到几万个Token不等);

    (2)模型参数的规模(从数十亿到数千亿不等);

    (3)词表的大小和Tokenization方法(至少应包括中英文的字或词)。

    一般在硬件条件宽裕和训练数据充分的情况下,能处理的上下文越长,模型的参数越多,模型性能也就越好。Tokenization是将较长的、并且不常用的单词拆分成Token,比如将“Misunderstood”拆成“mis + under + stood”三个部分,这样可以大幅减少词表的大小,同时也减少存储词向量所需要的参数数量,还能让模型在词表大小相近的情况下能够包括和处理更多种的人类语言。

fe6521040a430dc9fbba7b71fd1d3eb9.png

图7. GPT采用左侧所示的单向注意力(只计算注意力矩阵下对角线部分),而BERT采用右侧所示的双向注意力机制[3]。

    Transformer作为编码器(Encoder)和解码器(Decoder)使用时计算注意力方式略有不同,前者使用双向注意力(即文本中每个词的上下文相关表示会受到其前后词的影响),而后者采用单向注意力(即文本中每个词的上下文相关表示仅受其前文的影响)。其实双向和单向注意力都可以使用,但是构建ChatGPT选用了基于Transformer的解码器(如图7所示)。除了单向注意力计算代价较小外,文献[2]表明使用单向注意力对于下一个Token预测(语言模型)和零样本学习(Zero-Shot Learning)上表现更佳。不过双向注意力在填空等任务上表现更好。我们猜想类ChatGPT模型在信息抽取方面性能欠佳的原因可能是没有使用双向注意力机制,从而导致实体抽取时较难预测右侧边界(只融合了前文的语义信息)。

    这一步的训练目标比较简单,就是给定任意前文,让模型预测下一个Token。给定任意包含n个Token的文本 x = {X1,X2,...,Xn},其损失函数为:

867eb03fc0f50bab49e31a0914341077.png

    其中:h为最大的上下文建模长度,θ是可调的网络参数。这一步骤过程中,训练技巧对语言模型最终效果影响并不是很显著。一般批次大小(Batch Size)开大一些,学习率(Learning Rate)选小一些,使用恒定学习率和Adamw优化器都可以,遍历一两个Epoch基本就结束了。关键是训练语料的收集和清洗,以及合理设置它们之间的比重。Facebook的LLaMA采用了以下语料用于预训练语言模型[4]:

表1. LLaMA预训练阶段所采用的文本语料[4]

数据集

采样概率

遍历次数

数量

CommonCrawl

67%

1.10

3.3 TB

C4

15%

1.06

783 GB

GitHub

4.5%

0.64

328 GB

Wikipedia

4.5%

2.45

83 GB

Books

4.5%

2.23

85 GB

ArXiv

2.5%

1.06

92 GB

StackExchange

2.0%

1.03

78 GB

    从表1可以看出,如Wikipedia和Books这些比较高质量的文本语料的遍历次数(Epoch)会多一些。如果希望增强中文处理能力,需要适当增加一些高质量的中文语料。训练时除了使用海量文本,还会包括大量的代码(就当普通文本一样处理)。一般认为代码有助于提高模型的“逻辑推理”能力,因为代码实现的算法就是对求解问题所需逻辑步骤的描述。语料的清洗至少要包括除劣、去重和脱敏三个步骤(可能的话,也设法删除带有偏见或歧视的语料)。

    第二步:提示精调

    多任务提示(或指令)精调的目标是使用各种任务相关数据集对第一步预训练后的语言模型进一步调整,使其能够理解指令并完成既定的任务。这一步的重点落在“精调”两字。因为经过第一步预训练,模型已经“看过”几乎所有能从各种渠道获得的文字、代码和图书资源,通过“博学强记”,模型将关于语言和世界知识都“压缩”到了上亿个参数中去了。提示精调这一步只需要在此基础上将模型稍微引向更恰当的输出结果。

    如果将第一步预训练得到的模型能力看成如图8所示的大江,完成各种任务的能力就是从这条大江所衍生出来的支流。这些支流不能过长,也不能过粗,不然会产生对该支流(代表某个具体任务)的过拟合,从而导致模型整体泛化能力下降,影响完成其它任务的性能。同理,一般也不能只单独对一个任务进行精调,因为所有模型参数都会向优化这个任务的方向而调整(生成式语言大规模是为了多任务而生的),容易陷入不太好的局部最小值。

c0697aab57761b7b94ba5addab2454ec.png

图8. 将预训练语言模型所具备的能力比作大江,各种任务能力就是通过精调从这条大江所细分出来的支流。

    与第一步相似,提示精调也统一采用“给上文、补下文”方式训练各种任务。问答任务直接可以用“给上文(问题)、补下文(回答)”方式实现,但有些任务还需要在上文中加上提示。以翻译为例,除了告诉模型需要翻译的内容外,还要指示模型翻译成哪种目标语言(如图3绿色文字所示)。

    每一个训练样本一般如图9所示,这一步的损失函数仍然用公式1,但一般仅对“回答”部分计算误差。由于一般最终以对话方式来使用生式成语言大模型,所以建议将各种任务的训练样本都表示成多轮对话的形式,此时需要以特殊符号来分隔提示和各角色表述的内容。此外,每一种任务需要多准备一些提示语(准备样本时随机选择其一与样本进行组合),让模型知晓同一意图有多种不同的表达方式,从而更好地“领会意图”(实际使用时会遇到各种各样的提问方式)。文献[5]附录中列出了多种任务的不同提示语,可供参考。

1a3d39a4078cf05c80aa22615fb52fcd.png

图9. 提示学习的样本表示形式

    OpenAI公司研究者所撰写的论文[6]中列出了他们在提示精调阶段所选择的任务及其比例(如表2所示)。构建垂直领域大模型时,一般先要做好需求调研,然后为满足各项需求准备精调阶段的训练样本(注意:精调阶段样本质量的重要性要高于样本的数量),并且根据需求重要性(与表2列出任务的训练数据合并后)合理确定各种任务训练样本的数量和比重。

表2. 文献[6]提示精调阶段所选择的任务及其所占比例

任务

比例

文本生成(Generation)

45.6%

开放式问答

(Open QA)

12.4%

头脑风暴(Brainstorming)

11.2%

闲聊(Chat)

8.4%

改写(Rewrite)

6.6%

文本摘要(Summarization)

4.2%

分类(Classification)

3.5%

封闭式问答

(Closed QA)

2.6%

信息抽取(Extract)

1.9%

其它(Other)

3.6%

    文献[7]研究表明大规模语言模型会使用“工具”(其实类似调用第三方API)。如果需求调研表明完成某些业务需要调用第三方API,在精调阶段准备训练样本时也要提前考虑。以问答时需要实时访问数据库为例,可以在回答中插入类似<<< SELECT price FROM table WHERE item = 'apple' >>>语句。检测到回答中有类似的数据库查询语句时,就提取出来执行,然后将执行结果替换该语句即可。更加通用的方式是定义能够转换成各种第三方API调用的形式化表示(由于在第一步预训练阶段使用了大量代码语料,经过精调之后模型处理形式化表示的能力还是比较强的)。此外,精调阶段加入使用思维链(Chain-of-Thought)的样本能够大幅提升推理时运用思维链方法的性能[8](同时不会影响其他任务的性能),所以也可以根据需要在精调阶段就加入这样的训练样本。

    第三步:强化学习

    很多情况下,相同的上文(或前文),可以有多个不同的下文,所以模型输出实际上是不同字或词(实际是Token)概率分布。基于这些概率分布,使用随机采样方法就可以为同一个上文生成不同的下文,这种能力对于ChatGPT这种聊天和对话模型非常有用,因为它可以带来回答的多样性。也是因为这种对于相同问题能够生成多个不同回答的能力使ChatGPT既可能生成好的回答,也可能生成不太好(甚至坏)的回答。此外,对于某些问题,模型可能会生成带有偏见、歧视或者令人感到不适的回答。为了让模型偏向生成更符合人们期望的好回答,ChatGPT训练时采用强化学习(利用人类反馈来迭代优化模型的生成策略)进一步调整模型。在此过程中我们要解决两个问题:一是如何获得人们的期望或偏好;二是如何利用所获得的期望或偏好信息来引导模型生成更好的回答(其实质是提高模型生成符合人们期望内容的概率)。

    对于如何获得人们的期望或偏好,其方法就是构建奖励模型(Reward Model)。将第二步提示精调后所得到的模型记为M,我们让模型M对同一问题生成多个回答,然后让标注人员对于这些回答进行排序,排序结果就体现了人们对于回答的偏好。如此,我们可以收集许多模型M所生成的回答对<g, b>,其中g是相对好的回答,b则是相对坏的回答。对奖励模型R(会用模型M的参数初始化)进行训练时,我们让模型R预测回答g和b每一个token的得分(通过增加一个线性层),其训练目标是要让好回答g的得分高于坏回答b的得分。具体的训练目标是让在每个对应token上g和b的得分之差(如图 10 所示的红色分差数值)高于设定阈值。

03181977e15b5c8f69931b438c1db087.png

图10. 同一问题好回答g(长度为6)与坏回答b(长度为5)每一对应位置Token得分差高于设定阈值为目标来训练奖励模型

    通过上述目标训练所得到的奖励模型R实际上能够对生成回答的每一个Token得分进行评估,我们之后将会用模型R的参数来初始化强化学习所需要的价值函数(或模型)。在此之前,我们先用以下情感分析的例子解释为什么这样训练是有效的。这其实是一个半监督学习的过程,即从句子级别的人工标注信息学习到每一个Token的得分或贡献。

064673c5527ea49caedae0893e6d8869.png

图11. 表达正面情感句子中所有词都加1分,而表达负面情感句子中所有词都减1分,当有一定数量句子级别的情感倾向语料,根据每个词的最终得分(图中最后一排数值)就可以获得其情感极性。

    以如图11的情感分析为例,我们有句子级别情感倾向的人工标注结果,但希望从中得到词汇的情感极性。最简单的做法是对于表达正向情感句子中的所有词都加1分,而对于表达负面情感句子中出现的所有词都减1分。当有一定数量这种人工标注的句子,根据句子情感倾向对所包含词进行简单的加1和减1操作就能够得到词级别的情感极性。最后得分越高的词的情感极性越正面,而得分越低的词的情感极性越负面,得分比较接近与0的词则是中性词。同理,从大量人工排序后的成对回答中,我们也可以类似学习到每一个token得分的近似估计。

    训练得到奖励模型R之后,我们就可以开始强化学习了。强化学习有离线(Offline)和在线(Online)两种学习方式。与人类学习一样,我们可以旁观者身份,通过观察别人的行为及其结果来学习相关的经验和教训,也可以自己亲身在环境中体验和行动,然后从行为的结果或环境的反馈中获得经验和教训,进而不断增强自身的能力。同样地,模型可以通过观察其它模型的行为及结果来学习(离线学习),也可以自身不断与环境互动来进行学习(在线学习)。

    ChatGPT训练时选择用离线学习来与人类期望进行对齐,原因是模型在强化学习过程中会不断调整参数,从而改变生成内容的分布,而奖励模型R则是用精调后模型M生成的回答来训练的,因而用于评价模型M生成内容时比较可靠。所以在强化学习阶段,我们优化和调整的是新的模型Z(虽然也会用模型M的参数初始化),而它观察的对象则是模型M,即模型Z从模型M的行为及反馈中学习。注意模型M和Z建模的都是根据上文输出下一个token(记为)的概率,其中t为当前上文(或前文)的长度。

    在强化学习中,Actor-Critic(行动者-评论家)是一种常见的框架,其主要的优点是通过引入价值函数来减小策略优化的方差,从而提高学习的稳定性和效率。对ChatGPT的强化学习也采用了Actor-Critic框架,其中Actor就是模型Z(但通过代理模型M与环境交互),而Critic则需要引入另一个新的模型V(用奖励模型R的参数初始化)。模型V就是价值函数,它能对于任何状态St(包含了部分生成内容的上文)给出评分V(St),价值函数或模型V也要在强化学习过程中不断调整,从而能够更准确地对生成内容的质量进行评价。

    综上所述,强化学习过程中有四个不同的模型(都是深度网络):奖励模型R、价值函数V、代理模型M和目标模型Z(训练的最终目标)。我们希望优化的是生成策略90eb55207c6c9b2ca6562ee0d3c34748.png,即给定上文St时模型Z输出下一个更好at的概率。为此,我们需要估算输出at较其它可选Token的优劣(即带来未来收益或得分的变化)。当前状态St下输出at可能带来的优势记为优势函数1f95e95a048c9af53392afe21dd225f9.png。这种对于未来收益或得分的变化,我们可以向前看一步方式来估计:

0e7aae1e5fa700292fac256000fc93f7.png

其中:rt为当前状态st下输出后即刻得到的收益,V(st+1)为输出at后转入新状态st+1时价值函数的估计值,γ则是对于未来收益的折扣系数([0,1]之间的一个值,一般训练类ChatGPT模型时就设为1了)。对于rt,除了生成完整回答的最后一个Token有值外(这个值由奖励模型R给出),其它rt一般都为0,因为完整回答生成后才会得到奖励(人类反馈),奖励模型R对完整回答所给出的评分也相对更为准确。

    我们也可以向前看两步或三步来估计这种变化:

0fcfa4ace52d522595bae10e7dda2fd0.png

    如果一直看到回答完全生成,则就是蒙特卡罗方法(Monte Carlo Method),如果仅向前看若干步就是时间差分学习(Temporal Difference Learning)。向前看一步是TD (0),看两步是TD (1),看三步是TD (2),以此类推。Eligibility Traces方法理论上统一了蒙特卡罗方法和时间差分学习。该方法引入一个新的系数λ,当λ = 1时就是用蒙特卡罗方法,而λ = 0时则是TD (0),取(0, 1)之间的值时则介于两种极端之间。使用Eligibility Traces方法的优点是只要尝试和调整超参λ的取值就好了(一般λ设成较接近于1),用此方法进行5e11103a08d5748c50f5f79b0959bff2.png估计公式为:

32faae5787aaa18e16706c703d352c6b.png

其中k取值从0到∞是公式5推导过程中使(1+λ+λ2+...)收敛到1/(1-λ)的条件,实际训练过程中,k的最大取值由生成回答的长度确定。

    此前我们提到预训练后的模型能力可以看成如图2所示的大江,完成各种任务的能力就是从这条大江所衍生出来的支流。为了防止强化学习过程中模型过于偏离这条“大江”,我们要加一个惩罚项,这个惩罚项是64adc533716998813f2aedcee79b765a.png51ea0a5c7e467d8ee86e42c8a7e6084d.png之间的KL散度(Kullback-Leibler Divergence),它量化了从e73215eeacf3d56cf46a228b332fec99.png0c61a7e282035bc2560f3f59437bb5a3.png的信息损失,或者用bb38da698a6341a4ce4cb12358408201.png来近似88eb0ba0fb67b46828e01036fc167c0d.png时引入的误差,其实就是让7eb5bc65fc4a03c2f74d65059e74d6e1.png的分布不要离a82156889efa046d0f3d4cf42c116eb6.png太远。具体做法是在rt中多包含以下一项:

5cec11633ec877775ed9b09b7c4eaa39.png

其中参数β控制施加这个惩罚项的强度。因为KL散度总是非负的,实际相当于在当前收益rt中加上公式6计算得到的数值(前有负号,一定是负数)。

    由于我们采用离线强化学习,优化目标是模型Z,但训练样本则是由代理模型M生成的。即样本是从模型M采样出来的,但样本实际分布应该是由模型Z确定。这时需要使用如图12所示的重要性采样方法,重要性采样比率越大,说明从eabf74ab4ec72f276f18c9b7b9f196e5.png采出的分布越接近希望采样的分布78f5b983a32d4216eb93c080f812eb81.png,则这个样本的重要性就越高,模型调整的力度也就是越大。优势函数b9d41616bb00360f4d814e77b609b8a3.png的值乘以这个重要性采样比率就会作为调整模型Z在st状态时输出at概率增加或减少的误差。PPO(Proximal Policy Optimization)算法[9]其实只是对重要性采样比率进行了裁剪(Clip),即当6272b62f49aae997a8d8d7b528e3fba4.png为正时,将重要性采样比率裁剪到 1+ε 以下,当1ca4f7fdffd822bbdee42933785b002c.png为负时,将重要性采样比率裁剪到 1-ε 以上(原文推荐 ε 设为0.2),目的也是为了让训练过程更加稳定。

4d35d3d22d9fc2893e285c9d7d3e01f9.png

图12. 重要性采样比率计算方法

    当不断优化模型Z时,我们还会持续调整价值函数V,使其对于状态的评分越来越准确。价值函数V调整方法比较简单,就是让V(st新的估计b386e95b93b9d72ffc406dc11fac6b3f.png+V(st

接近,即减少两者之间的L2平方损失(Squared Loss)。此时,982dfcf98ff44cbc322cbbf9ce06c180.png表示当前的样本对于V(st估计的增减变化。如图13所示,目标模型Z和价值函数V是迭代优化的过程,最终收敛到某个稳定状态。

2375dd50d5e2436a20131e029435c322.png

图13.目标模型Z和价值函数V迭代优化过程的示意图

    以上介绍了ChatGPT三个主要训练步骤:语言模型、提示精调和强化学习。其中第三步强化学习实施起来相对比较困难。除了强化学习本身对于初始值和超参设置比较敏感外,其间一般需要多次人工标注。因为目标模型Z经过多次调整和优化之后,之前获得的奖励模型R已经不再适用于模型Z生成内容的评价了(因为生成内容的分布已经发生了变化),所以还有较大的改进空间。

参考文献

[1]Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin. Attention is All you Need. In the Proceedings of the International Conference on Neural Information Processing Systems (NIPS’17), 2017.

[2]Mikel Artetxe, Jingfei Du, Naman Goyal, Luke Zettlemoyer, Ves Stoyanov. On the Role of Bidirectionality in Language Model Pre-Training. In the Findings of the Conference on Empirical Methods in Natural Language Processing (EMNLP’22), 2022.

[3]Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. In the Proceedings of the Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (NAACL’18), 2018.

[4]Hugo Touvron, Thibaut Lavril, Gautier Izacard, Xavier Martinet, Marie-Anne Lachaux, Timothée Lacroix, Baptiste Rozière, Naman Goyal, Eric Hambro, Faisal Azhar, Aurelien Rodriguez, Armand Joulin, Edouard Grave, Guillaume Lample. LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971, 2023.

[5]Victor Sanh, Albert Webson, Colin Raffel, Stephen H. Bach, Lintang Sutawika, Zaid Alyafeai, Antoine Chaffin, Arnaud Stiegler, Teven Le Scao, Arun Raja, Manan Dey, M Saiful Bari, Canwen Xu, Urmish Thakker, Shanya Sharma Sharma, Eliza Szczechla, Taewoon Kim, Gunjan Chhablani, Nihal Nayak, Debajyoti Datta, Jonathan Chang, Mike Tian-Jian Jiang, Han Wang, Matteo Manica, Sheng Shen, Zheng Xin Yong, Harshit Pandey, Rachel Bawden, Thomas Wang, Trishala Neeraj, Jos Rozen, Abheesht Sharma, Andrea Santilli, Thibault Fevry, Jason Alan Fries, Ryan Teehan, Tali Bers, Stella Biderman, Leo Gao, Thomas Wolf, Alexander M. Rush. Multitask Prompted Training Enables Zero-Shot Task Generalization. arXiv:2110.08207, 2021.

[6]Long Ouyang, Jeff Wu, Xu Jiang, Diogo Almeida, Carroll L. Wainwright, Pamela Mishkin, Chong Zhang, Sandhini Agarwal, Katarina Slama, Alex Ray, John Schulman, Jacob Hilton, Fraser Kelton, Luke Miller, Maddie Simens, Amanda Askell, Peter Welinder, Paul Christiano, Jan Leike, Ryan Lowe. Training language models to follow instructions with human feedback. In the Proceedings of the International Conference on Neural Information Processing Systems (NeurIPS’22), 2022.

[7]Timo Schick, Jane Dwivedi-Yu, Roberto Dessì, Roberta Raileanu, Maria Lomeli, Luke Zettlemoyer, Nicola Cancedda, Thomas Scialom. Toolformer: Language Models Can Teach Themselves to Use Tools. arXiv:2302.04761, 2023.

[8]Hyung Won Chung, Le Hou, Shayne Longpre, Barret Zoph, Yi Tay, William Fedus, Yunxuan Li, Xuezhi Wang, Mostafa Dehghani, Siddhartha Brahma, Albert Webson, Shixiang Shane Gu, Zhuyun Dai, Mirac Suzgun, Xinyun Chen, Aakanksha Chowdhery, Alex Castro-Ros, Marie Pellat, Kevin Robinson, Dasha Valter, Sharan Narang, Gaurav Mishra, Adams Yu, Vincent Zhao, Yanping Huang, Andrew Dai, Hongkun Yu, Slav Petrov, Ed H. Chi, Jeff Dean, Jacob Devlin, Adam Roberts, Denny Zhou, Quoc V. Le, Jason Wei. Scaling Instruction-Finetuned Language Models. arXiv:2210.11416, 2022.

[9]John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov. Proximal Policy Optimization Algorithms. arXiv:1707.06347, 2017.

往期精彩文章推荐

b1f74b73c075f01bdcdc607aefde83c8.jpeg

关注我们 记得星标

 关于AI TIME 

AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索,加强思想碰撞,链接全球AI学者、行业专家和爱好者,希望以辩论的形式,探讨人工智能和人类未来之间的矛盾,探索人工智能领域的未来。

迄今为止,AI TIME已经邀请了1400多位海内外讲者,举办了逾600场活动,超600万人次观看。

e43d2b3c083f8b6ffdc582f6bedbff2e.png

我知道你

在看

~

46ade840e211ad9ef04bb0a24da6d4e1.gif

点击 阅读原文 进行查看!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/260677
推荐阅读
相关标签
  

闽ICP备14008679号