文章主题:ChatGPT, InstructGPT, GPT-3, 自然语言处理

666AI工具大全,助力做AI时代先行者!

尽管 ChatGPT 的论文尚未公开发布,但据公开信息显示,其训练方法与 OpenAI 此前所进行的工作——InstructGPT 颇为相似。主要的区别仅在于训练数据的细微差别。因此,我们可以通过研究 InstructGPT 的论文,来一窥 ChatGPT 强大的技术秘密。本文将重点解读 InstructGPT 的论文—— 《Training language models to follow instructions with human feedback》。

背景(Instruct? Align? 社会化?)

在OpenAI的研究成果中,InstructGPT和ChatGPT都涉及到大模型在alignment问题上的应用。那么,什么是模型的alignment呢?根据InstructGPT论文中的描述,我们可以了解到,模型 alignment是指将不同的模型组合在一起,使其能够像一个整体一样工作,从而提高整个系统的性能。简单来说,就是让各个部分协同合作,达到更好的效果。

“ For example, large language models can generate outputs that are untruthful, toxic, or simply not helpful to the user. In other words, these models are not aligned with their users. (ChatGPT翻译:大型语言模型可以生成不真实、有毒、或者对用户没有帮助的输出。换句话说,这些模型与用户不匹配。)

就是说,模型的输出,跟我们期待的,可能有所不一致。这个跟人类的需求的对齐问题,就是所谓的alignment问题。李宏毅老师的视频(Chat GPT (可能)是怎麼煉成的 – GPT 社會化的過程,https://www.youtube.com/watch?v=e0aKI2GGZNg)中把对大模型的跟人类需求一致性的改善过程,称为大模型的“社会化”过程,我认为十分的形象,大模型在预训练过程中见识了各种各样的数据,因此针对一个prompt会输出什么东西,也可能是多种多样的,但是预训练数据中出现的数据模式,不代表都是人类在使用模型时希望看到的模式,因此需要一个社会化的过程,来规范模型的“言行举止”。

我家警长出境

下面我举个例子:

对于像GPT这样自回归式生成模型,也被称为“续写”模型,我们的期望自然是对给定的输入直接得到答案,就像图中的蓝色机器人那样。然而,实际的输出可能会与我们的预期存在较大的差距,它会给出一系列问题,即图中的红色机器人 output。这种现象的出现是因为,无论是在“一个问题后面接一个回答”,还是在“一个问题后面接另一个问题”,这些模式都在训练语料中频繁出现。因此,当你让模型根据一个问题来进行续写时,无论是继续解答问题,还是提出更多的问题,对模型来说都是可能的。这就是问题的关键所在,如果一个经过大规模语料预训练的模型,在输出时能满足人类的期待吗?

InstructGPT的方法

下面直接讲一讲OpenAI是如何处理alignment问题的,论文中的这个图就已经十分清楚:

InstructGPT

这里顺便也放出ChatGPT训练的流程图,基本可以等于复制粘贴:

ChatGPT

这两位人工智能助手有着惊人的相似性,仿佛是同胞姐妹。尽管它们食用的饲料可能有细微差别,但考虑到ChatGPT出生较晚,家庭条件相对优越,从GPT-3.5开始发展,而InstructGPT则是在GPT-3的基础上进行训练,这种一致性非常令人惊奇。

在深入探讨之前的三个步骤之前,让我们先思考一下如何应对模型与人类期望不符的问题。最直接的解决方案似乎是手动编写大量数据(包括人们所提供的提示和期望的输出),使其完全符合人类的模式,并让模型学习这些模式。然而,这种方法付出的成本过高。因此,我们需要找到一种更简便的方法来减轻这个过程的压力:

在本篇文章中,我们将以一种高级的文章写作技巧,重新包装和呈现原有的信息。首先,我们将把原始的模型称为V0,也就是GPT-3。接下来,我们会通过人工构建一定量的数据来训练这个模型,这些数据的数量不必过多,只要能满足模型的学习需求即可。在完成数据训练之后,我们将对模型进行学习,使其达到一个新的水平,这时,模型的版本我们将更新至V1。

然后让模型再根据一堆prompt输出,看看效果咋地,我们让模型V1对一个prompt进行多个输出,然后让人对多个输出进行打分排序,排序的过程虽然也需要人工,但是比直接让人写训练数据,还是要方便的多,因此这个过程可以更轻松地标注更多数据。然而,这个标注数据,并不能直接拿来训练模型,因为这是一个排序,但我们可以训练一个打分模型,称为RM(reward-model),RM的作用就是可以对一个pair打分,评价这个output跟prompt搭不搭。

接下来,我们继续训练V1模型,给定一些prompt,得到输出之后,把prompt和output输入给RM,得到打分,然后借助强化学习的方法,来训练V1模型,如此反复迭代,最终修炼得到V2模型,也就是最终的InstructGPT。

上面的三步,就是图中展示的三个步骤,可以看出就是老师(人类)先注入一些精华知识,然后让模型试着模仿老师的喜好做出一些尝试,然后老师对模型的这些尝试进行打分,打分之后,学习一个打分机器,最后打分机器就可以和模型配合,自动化地进行模型的迭代,总体思路称为基于人类反馈的强化学习,RLHF。

能实现这样的方式,我觉得前提就是——这个模型本身已经比较强大了。只有模型本身就比较强大了,才能人类提供少量的精华数据,就可以开始进行模仿,同时在第二步产出较为合理的输出供人类打分。所以这里的GPT-3作为出发点,是这一套流程能行得通的保证之一,而ChatGPT又是从GPT-3.5出发的,那效果肯定更加好了。

InstructGPT论文中,给出了上述三个步骤,分别制造/标注了多少样本:

SFT数据集(即第一步人类根据prompt自己写理想的输出,SFT:supervised fine-tuning),包含13K的prompts;RM数据集(即第二步用来训练打分模型的数据),包含33K的prompts;PPO数据集(即第三步用来训练强化学习PPO模型的数据),包含31K的prompts。

前两步的prompts,来自于OpenAI的在线API上的用户使用数据,以及雇佣的标注者手写的。最后一步则全都是从API数据中采样的,下表的具体数据:

总共加起来,也就77K的数据,而其中涉及人工的,只有46K。真心不多!也就是GPT-3继续在77K的数据上进行了进一步微调,就得到了InstructGPT。

初始的种子数据集,需要标注者来编写prompts,而不是从API数据中采样,这是因为API接口中的prompts数据,多数都不是那种”人类要求模型干什么事儿“这类instruction-like prompts,多数都是续写之类的,这跟本文的出发点——希望模型能按照人类的要求做事儿,有点不匹配,所以需要标注者现场编写。具体这些标注者被要求写这么三种数据:

Plain:自己随便拍脑袋想一些prompts,同时尽可能保证任务的多样性。(比方随便写”请给我写个段子“,”请给我把这段话翻译成德语“,”啥是马尔科夫链啊?“等等各种问题、要求)Few-shot:不仅仅需要需要写prompts,还需要写对应的outputs。(这部分应该是最耗费人力的了,也是SFT数据的主要组成部分)User-based:OpenAI的用户希望OpenAI未来能提供哪些服务,有一个waitlist,然后这些标注者,就根据这个waitlist里面的task来编写一些prompts。(相当于告诉标注者,你们看看用户们都期待些什么功能,你们可以作为参考)

下表则展示了OpenAI的客户在日常使用时的用途分布,即API数据的分布(这也是RM数据集的大致分布):

(但奇怪的是,论文中找不到SFT数据集的分布,感觉应该跟RM的分布差别挺大的,而从数据质量上讲,这部分应该是质量最高的,可能是属于商业机密?)

以上就是InstructGPT的方法论,以及大家最关心的数据收集过程。至于模型怎么训练,这些不重要,毕竟99.99%的人都没法训练GPT-3,更别提GPT-3.5了。但是这里有一个地方确实也需要说一嘴,打分模型(RM模型)也是基于GPT-3进行训练的,使用的是6B的版本,具体就是在进行SFT训练之后,把最后的embedding层去掉,改成输出一个标量。

InstructGPT工作的主要结论

效果其实不必多说,大家已经十分熟悉ChatGPT多么强大,InstructGPT其实类似。最终的结论就是,在”听指挥“方面,1.3B版本的InstructGPT,就可以超过比自己大100倍的175B版本的GPT-3了:

下面是一个例子:

总的来说,这篇文章就是在介绍OpenAI是怎么把GPT-3这个野孩子调教得听人类指挥的,而且这个调教成本,并没有那么大,相比于GPT-3预训练的成本,InstructGPT仅使用了77K的数据进行微调,这基本不值一提。最终,InstructGPT生成的结果,在真实性、无害性、有用性方面都有了很大的提高(但是对偏见这种问题依然没有改善)。

除此之外,另外作者团队通过大量的实践,总结了一下几个重要结论:

这种“调教”,会降低模型在常见NLP任务上的效果,作者称之为“对齐税”——alignment tax(实际上之前很多研究都发现了这个问题)。但是,通过改善RLHF的过程,比如在预训练过程也混合RLHF的方法。常见的公开NLP数据集,跟人类实际使用语言模型的场景,差别很大。因此单纯在公开NLP数据集进行指令微调,效果依然不够。虽然人类标注只有几十K,远远不能覆盖所有可能的prompts,但是实验发现InstructGPT的域外泛化能力很强,对于没有见过的prompt类型,依然有比较好的泛化能力。革命尚未成功,InstructGPT依然会犯错,依然可能瞎编乱造、啰里吧嗦、不听指挥、黑白不分。。。测试过ChatGPT的同学肯定也发现及时是ChatGPT也难以避免这个问题。所以InstructGPT、ChatGPT是开启了一扇门,让人看到了巨大的希望,也看到了巨大的困难,依然有很多有挑战性的问题等着我们解决。

以上。

经过“调教”的警长

AI时代,拥有个人微信机器人AI助手!AI时代不落人后!

免费ChatGPT问答,办公、写作、生活好得力助手!

搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!

Leave a Reply

Your email address will not be published. Required fields are marked *