OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮,它面对多种多样的问题对答如流,似乎已经打破了机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model,LLM) 生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback),即 使用强化学习的方法,利用人类反馈信号直接优化语言模型。
过去几年,各种 LLM 根据人类输入 提示 (prompt) 生成多样化文本的能力令人印象深刻。然而,对生成结果的评估是主观和依赖上下文的,例如,我们希望模型生成一个有创意的故事、一段真实的信息性文本,或者是可执行的代码片段,这些结果难以用现有的基于规则的文本生成指标 (如 BLUE 和 ROUGE) 来衡量。除了评估指标,现有的模型通常以预测下一个单词的方式和简单的损失函数 (如交叉熵) 来建模,没有显式地引入人的偏好和主观意见。
RLHF 技术分解
RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,这里我们按三个步骤分解:
预训练一个语言模型 (Language Model,LM) ;
聚合问答数据并训练一个奖励模型 (Reward Model,RM) ;
用强化学习 (Reinforcement Learning,RL) 方式微调 LM;
预训练语言模型
首先,我们使用经典的预训练目标训练一个语言模型。对这一步的模型:
OpenAI 在其第一个流行的 RLHF 模型 InstructGPT 中使用了较小版本的 GPT-3;
Anthropic 使用了 1000 万 ~ 520 亿参数的 Transformer 模型进行训练;
DeepMind 使用了自家的 2800 亿参数模型 Gopher;
这些语言模型往往见过大量的 [Prompt, Text]
对,输入一个 Prompt(提示),模型往往能输出还不错的一段文本。
预训练模型可以在 人工精心撰写的语料(额外的文本或者条件) 上进行微调,但这一步 不是必要的(下图中的虚线)。例如:
OpenAI 对 “更可取” (preferable) 的人工生成文本进行了微调,
而 Anthropic 按 “有用、诚实和无害” 的标准在上下文线索上蒸馏了原始的 LM。
不过,这种人工撰写的优质语料需要的成本是非常高的。
具体的预训练过程如下所示:
此外,由于 RLHF 还是一个尚待探索的领域,对于 “哪种预训练模型” 适合作为 RLHF 的 起点(热启动起点) 并没有明确的定论,仍然是一个开放的问题。
训练奖励模型
现在,我们需要基于上一步得到的 预训练好的语言模型生成的数据,以及 人类的偏好信息(标注数据),来训练一个 奖励模型(Reward Model,RM)。
RM 的训练是 RLHF 区别于旧范式的开端。这一模型接收一系列文本并返回一个标量奖励,数值上对应人的偏好。我们可以用端到端的方式用 LM 建模,或者用模块化的系统建模 (比如对输出进行排名,再将排名转换为奖励) 。这一奖励数值将对后续无缝接入现有的 RL 算法至关重要。
关于模型选择方面,RM 可以是另一个经过微调的 LM,也可以是根据偏好数据从头开始训练的 LM。例如 Anthropic 提出了一种特殊的预训练方式,即用偏好模型预训练 (Preference Model Pretraining,PMP) 来替换一般预训练后的微调过程。因为前者被认为对样本数据的利用率更高。但对于哪种 RM 更好尚无定论。
关于训练文本方面,RM 的 提示-生成对文本 是从预定义数据集中采样生成的,并用初始的 LM 给这些提示生成文本。Anthropic 的数据主要是通过 Amazon Mechanical Turk 上的聊天工具生成的,并在 Hub 上可用,而 OpenAI 使用了用户提交给 GPT API 的 prompt。
关于训练奖励数值方面,这里需要人工对 LM 生成的回答进行排名。起初我们可能会认为应该直接对文本标注分数来训练 RM,但是由于标注者的价值观不同导致这些分数未经过校准并且充满噪音。通过排名可以比较多个模型的输出并构建更好的规范数据集。
对具体的排名方式,一种成功的方式是对不同 LM 在相同提示下的输出进行比较,然后使用 Elo 系统建立一个完整的排名。这些不同的排名结果将被归一化为用于训练的标量奖励值。
整体的训练过程如下所示:
奖励模型 可以看做一个 判别式的语言模型,因此我们可以用一个预训练语言模型热启动,然后在 \([x=[prompt,模型回答], y=人类满意度]\) 构成的标注语料上去微调。当然,也可以直接随机初始化,然后在语料上直接训练。
如上图所示,标注人员 的任务则是对 初始语言模型生成的文本 进行 排序。有人可能会奇怪,为啥不直接让标注人员对文本进行打分呢?
这是因为研究人员发现:不同的标注员打分的偏好会有很大的差异(比如同样一段精彩的文本,有人认为可以打 1.0,但有人认为只能打 0.8),而这种差异就会导致出现 大量的噪声样本。若改成 标注排序,则发现不同的标注员的 打分一致性就大大提升了。
那具体怎么操作呢?一种比较有效的做法是 “pair-wise”,即 给定同一个 prompt,让两个语言模型同时生成文本,然后比较这两段文本哪个好。最终,这些不同的排序结果会通过某种归一化的方式变成 标量信号(即 point-wise)丢给模型训练。
一个比较有趣的观测是,奖励模型的大小最好是跟生成文本模型的大小相近,这样效果会比较好。一种比较直观的解释就是,要理解生成模型的输出内容,这份理解能力所需要的模型参数规模就得恰好是跟生成模型相近才能做到(当然,如果奖励模型规模更大那应该更没问题,但理论上没必要)。
至此,我们有了一个初始的语言模型来生成文本,以及一个奖励模型(RM)来判断模型生成的文本是否优质(迎合人类偏好)。接下来会讲解如何使用强化学习(RL)来基于奖励模型来微调预训练的语言模型。
强化学习微调语言模型
长期以来出于工程和算法原因,人们认为用强化学习训练 LM 是不可能的。而目前多个组织找到的可行方案是使用策略梯度强化学习 (Policy Gradient RL) 算法、近端策略优化 (Proximal Policy Optimization,PPO) 微调初始 LM 的部分或全部参数。因为微调整个 10B~100B+ 参数的成本过高 (相关工作参考低秩适应 LoRA 和 DeepMind 的 Sparrow LM) 。PPO 算法已经存在了相对较长的时间,有大量关于其原理的指南,因而成为 RLHF 中的有利选择。
PPO 算法相当于 NLP 领域的 BERT、GPT
事实证明,RLHF 的许多核心 RL 进步一直在弄清楚如何将熟悉的 RL 算法应用到更新如此大的模型。
首先将微调任务表述为 RL 问题:
该 策略 (policy) 是一个接受提示并返回一系列文本 (或文本的概率分布) 的 LM;
这个策略的 行动空间 (action space) 是 LM 的词表对应的所有 Token (一般在 50k 数量级) ;
观察空间 (observation space) 是可能的输入 Token 序列,也比较大 (词汇量 ^ 输入标记的数量) ;
奖励函数(reward function) 是基于上面训练好的 Reward Model 计算得到初始 reward,再叠加上一个 约束项(Policy shift constraint);
PPO 算法确定的奖励函数具体计算如下:
将提示 \(x\) 输入初始 LM 和当前微调的 LM,分别得到了输出文本 \(y_1, y_2\) ,将来自当前策略的文本传递给 RM 得到一个标量的奖励 \(r_{\theta}\)。将两个模型的生成文本进行比较计算差异的惩罚项,在来自 OpenAI、Anthropic 和 DeepMind 的多篇论文中设计为输出词分布序列之间的 Kullback–Leibler (KL) 散度 的缩放,即 \(r=r_{\theta}-\lambda r_{KL}\)。
显然,\(y_2\) 文本的打分比 \(y_1\) 高的越多,奖励就越大,反之惩罚则越大。这个信号就反映了当前模型有没有在围着初始模型 “绕圈”,避免模型通过一些 “取巧” 的方式骗过 RM 模型获取高额 reward。
这个约束项被用于惩罚 RL 策略在每个训练批次中生成大幅偏离初始模型的文本,以确保模型输出合理连贯的文本。如果去掉这一惩罚项可能导致模型在优化中生成乱码文本来愚弄奖励模型提供高奖励值。此外,OpenAI 在 InstructGPT 上实验了在 PPO 添加新的预训练梯度,可以预见到奖励函数的公式会随着 RLHF 研究的进展而继续进化。
最后,根据 PPO 算法来更新模型参数(PPO 算法 on-policy 的特性)。
整个微调的过程如下图所示:
通过以上过程不难想到,完全可以 迭代式的更新奖励模型(RM)和策略模型(policy),让奖励模型对模型输出质量的刻画愈加精确,策略模型的输出则愈能与初始模型拉开差距,使得输出文本变得越来越符合人的认知。Anthropic 就曾经在论文里讨论了这种做法,并命名为 “Iterated Online RLHF(迭代在线 RLHF)”,详细内容可参考论文 《Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback》
RLHF 的未来
虽然以 ChatGPT 为代表的 RLHF 技术非常有影响力,引发了巨大的关注,但仍然存在若干局限性:
RLHF 范式训练出来的这些模型虽然效果更好,但仍然可能 输出有害或事实上不准确(不真实)的文本
例如目前的 ChatGPT 仍然会 “合理” 的 “胡编乱造”
这种不完美则是 RLHF 的长期挑战和优化目标
收集 人类偏好数据的质量和数量 决定了 RLHF 系统性能的上限
RLHF 系统需要两种人类偏好数据:人工生成的文本 和 对模型输出的偏好标签
生成高质量回答需要雇佣兼职人员 (而不能依赖产品用户和众包)
训练 RM 需要的奖励标签规模大概是 50k 左右,所以并不那么昂贵 (当然远超了学术实验室的预算)
另一个挑战来自 标注者的偏见。几个人类标注者可能有不同意见,导致了训练数据存在一些潜在差异。
RLHF 的流程还有很多值得改进的地方,其中,改进 RL 优化器 显得尤为重要。PPO 是一种基于信赖域优化的相对较旧的 RL 算法,但没有其他更好的算法来优化 RLHF。
目前相关的数据集只有一个 基于通用 LM 的 RLHF 数据集 (来自 Anthropic) 和几个较小的子任务数据集 (如来自 OpenAI 的摘要数据集)
更多
PPO
MDP(马尔可夫决策过程) 就是文本生成过程,生成一段文本的过程是逐个 token 生成的,已经生成的 token 构成的上文当作状态,需要生成的下一个 token 为动作,生成模型就是策略模型。而奖励则是延迟到文本生成结束后由奖励器给出的一次性回合奖励,而用户输入是模型生成第一个token 时的初始状态而已。
需要注意的是文本生成过程是把 上文的所有 token 看作 MDP 中的状态,而不能仅仅把上一个 token 看作状态,确实有点难以理解,状态数量有无限可能了。
RLHF 论文
早期(早于 LM)的 RLHF 工作:
TAMER:Training an Agent Manually via Evaluative Reinforcement(Knox 和 Stone 2008):提出了一个学习的代理,其中人类提供迭代采取的行动的分数以学习奖励模型。
Interactive Learning from Policy-Dependent Human Feedback (MacGlashan et al. 2017):提出了一种演员-评论家算法 COACH,其中人类反馈(正面和负面)用于调整优势函数。
Deep Reinforcement Learning from Human Preferences (Christiano et al. 2017):RLHF 应用于 Atari 轨迹之间的偏好。
Deep TAMER: Interactive Agent Shaping in High-Dimensional State Spaces (Warnell et al. 2018):扩展了 TAMER 框架,其中使用深度神经网络对奖励预测进行建模。
基于当前 LM 的 RLHF 工作:
WebGPT: Browser-assisted question-answering with human feedback (OpenAI, 2021)
InstructGPT: Training language models to follow instructions with human feedback (OpenAI Alignment Team 2022)
GopherCite: Teaching language models to support answers with verified quotes (Menick et al. 2022)
Sparrow: Improving alignment of dialogue agents via targeted human judgements (Glaese et al. 2022)
Scaling Laws for Reward Model Overoptimization (Gao et al. 2022)
Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback (Anthropic, 2022)
Red Teaming Language Models to Reduce Harms: Methods, Scaling Behaviors, and Lessons Learned (Ganguli et al. 2022)
Dynamic Planning in Open-Ended Dialogue using Reinforcement Learning (Cohen at al. 2022)
Is Reinforcement Learning (Not) for Natural Language Processing?: Benchmarks, Baselines, and Building Blocks for Natural Language Policy Optimization (Ramamurthy and Ammanabrolu et al. 2022)
RLHF Code
TensorFlow 代码:《Fine-Tuning Language Models from Human Preferences》 Code
PyTorch 代码:
https://github.com/CarperAI/trlx
RLHF 其他资源
Huggingface Hub 上有一个由 Anthropic 创建的 大型数据集
HuggingFace 直播回放视频:RLHF: From Zero to ChatGPT
参考
HuggingFace Blog:
文档信息
- 本文作者:Bookstall
- 本文链接:https://bookstall.github.io/2023/03/15/RLHF/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)