Instruction Tuning(FLAN、instructGPT、chatGPT)

news2024/10/5 12:42:30

首页最近被chatGPT刷屏,但翔二博主左看右看发现很多想法似乎都是一脉相通的,于是连夜从存档中找了一些文章尝试理一理它的理论路线。

  • 具身智能综述和应用(Embodied AI)
  • 多模态中的指令控制

同时想到今年在智源人工智能前沿报告(2021-2022年度)中其实就有说道:

“未来三年,基于虚拟世界、实时时空环境训练的具身模型会取得较大的发展,如自动驾驶、机器人、游戏中数字人等······未来五到十年,超大规模预训练模型(信息模型)和具身模型将会结合,成为‘数字超人’,在知识能力以及跟环境的互动程度上,将比以往的人类都要强······具身模型和机器人也将结合,在物理世界出现能力比人类还要强的无人系统,即‘具身超人’。乐观估计,在未来三十年,数字超人和具身超人可能会结合,最终诞生超级人工智能。”

测了测chatGPT的性能后,好像这一切来的稍快了一点?

博主个人理解,它以更为embodied AI形式的指令作为输入,以训练/微调大规模的信息模型,并基于强化学习与真实世界做持续交互,已经很接近此处所提到的“数字超人”了。
在这里插入图片描述


关于chatGPT的基础介绍和使用本文不做过多介绍,可以参考各种报道文和知乎等等,此处推荐几份解读。

  • 视频讲解chatGPT
  • 张俊林大佬的理解

本篇博文先简要整理一下跟chatGPT相关Instruction Tuning的几篇论文。

Finetuned Language Models Are Zero-Shot Learners
首先是ICLR22的FLAN模型,这篇文章明确提出 Instruction Tuning(指令微调)的技术,它的本质目的是想将 NLP 任务转换为自然语言指令,再将其投入模型进行训练,通过给模型提供指令和选项的方式,使其能够提升Zero-Shot任务的性能表现。

Motivation在于大规模的语言模型如GPT-3可以非常好地学习few-shot,但它在zero-shot上却不那么成功。例如, GPT-3在阅读理解、问题回答和自然语言推理等任务上的表现很一般,作者认为一个潜在的原因是,如果没有少量示例的zero-shot条件下,模型很难在与训练前数据格式(主要是prompts)维持一致。

既然如此,那么为什么不直接用自然语言指令做输入呢?如下图所示,不管是commonsense reasoning任务还是machine translation任务,都可以变为instruct的形式,然后利用大模型进行学习。在这种方式下,而当一个unseen task进入时,通过理解其自然语言语义可以轻松实现zero-shot的扩展,如natural language inference任务。

在这里插入图片描述

Instruction-tuning、Fine-tuning、Prompt-Tuning的区别在哪?

  • Fine-tuning:先在大规模语料上进行预训练,然后再在某个下游任务上进行微调,如BERT、T5;
  • Prompt-tuning:先选择某个通用的大规模预训练模型,然后为具体的任务生成一个prompt模板以适应大模型进行微调,如GPT-3;
  • Instruction-tuning:仍然在预训练语言模型的基础上,先在多个已知任务上进行微调(通过自然语言的形式),然后再推理某个新任务上进行zero-shot。

在这里插入图片描述

具体来说,作者提出的Finetuned LAnguage Net(FLAN)模型将62个NLP task分为12 cluster,同一个cluster内是相同的任务类型,如下图所示。

在这里插入图片描述

对于每个task,将为其手动构建10个独特template,作为以自然语言描述该任务的instructions。为了增加多样性,对于每个数据集,还包括最多三个“turned the task around”的模板(例如,对于情感分类,要求其生成电影评论的模板)。所有数据集的混合将用于后续预训练语言模型做instruction tuning,其中每个数据集的template都是随机选取的。如下图所示,Premise、Hypothesis、Options会被填充到不同的template中作为训练数据。

在这里插入图片描述

然后基于LaMDA-PT模型进行微调。LaMDA-PT是一个包含137B参数的自回归语言模型,这个模型在web文档(包括代码)、对话数据和维基百科上进行了预训练,同时有大约10%的数据是非英语数据。然后FLAN混合了所有构造的数据集在128核的TPUv3上微调60个小时。

  • paper:https://arxiv.org/pdf/2109.01652.pdf
  • code:https://github.com/google-research/flan

在介绍instructGPT和chatGPT前,还有两份比较重要的前置工作,即Reinforcement Learning from Human Feedback (RLHF),如何从用户的明确需要中学习。

Fine-Tuning Language Models from Human Preferences
这份工作是将大模型往人类偏好进行结合的一次尝试,其使用强化学习PPO而不是监督学习来微调语言模型GPT-2。

