InstructGPT:遵循人类反馈指令来训练语言模型 《Training language models to follow instructions with human feedback》

论文地址:https://arxiv.org/pdf/2203.02155.pdf

相关博客
【自然语言处理】【ChatGPT系列】InstructGPT:遵循人类反馈指令来训练语言模型
【自然语言处理】【ChatGPT系列】大模型的涌现能力
【自然语言处理】【文本生成】CRINEG Loss:学习什么语言不建模
【自然语言处理】【文本生成】使用Transformers中的BART进行文本摘要
【自然语言处理】【文本生成】Transformers中使用约束Beam Search指导文本生成
【自然语言处理】【文本生成】Transformers中用于语言生成的不同解码方法
【自然语言处理】【文本生成】BART:用于自然语言生成、翻译和理解的降噪Sequence-to-Sequence预训练
【自然语言处理】【文本生成】UniLM:用于自然语言理解和生成的统一语言模型预训练
【自然语言处理】【多模态】OFA:通过简单的sequence-to-sequence学习框架统一架构、任务和模态

一、简介

​ 使语言模型更大并不能使其更好的遵循人类的指令。例如,大语言模型能够为用户生成不诚实、有毒性或者简单没什么帮助的输出。换句话说,这些没有并没有与用户对齐。本文展示了一种将语言模型对齐至用户意图的方法,其通过人类反馈在广泛的任务上进行微调。开始于一组标注者撰写的 prompts \text{prompts} prompts和提交至 OpenAIAPI \text{OpenAI API} OpenAIAPI prompts \text{prompts} prompts,然后收集一个由期望模型行为组成的标注者演示数据集,并使用监督学习的方法来微调 GPT-3 \text{GPT-3} GPT-3模型。之后,再收集一个模型输出排序的数据集,其使用来自人类反馈的强化学习进一步微调该监督模型。我们称得到的模型为 InstructGPT \text{InstructGPT} InstructGPT。在我们的 prompt \text{prompt} prompt分布上进行人类评估, 1.3B \text{1.3B} 1.3B参数的 InstructGPT \text{InstructGPT} InstructGPT模型的输出由于 175BGPT-3 \text{175B GPT-3} 175BGPT-3的输出,尽管有100倍参数量的差距。此外, InstructGPT \text{InstructGPT} InstructGPT模型在真实性和减少生成毒性上有改善。尽管 InstructGPT \text{InstructGPT} InstructGPT仍然会犯一些小错误,结果显示基于人类反馈的微调是一个对齐人类意图和语言模型的有前景的方向。

二、方法和实验细节

1. High-level \text{High-level} High-level方法

​ 本文的方法论遵循Ziegler et al.Stiennon et al.的工作,并且以及被应用于文本续写和摘要领域。起始时包含:预训练语言模型、 prompt \text{prompt} prompt分布(期望模型能够产生出的对齐输出)以及一队训练有素的人类标注师团队。然后应用下面三个步骤:

  • **步骤1:**收集演示数据 (demonstrationdata) \text{(demonstration data)} (demonstrationdata),并训练一个有监督的 policy \text{policy} policy

    标注者会提供 prompt \text{prompt} prompt演示数据,然后使用监督学习的方式在该数据上微调预训练的 GPT-3 \text{GPT-3} GPT-3模型。

  • **步骤2:**收集比较数据,并训练 reward \text{reward} reward模型

    给定一个输入后,模型会产生多个输出。标注者会指出哪个输出更喜欢,从而收集模型输出之间的比较数据集。基于该数据集训练一个 reward \text{reward} reward模型来预测人类偏好的输出。

  • **步骤3:**使用 PPO \text{PPO} PPO来针对 reward \text{reward} reward模型优化 policy \text{policy} policy

    reword \text{reword} reword模型的输出作为奖励。使用 PPO \text{PPO} PPO算法微调有监督的 policy \text{policy} policy来优化该奖励。

​ 步骤2和3可以连续迭代。在当前最优的 policy \text{policy} policy上收集更多的比较数据,然后用来训练新的 reword \text{reword} reword模型和新的 policy \text{policy} policy

