InstructGPT原理讲解及ChatGPT类开源项目

news2024/10/6 22:22:10

InstructGPT原理讲解及ChatGPT类开源项目

Generative Pre-Trained Transformer(GPT) 是OpenAI的提出的生成式预训练语言模型,目前已经发布了GPT-1、GPT-2、GPT-3和GPT-4,未来也将发布GPT-5。

最近非常火的ChatGPT是基于InstructGPT提出的,有时候也被叫做GPT3.5。ChatGPT和InstructGPT在模型结构,训练方式上都完全一致,即都使用了指示性学习(Instruction Learning)人工反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF) 来指导模型的训练,它们不同的仅仅是采集数据的方式上有所差异。所以要搞懂ChatGPT,我们必须要先读懂InstructGPT。

核心要点:

  • 把语言模型变大并不代表是能够按照用户的意图来做事,这些模型与用户没有align
  • AI模型落地,安全性和有效性很重要
  • 如何将大模型与人类意图相结合。简单的方法是使用用户反馈的监督数据进行fine-tune。
  • 我们期望语言模型是helpful、honest、harmless。

相关文献:
Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback
构建了一个数据集,用于评测helpful和harmless:https://github.com/anthropics/hh-rlhf。

本文以GPT-3.5为起始点,关注使用fine-tuning的方法来align用户意图和大模型预训练。采用Reinforcement Learning from Human Feedback(RLHF):

Google在2017年发表的《Deep Reinforcement Learning from Human Preferences》,人类反馈的强化学习过程如下所示:
在这里插入图片描述

InstructionGPT的训练过程:
在这里插入图片描述

  • Step1: 先采样一些demonstration数据,其包括prompt和labeled answer。基于这些标注的数据,对 GPT-3 进行fine-tuning,得到SFT(Supervised Fine-tuning);雇佣40名标注人员完成prompt的标注(实际可能上百人参与了数据标注和处理)。此时的SFT模型在遵循指令/对话方面已经优于 GPT-3,但不一定符合人类偏好。

  • Step2: Fine-tuning完之后,再给一个prompt让SFT模型生成出若干结果(生成约4~7个结果,可以通过beam search等方法),例如上图中生成ABCD四种结果,通过人工标注为其排序,例如D>C>A=B,可以得到标注的排序pair;

基于标注的排序结果,训练一个Reward Model:
对多个排序结果,两两组合,形成多个训练数据对。RM模型接受一个输入,给出评价回答质量的分数。这样,对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高:
l o s s ( θ ) = − 1 ( K 2 ) E ( x , y w , y l ) ∼ D [ log ⁡ ( σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ) ] loss(\theta) = -\frac{1}{K\choose 2}E_{(x, y_w, y_l)\sim D[\log(\sigma(r_{\theta}(x, y_w) - r_{\theta}(x, y_l)))]} loss(θ)=(2K)1E(x,yw,yl)D[log(σ(rθ(x,yw)rθ(x,yl)))]

r θ r_{\theta} rθ表示一个reward function
论文中K表示生成的数量4~9之间。
解决过拟合的问题:
在这里插入图片描述
即在训练时,InstructGPT/ChatGPT将每个prompt的 C K 2 C_{K}^{2} CK2 个响应对作为一个batch,这种按prompt为batch的训练方式要比传统的按样本为batch的方式更不容易过拟合,因为这种方式每个prompt会且仅会输入到模型中一次。

  • Step3: 继续用生成出来的结果训练SFT,并通过强化学习的PPO方法,最大化SFT生成出排序靠前的answer。

o b j e c t i v e ( ϕ ) = E ( x , y ) ∼ D π ϕ R L [ r θ ( x , y ) − β log ⁡ ( π ϕ R L ( y ∣ x ) / π S F T ( y ∣ x ) ) ] + γ E x ∼ D p r e t r a i n [ log ⁡ ( π ϕ R L ( x ) ) ] objective(\phi) = E_{(x, y)\sim D_{\pi_{\phi}^{RL}}}[r_{\theta}(x, y) - \beta\log(\pi_{\phi}^{RL}(y|x)/\pi^{SFT}(y|x))] + \gamma E_{x\sim 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))]
初始化时 π ϕ R L = π S F T \pi_{\phi}^{RL}=\pi^{SFT} πϕRL=πSFT
PPO算法在训练过程中环境会发生变换。
首先,根据自动标注的数据(下面的来源3),喂入 π ϕ R L \pi_{\phi}^{RL} πϕRL中,得到输出结果 y y y,其会根据 r θ r_{\theta} rθ得到一个得分,期望在训练 π ϕ R L \pi_{\phi}^{RL} πϕRL时能够最大化reward的得分;
第二项loss表示KL散度,在迭代训练过程中,避免RL模型 π ϕ R L \pi_{\phi}^{RL} πϕRL与原始的监督训练的SFT模型差的太远;
第三项则是一个预训练目标,可以理解为避免灾难遗忘。当 γ = 0 \gamma=0 γ=0时则为标准的PPO模型,否则为PPO-ptx模型;
1.3B 参数 InstructGPT 模型的输出优于 175B GPT-3 的输出,尽管参数少了 100 多倍。

