现在的大模型训练通常会包括两个阶段:
一是无监督的预训练,即通过因果语言建模预测下一个token生成的概率。该方法无需标注数据,这意味着可以利用大规模的数据学习到语言的通用特征和模式。
二是指令微调,即通过自然语言指令构建的多样任务对预训练模型进行微调,显著增强了任务泛化能力。
最近,微软与清华提出了指令预训练(Instruction Pre-Training)的新方法,该方法在第一阶段引入指令—响应对的数据,采用监督多任务学习来探索预训练语言模型的新途径。
指令预训练使Llama3-8B模型在部分领域上的表现甚至超越了Llama3-70B模型。
论文标题:
Instruction Pre-Training: Language Models are Supervised Multitask Learners
论文链接:
https://arxiv.org/pdf/2406.14491
github链接:
https://github.com/microsoft/LMOps
可能有同学会担心指令—响应对的数据从何而来,人工构建的话耗时耗力,如果是合成数据,其质量又如何保障?
为了解决以上问题,作者通过将现有的数据集转换为固定格式,然后微调7B大小的开源模型,构建了200M高质量多样化的指令-响应对,覆盖40多个任务类别。
另外,通过与常规的预训练方法相比,指令预训练不仅提高了模型性能,还有望强化指令微调,减少微调步数。在持续的预训练中,指令预训练使Llama3-8B模型在部分领域上的表现甚至超越了Llama3-70B模型。
指令预训练
与传统的直接在原始语料库上进行预训练不同,指令预训练( Instruction Pre-Training)通过使用指令合成器生成一组指令-响应对(instruction-response pairs)来增强每个原始文本,然后利用增强后的语料库对语言模型进行预训练。
这些增强的指令-响应对是基于大量原始语料库的内容合成的,确保了高知识覆盖率和正确性。因此指令预训练的核心就是如何构建一个指令合成器,下文将详细叙述这个过程。
指令合成器
简单来说,指令合成器的开发,需要先将广泛的现有数据集转换们需要的格式:每个示例包含原始文本以及一组指令-响应对。使用这些数据,然后微调语言模型,以基于相应原始文本生成指令-响应对。
与现有使用GPT-3等大型或专有模型合成数据不同,本文选用7B的开源模型,节省成本但性能不输大模型。合成的数据具有高度多样性,使得指令合成器能够泛化到未见过的数据。
数据收集
从基于上下文的任务完成数据集中抽样并格式化数据。每个数据样本的上下文作为原始文本,下游任务作为指示-响应对,模版如下图所示。这些上下文跨越各种领域,如百科全书、社交媒体和学术测试 ,任务包括共性推理和情感分析等各种领域。
微调
使用few-shot的方式微调指令合成器,如下图所示,一个样本包含一段原始文本以及它的指令响应对,多个样本序列相互连接。所有示例均从同一数据集中抽样,保障不同指示-响应对集合中的模式的一致性。
推理
在推理时,每一轮都将之前轮次的文本、指示-响应对前置到当前文本。这使得指示合成器能够基于先前示例生成新的指示-响应对。
语言模型预训练
在收集合成的指令-回应对之后,使用多样的模板使指令格 式多样化,并将每个原始文本与其指令-回应对连接起来。通过连接来自M轮的文本和指令对,为后续的预训练创建了一个M次示例。
除了预训练数据外, 指令预训练保持所有其他预训练设置与一般预训练相同,同样使用下一个Token预测目标进行 训练,并在所有Token上计算损失。
作者同样进行了从零开始的常规预训练和领域自适应的持续预训练(Domain-Adaptive Continual Pre-Training),以验证在不同预训练场景中的有效性。
实验结果
指令预训练 VS 常规预训练
指令预训练表现出强大的泛化性
作者在不同规模的模型上使用不同的数据进行与训练,结果如下表所示。Vanilla PT代表常规的预训练方式,Instrcut PT是本文所提出的方法,Mix PT将一般预训练使用的原始语料库与指令合成器的微调数据混合在一起。
与Vanilla PT相比,混合了指令合成器的微调数据的Mix PT有所提升。而Instrcut PT则在大多数评估数据集上实现了更好的性能。另外指令合成器的微调数据中不包含任何评估数据集,但却在未见过的数据集上表现良好,展示出强大的泛化性。
指令预训练在不同模型规模上具有一致的数据效率。
另外,当将Instrcut PT与其他开源模型比较时,Instrcut PT以较少的参数量与token花费得到了不错的性能。如下表所示:
使用100B个tokens,500M参数的Instrcut PT,达到了Pythia-1B使用300B tokens的性能,而使用100B个tokens,1.3B参数的Instrcut PT达到了BLOOM-3B使用341B个tokens训练的性能。
Instrcut PT有望减少微调的步骤数量。
通过对比Vanilla PT与Instrcut PT在zero-shot 和 few-shot下的表现,如下图所示,随着步骤增长,Instrcut PT稳步提升。
作者认为,指令预训练与指令调优阶段的任务更紧密对齐,有助于在预训练和微调之间实现顺畅的过渡。这种紧密的对齐使得模型能够更高效地学习下游任务,从而有望显著减少进一步微调的步骤数量。
指令预训练 VS 领域自适应持续预训练
所谓领域自适应持续预训练就是使用领域语料(本文中使用生物医学领域和金融领域)对语言模型进一步逐步预训以使其适应一系列领域。
这里作者展示了经由Vanilla PT持续预训练后,以及经由Instruct PT持续预训练后的效果。还展示了Llama3-70B的表现作为参考,如下表所示:
Instruct PT在几乎所有领域特定任务上始终表现优于Vanilla PT。使用Instruct PT进行持续预训练大大提升了 Llama3-8B 的领域特定表现,达到与甚至超过 Llama3-70B 的水平。
在金融 NER 基准测试中,Instruct PT表现不及 Vanilla PT,表现出相当大的方差,甚至Llama3-70B 不如 Llama3-8B,表明此基准测试可能不够可靠。
评估指令合成器生成质量
在本文中起关键作用的是前文介绍的指令合成器,能够生成任何原始文本的指令-响应对。因此,作者在已见数据集和未见数据集上评估了指令合成器的性能。
响应准确性
为了评估生成响应的准确性,作者给定原始文本和任务指令,使指令合成器生成一个响应,然后计算生成的响应与黄金响应之间的 F1 相似度以评估响应准确性。
由于该指令合成器是从基础 Mistral-7B 模型微调而来的。为了比较,作者对比基础模型的结果。如下表所示:
可以看到,微调的合成器在已知和未知数据集上明显优于基础模型。
指令-响应对质量
该评测是给定原始文本,指令合成器生成一组指令-响应对。与基础模型相比,微调的合成器在零样本、少样本、已知和未知数据集这四个维度上显著优于基准。
合成的指令-响应对提高LM的泛化性
这给定里将测试原始文本、合成对和测试指令串联在一起的提示,LM 生成一个响应。然后通过在提示中使用或者不使用合成的指令-响应对分别衡量LM的性能,结果如下图所示:
在已知和未知数据集上,本文加入合成的指令-响应对的方法持续增强了 LM 在测试任务上的表现,超过了所有基线。即使是没有见过的数据集,也能带来很大的帮助。
合成的指令-响应对的多样性
作者从语料库中抽取了500个增强的指令文本,并使用GPT-4示评估合成的指令是否与原始文本的上下文相关(上下文相关性),以及基于指令和上下文回复是否准确(回复准确性)。
从上表中,可以看到指令合成器生成涵盖 49 个不同任务类别的指令-响应对,其中超过 85% 与上下文相关,响应准确率达到70%。
作者进一步将任务类别分为 9 个通用任务场景。下图显示了通用预训练中指令增强语料库中每个任务场景的百分比。表明本文的合成数据涵盖了所有通用任务场景,展示了高度多样化。
结论
本文提出的指令预训练(Instruction Pre-Training)方法展示了监督多任务学习的巨大潜力。通过微调指令合成器生成高质量多样化的指令-响应对来增强语料库,然后在增强的语料库上对LMs进行预训练,该方法显著提高了模型在多种任务上的泛化能力。此外,在持续预训练中,指令预训练使得小模型在特定领域的表现能够媲美甚至超过大模型。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。