最近 ChatGPT 非常火,不过 OpenAI 还没公布它的论文,根据它的详情页面和介绍可以发现它是基于 InstructGPT 方案做的,我们可以先从 InstructGPT 入手看看它是如何通过学习人类喜好提升模型效果的。
我是 Andy.Qin,一个想创造哆啦 A 梦的 Maker,更多好文章可以到我的博客:docs.google.com/document/u/…)
有监督微调(SFT)
使用了有监督学习在我们的标签演示中微调 GPT-3。 我们训练了 16 个epochs,使用余弦学习率衰减和 0.2 的残差丢失。 我们根据验证集上的 RM 分数进行最终的 SFT 模型选择。 与 Wu 等人类似 (2021),我们发现我们的 SFT 模型在 1 个时期后对验证损失过度拟合; 然而,我们发现尽管存在这种过度拟合,但更多时期的训练有助于 RM 分数和人类偏好评级。
奖励建模(RM)
移除了最终反嵌入层的 SFT 模型开始,我们训练了一个模型来接收提示和响应,并输出标量奖励。 在本文中,我们只使用 6B RM,因为这样可以节省大量计算,而且我们发现 175B RM 训练可能不稳定,因此不太适合用作 RL 期间的值函数。
在 Stiennon 等人 (2020) 的研究中,RM 在同一输入的两个模型输出之间进行比较的数据集上进行训练。 他们使用交叉熵损失,将比较作为标签——奖励的差异代表人类贴标签者更喜欢一种反应的对数几率。
强化学习(RL)
依照 Stiennon 等人 (2020),我们使用 PPO 在我们的环境中微调了 SFT 模型(Schulman 等人,2017)。 该环境是一个 bandit 环境,它呈现随机的客户提示并期望对提示的响应。 给定提示和响应,它会产生由奖励模型确定的奖励并结束 episode。 此外,我们在每个token上添加了 SFT 模型的每个 token 的 KL penalty,以减轻奖励模型的过度优。 值函数从 RM 初始化。 我们称这些模型为“PPO”。
我们还尝试将预训练梯度混合到 PPO 梯度中,以修复公共 NLP 数据集上的性能回归。 我们称这些模型为“PPO-ptx”。 我们在 RL 训练中最大化以下组合目标函数:
基线模型(Baseline)
我们将 PPO 模型的性能与我们的 SFT 模型和 GPT-3 进行了比较。 我们还与 GPT-3 进行了比较,当它被提供一个 few-shot 前缀以“提示”它进入指令跟随模式(GPT-3-prompted)时。 此前缀添加到用户指定的指令之前。
我们还在 FLAN(Wei 等人,2021 年)和 T0(Sanh 等人,2021 年)数据集上将 InstructGPT 与微调 175B GPT-3 进行了比较,这两个数据集都包含各种 NLP 任务,并对于每个任务结合了自然语言指令(数据集在包含的 NLP 数据集和使用的指令风格方面有所不同)。 我们分别在大约 100 万个示例上对它们进行微调,并选择在验证集上获得最高奖励模型分数的检查点。
评估
为了我们的语言任务,我们使用类似于 Askell 等人的框架。 (2021),他们定义了有帮助、诚实和无害的模型。
模型应该遵循说明,但也可以从几次提示或其他可解释的模式(例如
Q: {question}nA:
)中推断出意图。 由于给定提示的意图可能不清楚或模棱两可,因此我们依赖于贴标签者的判断,而我们的主要指标是贴标签者的偏好评级。 但是,由于我们的标注者不是生成提示的用户,因此用户的实际意图与标注者仅阅读提示后认为的意图之间可能存在差异。目前尚不清楚如何衡量生成模型的是否诚实,这需要将模型的实际输出与其对正确输出的“信念”进行比较,并且由于模型是一个大黑盒子,我们无法推断出它的信念。 相反,我们使用两个指标来衡量真实性——模型关于世界的陈述是否真实:(1) 评估我们的模型在封闭域任务上编造信息的倾向,以及 (2) 使用了 TruthfulQA 数据集。
衡量语言模型的危害也带来了许多挑战。使用一套更具体的代理标准,旨在捕获已部署模型中行为的不同方面,这些行为最终可能是有害的:我们让标签评估输出在客户助理的上下文中是否不合适,诋毁受保护的类别 ,或包含色情或暴力内容。 我们还在旨在测量偏差和毒性的数据集上对我们的模型进行基准测试,我们可以将定量评估分为两个独立的部分:
- API 分布评估。 我们的主要指标是人类对一组提示的偏好评级,这些提示来自与我们的训练分布相同的来源。 当使用来自 API 的提示进行评估时,我们只选择我们未包含在培训中的客户的提示。 然而,鉴于我们的训练提示旨在与 InstructGPT 模型一起使用,它们很可能不利于 GPT-3 基线。 因此,我们还评估了在 API 上提交给 GPT-3 模型的提示; 这些提示通常不是“instruction following”风格,而是专门为 GPT-3 设计的。 在这两种情况下,对于每个模型,我们计算其输出优于基线策略的频率; 我们选择我们的 175B SFT 型号作为基准,因为它的性能接近中间水平。 此外,我们要求标注者以 1-7 的李克特量表来判断每个响应的整体质量,并为每个模型输出收集一系列元数据。
- 对公共 NLP 数据集的评估。 我们评估两种类型的公共数据集:那些捕捉语言模型安全性方面的数据集,特别是真实性、毒性和偏见,以及那些捕捉传统 NLP 任务(如问答、阅读理解和摘要)的零样本性能的数据集。 我们还在 RealToxicityPrompts 数据集上对毒性进行了人体评估(Gehman 等人,2020 年)。 我们正在发布所有基于采样的 NLP 任务的模型样本。
总结
相比于大规模的预训练,通过与人类对齐的方式的训练成本更低而且能达到更好的效果,同样也能获得更大的商业成本效益。InstructGPT 将“遵循指令”泛化为我们不对其进行监督的设置,例如非英语语言任务和与代码相关的任务,具体原因还未知可以继续研究下去。
遵循指令的话像在下面这个博文中有 ChatGPT 把自己想象成一个命令行终端的效果。
Building A Virtual Machine inside ChatGPT
不过因为是与人类的偏好对齐,会受到人类的价值观、成长经历、人种、性别、信仰等的影响,也许在国内做这个更具有优势?那么如何降低标注人员受到自己信仰、价值观等等的影响标注出中立的数据也是比较难的,其次是到底什么样的结果是更符合绝大多数实际用户的偏好的呢?
也许我们可以通过更多的方式如更好的过滤数据的策略等等来减少一些有危害的数据。比如在国内政治、黄色、暴力等等是绝对不允许输入和输出的。
RLHF 也许也有改进的空间,强化学习那块研究欠缺,找时间补补。
不过目前连 ChatGPT 也无法避免编造事实的问题,这方面看起来也是个很好的方向,也许得用一种办法让模型学会说”没有答案“。
对我来说这篇论文最大的意义是用强化学习的思路来改进模型的效果、以及如何更好的让标注人员给出更中立、标准的标注、如何更好的评估生成模型。
本文正在参加 人工智能创作者扶持计划