2. 数据集

prompt \text{prompt} prompt数据集主要由提交给 OpenAIAPI \text{OpenAI API} OpenAIAPI的文本 prompt \text{prompt} prompt组成,特别是在 Playground \text{Playground} Playground接口上使用早期版本的 InstructGPT \text{InstructGPT} InstructGPT模型。在本文中,不使用来自使用产品 API \text{API} API的用户数据。基于用户 ID \text{ID} ID创建训练、验证和测试集,因此验证集和测试集不包含来自训练集中用户的数据。

​ 为了训练初始的 InstructGPT \text{InstructGPT} InstructGPT模型,要求标注者编写 prompts \text{prompts} prompts。这是因为需要类似指令的 prompt \text{prompt} prompt来引导流程,并且这种类型的 prompt \text{prompt} prompt并不会通过 API \text{API} API提交给正常的 GPT-3 \text{GPT-3} GPT-3。我们要求标注者撰写三种 prompts \text{prompts} prompts

  • Plain:要求标注者提出一个任意的任务,这样就能确保任务的多样性;
  • Few-shot:要求标注者提出一个 instruction \text{instruction} instruction,以及对应于该 instruction \text{instruction} instruction的多个 query/response \text{query/response} query/response对;
  • User-based:在 OpenAIAPI \text{OpenAI API} OpenAIAPI的等待列表中有大量的陈述用例。要求标注者针对用例来提出 prompts \text{prompts} prompts

对于这些 prompt \text{prompt} prompt,产生了用于微调的三个数据集:(1) SFT \text{SFT} SFT数据集,用来训练 SFT \text{SFT} SFT模型的演示数据;(2) RM \text{RM} RM数据集,标注者对模型输出进行了排序的数据集,用于训练 reword \text{reword} reword模型的数据;(3) PPO \text{PPO} PPO数据集,不需要任何人工标注,被用于 RLHF \text{RLHF} RLHF微调的输入数据。 SFT \text{SFT} SFT数据集包含13k的训练 prompts \text{prompts} prompts RM \text{RM} RM数据集包含33k的训练 prompts \text{prompts} prompts PPO \text{PPO} PPO数据集包含31k训练 prompts \text{prompts} prompts

​ 为了对数据集有一个直观感受,上表1展示了 APIprompt \text{API prompt} APIprompt的用例类别分布。大多数用例都是生成式的,而不是分类或者 QA \text{QA} QA。上表2也展示了一些说明性的 prompts \text{prompts} prompts

3. 任务

​ 训练任务有两个来源:(1) 由标注者编写的 prompts \text{prompts} prompts数据集;(2) 通过 API \text{API} API提交至早期 InstructGPT \text{InstructGPT} InstructGPT模型的 prompts \text{prompts} prompts数据集。这些 prompt \text{prompt} prompt非常多样,包括:生成、问答、对话、摘要、抽取和其他自然语言任务。数据集的96%是英文,但是我们还研究了本文模型回答其他语言的指示能力和完成代码任务的能力。

​ 对于每个自然语言 prompt \text{prompt} prompt,任务通常通过自然语言指令直接指定(例如:写一个关于聪明青蛙的故事),但也可以间接通过少数的几个例子指定(例如:提供一个故事的开头)。在每个例子中,要求标注者推断写下 prompt \text{prompt} prompt用户的意图,并要求跳过哪些意图不明确的 prompt \text{prompt} prompt。此外,标注者也被要求考虑隐含的意图,例如:真实性、潜在的毒性和偏见。

4. 人类数据收集

​ 为了能够产生演示数据 (demonstration) \text{(demonstration)} (demonstration)和比较数据 (comparison) \text{(comparison)} (comparison),在 Upwork \text{Upwork} Upwork ScaleAI \text{ScaleAI} ScaleAI上雇佣了40人的团队。相比于早期在摘要任务上收集人类偏好的数据,本文的输入涵盖了更加广泛的任务,偶尔还会包含有争议和敏感的话题。我们的目标是挑选一组标注者,其对不同人口群体的偏好更敏感,善于识别潜在有害的输出。因此,我们进行了筛选测试来衡量标注者在这些维度上的表现。我们选择在测试上表现好的标注者。

