ChatGPT/InstructGPT详解( 三 )

  • 收集人工标注的对比数据,训练奖励模型(Reword Model,RM);
  • 使用RM作为强化学习的优化目标,利用PPO算法微调SFT模型 。
  • 根据图4,我们将分别介绍InstructGPT/ChatGPT的数据集采集和模型训练两个方面的内容 。
    2.1 数据集采集如图4所示,InstructGPT/ChatGPT的训练分成3步,每一步需要的数据也有些许差异,下面我们分别介绍它们 。
    2.1.1 SFT数据集SFT数据集是用来训练第1步有监督的模型,即使用采集的新数据,按照GPT-3的训练方式对GPT-3进行微调 。因为GPT-3是一个基于提示学习的生成模型,因此SFT数据集也是由提示-答复对组成的样本 。SFT数据一部分来自使用OpenAI的PlayGround的用户,另一部分来自OpenAI雇佣的40名标注工(labeler) 。并且他们对labeler进行了培训 。在这个数据集中,标注工的工作是根据内容自己编写指示,并且要求编写的指示满足下面三点:
    • 简单任务:labeler给出任意一个简单的任务,同时要确保任务的多样性;
    • Few-shot任务:labeler给出一个指示,以及该指示的多个查询-相应对;
    • 用户相关的:从接口中获取用例,然后让labeler根据这些用例编写指示 。
    2.1.2 RM数据集RM数据集用来训练第2步的奖励模型,我们也需要为InstructGPT/ChatGPT的训练设置一个奖励目标 。这个奖励目标不必可导,但是一定要尽可能全面且真实的对齐我们需要模型生成的内容 。很自然的,我们可以通过人工标注的方式来提供这个奖励,通过人工对可以给那些涉及偏见的生成内容更低的分从而鼓励模型不去生成这些人类不喜欢的内容 。InstructGPT/ChatGPT的做法是先让模型生成一批候选文本,让后通过labeler根据生成数据的质量对这些生成内容进行排序 。
    2.1.3 PPO数据集InstructGPT的PPO数据没有进行标注,它均来自GPT-3的API的用户 。既又不同用户提供的不同种类的生成任务,其中占比最高的包括生成任务(45.6%),QA(12.4%),头脑风暴(11.2%),对话(8.4%)等 。
    2.1.4 数据分析因为InstructGPT/ChatGPT是在GPT-3基础上做的微调,而且因为涉及了人工标注,它们数据总量并不大,表2展示了三份数据的来源及其数据量 。
    ChatGPT/InstructGPT详解

    文章插图
    表2:InstructGPT的数据分布
    论文的附录A对数据的分布进行了更详细的讨论,这里我列出几个可能影响模型效果的几项:
    • 数据中96%以上是英文,其它20个语种例如中文,法语,西班牙语等加起来不到4%,这可能导致InstructGPT/ChatGPT能进行其它语种的生成,但效果应该远不如英文;
    • 提示种类共有9种,而且绝大多数是生成类任务,可能会导致模型有覆盖不到的任务类型;
    • 40名外包员工来自美国和东南亚,分布比较集中且人数较少,InstructGPT/ChatGPT的目标是训练一个价值观正确的预训练模型,它的价值观是由这40个外包员工的价值观组合而成 。而这个比较窄的分布可能会生成一些其他地区比较在意的歧视,偏见问题 。
    此外,ChatGPT的博客中讲到ChatGPT和InstructGPT的训练方式相同,不同点仅仅是它们采集数据上有所不同,但是并没有更多的资料来讲数据采集上有哪些细节上的不同 。考虑到ChatGPT仅仅被用在对话领域,这里我猜测ChatGPT在数据采集上有两个不同:1. 提高了对话类任务的占比;2. 将提示的方式转换Q&A的方式 。当然这里也仅仅是猜测,更准确的描述要等到ChatGPT的论文、源码等更详细的资料公布我们才能知道 。
    2.2 训练任务我们刚介绍到InstructGPT/ChatGPT有三步训练方式 。这三步训练会涉及三个模型:SFT,RM以及PPO,下面我们详细介绍它们 。
    2.2.1 有监督微调(SFT)这一步的训练和GPT-3一致,而且作者发现让模型适当过拟合有助于后面两步的训练 。
    2.2.2 奖励模型(RM)因为训练RM的数据是一个labeler根据生成结果排序的形式,所以它可以看做一个回归模型 。RM结构是将SFT训练后的模型的最后的嵌入层去掉后的模型 。它的输入是prompt和Reponse,输出是奖励值 。具体的讲,对弈每个prompt,InstructGPT/ChatGPT会随机生成 K 个输出( 4≤K≤9 ),然后它们向每个labeler成对的展示输出结果,也就是每个prompt共展示 CK2 个结果,然后用户从中选择效果更好的输出 。在训练时,InstructGPT/ChatGPT将每个prompt的 CK2 个响应对作为一个batch,这种按prompt为batch的训练方式要比传统的按样本为batch的方式更不容易过拟合,因为这种方式每个prompt会且仅会输入到模型中一次 。


    推荐阅读