Prompt数据来源
标注人员先标注一些prompt,主要包括三种类型的数据集:

  • 来源1:标注人员直接标注prompt对应的答案,然后训练SFT模型;
  • 来源2:标注人员标注排序数据(即对SFT生成的多个答案进行排序),用于训练RM模型;
  • 来源3:PPO数据集,此时不需要任何标注,其来自于RM模型对生成的若干结果进行排序后的内容

在这里插入图片描述
训练一个V1版本的模型;
发布内测,收集公众的提问数据,进行筛选后再次训练模型,迭代训练。

考虑到ChatGPT仅仅被用在对话领域,这里我猜测ChatGPT在数据采集上有两个不同:

  1. 提高了对话类任务的占比;
  2. 将提示的方式转换Q&A的方式。当然这里也仅仅是猜测,更准确的描述要等到ChatGPT的论文、源码等更详细的资料公布我们才能知道。

ChatGPT训练语料大约40T大小。大规模预训练语言模型预训练语料:
在这里插入图片描述
(1)BookCorpus:

  • 2.2GB:https://hyper.ai/datasets/13642
  • 37GB:https://the-eye.eu/public/AI/pile_preliminary_components/books3.tar.gz

(2)中文Wudao: https://data.baai.ac.cn/details/WuDaoCorporaText

(3)CLUECorpus: 100GB 的高质量中文预训练语料:https://github.com/CLUEbenchmark/CLUECorpus2020

(4)MNBVC: 2376.12GB超大规模中文语料:https://github.com/esbatmop/MNBVC

MNBVC数据集不但包括主流文化,也包括各个小众文化甚至火星文的数据。MNBVC数据集包括新闻、作文、小说、书籍、杂志、论文、台词、帖子、wiki、古诗、歌词、商品介绍、笑话、糗事、聊天记录等一切形式的纯文本中文数据。数据均来源于互联网收集。

其他数据集:

名称项目地址基础模型训练方法/数据集
Alpacahttps://github.com/tatsu-lab/stanford_alpacaLLaMAAlpaca
ChatGLMhttps://github.com/THUDM/ChatGLM-6BGLM自定义数据集(1T)
Dollyhttps://github.com/databrickslabs/dollyGPT-J 6BAlpaca
BELLEhttps://github.com/LianjiaTech/BELLEBLOOMAlpaca转中文+自定义数据集(0.5 ~ 2M)
OpenChatKithttps://github.com/togethercomputer/OpenChatKitGPT-NEOX/PythiaOIG-43M
FastChat/Vicunahttps://github.com/lm-sys/FastChatLLaMA shareGPT(70k)
gpt4allhttps://github.com/nomic-ai/gpt4allLLaMA自定义数据集(800k)
lit-llamahttps://github.com/Lightning-AI/lit-llama Lit-LLaMAAlpaca
HugNLPhttps://github.com/wjn1996/HugNLPGPT / OPT / LLaMA中文3M,英文1.5M

参考资料:
【1】InstructGPT原理
【2】理解Actor-Critic的关键是什么?(附代码及代码分析)
【3】Prompt-Tuning——深度解读一种新的微调范式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ChatGPT】稳定性好响应速度快可部署到国内服务器的ChatGPT 强力推荐!

朋友们,大家好,我是 jonssonyan。今天分享一个免费开源的 ChatGPT 项目,它的表现无论是响应速度还是稳定性都比 ChatGPT Plus 还要优秀,只需要有个 Access Token 或者使用热心网友提供的共享账号 就可以免费在线体验,也…

Vicuna-13B量化模型单GPU可跑

链接在这(需要科学上网) Vicuna-13B: Best Free ChatGPT Alternative According to GPT-4 🤯 | Tutorial (GPU) 有人在B站转了人家的视频 ChatGPT:在你的本地电脑上运行Vicuna-13B 🤯|教程 (GPU) 下面就是部署的步骤…

023 - C++ 继承

本期我们学习 C 面向对象编程中的继承。 面向对象编程是一个巨大的编程范式,类之间的继承是它的一个基本面,它是我们可以实际利用的最强大的特性之一。 先了解这些 继承允许我们有一个相互关联的类的层次结构。展开来说,它允许我们有一个包…

Ceph入门到精通-Ceph介绍及放置规范

2.cephadm介绍 2.1cephadm介绍 Cephadm 是随着 Ceph 新版本 v15.2.0(Octopus)发布的安装工具,并且不支持 Ceph的旧版本,Ceph中已经Cephadm 不依赖于外部配置工具,如 Ansible、 Rook 和 Salt,它通过 SSH 将管理器守护进程连接到主机…

通信中间件

通信中间件需要解决什么问题 分布式系统中两个不同的系统需要进行通信的时候,使用的是scocket编程,需要直接面对网络中的四层模型,编程时需要确定目标端的详细物理地址。这是非常不方便的。为了解决这个问题,需要通信中间件来屏蔽…

