当前位置: 首页 > news >正文

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

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

✨ 1. 概述:什么是InstructGPT?

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

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

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

往期文章推荐:

  • 20.遗传算法:模拟自然选择的优化智慧
  • 19.帕累托优化:多目标决策的智慧与艺术
  • 18.dapo:开源大规模llm强化学习系统的突破与实现
  • 17.冯·诺依曼:数字时代的天才建筑师
  • 16.eniac:世界上第一台通用电子计算机的传奇
  • 15.冯·诺依曼架构:现代计算机的基石与瓶颈
  • 14.密码破译机bombe:二战中破解enigma的传奇设备
  • 13.波兰密码破译机bomba:二战密码战的隐形功臣
  • 12.注意力机制:捕获长距离依赖关系的革命性技术
  • 11.康威生命游戏:零玩家游戏的元胞自动机奇迹
  • 10.OpenHands:开源AI软件开发代理平台的革命性突破
  • 9.NoCode-bench:自然语言驱动功能添加的评估新基准
  • 8.中文房间悖论:人工智能理解力的哲学拷问
  • 7.曼彻斯特Mark I:世界上第一台存储程序计算机的革命性创新
  • 6.AdaCoT:基于强化学习的帕累托最优自适应思维链触发机制
  • 5.GThinker多模态大模型:线索引导式反思的突破
  • 4.Auto-CoT:大型语言模型的自动化思维链提示技术
  • 3.传统概率信息检索模型:理论基础、演进与局限
  • 2.Poisson分布:稀有事件建模的理论基石与演进
  • 1.Jina Embeddings:高性能多模态向量模型的演进之路

📜 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排序损失:使奖励模型能够学习人类偏好
  • 损失函数: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)\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个响应,计算CK2C_K^2CK2个比较对,提高数据效率和减少过拟合
  • 仅训练1个epoch(多轮训练会导致过拟合)

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

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

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

优化目标:在强化学习阶段,模型需要优化以下目标函数:
objective(ϕ)=E(x,y)∈DπϕRL[rθ(x,y)−βlog(πϕRL(y∣x)/πSFT(y∣x))]+γEx∈Dpretrain[log(πϕRL(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(yx)/πSFT(yx))]+γExDpretrain[log(πϕRL(x))]

其中包含三个关键部分:

  1. 奖励最大化rθ(x,y)r_{\theta}(x,y)rθ(x,y),使奖励模型给出的分数更高 🏆
  2. KL惩罚项βlog(πϕRL(y∣x)/πSFT(y∣x))\beta log(\pi_{\phi}^{RL}(y|x)/\pi^{SFT}(y|x))βlog(πϕRL(yx)/πSFT(yx)),防止模型偏离SFT模型太远 📏
  3. 预训练损失γEx∈Dpretrain[log(πϕRL(x))]\gamma E_{x \in D_{pretrain}}[log(\pi_{\phi}^{RL}(x))]γExDpretrain[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技术!

http://www.dtcms.com/a/354658.html

相关文章:

  • ARM相关的基础概念和寄存器
  • Shell编程知识整理
  • 从 WPF 到 Avalonia 的迁移系列实战篇2:路由事件的异同点与迁移技巧
  • Linux下OpenRadioss源码编译安装及使用
  • Shell 字符串操作与运算符
  • 利用ChatGPT打造行业LLM大模型应用
  • 外部请求至k8s集群内部对应节点全流程介绍
  • 使用docker搭建嵌入式Linux开发环境
  • HTML5七夕节网站源码
  • Java:TCP/UDP网络编程
  • DevOps篇之利用Jenkins实现多K8S集群的版本发布
  • Docker-compose常用命令
  • Helm 在 K8s 中的常见应用场景
  • 【K8s】整体认识K8s之K8s的控制器
  • Node.js + MongoDB 搭建 RESTful API 实战教程
  • 从入门到入土之——奇异值分解(SVD)
  • 重塑可观测性成本:解析Coralogix的智能成本优化之道
  • 深入浅出:贴片式eMMC存储与国产芯(君正/瑞芯微)的协同设计指南
  • GitHub 宕机自救指南:确保开发工作不间断
  • 学习做动画6.瞄准偏移
  • 5.2 I/O软件
  • STL库——list(类函数学习)
  • 搭建私有云3步法:cpolar简化Puter本地云端配置
  • leetcode238:除自身以外的数组的乘积(前缀和思想)
  • Fair Federated Learning with Biased Vision-Language Models
  • 一文读懂:自然语言处理中的语义理解技术
  • C# Deconstruct | 简化元组与对象的数据提取
  • 秋招笔记-8.28
  • 如何获取文件的MD5码
  • 读大语言模型09超级智能