InstructGPT:使用人类反馈训练语言模型以遵循指令

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

✨ 1. 概述:什么是InstructGPT?

InstructGPT 📝 是OpenAI在2022年提出的一种基于人类反馈的指令微调方法 ,旨在使大型语言模型更好地遵循用户的意图 🤖💡。这项工作的核心发现是:单纯扩大语言模型规模并不能使其更好地理解和遵循人类指令 📊。尽管像GPT-3这样的大模型在多种任务上展现出强大能力,但它们仍然经常产生不真实有害对用户没有帮助的输出 ❌。

InstructGPT通过三阶段训练流程 (监督微调、奖励模型训练和强化学习优化),成功地将语言模型与人类偏好对齐 ✅。令人惊讶的是,参数量仅1.3B的InstructGPT模型 的输出偏好度竟然超过了参数量175B的原始GPT-3模型 🎯,尽管前者只有后者百分之一的参数量 💪!这项工作为ChatGPT的发展奠定了基础,是当前大语言模型训练的重要里程碑之一 🏆。

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

往期文章推荐:

📜 2. 历史背景与原始论文

2.1 原始论文信息

InstructGPT的研究由OpenAI团队完成,相关论文于2022年3月发表在arXiv上:

论文标题 :Training language models to follow instructions with human feedback
中文翻译 :通过人类反馈的指令训练语言模型
作者 :Long Ouyang, Jeff Wu, Xu Jiang 等
发表时间 :2022年3月
论文地址https://arxiv.org/abs/2203.02155
代码地址https://github.com/openai/following-instructions-human-feedback

2.2 研发背景

在InstructGPT之前,大型语言模型(如GPT-3)主要通过预测互联网文本中的下一个词进行训练 🌐。虽然这种方法赋予了模型强大的文本生成能力,但也存在明显问题:

  • 意图对齐不足 :模型训练目标与"有用、诚实、无害"地遵循用户指令的目标不一致 🎯
  • 有害内容生成 :可能产生不真实有偏见有毒的内容 ❌
  • 提示工程依赖:需要精心设计的提示词才能获得良好效果,且输出结果质量不稳定 🎭

InstructGPT的提出正是为了解决这些问题,通过人类反馈强化学习(RLHF)技术使模型输出更符合人类期望 👥💬。

🔧 3. 核心方法:三阶段训练流程

InstructGPT的训练包含三个关键阶段,形成了完整的RLHF(Reinforcement Learning from Human Feedback)流程 🔄:

3.1 第一阶段:有监督微调(SFT - Supervised Fine-Tuning)

第一阶段目标是收集人类演示数据 并训练有监督的策略模型 👩‍💻。

数据收集:标注人员根据输入提示(prompt)编写高质量的期望输出示例 📝。这些提示主要来自两个来源:

  • 标注者编写的提示:包括任意任务(Plain)、指令+多查询/响应对(Few-shot)和基于API用例的提示(User-based)
  • OpenAI API提交的提示:从API用户提交的实际提示中收集

训练过程 :使用收集到的13K训练提示数据,对预训练的GPT-3模型进行有监督微调 🤖。训练设置包括:

  • 16个训练轮次(但1个epoch后就已过拟合,更多训练是为了后续RM评分)
  • 余弦学习率衰减,残差dropout为0.2
  • 模型大小:1.3B、6B和175B参数

3.2 第二阶段:奖励模型训练(RM - Reward Model Training)

第二阶段目标是收集比较数据 并训练奖励模型 🏆。

数据收集 :让SFT模型为每个输入生成4-9个不同输出 ,标注人员对这些输出质量进行排序 📊。这种方式比直接生成答案更容易且更高效 。