Linux系统编程学习 NO.1 ——操作系统的历史发展

什么是操作系统? 首先,需要明白一个概念操作系统的本质是系统软件,我们平时在电脑上的界面就是一种图形化的操作系统界面。界面上通常安装可执行应用程序如QQ,wps等等,这些应用程序被称为应用软件。大家买的电脑其实是…

【Java实战篇】Day14.在线教育网课平台--消息队列实现异步通知

文章目录 一、需求:支付通知1、需求分析2、技术方案3、集成RabbitMQ4、生产端发送消息5、消费方发送消息 二、需求:在线学习1、需求分析2、表设计与实体类3、接口定义--查询课程4、接口定义获取视频5、Service层开发6、FeignClient定义7、代码完善 三、需…

HOG+SVM分类器实践

文章目录 HOGSVM分类器实践制作SVM分类器导入所需的库提取HOG特征读取正样本和负样本训练分类器定义主函数小结 测试SVM分类器相关疑问1. 提取HOG特征为什么不能彩色图像呢?2. 出现如下错误3. 测试代码中,当我传入100*100的图片时候,为什么im…

Linux下安装Java8环境

查看主机是否已经安装Java环境 java -version 如下图所示,未找到java命令,则需要安装Java环境 JDK官网下载: https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 根据自己系统的位数下载相应版本…

基于Dokcer安装RabbitMQ

基于Dokcer安装RabbitMQ 一、RabbitMQ介绍 1.1 现存问题 服务调用:两个服务调用时,我们可以通过传统的HTTP方式,让服务A直接去调用服务B的接口,但是这种方式是同步的方式,虽然可以采用SpringBoot提供的Async注解实现…

第6章:集合

集合简介 一种无序且唯一的数据结构。不关心顺序,集合里面的元素都是唯一的。 栈,队列,链表他们里面都有可能出现重复的数据,但是集合里面的元素是唯一的。 栈,队列,链表它们都有自己的顺序,但是…

使用媒体查询实现移动端适配,媒体查询meta标签配置(@media screen and,min-width和max-width)

简述:我们在写网站的时候,难免会遇到需要做移动端适配的需求,今天来记录下使用媒体查询实现移动端的适配。媒体查询是一种CSS技术,可以根据设备屏幕的属性(如宽度、高度、方向和分辨率)选择应用特定样式&am…

火爆全网,JMeter接口自动化测试详细实战(超详细)吐血整理...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 JMeter接口自动化测…

深度学习 - 44.Gate 与 MMOE 实现多目标学习

目录 一.引言 二.摘要 Abstract 三.介绍 Introduction 四.相关工作 RELATED WORK 1.DNN 中的多任务学习 2.SubNet 集成与 Expert 混合 3.多任务学习应用 五.建模方法 MODELING APPROACHES 1.Shared-bottom Multi-task Model 2.Mixture-of-Experts 3.Multi-gate Mixt…

NOPI用法之自定义单元格背景色(3)

NPOI针对office2003使用HSSFWorkbook,对于offce2007及以上使用XSSFWorkbook;今天我以HSSFWorkbook自定义颜色为例说明,Office2007的未研究呢 在NPOI中默认的颜色类是HSSFColor,它内置的颜色有几十种供我们选择,如果不…

模态分解算法 EMD、EEMD、CEEMD

一、模态分解算法EMD算法介绍 (一)模态分解相关的算法有以下几类 IMF 固有模态函数\EMD经验模态分解\EEMD集合经验模态分解\CEEMD 互补集合经验\(EEMD的标准形式)CEEMDAN自适应噪声完备集合经验模态分解\VMD 变分模态分解 &…

Crypko.ai:动漫角色生成和设计平台

【产品介绍】 Crypko.ai是一个基于GAN(生成对抗网络)的高质量动漫角色生成和设计平台,可以让用户通过简单的操作,创造出各种风格和特征的动漫角色,并且可以对角色的头发、脸部、衣服、风格等进行编辑和调整。 Crypko.a…

【GNN】谱域图卷积

谱域图卷积 1. 谱域卷积的背景知识 1.1 谱域图卷积实现思路 f 1 ( t ) ⋆ f 2 ( t ) F − 1 [ F 1 ( w ) F 2 ( w ) ] f_1(t) \star f_2(t) F^{-1}[F_1(w)F_2(w) ] f1​(t)⋆f2​(t)F−1[F1​(w)F2​(w)] 1.2 如何定义图上的傅里叶变换 经典傅里叶变换: x ( …

人工智能+自助餐:一种有效减少食物浪费的创新方案

一、案例背景: 自助餐是一种受欢迎的餐饮形式,可以满足不同顾客的口味和需求。但是,自助餐也存在着浪费食物的问题,有的顾客拿得多吃得少,有的顾客只吃部分食物,剩下的扔掉。据统计,2022年中国…

【算法竞赛】实现约瑟夫问题的四种方法(附手绘图详解)

💌 博客内容:实现约瑟夫问题的四种方法 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家&…