介绍
上图可以看出InstructGPT(PPO-ptx)及变体(variant trained without pretraining mix)(PPO)显著优于GPT,1.3B的InstructGPT优于175B的GPT,SFT作为RLHF第一阶段的模型效果比GPT好。当然结果是由人来评价的。
RLHF包含三个步骤:
- SFT: 对话数据微调基座语言模型,
- RM: 评分数据微调RM模型
- PPO: SFT模型生成答案,RM模型评分,PPO算法对SFT模型强化学习,进一步改进生成效果
下图就是3个阶段
蓝色箭头表示该数据用于训练我们的一个模型。在步骤2中,框A-D是由标签者排序的模型样本
InstructGPT训练了三种尺寸(1.3B, 6B, 175B)
InstructGPT生成的答案相比GPT3更加真实,同时在摘要和问答上也不会过度编造内容。
在公共数据集上微调的模型比InstructGPT表现差,公共数据集特定任务的原因。
InstructGPT泛化能力较好,即使在训练数据中分布较小的任务上也能获得好的测试效果。
InstructGPT还是存在编造事实,简单问题给出冗长模棱两可的回答,无法检测错误的前提。
本文的其余部分结构如下:我们首先在第2节详细介绍相关工作,然后在第3节深入介绍我们的方法和实验细节,包括我们的高级方法(3.1),任务和数据集细节(3.3和3.2),人类数据收集(3.4),我们如何训练我们的模型(3.5),以及我们的评估程序(3.6)。然后,我们在第4节中展示了我们的结果,分为三个部分:API提示分布的结果(4.1),公共NLP数据集的结果(4.2)和定性结果(4.3)。最后,我们在第5节中对我们的工作进行了扩展讨论,包括对齐研究的含义(5.1),我们对齐的内容(5.2),限制(5.3),开放问题(5.4)以及本工作的更广泛影响(5.5)。
相关工作
关于RLHF和语言对齐的工作从2016到2022就一直在NLP任务上使用,InstructGPT是在更广泛的NLP任务上使用RLHF。
使用instruction微调LM,有助于提高泛化能力。
实验细节
InstructGPT使用用户提出的prompt进行第一阶段的训练,第二阶段和第三阶段可以循环,即使用RM训练PPO,然后PPO后产生更好的RM数据,再训练。
第一个InstructGPT训练数据来自标注者的标注数据作为种子数据进行训练。主要三类数据:
- Plain: 我们简单地要求标注者提出一个任意的任务,同时确保任务具有足够的多样性
- Few-shot: 我们要求标注者提出一条指令,以及该指令的多个查询/响应对。
- User-based: 我们在OpenAI API的等待列表应用程序中列出了许多用例。我们要求标注者提出与这些用例相对应的提示
SFT数据集包含大约13k个训练提示(来自API和标注器编写),RM数据集有33k个训练提示(来自API和标注器编写),PPO数据集有31k个训练提示(仅来自API)。[第一次训练]
提交给InstructGPT模型的更多提示见附录A.2.1,提交给GPT-3模型的提示见附录A.2.2。我们在附录A中提供了关于我们数据集的更多细节。
数据收集
更多任务更广泛的数据,也有一些敏感话题。需要对标注员进行培训。
SFT:监督学习对GPT-3微调,训练了16个epoch,cosine学习率,残差的dropout是0.2。使用RM模型在验证集上选择分数最高的SFT模型,训练一轮,SFT就会过拟合,但还是要训练更多轮。
RM:RM模型的结构是去除最后嵌入层的SFT,6B的RM比175B训练过程更稳定。评分数据是在相同输入下,多个模型给出输出,然后对所有输出进行评分。相同prompt的输出两两做成一对作为一个训练数据,这多对数据需要放在一个batch中,这样一个prompt就一次前向传递。如果分散到多个batch,相当于每对看作single,一个epoch就会过拟合。
RL:
评价:1)在用户提交给openai的prompt上测试,2)公开的NLP数据集
实验结果
instructgpt相比GPT3更能遵守prompt,不容易瞎编内容,更适合做助手。
公共的NLP数据集不能完全测试InstructGPT的能力,因为公共NLP数据集中的分类问答等任务只占到InstructGPT训练数据分布的一小部分(18%),更多的prompt是关于生成和头脑风暴的(57%)
在传统的NLP任务上,在zero-shot和few-shot时,InstructGPT并一定比GPT3更好。有时候给InstructGPT提问,模型没给出明确答案,但给了几个可能的答案,实际正确答案就是可能答案中,原因可能是模型有点谦虚。
讨论
增加模型对齐的成本相对于预训练是适度的:训练SFT和PPO模型的成本远小于GPT3的成本。(练我们的175B SFT模型需要4.9 petaflops/s-days,训练我们的175B PPO-ptx模型需要60 petaflops/s-days,而GPT-3需要3640 petaflops/s-days)
附加
数据集大小
注意RM的数据集需要进行拼凑,实际大小比上述大一个数量级。
模型细节
所有模型架构都使用GPT-3架构(Brown et al, 2020)。对于奖励模型和价值函数,将原模型的非嵌入层替换为投影层,输出标量值。所有模型都使用fp16的权重和激活,并使用fp32的权重主副本。所有模型都使用与Brown等人(2020)相同的字节对编码(BPE)。我们所有的语言模型和RL策略的上下文长度都是2k个令牌。我们过滤掉超过1k个tokens的prompts,并将最大响应长度限制为1k个tokens。所有模型都使用Adam优化器进行训练。
SFT
我们训练了16个epochs的SFT模型,残差的dropout是0.2。我们使用的余弦LR调度降低到原始学习率的10%,没有学习率预热。1.3 B和6B模型,我们使用的LR为9.65e-6,批量大小为32。对于175B,使用的LR为5.035 -6,批量大小为8。为了选择学习率,对1.3 b和6B的7个LRs和175B的5个LRs进行了几何搜索。我们还使用几何搜索调整了epoch的数量,最后的模型是根据RM分数选择的,我们发现与验证损失相比,RM分数更能预测人类偏好结果。
RM
我们训练了一个单独的6B奖励模型,我们将其用于所有大小的PPO模型。较大的175B RM有可能实现更低的验证损失,但是(1)它们的训练更不稳定,这使得它们不太适合用作PPO值函数的初始化;(2)使用175B RM和值函数大大增加了PPO的计算需求。在初步实验中,我们发现6B RMs在广泛的学习率范围内是稳定的,并导致同样强大的PPO模型。
2最终的奖励模型是根据一个6B GPT-3模型初始化的,该模型在各种公共NLP数据集(ARC、BoolQ、CoQA、DROP、MultiNLI、OpenBookQA、QuAC、RACE和Winogrande)上进行了微调。这主要是由于历史原因;当从GPT-3或SFT模型初始化RM时,我们发现类似的结果。我们在完整的奖励模型训练集(见表6)上以lr = 9e-6的学习率,cosine learning rate schedule(在训练结束时下降到其初始值的10%)和批大小为64的单个epoch进行训练。训练似乎对学习率或schedule不太敏感;学习率变化高达50%也会产生类似的效果。训练对epoch的数量非常敏感,多个epoch会迅速将模型与训练数据过拟合,验证损失变大。这里的批大小表示每批的不同数量的提示(The batch size here represents the distinct number of prompts per batch)。每个提示有K = 4到K = 9个labeled completions(组合就是从K中选择2个作为一组 ( K 2 ) \begin{pmatrix} K\\ 2 \end{pmatrix} (K2))。分数相同的组会被丢弃。因此,单个批次可以包含多达64 × ( K 2 ) \begin{pmatrix} K\\ 2 \end{pmatrix} (K2)≤2304次比较。
RLHF初始化模型的详细信息
我们从预训练的GPT-3模型初始化RLHF模型,并对演示数据集进行2次监督微调。我们还在微调期间混合了10%的预训练数据,因为我们发现这对PPO训练很有帮助(详见附录E.11)。使用余弦学习率调度,学习率最终衰减到峰值学习率的10%。1.3 b和6B型号我们使用32个batch,175B型号使用8个batch。我们比较每个模型的几个不同的峰值学习率,并选择一个在演示和预训练验证数据集上损失低的模型。对1.3B和6B模型的5个LR值进行了对数线性扫描,而175B模型选了3个。1.3 b, 6B和175B型号的最终LR分别为5e-6, 1.04e-5和2.45e-6
RLHF训练的细节
然后,我们用预训练混合从上述监督微调模型初始化RL策略。这些模型也用于计算KL奖励,与(Stiennon等人,2020)相同,β = 0.02。我们训练了256k episodes 的所有RL模型。在使用PII和基于公共前缀的重复数据删除过滤掉提示之后,这些集包括大约31k个唯一提示。每次迭代的批大小为512,minibatch大小为64。换句话说,每个批次被随机分成8个小批次,并且只训练一个内部epoch (Schulman et al, 2017)。在前10次迭代中应用恒定的学习率和预热,从峰值学习率的十分之一开始。采用加权指数移动平均,衰减率为0.992。在估计广义优势时不应用折扣(Schulman et al, 2016)。PPO的clip ratio设置为0.2,采样温度为1。
如前所述,对于所有PPO模型,我们使用6B RM和6B值函数,后者由前者初始化。通过对所有模型大小的策略使用相同的6B奖励模型和价值函数,可以比较策略模型大小对策略性能的影响。对于1.3 b和6B策略使用固定学习率9e-6,对于175B策略使用固定学习率5e-6。
我们最初的RLHF实验显示了在公共NLP数据集(如SQuADv2和DROP)上的回归,并且我们通过在PPO训练期间混合预训练梯度来缓解回归。我们使用的预训练样本数量是RL训练集数量的8倍。预训练数据是从用于训练GPT-3模型的数据集中随机抽取的。对于每个minibatch,我们连续计算PPO梯度和预训练梯度,并将它们累加到梯度缓冲区中。我们将预训练梯度乘以系数γ = 27.8(见公式2),以控制PPO和预训练分布的梯度的相对强度。
FLAN和T0模型
我们通过在FLAN和T0数据集上微调175B GPT-3模型来获得FLAN和T0基线。由于T0比FLAN(1.2M数据点)包含更多的数据(96M数据点),我们对T0进行了次采样,使每个模型的训练数据量具有可比性。请注意,原始模型在数据点可以重复的数据点上进行训练,但是在我们的数据点中,我们遍历每个数据点而不重复(为了更好地匹配我们训练SFT基线的方式)。我们应用了余弦学习率计划,并尝试每个数据集的初始学习率为4e-6和6e-6。在训练结束时,学习率下降到峰值的10%,我们在两个实验中都使用64个批处理大小。
为了选择最佳的FLAN检查点,我们使用6B奖励模型对提示的验证集的完成情况进行评分。如图13所示,在最初的400k个训练示例之后,奖励达到饱和。这表明,即使训练时间更长,也不太可能提高人类的评估表现。我们为我们的人类评估选择了RM得分最高的检查点,即学习率为4e-6并且训练了896k个示例的检查点。
参考
https://arxiv.org/abs/2203.02155