大语言模型的指令微调(Instruction Tuning)最全综述:从数据集到技术全解析
当前的大语言模型主要是预训练大模型,在大规模无监督数据上训练之后,再经过有监督微调和对齐之后就可以完成很多任务。尽管如此,面对垂直领域的应用,大模型依然需要微调才能获得更好地应用结果。而大模型的微调有很多方式,包括指令微调、有监督微调、提示工程等。其中,指令微调(Instruction Tuning)作为改进模型可控性最重要的一类方法,目前并没有很好的资料参。浙江大学研究人员联合Shannon AI等单位发布了一篇最新的关于指令微调的综述,详细描述指令微调的各方面内容。

大模型微调简介
此前,我们已经介绍了大模型的三类微调技术(实际案例说明AI时代大语言模型三种微调技术的区别——Prompt-Tuning、Instruction-Tuning和Chain-of-Thought)。但实际上,大模型的微调还可以分成很多种。
从微调的参数规模来说,可以简单分为全参数微调和高效参数微调。前者一般是用预训练模型作为初始化权重,在特定数据集上继续训练,全部参数都更新的方法。而后者则是期望用更少的资源完成模型参数的更新,包括只更新一部分参数或者说通过对参数进行某种结构化约束,例如稀疏化或低秩近似来降低微调的参数数量。
如果按照在模型哪个阶段使用微调,或者根据模型微调的目标来区分,也可以从提示微调、指令微调、有监督微调的方式来。本次的综述文章主要就是指令微调的综述。
指令微调简介
指令微调是一种通过在由(指令,输出)对组成的数据集上进一步训练LLMs的过程。其中,指令代表模型的人类指令,输出代表遵循指令的期望输出。这个过程有助于弥合LLMs的下一个词预测目标与用户让LLMs遵循人类指令的目标之间的差距。
指令微调可以被视为有监督微调(Supervised Fine-Tuning,SFT)的一种特殊形式。但是,它们的目标依然有差别。SFT是一种使用标记数据对预训练模型进行微调的过程,以便模型能够更好地执行特定任务。而指令微调是一种通过在包括(指令,输出)对的数据集上进一步训练大型语言模型(LLMs)的过程,以增强LLMs的能力和可控性。指令微调的特殊之处在于其数据集的结构,即由人类指令和期望的输出组成的配对。这种结构使得指令微调专注于让模型理解和遵循人类指令。
总的来说,指令微调是有监督微调的一种特殊形式,专注于通过理解和遵循人类指令来增强大型语言模型的能力和可控性。虽然它们的目标和方法相似,但指令微调的特殊数据结构和任务关注点使其成为SFT的一个独特子集。
指令微调常用的数据集总结
在这篇综述中,作者总结了25个指令微调数据集。并将指令微调的数据集分为以下三大类:
泛化到未见任务
这类数据集通常包含多样化的任务,每个任务都有专门的指令和数据样例。模型在这类数据集上训练后,可以泛化到未见过的新任务上。
在单轮中遵循用户指令
这类数据集包含指令及其对应的响应,用于训练模型单轮回复用户指令。训练后,模型可以理解指令并作出回复。
像人类一样提供帮助
这类数据集包含多轮闲聊对话。训练后,模型可以进行多轮交互,像人类一样提供帮助。
总体来说,第一类数据集侧重任务泛化能力,第二类侧重单轮指令理解能力,第三类侧重连续多轮对话能力。研究人员可以根据所需的模型能力选择不同类型的数据集进行指令调优。
所有的25个用以大语言模型的指令微调数据集列表如下:
类型 | 数据集 | 实例数量 | 任务数量 | 语言数 | 构建方式 | 是否泛化到未见任务 | 链接 |
---|---|---|---|---|---|---|---|
泛化到未见任务 | UnifiedQA | 75万 | 46 | 英语 | 人工构建 | 是 | UnifiedQA |
OIG | 4300万 | 30 | 英语 | 人-机混合 | 是 | OIG | |
UnifiedSKG | 80万 | - | 英语 | 人工构建 | 是 | UnifiedSKG | |
Natural Instructions | 19万 | 61 | 英语 | 人工构建 | 是 | Natural Instructions | |
Super-Natural Instructions | 500万 | 76 | 55种语言 | 人工构建 | 是 | Super-Natural Instructions | |
P3 | 1200万 | 62 | 英语 | 人工构建 | 是 | P3 | |
xP3 | 8100万 | 53 | 46种语言 | 人工构建 | 是 | xP3 | |
Flan 2021 | 440万 | 62 | 英语 | 人工构建 | 是 | Flan 2021 | |
COIG | - | - | - | - | 是 | COIG | |
在单轮中遵循用户指令 | InstructGPT | 1.3万 | - | 多语言 | 人工构建 | 否 | |
Unnatural Instructions | 24万 | - | 英语 | InstructGPT生成 | 是 | Unnatural Instructions | |
Self-Instruct | 5.2万 | - | 英语 | InstructGPT生成 | 是 | Self-Instruct | |
InstructWild | 10万 | 429 | - | 模型生成 | 是 | InstructWild | |
Evol-Instruct | 5.2万 | - | 英语 | ChatGPT生成 | 是 | Evol-Instruct | |
Alpaca | 5.2万 | - | 英语 | InstructGPT生成 | 是 | Alpaca | |
LogiCoT | - | 2 | 英语 | GPT-4生成 | 是 | LogiCoT | |
Dolly | 1.5万 | 7 | 英语 | 人工构建 | 是 | Dolly | |
GPT-4-LLM | 5.2万 | - | 中英文 | GPT-4生成 | 是 | GPT-4-LLM | |
LIMA | 1千 | - | 英语 | 人工构建 | 是 | LIMA | |
像人类一样提供帮助 | ChatGPT | - | - | 多语言 | 人工构建 | 否 | |
Vicuna | 7万 | - | 英语 | 用户共享 | 否 | ||
Guanaco | 534万 | - | 多语言 | 模型生成 | 是 | Guanaco | |
OpenAssistant | 16万 | - | 多语言 | 人工构建 | 是 | OpenAssistant | |
Baize v1 | 111万 | - | 英语 | ChatGPT生成 | 是 | Baize | |
UltraChat | 67万 | - | 中英文 | 模型生成 | 是 | UltraChat |
不同领域的指令微调
其实,很多领域都有对大模型做指令微调的需求,但是不同领域的指令微调需求可能也有差异。
这篇综述总共总结了8种不同领域的大模型指令微调情况,如下表所示:
好的,已补全所有8个领域的指令调优对比情况:
领域 | 简介 | 独特性和挑战 | 解决思路 | 模型案例 |
---|---|---|---|---|
对话 | 使模型进行自然对话 | 理解长序列语义联系,生成连贯回复 | 构建长序列对话指令数据集,扩大模型编码长度 | InstructDial,ChatGPT |
意图分类和槽填充 | 使模型进行意图分类和槽值抽取 | 处理不同领域的意图和词汇 | 构建跨领域的意图分类和槽填充指令数据集 | LINGUIST |
信息抽取 | 使模型进行结构化信息抽取 | 处理不同规范的信息抽取 | 构建规范化信息抽取指令数据集 | InstructUIE |
基于方面的情感分析 | 使模型进行观点级情感分析 | 理解复杂的观点和情感关系 | 将其转化为问答式指令 | 基于T5的框架 |
写作 | 使模型进行风格化写作 | 遵循具体写作风格和逻辑 | 构建丰富风格化写作指令数据集 | Writing-Alpaca, CoEdIT |
医学 | 使模型进行医学问答 | 需要专业医学知识,避免错误信息 | 在医学知识图谱上进行指令调优 | Radiology-GPT, ChatDoctor |
算术 | 使模型解决算术问题 | 理解不同表达方式的算术 | 构建多样化算术表达式指令数据集 | Goat |
代码 | 使模型进行代码生成 | 处理不同编程语言和规范 | 收集多语言代码生成指令样例 | WizardCoder |
高效指令微调技术
高效指令微调技术的主要目的在于可以利用一小部分参数的更新来使得模型达到训练效果。其实与有监督学习里面或者大语言模型里面的高校参数微调基本一致。高效微调技术主要包括如下几类:
方法 | 原理 | 优势 | 缺点 |
---|---|---|---|
LoRA | 将模型权重分解为低秩分量进行更新,使调优局限在相关任务子空间 | 减少调优的参数量,降低计算内存 | 低秩分解可能削弱模型表征能力 |
HINT | 使用超网络根据指令和少量样例生成参数化模块进行模型调优 | 可以处理长指令,避免重复计算 | 调优模块性能可能弱于全量调优 |
Qlora | 对模型权重进行量化,只调整低秩适配器参数 | 减少参数内存,兼容量化 | 量化会损失部分精度 |
LOMO | 融合梯度计算和更新,避免完整梯度存储 | 减少梯度内存占用 | 需要精心设计保证收敛稳定 |
Delta-tuning | 将调优参数限制在低维流形上 | 提供理论分析,参数高效 | 低维流形假设可能不够准确 |
总体来说,当前的高效指令调优技术主要是通过参数量减少、梯度压缩、量化等方式来降低计算和内存消耗。这些方法在降低资源占用方面非常有效,但也存在一定的缺点,如精度损失、收敛稳定性等问题。
论文名称:Instruction Tuning for Large Language Models: A Survey
论文地址:https://arxiv.org/abs/2308.10792
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