为了弄清人类偏好,首先需要从预训练好的GPT-2 开始,并通过询问人工标注者四个生成样本中哪个样本最好来收集数据集。基于收集的数据集,尝试基于强化学习微调GPT,简要模型结构如下图,其需要训练两个模块一个是GPT模型(policy),一个是奖励模型(reward model),其中奖励模型用于模拟人类对四个样本的打分以代表其选择偏好。

在这里插入图片描述
整体的训练过程是:

  • 从数据集中采样context x,并使用policy网络得到4种句子,即(x、y0、y1、y2、y3),其中y的下标表示让人类的优先级排序。
  • 训练policy网络。从人类标注数据中进行训练,其中r是奖励模型的分数,该loss尝试让人类更喜欢的句子得分更高,从而来微调policy生成更符合人类偏好的句子。 l o s s ( r ) = E ( x , { y i } i , b ) − S [ l o g x r ( x , y b ) ∑ i x r ( x , y i ) ] loss(r)=E_{(x,\{y_i\}_i,b)-S}[log \frac{x^{r(x,y_b)}}{\sum_i x^{r(x,y_i)}}] loss(r)=E(x,{yi}i,b)S[logixr(x,yi)xr(x,yb)]
  • 训练奖励模型, 其中为了分布变化太远,会额外添加一个带有期望KL惩罚。 R ( x , y ) = r ( x , y ) − β l o g π ( y ∣ x ) ρ ( y ∣ x ) R(x,y)=r(x,y)-\beta log \frac{\pi(y|x)}{\rho(y|x)} R(x,y)=r(x,y)βlogρ(yx)π(yx)
  • 在online模式中,可以继续收集额外的样本,并定期重新训练奖励模型r。

paper:https://arxiv.org/abs/1909.08593
code:https://github.com/openai/lm-human-preferences

这篇论文的主要启发在于,人类偏好的约束、使用PPO的训练方法可以使模型在online的过程中持续学习。


Learning to Summarize with Human Feedback
随后的这份工作会更为贴近instructGPT和chatGPT,其提出主要按照人类偏好的summarization场景中。其模型框架架构如下图所示,和instructGPT类似,主要分为三步:先收集人类在成对摘要上偏好的数据集,然后通过监督学习训练一个奖励模型(RM)来预测人类偏好的摘要。最后,利用奖励模型RM给出的分数去微调生成摘要的大模型,以上模型都基于GPT-3进行微调。

在这里插入图片描述

  • Collect human feedback。来自reddit.com的300万篇不同主题的文章以及由原海报撰写的文章摘要,然后由人工标注摘要的顺序。
  • Train reward model。奖励函数预测摘要之间谁更好,因此利用成对损失函数进行监督训练即可。 l o s s ( r θ ) = − E ( x , y 0 , y 1 , i ) − D [ l o g ( σ ( r θ ( x , y i ) − r θ ( x , y 1 − i ) ) ) ] loss(r_{\theta})=-E_{(x,y_0,y_1,i)}-D[log(\sigma(r_{\theta}(x,y_i)-r_{\theta}(x,y_{1-i})))] loss(rθ)=E(x,y0,y1,i)D[log(σ(rθ(x,yi)rθ(x,y1i)))]
  • Train policy with PPO。和前一篇文章一样,利用奖励模型得到一种偏好策略以产生更高质量的摘要结果。 R ( x , y ) = r θ ( x , y ) − β l o g [ π p h i R L ( y ∣ x ) / π S F T ( y ∣ x ) ] R(x,y)=r_{\theta}(x,y)-\beta log[\pi^{RL}_{phi}(y|x)/\pi^{SFT}(y|x)] R(x,y)=rθ(x,y)βlog[πphiRL(yx)/πSFT(yx)]其中KL惩罚由两个作用,一是阻止模型崩溃为单一模式。其次,它确保了模型不会因为太追求学习偏好而偏离原本的摘要模型太远。

这份工作虽然局限于摘要,但在训练框架是为后续的instructGPT打下了基础,即人工标注+强化学习。


instructGPT
instructGPT从模型结构上与上一篇文章几乎一摸一样,但它通向了更为宽广的领域。通过收集带有更多人类instruct的自然语言文本句子,使其可以完成各种nlp任务,正式进化为一个全能模型。