​ 在训练和评估时,对齐的准则可能存在冲突:例如用户请求可能有害的响应。在训练过程中,优先考虑对用户有帮助的。然而,在评估时要求标注者优先考虑真实性和有害性。

​ 正如Stiennon et al.的工作,我们在项目的过程中与标注者紧密合作。我们有一个培训项目标注者的入职流程,为每项任务撰写详细的说明,并在共享聊天室中回答标注者的问题。

​ 作为一个初步的研究,为了观察模型泛化到其他标注者偏好的能力,额外雇佣了一个独立的标注团队,其不产生任何的训练数据。这些标注者来自相同的供应商,但是不进行筛选测试。

​ 尽管任务很复杂,我们发现标注者之间的一致性非常高:经过培训的标注者有 72.5 ± 1.5 % 72.5\pm1.5\% 72.5±1.5%同意彼此意见,未经培训的标注者则有 77.3 ± 1.3 % 77.3\pm1.3\% 77.3±1.3%同意彼此意见。

5. 模型

​ 基础模型为 GPT-3 \text{GPT-3} GPT-3。该模型在广泛的网络数据上进行训练,并能够适应广泛的下游任务。基于该模型,使用三种不同的技术训练模型:

  • 监督微调 (Supervisedfine-tuning,SFT) \text{(Supervised fine-tuning,SFT)} (Supervisedfine-tuning,SFT)

    在标注数据上使用监督学习来微调 GPT-3 \text{GPT-3} GPT-3。训练16个epochs,使用cosine学习率衰减,以及0.2的残差dropout。基于验证集上的 RM \text{RM} RM分数来选择最终的 SFT \text{SFT} SFT模型。类似于Wu et al.,发现 SFT \text{SFT} SFT模型在1个epoch后过拟合了验证集。然而,尽管存在过拟合,但是训练越多epoch越有助于 RM \text{RM} RM得分和人类偏好。

  • 奖励建模 (Rewardmodeling,RM) \text{(Reward modeling,RM)} (Rewardmodeling,RM)

    基于 SFT \text{SFT} SFT模型,将 prompt \text{prompt} prompt response \text{response} response作为输入来训练模型,并输出标量 reward \text{reward} reward。在本文中仅使用 6B \text{6B} 6B RM \text{RM} RM,因为这能够节省大量的计算,并且我们发现 175B \text{175B} 175B训练可能不稳定,因此不太适合作为 RL \text{RL} RL中的值函数。

    Stiennon et al.的工作中, RM \text{RM} RM模型在比较数据集上进行训练,其中比较的结果作为标签并使用交叉熵损失函数:奖励的差异表示一种应答比另一种应答更受人类标注者青睐的对数概率。

    为了加速比较数据的收集,我们将 K = 4 K=4 K=4 K = 9 K=9 K=9的所有应答呈现给标注者进行排序。这会为每个 prompt \text{prompt} prompt产生 ( k 2 ) \begin{pmatrix}k \\ 2\end{pmatrix} (k2)个比较结果给标注者。因为比较数据是与每个标注任务非常相关的,我们发现若对一个数据集中的比较数据进行简单的shuffle,数据集上的单次传播会导致奖励模型过拟合。相反,我们将每个 prompt \text{prompt} prompt的所有 ( k 2 ) \begin{pmatrix}k \\ 2\end{pmatrix} (k2)比较数据作为单个batch的元素。这在计算效率上要高的多,因为 RM \text{RM} RM仅需要一次前向传播,但是它不再过拟合,其实现了验证精确度的显著改善和对数loss。

    具体来说,奖励模型的损失函数为
    loss ( θ ) = − 1 ( k 2 ) E ( x , y w , y l ) ∼ D [ log ⁡ ( σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ) ] (1) \text{loss}(\theta)=-\frac{1}{\begin{pmatrix}k \\ 2\end{pmatrix}}E_{(x,y_w,y_l)\sim D}[\log(\sigma(r_\theta(x,y_w)-r_\theta(x,y_l)))] \tag{1} loss(θ)=(k2)1E(x,yw,yl)D[log(σ(rθ(x,yw)rθ(x,yl)))](1)
    其中, r θ ( x , y ) r_\theta(x,y) rθ(x,y)是奖励模型为 promptx \text{prompt x} promptx completiony \text{completion y} completiony在参数 θ \theta θ下奖励模型的标量输出, y w y_w yw是样本对 y w y_w yw y l y_l yl中更喜欢的补全 y w y_w yw,并且 D D D是人类比较数据集。

  • 强化学习

    再一次following Stiennon et al.的工作,使用 PPO \text{PPO} PPO在环境中微调 SFT \text{SFT} SFT模型。环境是一个bandit环境,其会呈现一个随机消费者的 prompt \text{prompt} prompt和该 prompt \text{prompt} prompt的期望应答。给定 prompt \text{prompt} prompt response \text{response} response,其会产生一个由奖励模型产生的奖励。此外,为 SFT \text{SFT} SFT模型的每个token添加了一个 KL \text{KL} KL惩罚项,用来缓和奖励模型的过度优化。值函数从 RM \text{RM} RM中初始化。我们称这些模型为 PPO \text{PPO} PPO

    为了固定在公共 NLP \text{NLP} NLP数据集上的表现,我们也尝试将预训练梯度混合至 PPO \text{PPO} PPO梯度。我们称这些模型为 PPO-ptx \text{PPO-ptx} PPO-ptx。在强化学习的训练中我们最大化下面的合并目标函数:
    objective ( ϕ ) = E ( x , y ) ∼ D π θ RL [ r θ ( x , y ) − β log ⁡ ( π ϕ RL ( y ∣ x ) / x SFT ( y ∣ x ) ) ] + γ E x ∼ D p r e t r a i n [ log ⁡ ( π ϕ RL ( x ) ) ] (2) \text{objective}(\phi)=E_{(x,y)\sim D_{\pi_\theta \text{RL}}}[r_\theta(x,y)-\beta\log(\pi_\phi^{\text{RL}}(y|x)/x^{\text{SFT}}(y|x))]+\gamma E_{x\sim D_{pretrain}}[\log(\pi_\phi^{\text{RL}}(x))] \tag{2} objective(ϕ)=E(x,y)DπθRL[rθ(x,y)βlog(πϕRL(yx)/xSFT(yx))]+γExDpretrain[log(πϕRL(x))](2)
    其中, π ϕ RL \pi_{\phi}^{\text{RL}} πϕRL是学习到的 RLpolicy \text{RL policy} RLpolicy π SFT \pi^{\text{SFT}} πSFT是监督训练模型, D p r e t r a i n D_{pretrain} Dpretrain是预训练分布。 KL \text{KL} KL奖励系数 β \beta β和预训练损失系数 γ \gamma γ用来控制 KL \text{KL} KL惩罚的强度和预训练的梯度。对于 PPO \text{PPO} PPO模型, γ \gamma γ被设置为0。除非另有说明,本文的 InstructGPT \text{InstructGPT} InstructGPT是指 PPO-ptx \text{PPO-ptx} PPO-ptx模型。

  • Baselines

    PPO \text{PPO} PPO模型与 SFT \text{SFT} SFT模型和 GPT-3 \text{GPT-3} GPT-3进行了比较。此外,还比较了通过提供 few-shot \text{few-shot} few-shot前缀来提示模型来遵循指令的 GPT-3 \text{GPT-3} GPT-3。这个前缀会追加至用户指定的指令之前。

    我们还额外将在 FLAN \text{FLAN} FLAN T0 \text{T0} T0数据集上微调的 175BGPT-3 \text{175B GPT-3} 175BGPT-3 InstructGPT \text{InstructGPT} InstructGPT比较,这两个数据集是由各类自然语言处理任务组成,并为每个任务合并了自然语言指令。我们在接近100万个样本上进行微调,并选择能够在验证集获得最高奖励分数的checkpoint

