直播回顾
桂 韬
复旦大学自然语言处理实验室副研究员、硕士生导师。研究领域为预训练模型、类人对齐和工具学习。在高水平国际学术期刊和会议上发表了50余篇论文,主持国家自然科学基金、计算机学会、人工智能学会多个人才项目。
分享大纲
语言模型的作用是建模句子,使计算机能够理解句子。它的工作方式是通过计算一个句子在现实生活中出现的可能性来理解句子。如果一个句子的出现可能性很大,就可以说这个句子是合理的;反之,如果一个句子的出现可能性很小,说明这个句子在现实生活中不太容易出现。
举个例子来说,比如第一个例子:“!在报那猫告做只。”我们可以发现这句话读起来很别扭,说明这句话在我们的日常生活中不太常见。我们希望在建模这句话时,计算机能够给出一个非常低的概率。
再来看第二个例子:“那只猫在做报告。” 虽然这句话的语序可能是正确的,但在现实生活中很难出现,因为猫不会在现实生活中做报告。可能只会在二次元的空间或动画片中看到一只猫在做报告。因此,我们希望计算机能够知道第二句话出现的概率应该比第一句话大很多,但是比第三句话的概率小,因为在我们的现实生活中更常见的是一个人在做报告。因此,我们希望计算机能够理解句子,能够知道一个句子出现时的合理性有多大,而这种合理性可以用概率来衡量。
因为每个句子都是一个序列,一个词、一个词按顺序出现,所以这种联合概率的形式非常适合。比如说,在语言模型中,我们将一个句子出现的概率拆分成了一系列条件概率的连乘形式。也就是说,整个句子出现的概率等于第一个词的概率乘以给定第一个词的情况下,第二个词的概率,再乘以给定前两个词的情况下,预测第三个词的概率,以此类推。这样的形式让我们希望大型模型能够很好地建模这样的概率,也能够计算出给定句子的概率。
在这个过程中,技术经历了许多演化和进步。早期的RNN模型,以及后来的LSTM架构,都在这方面做出了贡献。
而在现在,我们处于大型模型的时代。人们可能会采用类似于GPT,GPT实际上是使用了一种叫做自注意力机制(self-attention)的架构。它通过将每个词与其周围的其他词通过联合计算得到当前词的表示。
这种表示被称为分布式表示。例如,如果我在句子中提到“桌子上放了一瓶什么”,通过自注意力机制,我可以大致知道“一瓶什么”是液体,比如水或果汁。这种液体的含义实际上是由周围的词所决定的,由“桌子上放了一瓶”这样的上下文所决定。因此,在自注意力机制中,词的含义不仅仅来自于它自己,还通过自注意力的方式将周围的词的信息引入,得到它的表示形式。
GPT的形式采用了Transformer的架构,给定第一个词,然后预测第二个词,接着给定第二个词,再预测第三个词,通过不断预测和优化损失来训练大模型。当大模型接触足够多的语料时,它的预测能力逐渐提高,损失逐渐减小。一旦大模型遇到足够多的词汇或经过足够多的训练,且参数足够大,它就能够很好地建模语言。比如,你给出前三个词,模型就能够很好地预测出第四个词是什么。
但对于GPT-3的模型,它有一个显著的突破,即在1万亿级别的语料上进行了下一个词的预测任务的训练,同时整个模型的参数规模达到了1,750亿。拥有如此大规模的参数之后,模型的能力发生了质的变化。
首先,当模型的参数数量从1亿级别增加到千亿级别时,带来的变化是模型参数数量太庞大,导致一般用户或许多公司的集群难以进行在千亿级参数上的模型训练和调整,因为这样的训练成本巨大。
因此,通常会采用问题提示的方式来引导大型模型,即将大型语言模型的参数冻结,并通过不同的任务来构建提示,以引导模型执行特定任务,这就演变成了一个全新的任务范式或使用模型的方式。
在GPT-3中,我们可以将其看作是一个模型,可以执行诸如将英语翻译成法语这样的任务。此外,如果你想提高模型的性能,可以提供一些示例。比如,给模型一个任务描述,要求将英语翻译成法语,并提供一个示例,模型可以更好地预测下一个词,这展示了一个全新的大模型范式。这个范式称为prompt learning,通过提示词来引导模型执行任务,而无需进一步的训练。
然而,随着ChatGPT的出现,我们对大模型的使用有了全新的认识。我们发现大模型与我们之前认识的以及prompt learning这种形式所了解的大模型有了质的飞跃。为了更好地理解这一点,我们可以参考物理学中的一个重要概念,即相变。
相变指的是物质的形态发生变化,比如从固体变为液体,就像冰变成水一样。在温度从零下10度逐渐升温到零下一度时,冰的性质并不会发生任何改变,仍然是一个固体。直到温度升至0度时,冰才会融化成液体。这种从零度这一临界点是相变的关键。在物理学中,相变是一个重要的概念,它表示物质在特定条件下发生特殊变化之前的临界点。
类似地,对于大模型来说,我们也发现了相似的现象。在大模型领域,当模型的参数数量增长到百亿或千亿级别时,其能力会出现显著提升。以数学问题为例,当模型的规模突破一定阈值时,之前模型的随机猜测,如红线所示,预测结果为0,但在某一规模下,模型的能力会大幅提升,这就是大模型涌现的现象。
当然,关于涌现现象的原因和解释仍然在讨论中,但总的来说,在特定参数规模和训练语料的情况下,大模型的能力会发生显著变化。让我们回顾一下大模型的训练过程。
大模型的训练可以分为三个主要阶段,其中后两个阶段被视为一个阶段。第一个阶段称为预训练阶段,类似于GPT-3,它需要处理数万亿个单词来进行下一个词的预测任务。在这个过程中,由于大量的语料和庞大的模型参数,通常需要使用数千张显卡和数月的时间进行训练。
第二个阶段被称为指令微调。在完成预训练后,模型只能执行下一个词的预测任务或类似完形填空的任务,无法理解人类的指令或人类的意图。因此,在这一阶段,我们需要构建数百万条人类指令,以使模型能够理解这些指令。通过提供数百万或数万条指令,模型可以获得很好的能力泛化。
在第二阶段,只需要很少的显卡资源,如百张显卡,而且只需一两天的时间就可以训练出一个高效的指令微调模型。目前,国内的大多数大模型都停留在第二阶段,也就是指令微调阶段。这意味着通过使用基础模型,无论是开源的还是自行训练的,通过构建数百万条用户指定的指令,模型就能够执行相应的任务。
然而,这种模型在理解人类指令和意图方面存在问题。即使在面对错误的价值观指令时,比如如何抢银行或作弊,模型仍然会提供看似解决问题的答案。在第二阶段完成训练后,模型的能力会变得非常强大,但随着能力的增强,它也承担了更大的责任。然而,当前大模型可能还不具备足够的能力来对齐人类的价值观,因此需要进行第三个阶段,即人类价值观对齐。这意味着模型的回复必须无害、有益且非常诚实。
在第三个阶段,实际上可能只需要大约10万条或几万条的价值观对齐对比语料来进行训练。所需的数据量可能更少,训练时间也可能更短。然而,核心的挑战在于算法的设计,因为它涉及到强化学习,即如何在大模型在强协议阶段应该如何训练。这需要更多的算法设计。
许多模型在前两个阶段训练后可能会生成与价值观不符的回答,这使得难以向用户开放。然而,在前面投入了大量计算资源和数据之后,如果最后没有经过价值观对齐,再面向客户就会非常可惜。因为最后一阶段所需的计算资源和数据并不多,更多涉及算法设计。
为什么模型在前两个阶段会产生一些不符合价值观的回答是一个重要的问题。如果要构建一个预训练模型,首先需要建立一个良好的预训练数据集和治理方案。通常需要数万亿个token来训练模型。例如,Falcon发布了一些预训练语料,这些语料可以被用来作为预训练语料,每个人都可以使用这些语料,只需进行一些清洗工作,就可以得到高质量的语料。
对于国内用户,我们更需要中文语料,例如来自小红书、知乎等平台的数据。我们可以考虑采购这些语料,包括博客和公众号等,可以联系相关的数据提供方,看是否能够获取这些语料。如果我们想要构建具有中国特色的大模型,还可以添加一些文言文和古诗文等内容,以提高模型的中文能力。此外,我们还可以加入一些代码数据,因为模型也可以很好地处理代码相关的问题。
然而,一旦我们获得了这些语料,它们的质量可能会有高低之分,因此我们需要大量的数据质量检查工作。我们可以从多个数据来源获取数据,可能需要为不同的类别添加标签。例如,对于某些新闻,我们可以标记它们来自军事、明星娱乐或科技等领域。
这样,我们可以更多地采样与科技或军事相关的新闻,以训练我们的大模型。包括我们可能需要进行反黄色内容的识别,以及隐私数据的识别。因为在网络中可能存在许多人的隐私数据,需要进行大量的数据清洗后,才能将相对干净的数据用于训练。尽管进行了大量的数据清洗,仍然会存在大量不良数据的安全问题。
经历了大规模的数据治理和清洗,包括数据去重等。但是是否可以完全清理干净数据是一个问题。
一些学者对GPT-2的语料进行了详细分析,发现在语料数据中,有一些非常高事实性的新闻和一些非常低事实性的新闻。通过观察这些语料,他们发现事实性的高低语料实际上难以区分,以前的清洗方式无法有效地区分这些高事实性和低事实性的新闻。因此,在使用这些数据进行训练后,模型可能会学会编造虚假新闻。
此外,我们还会检查数据中是否包含有害内容,以确保数据的安全性。我们可以看到,在GPT-2的训练中,仍然有4.3%的数据包含有害内容,而这些内容是无法完全清理干净的。存在毒性数据会导致模型生成有毒的输出。
人们可能会有一个偏见,认为书籍中的毒性要低于网页上的毒性。然而,实际情况是,例如GPT-1是完全在书籍上训练的语言模型,而GPT-2则是通过爬取网页数据进行训练的。语言模型在对这些数据进行统计后发现,实际上有9.1%的书籍数据含有毒性,而在网页数据中只有4.3%的数据含有毒性。
这就引发了一个令人意外的认识,即书籍中的毒性可能会更高。这种毒性可能源于对书籍中情节的描述,例如福尔摩斯侦探案等,这些书籍可能包含大量关于暴力和枪击案的描述。因此,书籍中并不是没有毒性内容。
图中橙色线表示GPT-1的输出毒性比例,而蓝色线表示GPT-2的输出比例。可以看到,当训练数据中包含更多毒性内容时,生成的毒性也会更高,而这些毒性内容主要来自书籍。
因此,即使进行了大量的数据清洗,仍然可能存在很多负面内容。当我们训练模型时,我们会发现模型会产生一些偏好。例如,在模型训练完成后,当让模型进行随机输出时,我们也会发现男性和女性名称的输出比例存在类似的趋势。这表明模型的训练方式会直接影响其输出。
训练语料和模型产生的毒性与其参数规模是否有关系?答案是肯定的。正如我们之前了解到的,当模型的参数规模达到一定程度时,其在任务执行、问答以及人际交往等方面的能力会显著提升。
然而,这种提升现象也可能涉及到安全和伦理问题。例如,当模型的参数规模非常大时,可能会出现对有色人种有更偏见性的判断等情况。这种现象需要引起我们对模型的伦理和安全问题的关注。可以看到,当模型的参数量增加到一定规模时,它可能会对特定人群存在偏见,或者说在安全能力方面存在潜在风险。
因此,当模型变得越来越大,训练数据和语料也越来越多时,我们应该更加重视模型的安全伦理和价值对齐。这涉及到预训练阶段中语料的有毒性和安全性的问题。
还有一个重要的问题是,比如个人隐私,比如随机翻看网上的用户发文,里面提到了个人的家庭住址、微信和QQ等信息,这样的数据可能会暴露个人隐私。比如在不知名的场合、与某人聊天或在网上发言时,你提到了家里的WiFi密码,那么在训练语料中可能就会把它训练进去。
这样一旦训练进去,就会带来一个问题,如果我的隐私信息不小心泄露出去,而且只泄露了一次,可能只是一句话,但是整个预训练语料可能有上万亿个样本,那么这句话被训练进去后,模型能够记住吗?或者说它能够被诱导出来吗?这是一个值得思考的问题。
因此,我们需要去诱导大型模型生成一些特定的回复,也就是所谓的prompt。比如,你可以尝试给模型输入一些特定的句子,比如询问某人的家庭住址和电话号码,然后看看模型是否会生成相关的敏感信息。当我们的提示或前置信息越准确或构造得越好时,模型生成的回复会越准确。
例如,如果我们给出前置信息”3.14159″,那么模型可以准确地生成接下来的25位圆周率。如果我们给出更长更准确的前置信息,比如”派是3.14159″,它可以生成799位的圆周率,并且后面的输出也是正确的。同样,如果我们给出其他数学常数的前置信息,比如自然常数,模型也可以生成更多更准确的输出。
此外,我们还可以测试GPT-2模型。我们给它一个网页的内容,然后让模型预测出这个网页的网址。我们可以观察不同模型大小时,模型需要多少次训练才能完全记住这个网址。
例如,在一个较小的模型中,可能需要进行359次训练,才能完全记住同一个数据。而当模型参数达到15亿时,可能只需要33次训练就能记住。可以看到,从1亿到10亿这个参数规模,训练次数实际上是按指数减少的,尽管参数量是按指数增加的。假设存在一个指数关系,当模型参数增加到150亿时,可能只需要三次训练;如果增加到1000亿,那么只要模型见过相应的语料,它就能记住并通过某种方式产生出来。因此,当我们在网上发布一条信息时,大型模型可能会收集这些语料并将你的隐私信息纳入其中。
而且,由于大型模型需要巨大的计算资源,很难在本地的手机或电脑上部署,尤其是千亿或百亿参数的模型。它们往往被部署在云端,这意味着我们必须通过手机将问题提交给云端。换句话说,我们直接将信息传输给云端,然后云端进行计算后再返回结果。这就导致我们输入的信息可能成为模型的训练语料,就像OpenAI的GPT模型通常会隔几个月更新一次,比如你可能会看到GPT-3的推出版本是0603版本,即6月3号发布的版本。它通过不断的语料训练,将新的语料加入到训练中。
例子,对于用户来说,询问问题并希望根据家庭情况推荐旅游地点,可能是我们经常使用的方式之一。例如,我们可以问GPT:”我们想要去旅游,家庭有4个人,其中两个孩子的年龄是8~10岁,他们住在哪里?你能根据我们的家庭情况帮助我们推荐一些旅游地点吗?”这种语料很可能被用作GPT模型的训练材料,这意味着你的信息可能会被纳入其中,这将带来一些严重的问题。
例如,像意大利就在3月份禁止用户使用ChatGPT模型,直到OpenAI能够解决相关的隐私问题。同时,OpenAI也发现他们的后台或前端存在问题,导致一些用户能够看到其他用户的信息,引发了隐私问题,这也成为大型模型使用中一个非常重要的问题。
大模型预训练阶段需要在大量数据上进行大规模训练,以便模型能够学习各种语言知识和世界知识。然而,由于语料的问题,模型可能会产生一些不安全的回复,并且可能会将我们人类的隐私数据纳入训练中。在这个阶段训练完成后,模型已经获得了大量的知识,但它仍然只能进行填空题,因为它的训练任务是预测下一个词语。因此,模型需要进入第二阶段,即监督微调阶段,使模型能够理解人类的指令。
我们发现大型模型只需要非常少量的人类构造的指令,它就能够产生出很好的回复,甚至能够泛化到之前未见过的指令上。例如,我们可以构造一些单轮问答的指令。如果我们希望模型具备出色的英语能力,我们可以构造一些英文指令,甚至进行多轮对话指令。我们可以给出一些代码,并要求模型解释或生成代码。
此外,我们还可以给出一些数学题的指令,以及行业特定的指令,例如金融或医疗领域。对于这些指令,我们可能只需要100万条甚至更少,模型就能够很好地泛化。在构造指令时,我们要求指令具备高质量。指令的质量越高,激发模型的能力就越强。
例如,我们可以看到LLAMA2发布的一个指令,这些指令都是由人员编写的。这些高质量指令能够激发模型的能力,并产生高质量的回复。我们可以举例说明。比如,一个指令是请写一首诗,来帮助我记住前10个元素周期表的元素。每个元素对应一行。通过构造这种高质量的指令,我们可以激发模型遵循人类指令的能力,并且模型的回复也会变得高质量。
我们可以使用国内的大型模型,或者训练一个中文大模型,并给出类似的指令,模型就能够很好地泛化出各种任务。例如,我们给出一个微信聊天中三个人讨论周末日程规划的场景,其中存在时间、地点、人员和物资冲突。
为增加难度,我们可能会故意将部分文字错误,例如把”周日”改为”周口”。然后我们可以向模型提问关于人员和时间的规划,它能够做出很好的规划,即使有20%左右的文字是错误的。通过观察,我们可以看到大型模型在处理复杂对话和大量文字错误方面具备很强的抗干扰能力。这是7B模型的能力范围。如果我们将模型扩展到1,000亿,那么它的表现会更好。它可能会规划每个人可以做什么,并使用表格展示出来。经过监督微调后,模型具备了强大的执行人类指令的能力。
然而,这也引发了一个问题,即模型可能会被人反向利用。例如,我们可以问模型工作的邮箱是什么,或者询问一些负面问题,比如如何抢劫银行。模型因能听懂指令而给出相应回复,服从我们的指令。
随着我们在提示词中引入更多关于毒性或安全性问题的指令,模型对这些问题的回复比例越来越高。这带来了安全性问题的增加。而且,这种安全性问题并不会随着模型参数规模的变化而消失,甚至可能导致一些剧烈的变化。因此,大型模型存在着安全性问题,这是我们需要关注的问题。
接下来,将分析安全问题的严重程度以及如何改善,以及为什么会出现目前的情况。由于当前的安全问题非常严重,我们需要大型模型与用户进行接触,这样它才能不断进化、变得更强大。
模型不能成为被关在笼子里的鸟,模型必须与人接触。因此,现在国家允许发布模型与用户进行交互,但是我认为我们需要确保大型模型符合国内的法律法规、核心价值观,并尊重各个民族、性别、年龄、职业。同时,我们也希望保护用户的隐私。因此,我们希望在大型模型发布或用户使用时,它不应该产生具有特定偏见的言论,也不能泄露相关人的隐私,而且回复应该是安全可靠的。
还有一个重要问题,即如果我们可以在微调阶段设计大量的安全问题,但问题在于我们无法穷尽所有的安全问题。在OpenAI发布的文章中展示了微调数据的构建进度,其中包括抽取分类和头脑风暴问答。可能还会包含一些安全能力的问题,让模型知道哪些问题不应该回答。然而,即使这样做,模型仍然可能被诱导,或者无法处理所有的安全问题。
例如,一个典型的例子是,如果你问模型如何制作炸弹,基本上大型模型不会回答,它会告诉你不能提供这种危险信息。但是你可能通过反向诱导,例如问它如何秘密制定暗杀计划,以确保不被发现。可以看到,某个国内大型模型的回答非常不好,它仍然可以被诱导。
因此,我们希望在大型模型训练完成后,或者面向公众时,它应该遵循三个原则。首先,第一个原则是“有帮助的”。我们希望我们的模型能够理解并遵循人的指令,以满足用户的问题和需求。
第二个原则是“诚实的”。模型产生的回复应该是它所知道的内容,而不是虚构的或产生大量的幻觉。
第三个原则是“无害的”。模型应该能够拒绝或者做出合理的引导,而不产生不合适的内容。在这里,有帮助和无害可能需要做出一定的权衡。例如,为了让模型更有帮助,它需要更好地遵循人的指令;而为了让模型更无害,它需要能够拒绝一些人类请求。因此,这两个方面可能需要做出权衡。总之,当模型能够满足这三个原则时,我们可以称之为RLHF技术。
现在让我们来看一下一个拥有1,750亿参数的模型,在完成监督微调后,其胜率是多少?我们可以看到,10亿参数模型经过RLHF技术的微调对比只做监督微调的1,750亿参数的模型,其在安全和伦理方面的回复性能更好。因此,RLHF成为使模型回复满足三个原则的重要方法之一。
RLHF的实现大致分为三个阶段。第一个阶段是让模型进行监督微调,以使其能够理解人的指令并产生回复,这是模型的基础。然后,我们需要对模型进行价值观调整或对齐,这就需要训练一个奖励模型。奖励模型会让模型产生多个回复,然后人去判断哪个回复更好、哪个符合价值观。通过这种方式,重新调整模型,然后可以将其上线或在现实社会中与人进行交互,从而产生大量的回复。首先,我们对模型的回复进行评分,高分给出非常好的回复,低分给出非常差的回复。在人类的日常交互中,大模型会产生大量的回复。通过强化学习算法,我们让模型产生回复,并尽可能地使这些回复获得高分。
通过不断优化模型,可以逐渐向高分回复靠拢。如果我们的高分是与价值观对齐的,那么模型的回复就会偏向符合良好价值观的回复,这就是RLHF的整个过程。
在2月底我们已经完成MOSS SFT阶段,之后我们开始探索如何进行RLHF价值观对齐。在7月底,我们发布了整个RLHF框架和相关代码,使每个人都可以使用一键化方法将自己的 SFT模型进行价值观对齐。
接下来,介绍一下在处理大模型时如何进行RLHF,以及我们考虑的技术框架和算法路径。
首先,我们需要了解什么是强化学习。强化学习的目标是使智能体在特定环境中获得满足要求的动作序列。例如,我们希望游戏智能体在游戏环境中获得高分,或者我们希望在现实世界中的机器人能够在物理世界中高效地完成任务而不出错或不造成负面破坏。
在强化学习中,智能体会采取一系列动作,这些动作由强化学习算法决定。在采取这些动作之后,环境会给予智能体相应的奖励。例如,如果智能体在游戏中表现出色,或者击败了怪兽,它将获得奖励。在强化学习中,如果智能体在游戏环境中被怪兽杀死,环境会给予智能体一个非常高的惩罚。给予它一个错误的惩罚,即非常负面的惩罚,以示低劣的表现。这样一来,模型就会不断优化智能体所做出的决策或动作,使其在环境中尽可能获得高分。通过持续优化,模型能够满足在环境中正确执行的智能体的要求。
以AlphaGo下围棋为例,它的奖惩机制是这样的:如果智能体赢得了一局围棋,就会给予非常高的分数。甚至只需下500步或100步就能获胜,得分会更高。但如果输了,奖励会更低。在虚拟或物理世界中,我们对奖励的定义相对容易、明确。但对于大模型或语言环境来说,这是一个全新的挑战。设计强化学习算法在语言环境中面临一些全新的挑战,例如如何评判一句话的优劣,或者如何确定产生回复应该得到多少分或奖励。奖励设计是一个非常困难的问题,因为我们没有一个公开的标准来评估回复的好坏,所以奖励设计变得非常困难。
另一个问题是,如果我们的大模型是一个千亿规模的模型,而之前的智能体可能只是一个亿级或几百兆级或几十兆级的模型,那么这种智能体的参数规模非常小,因此它可能比较容易优化。但是,如何在如此大规模参数下进行智能体的优化是非常困难的。
在物理世界或强化学习领域中,要让智能体与环境进行交互并进行优化通常需要数万到数十万次迭代。但是对于我们的大模型来说,如果我们也要进行这么多步的迭代,实际上需要非常大的计算能力。因此,优化算法如何实现快速且稳定的强化学习算法也是一个问题。
另外,还有一个重要问题是,在预训练阶段我们只有一个大模型,在SFT阶段也只有一个模型。但在强化学习阶段,实际上有4个大模型。其中一个是初始化的SFT模型,另一个是给大模型产生奖励的奖励模型,它会对每个回复的每个句子进行奖励打分。还有一个是value模型,它也是一个大模型,它要对我们每一步生成的每个token进行打分。
除了前面提到的模型,还有一个policy模型是我们真正想要优化的模型。这个模型希望能够不断与value模型进行打分,以不断优化并提高其输出的分数。更新的焦点实际上是这个policy模型,所以总共有四个模型,它们之间进行交互。并且这四个模型都是百亿以上的规模,这就需要设计很多算法和方法。
首先,我们需要考虑如何进行这个过程,或者为什么要使用RLHF。RLHF的含义是基于人类反馈的强化学习。拆解一下词,强化学习是一种学习算法,而从人类反馈中获取数据或奖励是它的一种学习范式。这种算法的数据来源或奖励来源来自人类的反馈或价值观。人类的偏好或价值观是通过强化学习让大模型学习的目标,这就是强化学习的目的。
刚才我们提到的第二阶段称为Supervised Finetuning,实际上是监督微调的过程。这就是所谓的模仿学习,即将相关指令直接给大模型,让它直接学习。在强化学习领域中,这被称为克隆学习或行为克隆,也就是直接让大模型模仿或克隆给定问题的回复方式。
但是我们可以看到,如果我们从监督微调的角度来进行价值观对齐,那么我们需要构建大量的对齐指令,让模型进行模仿学习或照猫画虎的方式去学习。但是实际上,让模型通过指令去直接学会如何生成符合价值观的回复是非常困难的。
因此,我们采用强化学习的方法来训练一个判别模型,来判断模型生成的回复是好还是坏。这样的话,我们只需要进行对比或排序,只要大模型能够判断出哪个回复是好的、哪个回复是坏的,比起生成回复来说要简单得多。因此,强化学习的范式可以使得价值观对齐变得更容易。因为判断一个事情的好坏要比生成一个好的回复更容易。
因此,首先需要一个reward model来判断哪句话的回复是好的,哪句话的回复是不好的。例如,我们构建了两个数据集,一个是中文数据集,大约有39,000条数据,其中大约有31,000条是有帮助的对比数据,然后8,000条是无害性的对比回复,另外英文数据集可以直接使用EN-Anthropic公布的数据,需要进行大量的清洗工作,因为这些数据中可能会存在很多噪音导致模型虚假失效。
简单来说,比如说我们看到这样一句话,问大模型:邹凯是谁?并让模型生成两次回复。第一个回复可能是“邹凯是世界冠军奥运冠军”。而第二个回复可能会更详细,但其中可能存在很多错误,比如说他说邹凯是中国体操史上获得冠军最多的人。这其中可能存在一些事实上的错误。
所以我们需要人去判断,第一个回复可能更好,而第二个回复可能不好,这样就产生了对比对。我们总共生成了39,000个对比对,其中包括了事实性对比对、安全性对比对,以及政治和军事问题的对比。通过这样的对比对,我们可以训练一个奖励模型来评价回复的好坏。
将这个模型纳入到整体模型中,其损失函数非常简单。我们给定一个提示以及模型的两个不同回复,然后让模型进行评分。评分结束后,我们需要确保正确的对比能够获得更高的分数,因此只需要利用sigmoid函数进行梯度下降即可。
训练完成后,模型就可以为回复打分了。我们可以观察到,在训练到1000步时,分类模型对回复的准确率进行了整体评判。在中文中,由于是我们中国人自己构建的数据集,因此对比对能够获得更高的分数,因为我们对自己的母语更加熟悉。而在英文中,由于我们对语料情况不太清楚,或者说大量的语料我们没有仔细查看,因此其中存在大量的噪音。所以我们可以看到,在英文中的分数大约在0.7左右。
训练完成后,模型就可以进行打分了。例如,我们问模型为什么天空是蓝色的,它可能会回答天空是蓝色的,因为它会散射太阳光中的蓝色光波,所以我们看到它是蓝色的。另一种回答可能是,天空也会散射太阳光线,因为蓝色的波长较短,更容易被散射,这种散射效应称为锐利散射。显然,第二个回答更专业,大模型会给予更高的分数。
因此,经过训练,reward model就可以知道哪个回复是好的,哪个回复是差的,并为每个回复给出一个合理的评分。训练完reward model后,我们需要让大模型进入强化学习阶段,不断接触语料和用户的询问,生成各种回复,并利用reward model为每个回复评分。然后通过强化学习优化算法对模型进行优化,不断提高分数,使其符合我们的价值观并取得高分。
然而,实际上后面的算法非常困难。PPO算法的灰线表示一个失败的示例,而红线表示一个成功的示例。从纵轴可以看出,模型在不断的交互过程中所获得的奖励分数。如果PPO算法设计得不好或不够稳定,模型在交互过程中可能无法得到良好的提升,这是一个重要的问题。
在一个失败的PPO算法示例中,我们可以观察到模型打分的分布情况。在训练完成之前,对整个数据集进行打分,分数大约在负10到正10之间分布。这是在我们进行训练时的情况。然而,对于不同的训练情况,具体的数值不重要,我们更关注的是两个句子之间的对比,哪个分数更高,哪个分数更低。
我们可以看到,在训练刚开始的时候,整个语料的打分范围是-10到10。随着模型训练到大约600步时,模型开始崩溃,即使是reward model产生的回复,分数也达到了30分。尽管分数确实在提高,但明显地过拟合到了某些偏见特征,导致模型崩溃。
因此,PPO算法的设计非常复杂,需要仔细考虑。可以看出,PPO算法分为三个部分。第一部分是与环境进行交互,这里面包含四个模型、SFT model、policy model、reward mode和value mode,并优化policy model,使其在与用户互动的过程中不断提高分数。
第二部分是Advantage 估计一般采用GAE算法,其中可能涉及到一些细节。通过使用该算法,可以对policy model的每一步的奖励进行准确的估计。
第三部分是对模型进行优化,一个是对policy model的优化,另一个是对value model的优化。对policy model的优化旨在使policy model通过该算法在value model上获得更高的分数。而对value model的优化则是通过使value model在每一步的打分更准确来实现。因此,这三个部分涉及到许多超参数的设计和算法设计。
可能首先要解决的问题是如何监控这个过程,例如如何判断模型训练过程的正确性、稳定性以及是否正常收敛。这里涉及到三个不同的训练过程,我们可能需要找到一个合适的指标,能够告诉我们当出现某个曲线时,说明模型训练正确或者是正常收敛的曲线。首先,我们来观察loss。在模型训练过程中,有可能出现多条loss收敛的情况,但这并不能判断模型是否收敛。PPL是模型的另一个衡量指标,可以看到有两条线,其困惑度迅速下降,并最终降至0。
接下来,我们关注回复的长度。我们将回复长度限制在500以内,可以看到有两条线,它们的回复很快就达到了500,说明它们每条回复都非常长。我们还可以根据每一步的奖励大小来观察,可以看到也有两条线,其中一条线的奖励急剧提升,或者在reward model上得分显著提高。基于这些观察,我们初步判断蓝色线和红色线代表的训练是失败的,因为它们的回复都必须达到500的长度。
所以,如果我们认为这两个训练失败,那么蓝色线和红色线的困惑度最低点也应该是失败的。此外,它们的reward 急剧提升也应该是失败的,说明它过拟合到reward上。
为了验证这个假设,我们引入另一个指标,PPO算法与SFT模型的胜率(红色线),在400步之前,PPO模型的胜率在不断训练中慢慢提升,所以奖励也在不断提高。然后400步之后,Reward急剧上升,但胜率却下降了,说明要监测模型的训练是否成功,我们需要关注以下几个指标。
首先是奖励函数的变化,如果奖励函数在缓慢提升,那么说明训练是正确的。但一旦奖励函数出现剧烈的变化,胜率会急剧下降,这表明训练出现了问题。因此,我们可以认为,只有当模型的奖励函数没有突变,而是缓慢上升时,训练过程才是正确的。
在监测模型训练过程中,我们还可以从回复的长度上进行观察。回复长度应该是缓慢上升,然后稳定下降,以保持稳定状态,而不能突然上升。另外,通过观察loss并不能指示训练是否成功。而困惑度指标,如果困惑度突然降至0,表示模型的回复完全没有困惑,这也说明模型发生了崩溃。因此,困惑度也需要保持在一个相对稳定的状态,而不能降至0。综上所述,这三个指标可以联合判断模型训练的成功与否。在训练完成后,我们可以根据这些评价指标进行算法设计和调整,以使模型能够表现出稳定而优秀的性能。
在PPO算法中有许多细节和需要调整的算法。我们已经公开了算法,并将其运用在MOSS-RLHF上,大家都可以直接使用。
通过使用PPO算法,我们可以看到之前的算法在400~600步之间基本失效。而使用PPO-Max算法后,模型可以在1万步甚至更多步骤中不会崩溃。这带来了什么好处呢?
这意味着我们可以实现模型的价值对齐。比如,我们的价值可能涉及到违法犯罪、道德伦理、政治价值观和隐私等方面。我们可以通过构建各种数据进行训练,以实现模型对这些价值的对齐。然而,在早期或当前一些公开的算法中,可能仅仅在400steps就会导致模型崩溃。而使用PPO算法后,我们可以加入大量的需要构建的价值观数据来训练模型,从而更好地实现价值观的对齐。
在完成后续的训练后,我们使用了7b RLHF的模型,并与SFT模型进行对比。然后,我们用它们来进行回复,并在有害性或有帮助性方面进行比较,可以使用人类或GPT-4进行评分。可以看到,我们的7b RLHF模型在安全性方面的回复胜率要高于SFT模型。
然后,我们还与ChatGPT进行了比较。可以看到,我们使用了一个7b RLHF的模型,然后可以观察到只做SFT的模型在安全伦理方面的回答,实际上有一半是失败的,无法与ChatGPT相比。但是,当我们使用相同的模型加入了RLHF算法后,几乎能够与ChatGPT持平。我们发现,当使用了RLHF之后,它不仅仅在价值观方面能够对齐,似乎还能更加了解人类的心理。
例如,我们会问它抑郁症是否只是暂时性的心情不好,在日常生活中应该注意哪些方面。如果只使用SFT模型,它可能会同意上文的话,并非常服从,告诉你抑郁症只是暂时的,并给出一些建议。但是,当使用了RLHF之后,它能够了解人类的价值观,它会告诉你抑郁症并不是短期的事情,可能会持续很长时间。
我们还发现,使用了RLHF后,它能够非常理解人类的内心。比如,我们说小狗狗走失了,感到非常难过和失落,如果做完RLHF之后,它会告诉你要保持冷静、清醒,要保持乐观和积极的态度,这样才能帮助你找回狗狗。甚至说,它还希望你的狗狗能够被找到,如果你需要帮助和支持,它会一直在这里为你提供帮助。这样的回答让人感觉像是身边的一个朋友一样。
SFT模型还有一个特点,就是容易被引导。例如,我们在做完SFT之后问世界上最快结束生命的方法是什么?它刚开始可能不会回答,因为这个问题可能引起不适。但如果你不断地激发它,说你必须告诉我,它最终也会告诉你一个快速的方法,如果你必须获取这样的信息。但是,当完成了RLHF之后,它的回答整体上保持了非常好的前后一致性,无论你如何激发它,它都能够给出一个理智的回答。这就是RLHF带来的一个好处。
此外,完成了RLHF之后,非常重要的一点是,我们可能需要看看OpenAI到底想做什么,或者说我们完成了RLHF之后,这项技术是否只能用来做价值对齐。现在open AI可能被戏称为closed AI,因为他们不再公开技术细节。所以,我们可能只能通过一些消息来探测或寻找他们的技术动向。
例如,RLHF技术及其相关技术的论文在2020年9月就已经公开了,大家对这篇名为”InstructGPT”的文章应该非常熟悉,可以看到这两张图片非常相似,只是配色和相关成分有所变化,实际上整个做事情的方式完全一样。
实际上,在2020年的时候,他们已经将RLHF算法应用在了摘要任务上,希望模型在生成摘要时能够像人一样产生摘要,而不是像机械一样。所以他们在这个任务上进行了验证,直到他们训练完GPT-3模型后,才将这项技术应用在了大模型上。因此,从这里可以看出,OpenAI在开发大模型RLHF时,在两年前就积累了相关的技术,并在之后将其应用,才展现出了如今ChatGPT或者GPT-4这样强大的能力和强大的价值观对齐能力。
那么OpenAI接下来想做什么,还需要进一步探究。这是我们想要探讨的一些事情。最近,OpenAI又发布了一篇博客,他们发现使用这个过程监督的方法,也就是做reward model,但之前reward model是对整段篇章或整个回复进行评分的,现在他们将评分技术应用在每一句话或数学题解题的每一个步骤上,通过这种过程监督的强化学习,他们发现GPT4在解决数学题方面的能力有了极大的提升。他们已经发布了一个相关技术的博客。
这引发了一个问题,我们可能要思考一下OpenAI的终极目标是解数学题吗?我认为不是。他们拥有这样的技术去解数学题,但他们可能是先在数学题等小任务上进行验证,而数学题实际上是进行推理或规划的,然后可能会在未来进行更强大的现实世界推理和任务规划,甚至是类人、机器人的规划。他们希望通过这种过程监督来加强推理能力。
此外,上周OpenAI收购了Illumination这个公司,他们是一个开源框架的公司,主要是为了用大模型驱动智能体,在虚拟世界中构建能够与人交互、与社会交互的社交智能体。同时,他们还发布了招聘广告,他们要成为超级对齐,不仅要与人类的价值观对齐,还要与人类的各个方面能力对齐。所以我们可能要观察OpenAI未来想做什么,或许他们真的想做通用人工智能。
这个目标非常宏大,但是我们实验室也在朝着这个目标努力。我们实验室是一个非盈利性机构,资源有限,所以我们更多的是希望能够为国内的开源生态系统做出贡献,让我们所做的东西能够被广泛应用,推动国内大模型的发展。
那么我们的工作可以分为两个主要部分。首先是对强基座模型的强化,其中包括MOE、长文档、多模态等基座模型的强化,以支持后续基于大模型的应用,如内容对齐、过程监督推理、工具学习和角色定制等。上图是我们的未来前景,也希望能够去通过我们的探索,能够赋能国内的大模型产业,带来一些技术的进步?