Training language models to follow instructions with human feedback解读
- 前置知识
- 方法
- 数据集
- 结论
前置知识
- GPT的全称是Generative Pre-Trained Transformer,预训练模型自诞生之始,一个备受诟病的问题就是预训练模型的偏见性。因为预训练模型都是通过海量数据在超大参数量级的模型上训练出来的,对比完全由人工规则控制的专家系统来说,预训练模型就像一个黑盒子。没有人能够保证预训练模型不会生成一些包含种族歧视,性别歧视等危险内容,因为它的几十GB甚至几十TB的训练数据里几乎肯定包含类似的训练样本。这也就是InstructGPT和ChatGPT的提出动机,即通过一定方式方法使模型输出完成对齐,论文中用3H概括了它们的优化目标:
有用的(Helpful);可信的(Honest);无害的(Harmless)。 - InstructGPT作为ChatGPT的前身,他们的模型结构,训练方式都完全一致,即都是用了instrcut learning和RLHF指导模型学习。区别可能就是微调的元模型不同(InstructGPT是在GPT3基础上,而ChatGPT是在GPT3.5)
InstructGPT对标GPT3:
1、增强上下文理解:InstructGPT使用prompt对输入的训练数据进行重新的定义和引导,帮助模型更好的理解当下的语境和任务,从而避免误解或忽略特定的上下文信息。
2、排除推广偏见和不当内容:InstructGPT通过人工干预,指导和约束尽量减少模型生成的偏见性言论或不适当内容,提升生成文本的准确性和中立性。 - SFT监督微调(Supervised Fine-Tuning)是一种在大语言模型上进行微调的技术,它利用有标签的数据来调整预训练的语言模型,使其更适合特定的任务。这种方法通常适用于自然语言处理领域,如文本分类、翻译等。以训练语言模型GPT-3为例。GPT-3是一个强大的语言模型,它能够生成连贯的文本,回答问题,甚至编写代码。然而,为了使其能够适应特定的任务,比如编写新闻文章,我们就需要进行SFT监督微调。
首先,我们需要收集一个带有标签的新闻文章数据集。这些数据集包含了各种各样的新闻文章,每篇文章都有一个或多个标签,比如“政治”、“经济”、“体育”等。然后,我们将这个数据集输入到预训练的GPT-3模型中进行监督微调。在这个过程中,模型的学习率会被设置得非常小,以避免在微调过程中破坏掉预训练阶段学到的通用语言知识。经过一段时间的微调后,模型就能够更好地理解新闻文章的语义和结构,从而在编写新闻文章的任务上取得更好的表现。 - RM奖励模型(Reward Model)是一种在大型语言模型(LLM)训练中使用的技术,旨在改进模型输出的质量,使之更符合人类的预期和偏好。具体来说,RM奖励模型通过评估和排序模型生成的文本,引导模型生成更符合人类日常理解习惯和期望的答案。
在训练过程中,RM奖励模型分为两个主要部分:训练数据的获取和模型训练。首先,需要构建一个人类偏好排序的数据集,这通常涉及到人工标注工作,即由人类评估者对模型生成的文本进行评分和排序。这些评分和排序信息随后被用来训练奖励模型,该模型能够学习到哪些文本更受人类偏好,从而在后续的生成任务中指导模型生成更优质的文本。 - RLHF,即人类反馈强化学习(Reinforcement Learning from Human Feedback),是一种结合了人类智慧和机器学习技术的创新方法。这种方法的核心在于利用人类的直接反馈来训练一个“奖励模型”,随后通过强化学习来优化人工智能代理的行为。简而言之,RLHF 让机器学会按照人类的偏好来行动,从而提升其在特定任务中的表现。
RLHF 在大型语言模型(LLM)的训练中扮演着至关重要的角色。例如,ChatGPT 和 Llama 2 等基于 transformer 的现代 LLM 训练流程通常包括三个主要步骤:预训练、监督式微调和对齐。在这些步骤中,RLHF 被用来将对齐阶段与人类偏好结合起来,使模型能够更好地理解和生成对人类有用的响应。 - PPO算法,全称为Proximal Policy Optimization算法,是一种强化学习算法,它属于策略梯度方法的一种,并因其出色的性能和易于实现的特性而被广泛应用于强化学习领域。PPO算法的设计初衷是为了克服传统策略梯度方法的一些缺陷,尤其是针对采样效率低下和训练不稳定的问题。
在PPO算法中,核心思想是限制策略更新时的步长,避免策略变化过大,这样可以维持策略的稳定性和收敛性。具体来说,PPO算法采用了两种主要的策略更新方法:KL散度惩罚(KL penalty)和裁剪法(clipping)。这两种方法都旨在控制新旧策略之间的差异,防止策略更新偏离原始策略太远。 - PPO-ptx中的"ptx"指的是预训练分布(Pre-training Distribution)。这是一种在PPO算法基础上引入的策略,旨在通过结合预训练的知识来改善模型的性能。
在PPO-ptx算法中,预训练分布的概念被用来确保在强化学习过程中,模型不会忘记在预训练阶段学到的知识。这通过在损失函数中引入一项额外的预训练损失(pretrain loss)来实现,这项损失鼓励模型在更新策略时保留预训练阶段学到的知识。
具体来说,PPO-ptx的损失函数由三部分组成:第一部分是奖励模型给出的奖励,第二部分是KL散度奖励,用于约束当前策略与初始策略之间的距离,第三部分就是预训练损失,用于防止策略遗忘预训练阶段学到的知识。
这种结合预训练知识的策略,有助于提高模型在新任务上的泛化能力和学习效率,同时也保证了模型在强化学习过程中的稳定性和可靠性。
方法
- Step1:收集示范数据,进行有监督微调SFT
标注数据:根据prompts(提示,这里就是写的各种各样的问题),人类会撰写一系列demonstrations(演示)作为模型的期望输出。
模型微调:将prompts和人类标注的答案拼在一起,作为人工标注的数据集,然后使用这部分数据集对预训练的GPT-3进行监督微调,得到第一个模型SFT。 - Step2:收集比较数据,训练奖励模型RM
标注数据:生成式标注是很贵的一件事,所以第二步是进行排序式/判别式标注。用上一步得到的SFT模型生成各种问题的答案,标注者(labelers)会对这些输出进行比较和排序(由好到坏,比如图2 D>C>A=B)。
训练模型:基于这个数据集,训练一个RM(reward model)。训练好了之后这个RM模型就可以对生成的答案进行打分,且打出的分数能够满足人工排序的关系。 - Step3:使用强化学习的机制,优化SFT模型,得到最终的RL模型(InstructGPT)
微调模型:将新的标注数据输入到SFT模型得到输出,并将输出输入RM进行打分,通过强化学习来优化SFT模型的参数。具体使用 PPO 针对奖励模型优化策略,使用 RM 的输出作为标量奖励,使用 PPO 算法微调监督策略以优化此奖励。 - RM将 SFT 模型最后一层的 softmax 去掉,即最后一层不用 softmax,改成一个线性层。RM 模型的输入是问题和答案,输出是一个标量即分数。
具体的讲,每个prompt,SFT 模型会随机生成 K个输出,然后它们向每个labeler成对的展示输出结果,也就是每个prompt共展示C2K个结果,然后用户从中选择效果更好的输出。在训练时,InstructGPT将每个prompt的C2K个响应对作为一个batch,这种按prompt为batch的训练方式要比传统的按样本为batch的方式更不容易过拟合,因为这种方式每个prompt会且仅会输入到模型中一次。 - 损失函数:这里使用的是排序中常见的pairwise ranking loss。这是因为人工标注的是答案的顺序,而不是分数,所以中间需要转换一下。这个损失函数的目标是最大化labeler更喜欢的响应和不喜欢的响应之间的差值。
- 不少科研工作者说强化学习并不是一个非常适合应用到预训练模型中,因为很难通过模型的输出内容建立奖励机制。InstructGPT做到了这点,它通过结合人工标注,将强化学习引入到预训练语言模型是这个算法最大的创新点。
由三部分组成:打分损失+KL损失+GPT3预训练损失
数据集
- SFT数据集(step 1):
SFT数据集是用来训练step 1的GPT3模型,即按照GPT3的训练方式对GPT3进行微调。因为GPT3是一个自回归基于提示学习的生成模型,因此SFT数据集也是由提示-答复对组成的样本。
SFT数据一部分来自使用OpenAI的PlayGround的用户,另一部分来自OpenAI雇佣的40名标注工(labeler),在SFT中,标注工作是根据内容自己编写指示,并且要求编写的指示满足下面三点:
简单任务:labeler给出任意一个简单的任务,同时要确保任务的多样性;
Few-shot任务:labeler给出一个指示,以及该指示的多个查询-响应对;
用户相关的:从接口中获取用例,然后让labeler根据这些用例编写指示。
(SFT数据集包含13k个训练提示) - M数据集用来训练step 2的奖励模型,为InstructGPT的训练设置一个奖励目标,要尽可能全面且真实的对齐需要模型生成的内容。很自然的,可以通过人工标注的方式来提供这个奖励,通过人工对可以给那些涉及偏见的生成内容更低的分从而鼓励模型不去生成这些人类不喜欢的内容。InstructGPT的做法是先让模型生成一批候选文本,让后通过labeler根据生成数据的质量对这些生成内容进行排序。
(RM 数据集有 33k 个训练提示) - PPO数据集用来训练强化模型,即InstructGPT。InstructGPT的PPO数据没有进行标注,它均来自GPT-3的API的用户。既又不同用户提供的不同种类的生成任务
结论
- InstructGPT与GPT3相比:
优点:
1.InstructGPT/ChatGPT的效果比GPT-3更加真实
2.InstructGPT/ChatGPT在模型的无害性上比GPT-3效果要有些许提升
3.InstructGPT/ChatGPT具有很强的Coding能力
缺点:
1.InstructGPT会降低模型在通用NLP任务上的效果
2.InstructGPT对指示非常敏感 - 1、仅仅40人的标注团队不够大,而且标注结果会以个人的自我意志为转移。
2、仍然有一些偏见不安全的输出,而且通过某些prompt时可能会产生比同等大小GPT-3更有害的内容。
3、模型输出是否有害取决于部署它的环境;例如,模型要作为数据增强的一部分,使用语言模型生成有害的输出可能是有益的。
4、减轻对齐税,如预训练数据合并到RLHF调优中来,但并不能完全改善性能回归(通用NLP任务的性能下降)
解读到此结束,觉得对您有帮助的话欢迎关注、点赞、收藏和留言交流。