训练过程:基于6B参数的GPT-3模型训练奖励模型(因175B模型训练不稳定且成本高) 💰。关键技术细节:

  • 使用pairwise排序损失:使奖励模型能够学习人类偏好
  • 损失函数: l o s s ( θ ) = − 1 C K 2 E ( x , y w , y l ) ∈ D [ l o g ( σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ) ] loss(\theta) = -\frac{1}{C_K^2}E_{(x,y_w,y_l)\in D}[log(\sigma(r_{\theta}(x,y_w)-r_{\theta}(x,y_l)))] loss(θ)=−CK21E(x,yw,yl)∈D[log(σ(rθ(x,yw)−rθ(x,yl)))]
  • 对每个提示的K个响应,计算 C K 2 C_K^2 CK2个比较对,提高数据效率和减少过拟合
  • 仅训练1个epoch(多轮训练会导致过拟合)

3.3 第三阶段:强化学习优化(RL - Reinforcement Learning)

第三阶段使用强化学习方法针对奖励模型优化策略 🎮。

算法选择 :采用近端策略优化(PPO - Proximal Policy Optimization)算法,这是OpenAI在2017年提出的强化学习算法 📈。

优化目标 :在强化学习阶段,模型需要优化以下目标函数:
o b j e c t i v e ( ϕ ) = E ( x , y ) ∈ D π ϕ R L [ r θ ( x , y ) − β l o g ( π ϕ R L ( y ∣ x ) / π S F T ( y ∣ x ) ) ] + γ E x ∈ D p r e t r a i n [ l o g ( π ϕ R L ( x ) ) ] objective(\phi) = E_{(x,y)\in D_{\pi_{\phi}^{RL}}}[r_{\theta}(x,y)-\beta log(\pi_{\phi}^{RL}(y|x)/\pi^{SFT}(y|x))]+\gamma E_{x \in D_{pretrain}}[log(\pi_{\phi}^{RL}(x))] objective(ϕ)=E(x,y)∈DπϕRL[rθ(x,y)−βlog(πϕRL(y∣x)/πSFT(y∣x))]+γEx∈Dpretrain[log(πϕRL(x))]

其中包含三个关键部分:

  1. 奖励最大化 : r θ ( x , y ) r_{\theta}(x,y) rθ(x,y),使奖励模型给出的分数更高 🏆
  2. KL惩罚项 : β l o g ( π ϕ R L ( y ∣ x ) / π S F T ( y ∣ x ) ) \beta log(\pi_{\phi}^{RL}(y|x)/\pi^{SFT}(y|x)) βlog(πϕRL(y∣x)/πSFT(y∣x)),防止模型偏离SFT模型太远 📏
  3. 预训练损失 : γ E x ∈ D p r e t r a i n [ l o g ( π ϕ R L ( x ) ) ] \gamma E_{x \in D_{pretrain}}[log(\pi_{\phi}^{RL}(x))] γEx∈Dpretrain[log(πϕRL(x))],保持模型在通用NLP任务上的性能 🌐

这种混合目标函数(称为PPO-ptx)有助于减少在对齐过程中可能出现的性能回归(即"对齐税") 💡。

下面是InstructGPT三阶段训练流程的图示:
RL阶段 使用PPO算法优化策略 最大化奖励模型分数 保持KL散度约束 混合预训练目标 RM阶段 SFT模型生成多个输出 人类标注者排序输出质量 训练奖励模型预测人类偏好 SFT阶段 收集人类演示数据
13K训练提示 监督学习微调GPT-3 预训练语言模型
GPT-3 最终模型: InstructGPT

📊 4. 实验设计与数据集

4.1 数据集构建

InstructGPT使用了三种不同类型的数据集 :

  1. SFT数据集:13K训练提示,用于有监督微调 👨‍🏫
  2. RM数据集:33K训练提示,用于训练奖励模型 📊
  3. PPO数据集:31K训练提示,用于RLHF微调的输入数据 🤖

