然而,GPT-3 存在一个问题,即终端用户提供的任务与模型在训练过程中所见到的任务不一致。我们已经知道,语言模型根据输入文本的上下文来预测下一个词元。这个训练过程不一定与终端用户希望模型执行的任务一致。此外,增大模型的规模并不能从根本上使其更好地遵循用户的意图或指令。像 GPT-3 这样的模型是在互联网数据上进行训练的。尽管数据源经过了一定的筛选,但用于训练模型的数据仍然可能包含虚假信息或有问题的文本,比如涉及种族歧视、性别歧视等。因此,模型有时可能说错话,甚至说出有害的话。

2021 年,OpenAI发布了 GPT-3 模型的新版本,并取名为 InstructGPT。与原始的 GPT-3 基础模型不同,InstructGPT 模型通过基于人类反馈的强化学习(reinforcement learning from human feedback,RLHF)进行优化。这意味着 InstructGPT 模型利用反馈来学习和不断改进。这种方法使模型能够更好地理解人类指令,同时提高生成内容的真实性,并减少有害或不恰当的输出。

为了说明区别,我们输入以下提示词:“解释什么是时间复杂度。”两个模型给出的回答如下所述。

● 标准的 GPT-3 模型给出的回答是:“解释什么是空间复杂度。解释什么是大 记法。”

● InstructGPT 模型给出的回答是:“时间复杂度用于衡量算法运行和完成任务所需的时间,通常采用大 记法表示。它以操作次数来衡量算法的复杂度。算法的时间复杂度至关重要,因为它决定了算法的效率和对更大输入的扩展能力。”

可以看到,对于相同的输入,第一个模型无法正确回答问题(或者生成的回答很奇怪),而第二个模型则能提供正确的答案。用户希望与一个智能助手进行交互,而这并不是标准的 GPT-3 模型所擅长的,因此需要通过 RLHF 进行额外优化,以实现更符合预期的行为。当然,使用标准的 GPT-3 基础模型也可以得到理想的回答,但与 InstructGPT 模型不同的是,需要精心设计提示词并优化输入才能获得满意的结果。这种方法被称为提示工程(prompt engineering),我们将在后续章节中详细介绍。

在题为“Training Language Models to Follow Instructions with Human Feedback”的论文中,OpenAI的欧阳龙(Ouyang)等人解释了 InstructGPT 是如何构建的。从 GPT-3 模型到 InstructGPT 模型的训练过程主要有两个阶段:监督微调(supervised fine-tuning,SFT)和 RLHF。每个阶段都会针对前一阶段的结果进行微调。也就是说,SFT 阶段接收 GPT-3 模型并返回一个新模型,RLHF 阶段接收该模型并返回 InstructGPT 版本。

根据 OpenAI的论文,我们重新绘制了一张流程图,如图 1-7 所示。

我们来逐一探讨每个阶段。

在 SFT 阶段,原始的 GPT-3 模型通过简单的监督学习进行微调(如图 1-7 的步骤 1 所示)。OpenAI拥有由终端用户提供的提示词集合。训练过程从该集合中随机选择的一个提示词开始,随后,由一名人工标注员(labeler)编写该提示词的理想答案。这一过程会重复成千上万次,以构建一个包含提示词及其理想回答的监督训练数据集。然后,利用这个数据集对 GPT-3 模型进行微调,使其对用户请求的回答更加一致。经过这一阶段训练的模型被称为 SFT 模型。

RLHF 阶段分为两个子步骤:首先训练奖励模型(图 1-7 中的步骤 2),然后使用奖励模型进行强化学习(图 1-7 中的步骤 3)。

奖励模型(reward model,RM)的目标是自动为模型对提示词的回答打分。当回答与提示词的要求匹配时,奖励模型评分应较高;如果不匹配,则评分较低。为了构建奖励模型,OpenAI首先随机选择一个问题,然后使用 SFT 模型生成多个可能的回答。(正如我们稍后会看到的,通过调整温度参数,可以针对同一个输入提示词生成多个不同的回答。)

接下来,人工标注员会根据回答与提示词的匹配程度、回答的毒性(toxicity)等标准,对这些回答进行排序。这一过程重复多次后,所收集的数据集将用于微调 SFT 模型,使其能够进行评分。最终,这个奖励模型评分系统将用于构建最终的 InstructGPT 模型。

图 1-7:获取 InstructGPT 模型的步骤(根据欧阳龙等人的图片重绘)

InstructGPT 模型训练的最后一步涉及强化学习,这是一个迭代优化的过程。训练从一个初始的生成式模型(如 SFT 模型)开始,首先随机选择一个提示词,然后模型生成对应的输出,接着奖励模型对该输出进行评分。根据所获得的奖励分数,生成式模型会进行相应的调整和优化。这一过程可以在无人工干预的情况下重复无数次,从而使模型能够更高效、自动化地改进。

与基础的 GPT-3 模型相比,InstructGPT 模型能够针对用户的提问生成更准确的内容。OpenAI建议使用 InstructGPT 模型,而非原始版本。