Zhangzhe's Blog

The projection of my life.

0%

InstructGPT: Training language models to follow instructions with human feedback

URL

TL;DR

  • 大模型预训练后,在很多任务上已有非常强的能力,但输出的结果可能是不可信、有害或无帮助的。
  • 本文提出 InstructGPT 算法和微调流程,旨在让大模型通过人类反馈的微调方式,在大量任务上对齐人类意图。
  • 目标是做到 3H:
    • Helpful
    • Honest
    • Harmless

Algorithm

instructgtp_1.png

  • 具体来说,InstructGPT 微调分为三步:
    • 根据采集的 SFT (Supervised FineTune) 数据集对 GPT-3 进行有监督的微调;
    • 收集人工标注的 对比数据,训练奖励模型 RM (Reword Model)
    • 使用 RM 作为强化学习的优化目标,利用 PPO 算法(Proximal Policy Optimization 最近策略优化)微调 SFT 模型。

数据集

instructgpt_2.png

1. SFT 数据集

  • SFT 数据一部分来自使用 OpenAIPlayGround 的用户,另一部分来自 OpenAI 雇佣的 40 名标注工。
  • 在这个数据集中,标注工的工作是根据内容自己编写指示,并且要求编写的指示满足下面三点:
    • 简单任务:labeler 给出任意一个简单的任务,同时要确保任务的多样性;
    • Few-shot 任务:labeler 给出一个指示,以及该指示的多个查询-响应对;
    • 用户相关的:从接口中获取用例,然后让 labeler 根据这些用例编写指示。

2. RM 数据集

  • RM 数据集是对比数据类型,用于训练一个奖励模型(Reward Model)。
  • InstructGPT/ChatGPT 的做法是先让模型生成一批候选文本,让后通过 labeler 根据生成数据的质量对这些生成内容进行排序。
  • 具体做法是对于每一个 Prompt,模型给出 K 个候选输出(4K94\le K\le9),然后将 K 个输出中挑选 2 个样本给 labelerlabeler 给出哪个更好,一个 Prompt 一共需要 labeler 标注 CK2C_K^2 次,最终得到 K 个候选输出的排序结果。

3. PPO 数据集

  • InstructGPTPPO 数据没有进行标注,它均来自 GPT-3API 用户。
  • 有不同用户提供的不同种类的生成任务,其中占比最高的包括生成任务(45.6%),QA(12.4%),头脑风暴(11.2%),对话(8.4%)等。

微调过程

1. SFT 有监督微调过程

  • GPT-3 的预训练过程保持一致

2. Reward Model 训练过程

  • Reward Model 的输入是 Prompt + Response,输出是对应的奖励值,是个回归模型,其中 ResponseRM 数据集中的排序的模型候选输出。
  • Reward Model 实际上是原始 LLM 模型将最后一层的分类层改成回归层,用来回归奖励值。
  • 损失函数是:loss(θ)=1CK2E(x,yw,yl)D[log(σ(rθ(x,yw),rθ(x,yl)))]loss(\theta)=-\frac{1}{C_K^2}E_{(x,y_w,y_l) \sim D}[\log(\sigma(r_\theta(x,y_w), r_\theta(x,y_l)))],使用对比学习的方式训练。
  • 其中:
    • rθr_\theta 表示参数为 θ\thetaReward Model
    • x 表示 Prompt
    • yw ,yly_w\ ,y_l 分别表示对 Prompt xlabeler 喜欢和不喜欢的一对 Response

3. 使用近端策略优化强化学习算法(PPO) + Reward Model 继续优化 SFT 模型

InstructGPT/ChatGPT 的分析和计划

1. 收益

  1. 效果比 GPT-3 更加真实
  2. 在模型的无害性上比GPT-3 效果要有些许提升
  3. 具有很强的 Coding 能力

2. 损失

  1. 会降低模型在通用 NLP 任务上的效果
  2. 有时候会给出一些荒谬的输出
  3. 模型对指示非常敏感
  4. 模型对简单概念的过分解读
  5. 对有害的指示可能会输出有害的答复

3. 未来计划

  1. 人工标注的降本增效:将人类表现和模型表现有机和巧妙的结合起来是非常重要的
  2. 模型对指示的泛化/纠错等能力:这不仅可以让模型能够拥有更广泛的应用场景,还可以让模型变得更“智能”
  3. 避免通用任务性能下降:需要方案来让生成结果的 3H 和通用 NLP 任务的性能达到平衡

Thought

  • ChatGPT 爆发之前,Open-AI 多年来一直在默默研究这个领域,包括 GPT 系列、RLHFPPO 等,这些东西的有机结合就成了 InstructGPT,放大就变成了 ChatGPTInstructGPT 是基于 GPT-3 对齐的,ChatGPT 是基于 GPT-3.5 对齐的)
  • 想在一个领域做到断崖式的领先,小聪明是没用的,需要长期积累 + 修炼内功