一、指令微调简介
1、定义
指令微调又称监督微调、多任务提示训练,即使用自然语言方式对预训练模型进行参数微调
2、过程
(1)收集或构建指令化实例
(2)通过有监督的方式对大模型进行参数微调
3、指令实例组成
(1)任务描述(也称为指令)
(2)任务输入-任务输出
(3)可选的示例
3、指令数据构建方式
(1)基于现有的NLP任务数据集构建
(2)基于日常对话数据构建
(3)基于合成数据构建
二、基于现有的NLP数据集构建指令数据
1、主要工作
- 增加任务描述,用于指导模型理解任务目标及相关信息
2、效果
经过NLP指令数据微调后,大模型可以学习到指令遵循的能力,进而可以解决没见过的NLP任务
3、提升方式
- 使用众包平台PromptSource,提升任务描述标注质量
- 设计特定的任务描述来反转现有实例的输入-输出对,从而进一步丰富训练实例
4、数据集推荐
- 常见的NLP数据集:FLAN、P3、Super-Natural Instructions
- 首选:FLAN v2
- 谷歌研究人员按照一定比例混合了以上三个数据集合和思维链数据
三、基于日常对话数据构建指令数据
1、出现原因
NLP数据集多样性局限,与人类真是需求匹配度低,为此研究人员开始使用日常对话中的实际需求作为任务描述
2、数据构建方式
- 将用户真实使用大模型过程产生的数据进行整理
- 一组标注人员制作输入,另一组标注人员制作输出,然后组成输入-输出对,组合成最终的指令数据集
四、基于合成数据构建指令数据
1、简介
为了减轻人工标注与数据收集的负担,提出的一种半自动化数据合成的方法。
2、实现方式
借助已有的高质量指令数据作为上下文学习示例输入打磨新,进而生成大量多样化的任务描述和输入-输出数据
3、代表性指令数据集
- Self-Instruct:仅需要使用100多个人工撰写的实例作为初始任务池,然后随机选择数据作为示例,就可以通过大模型生成新的指令微调数据
- Evo1-Instruct:通过基于深度和广度的演化来提高实例的复杂性和多样性,解决Self-Instruct生成实例过于简单、缺乏多样性问题
- Self-Align:设计了多中基于人类对齐原则的合成数据过滤技术,通过上下文提示让ChatGPT能够筛选出高质量的实例数据来训练新模型,并进一步让新模型产生更多的与人类对齐的指令微调数据
- 使用指令回译技术的指令集:使用指令回译技术提升输出文本质量,使用现有文本作为输出,然后利用上下文学习逆向合成输入指令。由于输出内容都是人工撰写的,该方法能让大模型学习生成准确且流畅的文本
五、指令数据构建的提升方法
1、方案
- 指令格式设计
- 拓展指令数量
- 指令重写与筛选
2、指令格式设计
- 方式:
- 增加适当数量的实例作为上下文示例一起作为模型输入,提升模型实际性能,缓解模型对于指令格式的敏感性
- 在指令微调数据中引入思维链数据,例如算术推理的过程
- 注意点:
- 指令数据不是包含信息越多越好
- 添加某些看似有用的信息,比如需要避免的事项、原因或建议,可能不会带来正向的效果提升,甚至会带来负面影响
3、拓展指令数量
- 方法:逐步拓展指令数量,0.18M、 5.55M、 7.2M以及 17.26M,模型性能会随之上升,但是当指令数据达到7.2M之后,模型性能提升非常缓慢。
- 日常对话能力提升:一定数量的高质量指令就可以激活大模型的对话能力
- 兼顾NLP任务可对话场景:基于FLAN-T5的大规模指令集进行拓展,让GPT-4和ChatGPT逐步回答每一个问题,得到5M合成实例,可用于加强下游模型的逐步推理能力
4、指令重写与筛选
- 方法:使用一些重写或者筛选机制,来提高指令数据的质量或者多样性
- 指令重写示例数据集
- Evo1-Instruct:使用深度演化和广度演化策略来重写指令,使指令变得更加复杂、困难和多样
- YuLan-Chat-3:主体多样性增强方法,预先收集大量主题标签,然后随机选择一种并使用ChatGPT对指令进行重写来适配到相应的主题,最后进行质量筛选来获取高质量的多样性指令数据
- 指令筛选示例数据集
- Alpa-gasus:使用GPT-4从原始的52k数据中筛选出GPT-4评分较高的9千条,使用这9千条数据进行训练的,能达到与原始52k数据一样的效果
- YuLan-Chat-3:提出平衡指令难度策略,用大模型的困惑程度来估算指令数据的难度水平,删除过于简单或困难的指令数据,从而缓解大模型训练不稳定或者过拟合的现象
5、总结
- 指令的质量比数量重要
- 指令微调时应优先使用人工标注的多样性指令数据
六、指令微调的作用
1、整体任务性能提升
- 增强或解锁大模型能力,随着指令数据量的增加,能力会更好
- 经过指令微调的小模型,比没有经过微调的大模型更出色
- 在不同的模型架构、预训练目标、模型微调方法上都有一定增益,是一种通用的模型能力增强方法
- 与预训练相比,指令微调成本更低,指令数据量仅为预训练阶段的万分之一甚至更少
2、任务求解能力增强
- 大模型能获得较好的指令遵循与任务求解能力,无需下游任务的训练样本或示例就可以解决训练中未见过的任务
- 缓解预训练阶段出现的一些问题,比如生成重复内容或仅仅补全输入而不解决相关任务
- 使用英文指令微调的大模型,可以将能力泛化到其他语言的相关任务上
3、领域专业化适配
使用特定领域的指令进行微调,提升特定领域模型效果