在这里插入图片描述
实现上仍然分为三个步骤,

  • 监督学习。收集人工编写的期望模型如何输出的数据集,并使用其来训练GPT3。
  • 奖励模型。收集人工标注的模型多个输出之间的排序数据集。并训练一个奖励模型,以预测用户更喜欢哪个模型输出。 l o s s ( θ ) = − 1 ( K ; 2 ) E ( x , y w , y l ) − D [ l o g ( σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ) ] loss(\theta)=-\frac{1}{(K;2)}E_{(x,y_w,y_l)}-D[log(\sigma(r_{\theta}(x,y_w)-r_{\theta}(x,y_{l})))] loss(θ)=(K;2)1E(x,yw,yl)D[log(σ(rθ(x,yw)rθ(x,yl)))]
  • 微调GPT3。使用这个奖励模型作为奖励函数,以PPO的方式,微调监督学习得到的GPT3。 o b j e c t ( ϕ ) = E ( x , y ) − D π R L [ r θ ( x , y ) − β l o g ( π p h i 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 ) ) ] object(\phi)=E_{(x,y)-D_{\pi RL}}[r_{\theta}(x,y)-\beta log(\pi^{RL}_{phi}(y|x)/\pi^{SFT}(y|x))]+\gamma E_{x-D_{pretrain}[log(\pi^{RL}_{\phi}(x))]} object(ϕ)=E(x,y)DπRL[rθ(x,y)βlog(πphiRL(yx)/πSFT(yx))]+γExDpretrain[log(πϕRL(x))]KL惩罚仍然是为了对减轻奖励模型的过度优化。此外还会将训练前的梯度混合到PPO梯度中,以维持模型在更多通用NLP任务上的性能。

更多细节可以见开头的讲解视频。

chatGPT
目前只知道chatGPT基于instructGPT进行训练,但具体细节没有更多的披露,但是从以上几份工作中,可以窥见一些技术路线。

如chatGPT可以轻轻松松根据人类的语言完成从对话、写诗、编故事、写代码等等等等等各种任务,大概率就是基于FLAN模型这种迁移任务的方式,从而能够满足各位用户老爷们的奇怪需要。而instructGPT则应该是chatGPT用于训练的主要架构,包括数据集构建、模型框架和训练目标等等。

最后想再放一次这张图,博主也需要再好好悟一悟。
在这里插入图片描述

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

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

相关文章

线程,线程池的使用

文章目录线程,线程池的使用1. 多线程基础1.1 线程和进程1.2 多线程的创建1.2.1 继承Thread类1.2.2 实现Runnable接口1.2.3 匿名内部类方式1.2.4 守护线程1.3 线程安全1.3.1 卖票案例1.3.2 线程同步2. 线程池的实现方式2.1 Java提供的四种线程池2.2 线程池的创建原理…

微信小程序开发【从0到1~入门篇】

目录 1. 微信小程序介绍 1.1 什么是小程序? 1.2 小程序可以干什么? 2. 申请账号 2.1 申请帐号 2.2 测试号申请(我们小程序账号申请完成之后,建议务必要申请一个测试号用来开发) 3. 安装开发工具 3.1 选择稳定…

我的创作纪念日(2021-12-10 2022-12-10)

🌆 内容速览阴差阳错成为一名博主?这一年来的收获日常生活未来憧憬阴差阳错成为一名博主? 如上图所见,她就是我在CSDN上发布的第一篇博客——无标题,有时候机缘来的那么突然,我甚至都没有给她想一个凑合的名…

spring——Spring 注入内部Bean——构造函数方式注入内部 Bean

项目依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…

【MySQL进阶篇】存储引擎

&#x1f349;个人主页&#xff1a;个人主页 &#x1f353;系列专栏&#xff1a;MySQL数据库 目录 1.MySQL体系结构 1). 连接层 2). 服务层 3). 引擎层 4). 存储层 2.存储引擎介绍 3.存储引擎特点 1. InnoDB 2.MyISAM 3.Memory 4.区别及特点 4.存储引擎选择 1.MySQ…

MAC QT OpenGL 图像曝光度调节

目录 一.MAC QT OpenGL 图像曝光度调节演示 1.原始图片2.效果演示 二.MAC QT OpenGL 图像曝光度调节源码下载三.其他平台图像曝光度调节版本 1.IOS 曝光度演示效果2.Windows OpenGL ES 曝光度演示效果3.Windows OpenGL 曝光度演示效果 四.猜你喜欢 零基础 OpenGL ES 学习路线推…

39-kafka-监控Eagle

39-kafka-监控Eagle&#xff1a; Eagle的安装 1.修改 kafka 启动命令 修改 kafka-server-start.sh 命令中 if [ "x$KAFKA_HEAP_OPTS" "x" ]; then export KAFKA_HEAP_OPTS"-Xmx1G -Xms1G" fi 为 if [ "x$KAFKA_HEAP_OPTS" &qu…

功能测试(八)—— APP之专项测试、性能测试、性能测试工具SoloPi

目录 APP测试要点 目标 一、APP专项测试 1.1 兼容性 1.2 安装 1.3 卸载 1.4 升级 1.5 干扰测试(交叉事件测试) 1.6 Push推送 1.7 用户体验 二、 性能测试工具 2.1 APP性能测试工具介绍 —— SoloPi简介 2.2 APP性能测试工具 —— SoloPi使用 三、APP性能测试 3.…

English Learning - L2 窥得大段表达门径 2022.12.8 周四

English Learning - L2 窥得大段表达门径 2022.12.8 周四引言2 形容词2.1 -ing 形容词 VS -ed 形容词核心思想举例3 名词3.1 修饰成分修饰成分的排列的黄金原则&#xff1a;左二右六举例3.2 名词的数3.2.1 "名词 介词/副词/不定式 等" 构成的复合名词变复数&#xf…

Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能

一、背景 SpringBoot的应用监控方案比较多,SpringBoot + Prometheus + Grafana是目前比较常用的方案之一。它们三者之间的关系大概如下图: 二、Micrometer的介绍 Micrometer为Java 平台上的性能数据收集提供了一个通用的 API,它提供了多种度量指标类型(Timers、Guauges、…

【强化学习论文合集】十三.2018机器人与自动化国际会议论文(ICRA2018)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

超详细的pytest教程(二)之前后置方法和fixture机制

前言 上一篇文章入门篇咱们介绍了pytest的基本使用&#xff0c;这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现&#xff0c;也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何…

Unity - 技术美术

198.Shader Graph 旗帜飘扬 官方教程链接&#xff1a;https://learn.unity.com/project/make-a-flag-move-with-shadergraph 本节课程文档&#xff1a;https://gitee.com/chutianshu1981/AwesomeUnityTutorial/blob/main/%E5%9B%BE%E5%BD%A2-%E6%8A%80%E6%9C%AF%E7%BE%8E%E5%B…

ElasticSearch入门到springboot使用

文章目录1.存储引擎产品性能对比2.es安装1.创建目录2.创建挂载的配置文件3.编写docker-compose4.添加文件夹权限5.启动es与kibana6.开放端口7.测试访问8.安装IK分词器3.es核心概念1.文档&#xff1a;就是一条数据2.类型&#xff1a;表字段和类型3.索引&#xff1a;就是数据库4.…

【WIN】Windows10 开启远程连接图形化界面(mstsc)

CONTENTwindows10 rdp 开启远程连接开启远程连接win10 专业版遇到的问题3389 端口不可用简述具体解决windows10 rdp 开启远程连接 开启远程连接 win10 专业版 快捷键&#xff1a; winI 打开设置&#xff0c;然后 #mermaid-svg-bTRFQYmaW8UwxJ5Y {font-family:"trebuche…

java计算机毕业设计ssm医疗垃圾管理系统f5aj8(附源码、数据库)

java计算机毕业设计ssm医疗垃圾管理系统f5aj8&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

针对低功率/低电源电压应用的5MBd数字光耦合器

针对低功率/低电源电压应用的5MBd数字光耦合器 介绍 电气系统中的数字光电耦合器提供高压绝缘和高压绝缘数据传输时的噪声抑制。一个高质量的绝缘屏障&#xff0c;在里面光耦合器需要提供卓越的可靠性和耐久性信号隔离。 除了绝缘和噪音抑制能力&#xff0c;新的5MBd数字光耦…

Image-Line升级FL Studio21水果DAW音乐工作站

FL Studio水果21加入了更快、更精确的音频编辑&#xff0c;改进了内容搜索&#xff0c;DAW“情绪主题”控制&#xff0c;甚至还有更多的灵感、创意工具。 如果你真正需要中文语言&#xff0c;你需要更新到FL Studio 21版本打开你的FL设置&#xff0c;在通用&#xff08;Genera…

Wireshark | 猿如意

文章目录一、前言二、猿如意介绍客户端网页版三、Wireshark简介发展史使用猿如意下载功能介绍使用方法使用感受一、前言 我曾经有过这样的烦恼&#xff1a;去下载一个应用&#xff0c;结果百度到了一大堆广告&#xff0c;最后下载的也不是官方版本&#xff0c;还捆绑了一大堆AP…

SpringBoot中使用Easyexcel实现Excel导入导出功能(二)

目录 常规导出 大批量数据导出 复杂表头的导出 日期、数字、自定义格式转换后导出 常规导出 常规导出excel有两种&#xff0c;个人比较推荐第一种&#xff1a; 1、新建一个导出数据的实体类&#xff0c;用ExcelProperty()注解标明excel中列的中文名称&#xff1b;如果实体的…