Brief Notes on Instruction Tuning

date
Jun 2, 2024
slug
brief-notes-on-instruction-tuning
status
Published
tags
NLP
summary
type
Post
阅读 “Instruction Tuning for Large Language Models: A Survey” 的简要总结。

1. Introduction

近年来大语言模型(Large Language Models)取得了重大进展,通过在大量文本数据上进行自监督学习,我们可以得到一个通用的预训练语言模型(Pretrained Language Models),通过微调(Fine-tuning)或者提示(Prompting)的方式可以使用它完成一系列的下游任务。
目前,基于 Decoder-only 的 transformer 架构的自回归语言模型占主导地位,我们通常通过提示的方式使用这类语言模型来完成下游任务。然而,使用这类语言模型时的一个主要的问题是,自回归语言模型的预训练目标(通常包括 next token prediction 等),和人们使用它的目标(完成下游任务,比如分类,回归,文本生成等,即 “follow their instructions safely and helpfully”)之间存在差距。
为了弥补这个差距,研究者提出了指令微调(Instruction Tuning)的方法,来增强大语言模型的能力和可控性。具体来说,指令微调通过在一个指令数据集上微调一个预训练的大语言模型,来达到对大语言模型的行为的人为干预,使得它符合人们想要的行为。指令数据集是一个包含(指令,输出)对的数据集,其中指令表示人类指令,输出表示大语言模型的期望输出。
尽管指令微调展现了一定的效果,但是也带来了一些挑战:
  • 构造多样、有创造性以及高质量,同时具有一定规模的指令数据集是困难的。
  • 如何确保大语言模型能够泛化到没见过的任务上。
  • 如何确保大语言模型学习到了解决任务问题的能力,而不是只学到输出格式这种浅层的能力。

2. Methodology

指令微调的 pipeline 主要包括指令数据集的构建以及指令微调的实施
notion image

2.1 Instruction Dataset Construction

指令数据集中的一条数据是一个 指令-输出 对,通常由以下部分组成:
  • 指令:一段指定任务的自然语言文本。
  • 输入:一个可选的输入,指定了任务的具体上下文。
  • 输出:期望大语言模型给出的输出。
目前构造指令数据集的方法主要有两种:
  • 集成一个已标注的数据集:将一个已标注的用于监督学习的数据集的 输入-输出 对整合到一个文本模板中,变成 指令-输出 对。Flan 和 P3 是通过这类方式构造的指令数据集的代表。
  • 通过大语言模型生成:对于指令,有两种方式获取,一种是手工设计,另一种是先手工设计一些指令作为种子,然后使用更强大的大语言模型对这些种子进行扩增。得到指令之后,使用大语言模型生成输出,得到指令数据集。InstructWild 和 Self-Instruct 是这类方式构造的指令数据集的代表。

2.2 Instruction Tuning

得到指令数据集之后通过监督学习的方式进行微调即可。在这步中,为了提高效率或者减少资源使用,也有一些 parameter efficient fine-tuning(PEFT) 的方法被提出。

3. Representative Datasets and Models

3.1 Representative Datasets

  1. Human-crafted
  • Natural Instructions: 一个人工构造的英文指令数据集,共有 193K 条数据,来自 61 个自然语言处理任务的数据集。数据集由 “instructions” 和 “instances” 两个部分组成,其中每个 “instructions” 中的实例是一条指令,描述了任务,每个 “instances” 中的实例是一个 输入-输出 对,来自原始的数据集。
  1. Synthetic data via distillation
  • Alpaca:alpaca 是 Stanford NLP 推出的一个大语言模型,在训练时通过蒸馏得到的数据集进行微调。具体来说,通过 Self-Instruct 中的 175 个种子任务开始,通过改进版的 Self-Instruct 中的指令生成过程得到了一个指令数据集来微调 llama-7b。
notion image
  • WizardLM / Evol-Instruct: 很多 LLM 在指令微调时只被训练应对一个任务,这种情况下任务指令和输入形式通常都比较简单,称为 closed-domain instruction fine-tune。在现实应用场景中,指令可能包含多个任务,且形式多样,OpenAI 通过雇佣人工标注者生产真实的任务指令和期望输出,用以微调 LLM,取得了较好的效果,这种情况被称为 open-domain instruction fine-tune。open-domain instruction fine-tuning 的效果较好,但是产生用以微调的数据集是困难的,因为人工标注费时费力,而且人类标注者倾向于产生比较简单或者中等复杂度的指令,造成 LLM 在复杂任务指令上的表现不佳。Evol-instruct 从一个简单的初始指令开始,通过循环地应用变异操作,逐步扩增指令的复杂度和多样性,产生包含不同的复杂度的指令。
notion image
  1. Synthetic data via self-improvement
  • Self-Instruct: 通过循环地让一个语言模型自己产生指令,并过滤重复或者低质量的指令,产生数据集用以微调本身。
notion image

3.2 Representative Models

  • InstructGPT
  • Alpaca
  • Vicuna
  • WizardLM

4. Parameter Efficient Fine-tuning Techniques

PEFT 旨在以低成本的方式微调一个 LLM,通过只微调一部分(附加的)参数,达到指令微调的目的。代表性的方法有:adapter tuning,prefix tuning 和 LoRA 等。
notion image

5. Summary

指令微调旨在弥补大语言模型预训练目标和下游任务目标之间的差距,主要的工作在于如何构建高质量的指令数据集,以及高效地在成本限制内微调。

© Lifan Sun 2023 - 2024