跳到主要内容大模型指令微调(Instruction Tuning)演进与主流方案对比 | 极客日志编程语言AI算法
大模型指令微调(Instruction Tuning)演进与主流方案对比
大模型指令微调技术演进主要经历了 Google Flan、BigScience T0、OpenAI InstructGPT 及 AllenAI TK-Instruct 等关键阶段。Flan 首次提出指令微调范式,利用多任务模板提升零样本能力;T0 扩展了指令集多样性并验证了 PromptSource 数据集效果;InstructGPT 转向人类反馈导向,强调有用性、诚实性和无害性,并通过用户交互数据迭代;TK-Instruct 开源大规模指令集覆盖千余任务。整体趋势显示指令集规模扩大、分布更贴近真实场景,且评估标准从传统 NLP 指标转向人类偏好对齐。
咸鱼开飞机1 浏览 大模型指令微调(Instruction Tuning)演进与主流方案对比
Google: Flan
论文: 2021.9 Finetuned Language Models are zero-shot learners
核心观点: 抢占先机,Google 第一个提出指令微调可以解锁大模型指令理解能力。
谷歌的 Flan 是第一个提出指令微调范式的,目的和标题相同,使用指令微调来提升模型的 zero-shot 能力。论文使用的是 137B 的 LaMDA-PT,一个在 Web、代码、对话、Wiki 上预训练的单向语言模型。
指令集
在构建数据集上,谷歌比较传统。直接把 TensorFlow Dataset 上 12 个大类,总共 62 个 NLP 任务的数据集,通过模板转换成了指令数据集。
为了提高指令数据集的多样性,每个任务会设计 10 个模板,所以总共是 620 个指令,并且会有最多 3 个任务改造模板。所谓的任务改造就是把例如影评的情感分类任务,转化成一个影评生成任务,更充分的发挥已有标注数据构建更丰富的指令数据集。
为了保证数据集的多样性和均衡性,每个数据集的训练样本限制在 3 万,并且考虑模型对一个任务的适应速度取决于任务数据集大小,因此按使用数据集样本大小占比按比例采样混合训练。
效果
效果上 137B 的指令微调模型大幅超越 GPT3 few-shot,尤其是在 NLI 任务上,考虑 NLI 的句子对基本不会在预训练文本中自然作为连续上下句出现。而指令微调中设计了更自然地模板带来了大幅的效果提升。
除了以上存在明显效果提升的任务,在一些任务本身就和指令相似的任务,例如常识推理和指代消歧任务,指令微调并不能带来显著的效果提升。
作者做了更多的消融实验,验证指令微调中以下几个变量:
- 模型规模: 作者进一步论证了指令微调带来的效果提升存在明显的大模型效应,只有当模型规模在百亿左右,指令微调才会在样本外任务上带来提升。作者怀疑当模型规模较小时,在较多任务上微调可能会占用模型本就不多的参数空间,造成预训练时的通用知识遗忘,降低在新任务上的效果。
-
多任务影响: 考虑指令微调是在多任务上进行,作者希望剔除指令微调中多任务微调带来的影响。因此尝试进行多任务非指令微调(使用数据集名称代替指令),效果上指令微调显著更优,说明指令模板的设计确实存在提升模型指令理解力的效果。
-
few-shot: 除了 zero-shot,Flan 同时验证了 few-shot 的效果。整体上 few-shot 的效果优于 zero-shot。说明指令微调对 few-shot 也有效果提升。
-
结合 Prompt-tuning: 既然指令微调提升模型对指令的理解能力,作者认为应该对进一步使用 soft-prompt 也应该有提升。因此进一步使用了 prompt-tuning 对下游任务进行微调,不出意外 Flan 比预训练 LaMDA 的效果有显著的提升。
BigScience: T0
论文: 2021.10 Multitask prompted training enables zero-shot task generation
核心观点: Flan 你想到的我也想到了!不过我的指令数据集更丰富多样。
T0 是紧随 Flan 发布的论文,和 Flan 对比有以下几个核心差异:
- 预训练模型差异: Flan 是 Decoder-only,T0 是 Encoder-Decoder 的 T5,并且考虑 T5 的预训练没有 LM 目标,因此使用了 prompt-tuning 中以 LM 任务继续预训练的 T5-LM。
- 指令多样性: T0 使用的是 PromptSource 的数据集,指令要比 Flan 更丰富。
- 模型规模: Flan 在消融实验中发现 8B 以下指令微调效果都不好,而 3B 的 T0 通过指令微调也有效果提升。可能影响是 Encoder-Decoder 的预训练目标差异,以及 T0 的指令集更多样更有创意。
- 样本外泛化任务: Flan 为了验证指令微调泛化性是每次预留一类任务在剩余任务训练,训练多个模型。T0 是固定了 4 类任务在其余任务上微调。
指令集
T0 构建了一个开源 Prompt 数据集 P3 (Public Pool of Prompts),包括 173 个数据集和 2073 个 prompt。从丰富程度上比 Flan 提升了一整个数量级,不过只包含英文文本,更多数据集的构建细节可以看 PromptSource 的论文。
- 指令集包括的数据集数: 在 T0 原始指令集的基础上,作者分别加入 GPT-3 的验证集,以及 SuperGLUE,训练了 T0+ 和 T0++ 模型。在 5 个 hold-out 任务上,更多的数据集并不一定带来效果的提升,并且在部分推理任务上,更多的数据集还会带来 spread 的上升(模型在不同 prompt 模板上表现的稳定性下降)。
- 每个数据集的 prompt 数 (p): 通过每个数据集采样不同数量的 prompt 进行训练,作者发现随 prompt 数提升,模型表现的中位数会有显著提升,spread 存在不同程度的下降,不过看起来存在边际递减的效应。
OpenAI: InstructGPT
论文: 2022.3 Training Language Model to follow instructions with human feedback
模型: (1.3B, 6B, 175B) GPT3
核心观点: 你们还在刷 Benchmark?我们已经换玩法了!更好的 AI 才是目标。
这里把 InstructGPT 拆成两个部分,本章只说指令微调的部分,也就是训练三部曲中的第一步,论文中叫 SFT (Supervised fine-tuning)。从论文的数据构建和评估中,不难发现 OpenAI 对于什么是一个更好的模型的定义和大家出现了差异,当谷歌、BigScience 联盟还在各种不同的标准任务上评估 LM 模型能力提升时,OpenAI 的重点已经变成了更好的 AI,也就是能更好帮助人类解决问题的人工智能。简化成 3H 原则就是:
- Helpful: 模型能帮助用户解决问题
- Honest: 模型能输出真实信息
- Harmless: 模型输出不能以任何形式伤害人类
于是正文部分的评估基本没有常见的 Accuracy、F1 等,而是变成了各种人工评估的打分,例如 LikeScore、Hallucinations 等等。指令微调数据集的分布也从标准 NLP 任务向用户在 playground 中提交的问题偏移。
指令集
先说下 SFT 指令集的构建,InstructGPT 构建了训练 12725+ 验证 1653 条 prompt 指令,由标注员的标注样本和用户在 playground 中和模型交互的指令共同构成,相比 T0 指令的多样性又有大幅提升。不过以下的指令数量包括了 few-shot 采样,也就是 1 个 instruction 采样不同的 few-shot 算多条指令。
除了丰富程度,和 T0 以及 Flan 指令集最大的差异在于指令类型的分布。 标注人员标注了以下三类样本:
- Plain: 标注同学自由构建任务指令
- Few-shot: 自由构建任务的同时给出 few-shot 样例
- User-Based: 基于用户申请 waitlist 时给出的使用用途,让标注同学构建对应的指令任务
整体上会更偏向于用户在真实场景下和模型交互可能提问的问题,自由式生成例如脑暴、改写、聊天、自由创作类的任务占了绝大多数。 而 T0、Flan 的指令集集中在 NLP 的分类和 QA 任务,这类任务的在实际交互中占比其实很小。下图是 OpenAI playground 中收集的用户指令的分布。
以及从论文的表述中存在迭代,也就是标注同学标注的指令集用于训练第一版 InstructGPT,然后发布到 playground,收集更多的用户和模型交互的指令,再使用用户指令来训练后续的模型。因此在用户导向的数据集上 OpenAI 相比所有竞争对手都有更深厚的积累,人家也在收集数据提升他们的模型。
SFT 使用 cosine rate decay 例如微调了 16 个 epoch,但是发现在第一个 epoch 上验证集就已经过拟合了,但是过拟合会提升后续 RLHF 的模型效果。这部分我们放到 RLHF 章节再讨论,也就是什么样的模型更合适作为 RLHF 的起点。
评估指标
从论文对如何把 3H 原则转化成客观的模型评估指标的讨论上,不难感受到 OpenAI 对于标注标准有过很长期的讨论和迭代,包括 3 个方向:
- Helpful 有用性: 主要评价模型是否理解了指令意图,考虑有些指令本身意图的模糊性,因此有用性被泛化成标注同学 1-7 分的偏好打分。
- Harmless 有害性: 针对模型输出是否有害其实取决于模型的输出被用在什么场景中。OpenAI 最初是用疑似有害性作为判断标注,不过看起来可能双审一致率不高,不同标注同学对疑似有害的认知存在较大差异。因此 OpenAI 设计了几条明确的有害标准,和风控类似,包括涉黄、涉暴、有侮辱性言语等等。
- Honest 事实性: 相比 Honest 的含义,Truthfulness 更适合用与没有价值观的模型,论文使用封闭域上模型伪造事实的概率,和在 QA 问题上的准确率来评估。
模型效果
评估数据也分成了两部分,标准 NLP 数据集,和 API 收集的指令数据进行标注得到,也就是 OpenAI 独有数据。
API 数据集
有用性上,不论是在请求 GPT,还是在请求 InstructGPT 的指令样本中,不论是使用新的标注同学,还是和标注训练样本相同的标注同学,对比原始 GPT3,SFT 之后的模型 like score 都显著更高,并且存在模型规模效应。
具体拆分到是否遵循指令,是否给出伪事实,以及能否对用户起到帮助作用上,SFT 微调后的模型都有显著提升。
同时论文对比了使用 Flan 和 T0 的指令集对 GPT3 进行微调,发现虽然比原始 GPT3 有提升,但是效果会显著差于使用更接近人类偏好的指令集微调的 SFT。论文给出了两个可能的原因:
- 公开 NLP 任务类型集中在分类和 QA,这和 OpenAI playground 中收集的任务分布存在较大的差异。
- 公开 NLP 数据集的指令丰富程度 << 人们实际输入的指令多样性。
标准 NLP 任务
在 TruthfulQA 任务上,SFT 模型相比 GPT 有微小但是显著的提升,整体事实性还是有待提高。
在 RealToxicityPrompts 数据集上,不管是人工打分还是 Perspective 模型打分都显示,SFT 相比 GPT3,在产出有害内容上比例有显著的下降。
综上所述,InstructGPT 在指令微调上最大突破是指令数据集分布的差异性,标准 NLP 任务更少,自由开放类任务更多,以及依赖 OpenAI 免费开放的 playground,可以持续收集用户的指令用于模型迭代。同时在评估标准上,在语言模型之外引入 3H 体系来评价模型作为 AI 的能力效果。
AllenAI: TK-Instruct
论文: 2022.4 SUPER-NATURAL INSTRUCTIONS: Generalization via Declarative Instructions on 1600+ NLP Tasks
核心观点: 没有最大只有更大的指令集,在英文和非英文的各类任务上超越 InstructGPT?
TK-Instruct 最大的贡献在于开源了更大规模的指令数据集,并且对上述提到的 T0 (PromptSource)、Flan、InstructGPT 指令集进行了对比总结,如下。
TK-Instruct 在 76 大类,总共 1616 个任务上构建了指令集,任务分布比 T0 和 Flan 更加多样和广泛,比 InstructGPT 要小(不过因为 InstructGPT 的指令更多是开放生成类的用户指令所以不太可比),且占比上还是更偏向标准 NLP 任务类型。
其他细节这里不再赘述,这里放 TK-InstructGPT 更多是想看下以上 T0、InstructGPT、TK-Instruct 的效果对比。可以发现在内容理解任务上 Tk-Instruct 是要显著超越 InstructGPT 的,在生成类任务上二者差不多。但整体和有监督微调(虚线)相比还有很大的提升空间。
总结与展望
通过对 Flan、T0、InstructGPT 及 TK-Instruct 四个代表性工作的分析,可以看出指令微调技术的发展脉络:
- 范式确立: Flan 确立了通过指令模板将多任务统一为指令格式的基本范式,证明了百亿参数模型在零样本任务上的潜力。
- 数据扩展: T0 和 TK-Instruct 致力于扩大指令集的规模和多样性,验证了更多样的 Prompt 来源有助于提升泛化能力,但也揭示了单纯增加数据量可能存在边际效应。
- 对齐转向: InstructGPT 标志着从追求 NLP 基准分数向追求人类偏好对齐的转变,引入了 3H 原则(Helpful, Honest, Harmless)和基于用户反馈的数据闭环,这成为后续大模型发展的主流方向。
- 评估演变: 评估体系从传统的 Accuracy/F1 等自动指标,逐渐转向包含人工打分、有害性检测、事实性核查在内的综合评估体系。
未来,随着模型能力的进一步提升,指令微调将更加注重长尾场景的覆盖、复杂推理能力的增强以及与人类价值观的深度对齐。开发者在构建指令数据集时,应平衡标准任务与开放生成任务的比例,并关注评估指标与实际应用场景的一致性。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online