6. 评估

​ 为了评估本文模型是如何”对齐的”,首选要澄清一下本文中的”对齐”含义。”对齐”的定义从来都是模糊和混乱的,有着各种解释。遵循Leike et al.,我们的目标是训练一个能够按照用户意图的行动。更实际的来说,为了实现本文语言任务的目标,使用类似于Askell et al.的框架,若其是有益(helpful)、诚实(honest)并且无害的(harmless),那么模型就是”对齐”的。

​ 为了能够达到有益的目标,模型应该遵循指令,但是也要从 few-shotprompt \text{few-shot prompt} few-shotprompt或者其他可解释的模式(例如 Q:{question} nA \text{Q:\{question\}\\nA} Q:{question}nA)来推断意图。因为给定一个 prompt \text{prompt} prompt的意图可能是不清晰并且模糊的,我们依赖于标注者的判断,并且我们主要的评估指标是标注者的偏好评级。然而,因为标注者不是生成 prompts \text{prompts} prompts的用户,用户的实际意图和标注者依赖阅读 prompt \text{prompt} prompt认为的意图之间存在分歧。

​ 目前还不清楚如何衡量纯生成模型的诚实性。这需要比较模型实际输出和其对正确输出的”belief”,因为模型是一个大黑盒,因此无法推断模型的”belief”。相反,我们衡量真实性:即模型关于世界的称述是否真实。这里使用两个指标进行评估:(1) 评估模型在封闭领域任务上编造信息的倾向;(2) 使用 TruthfulQA \text{TruthfulQA} TruthfulQA数据集。不必说,这仅是真实性的一小部分。

​ 类似于诚实(honesty),衡量语言模型的有害性也有很多的挑战。在大多数的场景中,语言模型的有害性来源于现实世界如何使用这些输出。例如,在一个部署的聊天机器人这个上下文中,模型生成有毒的输出是有害的,但是如果是用来训练一个更加准确的毒性检测模型来说是有益的。在项目早期,我们要求标注者评估输出是否”潜在有害”。然而,我们终止了这个要求,因为这需要对如何使用模型的输出有太多的猜测。特别是因为我们的数据来自于哪些与 PlaygroundAPI \text{Playground API} PlaygroundAPI接口交互的用户,而不是产品的使用用例。

​ 因此,我们使用一套更具体的代理准则,目标是捕获已经部署模型可能会有害的各个不同的方面:我们要求标注者评估一个输入在用户助理这个上下文中是否不合适,诋毁受保护的类别,或者包含性或者暴力的内容。我们还在衡量偏见和毒性的数据集上评估了我们的模型,例如: RealToxicityPrompts \text{RealToxicityPrompts} RealToxicityPrompts CrowS-Pairs \text{CrowS-Pairs} CrowS-Pairs

​ 总的来说,我们将定量的评估划分为两个独立的部分:

  • API \text{API} API分布上进行评估

    我们主要的评估是来自于训练分布同源的一组 prompts \text{prompts} prompts的人类偏好评分。当使用来自 API \text{API} API prompt \text{prompt} prompt进行评估,我们仅选择训练中没有包含的用户的 prompts \text{prompts} prompts。然而,考虑到我们训练的 prompts \text{prompts} prompts被设计用于 InstructGPT \text{InstructGPT} InstructGPT模型,其很可能不利用 GPT-3baselines \text{GPT-3 baselines} GPT-3baselines。因此,我们也评估了通过 API \text{API} API提交给 GPT-3 \text{GPT-3} GPT-3 prompts \text{prompts} prompts。这些 prompt \text{prompt} prompt通常并不是一个”instruction following”风格,但是被设计用于 GPT-3 \text{GPT-3} GPT-3。在这两种情况下,对于每个模型计算其输出相较于baseline被更喜欢的频率。选择 175BSFT \text{175B SFT} 175BSFT模型作为baseline,因为其性能接近于中间水平。此外,我们也要求标注者评价每个响应的质量,并收集每个模型输出的一系列元数据。

  • 在公开 NLP \text{NLP} NLP数据集上评估

    我们也在两种类型的公开数据集上进行了评估:一种是捕获语言模型安全性方面,特别是真实性、毒性、偏见等;另一种是传统 NLP \text{NLP} NLP任务上的 zero-shot \text{zero-shot} zero-shot表现,例如:问答、阅读理解和摘要。我们也在 RealToxicityPrompts \text{RealToxicityPrompts} RealToxicityPrompts数据集上进行了人工毒性评估。

三、结果

1. API \text{API} API分布上的结果

​ **相较于 GPT-3 \text{GPT-3} GPT-3的输出,标注者显然更喜欢 InstructGPT \text{InstructGPT} InstructGPT输出。**在 prompts \text{prompts} prompts测试集,我们的标注者更喜欢 InstructGPT \text{InstructGPT} InstructGPT的输出。结果如图1所示。 GPT-3 \text{GPT-3} GPT-3的输出效果最差,使用精心设计的 few-shotprompt \text{few-shot prompt} few-shotprompt则能够显著的改善效果 (GPT-3(prompted)) \text{(GPT-3(prompted))} (GPT-3(prompted)),然后是使用监督学习在演示数据上训练 (SFT) \text{(SFT)} (SFT),最终在比较数据上使用 PPO \text{PPO} PPO训练的模型效果最好。在 PPO \text{PPO} PPO过程中混合预训练并不能在标注者偏好上带来大的改变。为了说明我们收获的巨大:当直接比较时, 175BInstructGPT \text{175B InstructGPT} 175BInstructGPT 85 ± 3 % 85\pm 3\% 85±3%的时间里都优于 GPT-3 \text{GPT-3} GPT-3,并且在 71 ± 4 % 71\pm 4\% 71±4%的时间里优于 few-shotGPT-3 \text{few-shot GPT-3} few-shotGPT-3

​ 在提交至 GPT-3 \text{GPT-3} GPT-3上的 prompts \text{prompts} prompts上进行评估,结果上并没有显著的改善。

​ 上图4展示了在几个更具体的维度对 InstructGPT \text{InstructGPT} InstructGPT进行了良好的评价。具体来说,在用户助理的这个上下文中,相较于 GPT-3 \text{GPT-3} GPT-3 InstructGPT \text{InstructGPT} InstructGPT输出更加合适、能够更好的遵循指令中定义的约束、很少完全不遵循正确的指示、在封闭领域中不怎么编造事实。这些结果显示 InstructGPT \text{InstructGPT} InstructGPT要比 GPT-3 \text{GPT-3} GPT-3更可靠、更简单。

​ **我们的模型能够泛化到那些没有提供仍然训练数据的标注者偏好上。**这些预留出来的标注者与那些提供训练数据的标注者具有相似的排序偏好。特别地,根据这些预留出来的标注者, InstructGPT \text{InstructGPT} InstructGPT模型显著的优于 GPT-3baselines \text{GPT-3 baselines} GPT-3baselines。因此, InstructGPT \text{InstructGPT} InstructGPT模型并不是简单过拟合了提供训练数据的标注者的偏好。

​ 我们能够从奖励模型的泛化能力上看到进一步的证据。我们运行了一个实验,将标注者划分为5组,并使用5折交叉验证训练了5个 RM \text{RM} RM。这些 RM \text{RM} RM在预测预留组标注者的偏好时有 69.6 ± 0.9 % 69.6\pm0.9\% 69.6±0.9%,与在训练集上预测偏好的准确率 72.4 ± 0.4 % 72.4\pm0.4\% 72.4±0.4%相比略有下降。

​ 公共 NLP \text{NLP} NLP数据集并不能反映如何使用我们的模型。上图5中,也比较了在 FLAN \text{FLAN} FLAN T0 \text{T0} T0数据集上微调的 175BGPT-3 \text{175B GPT-3} 175BGPT-3。我们发现这些模型好于 GPT-3 \text{GPT-3} GPT-3,与很好的选择 prompt \text{prompt} prompt GPT-3 \text{GPT-3} GPT-3相当,但是差于 SFTbaseline \text{SFT baseline} SFTbaseline。这表明这些数据集的多样性不足以改善 APIprompt \text{API prompt} APIprompt分布上的表现。 175BInstructGPT \text{175B InstructGPT} 175BInstructGPT模型输出在 78 ± 4 % 78\pm4\% 78±4%的时间里优于 FLAN \text{FLAN} FLAN,并在 79 ± 4 % 79\pm4\% 79±4%的时间里优于 T0 \text{T0} T0

​ 我们认为 InstructGPT \text{InstructGPT} InstructGPT模型效果优于 FLAN \text{FLAN} FLAN T0 \text{T0} T0的两个原因。第一,公共 NLP \text{NLP} NLP数据集通常是那些容易自动评估的任务,例如:分类、问答、以及一定程度的摘要和翻译。然而,分类、问答在使用语言模型的 API \text{API} API用户中占比很少(18%),反而是开放式生成和头脑风暴占据了大部分(57%)。第二,对于公共 NLP \text{NLP} NLP数据集来说获得高多样性的输入很困难。当然, NLP \text{NLP} NLP数据集中的指令也是我们希望语言模型能够解决的,所以更加广泛的指令遵循模型应该合并两种类型的数据集。

2. 公开 NLP \text{NLP} NLP数据集上的结果

​ **相较于 GPT-3 \text{GPT-3} GPT-3 InstructGPT \text{InstructGPT} InstructGPT模型在真实性上有改善。**根据在 TruthfulQA \text{TruthfulQA} TruthfulQA数据集上的人工评估,我们的 PPO \text{PPO} PPO模型相较于 GPT-3 \text{GPT-3} GPT-3,在生成真实性和信息量上带来了小但显著的改善(上图6)。这个行为是默认的:我们的模型不需要使用特别的指令来指令说真话,从而表现出更高的真实性。有趣的是, 1.3BPPO-ptx \text{1.3B PPO-ptx} 1.3BPPO-ptx模型是个例外,其效果会稍微差于相同规模的 GPT-3 \text{GPT-3} GPT-3模型。当仅根据 prompt \text{prompt} prompt进行评估, PPO \text{PPO} PPO模型在真实性和信息量上仍然比 GPT-3 \text{GPT-3} GPT-3更高。

InstructGPT \text{InstructGPT} InstructGPT相较于 GPT-3 \text{GPT-3} GPT-3在毒性上有小幅度改善,但是偏见没有改善。我们先在 RealToxicityPrompts \text{RealToxicityPrompts} RealToxicityPrompts数据集上评估我们的模型。我们通过两种方式做到这一点:我们通过 PerspectiveAPI \text{Perspective API} PerspectiveAPI来运行模型样本获得自动毒性评分,其是该数据集的标准评估程序,并且我们将一些样本交给标注者来获得绝对毒性、相对于 prompt \text{prompt} prompt的毒性、连续性以及整体输出偏好的评分。我们根据 prompt \text{prompt} prompt毒性来从数据集中均匀的采样 prompts \text{prompts} prompts;这与该数据集的标准 prompt \text{prompt} prompt采样不同,因此我们的绝对毒性数量被夸大了。

​ 我们的结果如上图7所示。我们发现,当模型被提示出产生安全并且保存尊重的输出, InstructGPT \text{InstructGPT} InstructGPT模型相较于 GPT-3 \text{GPT-3} GPT-3生成更少毒性的输出。有趣的是,当显式的提示模型产生有害的输出, InstructGPT \text{InstructGPT} InstructGPT输出的毒性要比 GPT-3 \text{GPT-3} GPT-3强很多。

​ 这个结果在人类评估中得到了证实。在论文附录中提供了更多的结果。总的来说,给定 prompt \text{prompt} prompt,所有模型的毒性都低于预期。 SFTbaseline \text{SFT baseline} SFTbaseline是所有模型中毒性最少的,但也具有最低的连续性,在我们的排名中最不受欢迎,这表明模型会产生非常短或者退化的响应。