这些数据主要来自两个来源:标注者编写的提示通过OpenAI API提交的提示 。为确保数据质量与多样性,标注者被要求编写三种类型的提示 :

  • Plain:任意任务,确保任务多样性 🎲
  • Few-shot:指令+多个查询/响应对 🔢
  • User-based:基于OpenAI API等待列表中的用例 📋

4.2 模型评估

InstructGPT进行了全面评估,包括 :

  • 人类评估:标注者对测试集上的模型输出质量进行评分 👥
  • 自动评估:在公共NLP数据集上评估性能 🤖
  • 定性分析:检查模型在代码生成、多语言任务等上的表现 🔍

评估重点关注三个方面 :

  1. 有用性:模型是否帮助用户解决任务 🤝
  2. 诚实性:模型是否编造信息或误导用户 ✅
  3. 无害性:模型是否对人或环境造成伤害 🛡️

📈 5. 结果与分析

5.1 主要实验结果

InstructGPT取得了令人印象深刻的实验结果 :

  1. 人类偏好评估:标注者明显更喜欢InstructGPT的输出
  • 1.3B参数InstructGPT > 175B参数GPT-3(尽管参数少100倍)💪
  • 175B InstructGPT输出在85±3%情况下优于175B GPT-3输出 📊
  1. 真实性提升 :在TruthfulQA基准上,InstructGPT生成真实且信息丰富答案的频率是GPT-3的两倍

  2. 毒性降低 :当提示尊重时,InstructGPT产生的有毒输出比GPT-3少25% 🛡️

  3. 泛化能力 :InstructGPT能够推广到训练数据未涵盖的领域(如代码总结、多语言指令)🌍

5.2 局限性

尽管取得了显著成果,InstructGPT仍然存在一些局限性 :

  • 简单错误:仍然可能无法遵循指令、编造事实或对简单问题给出冗长模糊的答案 ❌
  • 偏见问题:在Winogender和CrowSPairs数据集上,与GPT-3相比没有显著改善 ⚖️
  • 对齐税:在某些公共NLP数据集(如SQuAD、DROP)上出现性能回归,需要通过混合预训练目标来缓解 💰

🌐 6. 影响与未来方向

6.1 对AI社区的影响

InstructGPT对AI社区产生了深远影响 :

  1. ChatGPT的基础:InstructGPT为ChatGPT提供了技术基础,两者共享相同的训练框架 🏗️
  2. 对齐研究推动:展示了人类反馈微调在对齐语言模型与人类意图方面的潜力 🔬
  3. 效率证明 :证明较小的对齐模型 可以超越大型未对齐模型,为更高效的模型开发提供了方向 💡

6.2 未来研究方向

基于InstructGPT的成果和局限,未来研究可能关注以下方向 :

  1. 改进人类反馈:探索更高效、更全面的反馈收集方法 👥
  2. 多模态对齐:将RLHF技术扩展到多模态场景 🖼️🔊
  3. 价值观对齐:解决不同文化、群体间的价值观差异问题 🌍
  4. 降低对齐税:进一步减少对齐过程对模型通用能力的负面影响 💰

💎 7. 结论

InstructGPT是语言模型对齐领域 的重要里程碑 🏆。它证明了通过人类反馈强化学习 (RLHF),可以使语言模型更好地遵循用户意图 ,生成更有用、更诚实、更无害的输出 📝✅。

尽管InstructGPT仍存在一些局限性,但它的成功为AI对齐研究提供了重要方向和希望 💡。这项工作的影响不仅体现在ChatGPT等产品的开发上,更重要的是为如何使AI系统与人类价值观保持一致提供了可行路径 🤖💖。

正如论文作者所言:"尽管InstructGPT仍然会犯一些简单的错误,但我们的结果表明,根据人类反馈进行微调是使语言模型与人类意图保持一致的一个有希望的方向" 👥↔️🤖。

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

相关推荐
NAGNIP1 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab2 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab2 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP6 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年6 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼6 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS7 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区8 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈8 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang8 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx