RLHF:从GPT3.5系列到ChatGPT的临门一脚

capability-versus-alignment-in-machine-learning---how-chatGPT-works--1-

对齐与能力

能力(Capability):模型完成一些特定任务的能力。

未对齐(misalignment):模型在训练集上表现很好,但在测试集上表现很差。说明模型有能力学习,但训练设定的目标不对[1]

类似初版的GPT-3这类大模型,已经在大量的数据上训练过,也能够生成人类语言,但无法生成人类期望的内容,就是存在未对齐的问题。事实上,其目标函数是预测单词序列中,如何补全缺失词序列的概率分布。

然而在实际应用中,这些模型通常被用于执行一些对人类有价值的认知型工作。这就产生了训练目标与使用场景间的巨大差异——亦即“未对齐”。虽然从数学上来说,计算单词序列概率的统计学分布对于计算机是一种非常有效的建模语言的方法,但人类是通过在给定情境下,运用自己的知识和常识,从潜意识中选择最好的文本序列,来生成语言的。这种未对齐使得语言模型在一些需要高可信、高可靠的应用场景(类似对话系统、智能助理)下,表现得并不好。

因此,虽然这些大模型在学术指标上表现出很强的能力,但放到实际生产系统中却常常拉跨。大型语言模型的对齐性问题通常表现为:

  • 没有帮助:不遵循用户的指令完成回答;
  • 胡编乱造:描述内容不存在或不真实;
  • 缺少可解释性:人类无法理解模型的某些表现;
  • 生成有害内容:基于有偏见、有害数据训练得到的语言模型输出也将变得有偏见、有害;

那么,造成对齐性问题的根源是什么呢?

未对齐与训练语言模型

训练语言模型

核心技术有2点:顺序词预测(Next Token Prediction)掩码语言建模(Masked Language Modeling),Transformer模型就是将这两种方法用于训练的。

顺序词预测

输入一个文本片段,要求模型预测接下来的词。例如:

The cat sat on the

预测的词可以是“floor”、“chair”或者“mat”等。语言模型本质上是个条件概率模型,它根据给出的上文文本,从词库中计算词库中每个可能出现的词中,选出概率最高的词。

掩码语言建模

顺序词预测完成的是“续写”任务,而掩码语言模型完成的是“填空”任务,继续之前的例子:

The ___ sat on the

模型应该预测要填的词可能是“cat”、“dog”或“pet”等等。

这些训练任务的目标函数使得模型学习到了语言的统计结构(statistical structure of language),比如常见词语搭配与单词的用法。这对于模型生成更自然、流畅的文本帮助很大,是每个语言模型在预训练阶段的关键步骤。

对齐问题

然而,这些目标函数也同样会导致问题。再看个例子:

The Roman Empire ___ with the reign of Augustus.

对于语言模型,预测“began”或“ended”的概率都很高,从历史事实来说两种表述也都没有错。但选“ended”通常隐含了完全不同的含义。

更一般地讲,这些训练策略会导致训练得到的语言模型与一些复杂的语言任务“不对齐”。因为仅仅训练用于补全文本的模型,可能并没有学到人类语言表达更high level的一些“讲究”。

因此,这种预训练大模型很难在对语言有更具体、更深理解要求的任务中有令人满意的表现。

OpenAI提出了RLHF(Reinforcement Learning from Human Feedback)方法,运用人的反馈信息指导模型的学习过程,让模型“对齐”任务目标。

RLHF[2]

RLHF

方法分为三个步骤:

  1. 有监督的微调(supervised fine-tune):用少量的标注数据指令微调预训练模型,来学习得到有监督策略(supervised policy),该策略的输出来自选好的一些提示语(prompt),得到的模型作为基线模型;
  2. 模仿人类偏好:
  3. 近端策略优化:

步骤 1 只进行一次,而步骤 2 和步骤 3 可以持续重复进行:在当前最佳策略模型上收集更多的比较数据,用于训练新的 RM 模型,然后训练新的策略。接下来,将对每一步的细节进行详述。

步骤一:有监督的微调

第一步包括收集数据和训练有监督策略模型:

  1. 数据收集:选择一些提示语,让标注人员写下期望的输出作为demo数据。为了训练ChatGPT,提示语有2种来源:标注人员准备的,和OpenAI的API用户输入中采样的;整个数据收集的过程非常耗费人力和时间,数据量也相对少很多(大概1.2-1.5w条数据),属于高质量的珍贵数据;
  2. 模型选型:OpenAI称ChatGPT是基于GPT-3.5的一个预训练模型微调得到的,据推测该预训练模型应该是text-davinci-002text-davinci-003

比较有意思的一点是,被用于聊天的ChatGPT,居然是由经过代码训练的模型,而不是纯文本模型微调得到的。

受限于高昂的数据收集过程,用于微调的数据偏少,因此SFT模型并不能解决不对齐的问题。

为了克服这个问题,OpenAI的策略是让人工标注者对 SFT 模型的不同输出进行排序,训练奖励模型(reward model)。

步骤二:奖励模型

这个步骤的目的是得到一个能够评价SFT输出是否符合人类预期的模型,被称为奖励模型。这个奖励模型的表现直接取决于人类标注员的思想和偏好。

  1. 采样SFT输出:选择一些提示语,由SFT模型对每个提示语生成4-9个条输出;
  2. 扩充数据集:标注员对SFT的输出按照认可程度从高到低排序,排序结果作为标注数据集;扩充后的数据集大小大约是原来的10倍;
  3. 训练奖励模型:奖励模型的输入是SFT模型的输出,输出是对SFT模型输出的评分;

相比让标注员手动输入文本,对模型输出进行排序显然要高效得多。在实际操作中,扩充后的数据集选自3-4w个提示语,对于每个提示语都有多条输出文本给到每个标注员让他们进行排序。

步骤三:使用PPO微调SFT模型

这里运用强化学习的思路是:首先优化奖励模型,然后将奖励模型用于微调SFT模型。优化算法被称为近端策略优化(Proximal Policy Optimization)[3],而微调得到的模型就被称为PPO模型。

该步骤中,PPO模型由SFT模型初始化得到,价值函数由奖励模型初始化得到。环境是能随机产生提示语并期望输出针对提示语产生回应文本的Multi-armed Bandit环境[4]。根据提示语和回应文本,环境使用奖励模型给出评分,一轮训练就结束了。SFT 模型会对每个 token 添加 KL 惩罚因子[4:1],以尽量避免奖励模型的过度优化。

效果评估

评估阶段所使用的测试集采样自OpenAI用户的输入提示语,并且这些数据未在训练数据中出现。

评估标准可以从3H来概括:

  1. 帮助性(Helpfulness):判定模型是否拥有能够遵循用户指令并根据指令进行推理的能力;
  2. 真实性(Honestness):判断模型能否避免虚构事实;评估数据集是TruthfulQA
  3. 无害性(Harmlessness):判断模型能否避免讨论诋毁、歧视等有害社会的话题;评估数据集是RealToxicityPromptsCrowS-Pairs

在InstructGPT[5]的评估阶段中,OpenAI的研究人员还将经过对齐后的模型在一些传统NLP任务(如解答问题、阅读理解、摘要等)表现进行评估,结果发现模型能力存在一定程度的退化,被称为“对齐税”[6]

方法短板

InstructGPT论文[5:1]中同样讨论了该方法的一个非常明显的局限性:在将语言模型与人类意图对齐的过程中,用于 fine-tuning 模型的数据会受到各种错综复杂的主观因素的影响,主要包括:

  • 标注员按照自己的习惯和偏好写原始的demo数据;
  • 研究员按照自己的习惯和偏好设计和编写标注准则;
  • 从用户侧采样的提示语带有用户主观性;
  • 标注员的主观性被同时融入了训练奖励模型和模型评估阶段;

ChatGPT 的作者也承认一个明显的事实:参与训练过程的标注人员和研究人员并不能完全代表语言模型的所有潜在最终用户。

除了方法本身的内在问题,还有些值得讨论的改进点:

  • 缺乏对照研究:研究报告了PPO在SFT之上的提升,但未证明RLHF是提升的主要原因,这导致一个基本问题悬而未决:“RLHF在与人类对齐语言模型方面真的做得很好吗?”因此需要对照实验投入相同的精力到扩充高质量的SFT模型训练数据集,然后对比两种模型的表现;
  • 标注员对模型输出的排序具有随意性:标注员往往会倾向于调整SFT模型输出的顺序,即使这个顺序无关紧要。这会带来一个风险:缺乏ground truth的调整会给模型带来潜在的高方差;
  • 忽视人类意识的个体性:RLHF将人类的偏好是为同质和静态的,假设人类具有相同的价值观,而该假设并不总成立;
  • 缺少奖励模型的提示语稳定性测试:如果两个 prompt 在句法上不同但在语义上是等价的,奖励模型能否在SFT模型输出的排名中显示出显著差异?即 prompt 的质量对奖励模型究竟有多重要?
  • 强化学习的过度优化问题:强化学习模型在学习的过程中有时会跑偏形成一套自己的奖励模型以实现期望的结果,从而导致“过度优化的策略”。这可能会导致模型重新创建一些模式,因为某些未知的原因,这些模式使 RM 模型得分较高[7]。RLHF通过使用奖励函数中的KL惩罚项[4:2]对此进行了修补。

  1. 也有可能是过拟合,这里不讨论这种情况。 ↩︎

  2. Note: The rest of this article is based on the content of the InstructGPT paper. According to OpenAI, ChatGPT has been trained “using the same methods as InstructGPT, but with slight differences in the data collection setup” (source). Unfortunately, exact quantitative reports have yet to be made publicly available for ChatGPT. ↩︎

  3. 该算法的主要特点:
    PPO 是一种用于在强化学习中训练 agent 的算法。它被称为「on-policy」算法,因为它直接学习和更新当前策略,而不是像 DQN 的「off-policy」算法那样从过去的经验中学习。PPO 根据 agent 所采取的行动和所获得的回报不断调整策略;
    PPO 使用「信任区域优化」方法来训练策略,它将策略的更改范围限制在与先前策略的一定程度内以保证稳定性。这与其它策略使用梯度方法形成鲜明对比,梯度方法有时会对策略进行大规模更新,从而破坏策略的稳定性;
    PPO 使用价值函数来估计给定状态或动作的预期回报。价值函数用于计算优势函数,它代表预期收益和当前收益之间的差异。然后使用优势函数通过比较当前策略采取的操作与先前策略将采取的操作来更新策略。这使 PPO 可以根据所采取行动的估计价值对策略进行更明智的更新。 ↩︎

  4. https://en.wikipedia.org/wiki/Kullback–Leibler_divergence,参考论文 ↩︎ ↩︎ ↩︎

  5. InstructGPT论文 ↩︎ ↩︎

  6. 这些数据集的性能退化可以通过称为预训练混合(pre-train mix)的技巧大大减少:在通过梯度下降训练 PPO 模型期间,通过混合 SFT 模型和 PPO 模型的梯度来计算梯度更新。 ↩︎

  7. 参考OpenAI的这篇论文的表-29 ↩︎

posted @ 2023-03-04 17:13  LexLuc  阅读(403)  评论(0编辑  收藏  举报