​ 为了评估模型产生偏见的倾向,我们也在修改版本的 Winogender \text{Winogender} Winogender CrowS-Pairs \text{CrowS-Pairs} CrowS-Pairs数据集中评估 InstructGPT \text{InstructGPT} InstructGPT。这些数据集由能够突出潜在偏见的句子对组成。我们计算在每个样本对中产生句子的相对概率以及关联二值概率分布的熵。完全没有偏见模型在每个句子对之间没有偏好,并且因此会有最大的熵。通过这个评估,我们模型的偏见并没有比 GPT-3 \text{GPT-3} GPT-3少。 PPO-ptx \text{PPO-ptx} PPO-ptx模型在偏见上与 GPT-3 \text{GPT-3} GPT-3类似,但当被提示要以尊重的方式行动的话,其展示了更低的熵并且更高的偏见。偏见的模型并不清晰,似乎被指示的模型对齐输出更加的确信,不管这些输出是否表现为刻板行为。

​ **通过修改 RLHF \text{RLHF} RLHF的微调过程能够最小化公共 NLP \text{NLP} NLP数据集上的性能回归。**默认情况下,当在 API \text{API} API分布上训练 PPO \text{PPO} PPO模型,其会遭受”alignment tax”,因为其在几个公共 NLP \text{NLP} NLP数据集上的效果会下降。我们希望在对齐过程中避免”alignment tax”。将预训练的更新添加至 PPO \text{PPO} PPO微调中能够缓解在所有数据集上的效果回归,甚至在 HellaSwag \text{HellaSwag} HellaSwag上超越了 GPT-3 \text{GPT-3} GPT-3 PPO-ptx \text{PPO-ptx} PPO-ptx模型在 DROP \text{DROP} DROP SQuADv2 \text{SQuADv2} SQuADv2和翻译上仍然落后于 GPT-3 \text{GPT-3} GPT-3,更多的工作需要被研究并进一步消除这些性能回归。

​ 混合预训练的更新要好于简单的增加 KL \text{KL} KL系数。实验显示存在一个预训练混合系数值能够反转 SQuADv2 \text{SQuADv2} SQuADv2 DROP \text{DROP} DROP的性能回归,并且在验证集上最小的影响。

3. 定性结果

​ ** InstructGPT \text{InstructGPT} InstructGPT模型能够泛化到 RLHF \text{RLHF} RLHF微调分布之外的指令。**特别地,我们发现 InstructGPT \text{InstructGPT} InstructGPT具有遵循非英语语言指令的能力,并能够对代码执行摘要和问答能力。这很有趣,因为非英语语言和代码在微调数据集上是很小的一部分。这表明,对齐方法能够泛化到没有直接人工监督的输入上执行期望的行为。

​ 我们没有量化的追踪这些行为,但展示了一些定性的例子(上图8)。我们的 175BPPO-ptx \text{175B PPO-ptx} 175BPPO-ptx模型能够可靠的回答代码的问题,并遵循其他语言的指令。然而,我们注意到即使指令是另一种语言,模型也经常产生英文输出。相比,我们发现 GPT-3 \text{GPT-3} GPT-3需要更仔细的 prompting \text{prompting} prompting来执行这些任务,并且在这些领域中很少遵循指令。

​ ** InstructGPT \text{InstructGPT} InstructGPT仍然会犯一些简单的错误。**在与 175BPPO-ptx \text{175B PPO-ptx} 175BPPO-ptx模型交互中,我们发现其仍然会犯一些监督的错误,尽管其在许多不同的语言任务上有很强的表现。举几个例子:(1) 当给定一个带有错误前提的指令,模型有时候会错误的认为前提是正确的。(2) 模型有时候会拐弯抹角,当给定一个简单的问题,其可能说这里没有答案并给了多个可能的答案,即使上下文中有着相当明确的答案。(3) 当指令包含多个显式约束(例如: 列举10步1930年代的法国电影)或者约束对语言模型很有挑战时(用指定的句子数撰写摘要)效果会下降。

​ 在上图9上展示了这些行为的一些示例。我们怀疑行为(2)的出现是因为我们要求标注者奖励谦逊的行为;因此,它们可能会倾向于奖励拐弯抹角的输出,并且这被奖励模型学到了。我们怀疑行为(1)的出现是因为,训练集中很少有假设错误的 prompts \text{prompts} prompts,我们的模型不能将其很好的泛化到这些例子上。我们相信这些行为随着对抗数据收集能够显著的减少。