一篇关于LLM指令微调的综述
深度学习自然语言处理 原创
作者:cola
指令微调(IT)是提高大型语言模型(LLM)能力和可控性的关键技术。其本质是指在由(INSTRUCTION, OUTPUT)对组成的数据集上以监督的方式进一步训练LLM的过程,它弥合了LLM的下一个词预测目标与用户让LLM遵循人类指令的目标之间的差距。这篇文章对现有研究进行了系统的回顾、包括IT的一般方法、IT数据集的构建、IT模型的训练、以及不同模式,领域和应用的应用。
进NLP群—>加入NLP交流群
论文:
Instruction Tuning for Large Language Models: A Survey地址:
https://arxiv.org/pdf/2308.10792.pdf
背景
近年来LLMs取得了显著的进展,例如GPT3、PaLM以及LLaMA等大语言模型在广泛的自然语言处理任务上都表现出了令人深刻的能力。LLMs的一个主要问题是训练目标和用户目标之间的不匹配。通常LLM是在大型预料上通过最小化上下文词预测误差进行训练,而用户希望模型有效且安全的遵循他们的指令。
为了解决这个不匹配,提出了指令微调(IT)来增强模型的能力和可控性。IT使用(INSTRUCTION, OUTPUT)对进一步训练LLM,其中INSTRUCTION表示模型的人工指令,OUTPUT表示遵循INSTRUCTION的期望输出。IT有三个好处:
弥合了LLM的下一个此预测目标与用户指令目标之间的差距; IT允许更可控和预测的模型行为。指令用于约束模型的输出,使其与期望的响应特征或领域知识保持一致,为人类干预模型的行为提供了一个渠道; 计算效率更高。
目前,IT面临的挑战:
制作高质量的指令。现有的指令数据集通常在数量、多样性和创造力方面有限; IT可能只会改善那些在IT训练数据集中得到大量支持的任务; 有人认为IT只捕获表面的模式和样式(例如,输出格式),而不是理解并学习任务。
方法
这一小节主要介绍使用指令调优的pipeline。
指令数据集的构造
指令数据集中的每个实例由三个元素组成:一个指令,它是指定任务的自然语言文本序列(例如,为XX写一封感谢信给XX,写一篇关于XX主题的博客,等等);为上下文提供补充信息的可选输入;以及基于指令和输入的预期输出。
通常构造指令数据集有两种方法:
来自带注释的自然语言数据集的数据集成。在这种方法中,通过使用模板将文本标签对转换为(INSTRUCTION, PUT)对,从现有的带注释的自然语言数据集中收集INSTRUCTION, TPUT)对。Flan和P3数据集是基于数据集成策略构建的。 使用LLM生成输出:使用诸如GPT-3.5-Turbo或GPT4之类的LLM收集输出。指令可以来源于人工收集或基于使用LLM的少量手写指令进行扩展。接下来,将收集到的指令馈送到LLM以获得输出。使用这种方法生成了instructwind和self - directive等数据集。
对于多回合会话IT数据集,可以让LLM扮演不同的角色(用户和AI助手)来生成会话格式的消息。
指令微调
基于收集到的IT数据集,可以以完全监督的方式直接对预训练模型进行调优,在给定指令和输入的情况下,通过顺序预测输出中的每个标记来训练模型。
数据集
这一小节将介绍一些广泛应用的指令调优数据集。
Natural Instructions
Natural Instructions是一个人工制作的英语指令数据集,由193K个实例组成,来自61个不同的NLP任务。数据集由“instructions”和“instances”组成。“instructions”中的每个实例都是一个任务描述,由7个部分组成:title、definition、emphasis/caution、things to avoid、prompt、positive example、negative example。“Instances”由(“input”,“output”)对组成,它们是正确遵循给定指令的输入数据和文本结果。作者通过参考数据集标注指令文件收集“instructions”。接下来,作者通过将所有NLP数据集中的数据实例统一为(“input”,“output”)对来构建“instances”。
P3
P3(Public Pool of Prompts)是一个整合170个英语NLP数据集和2052个英语提示构建的指令微调数据集。提示是将传统NLP任务中的数据实例(例如,问题回答、文本分类)映射到自然语言输入输出对的函数。
P3中的每个实例都有三个组成部分:“inputs”、“answer_choices”和“targets”。“inputs”是用自然语言描述任务的文本序列(例如,"If he like Mary is true, is it also true that he like Mary’s cat?")。“answer_choices”是一个文本字符串列表,适用于给定任务的响应(例如,["yes","no","undetermined"])。“Targets”是一个文本字符串,它是对给定“inputs”(例如,“yes”)的正确响应。
xP3
xP3(Crosslingual Public Pool of Prompts)是一个多语言指令数据集,由46种语言的16种不同的自然语言任务组成。数据集中的每个实例都有两个组件:“inputs”和“targets”。“inputs”是一种自然语言的任务描述。“targets”是正确遵循“inputs”指令的文本结果。
xP3中的原始数据来自三个来源:英语指令数据集P3, P3中的4个英语未见任务(例如,翻译,程序合成)和30个多语言NLP数据集。作者通过从PromptSource中采样人工编写的任务模板,然后填充模板,将不同的NLP任务转换为统一的形式化,构建了xP3数据集。
Flan 2021
Flan 2021是一个英语指令数据集,通过将62个广泛使用的NLP基准(如SST-2、SNLI、AG News、MultiRC)转换为语言输入输出对而构建。Flan 2021中的每个实例都有“input”和“target”组件。“input”是通过自然语言指令描述任务的文本序列(例如,"determine the sentiment of the sentence ’He likes the cat.’)。“target”是正确执行“input”指令的文本结果(例如,“positive”)。作者首先手动组合指令和目标模板,然后用数据集的数据实例填充模板。
Unnatural Instructions
Unnatural Instructions是一个包含大约24万个实例的指令数据集,使用InstructGPT构建。数据集中的每个实例都有四个组件: INSTRUCTION,INPUT, CONSTRAINTS,OUTPUT。“INSTRUCTION”是用自然语言对教学任务的描述。“INPUT”是自然语言中的参数,用于实例化指令任务。“CONSTRAINTS”是任务输出空间的限制。“OUTPUT”是在给定输入参数和约束条件下正确执行指令的文本序列。
作者首先从人工构建的Super-Natural Instructions dataset中对种子指令进行采样。然后,他们提示InstructGPT引出一个新的(instructions, inputs, constraints)对,其中有三个种子指令作为演示。接下来,作者通过随机改写指令或输入来扩展数据集。指令、输入和约束的连接被馈送到InstructGPT以获得输出。
Self-Instruct
self-instruction是一个英语教学数据集,使用InstructGPT构建,包含52K个训练指令和252个评价指令。每个数据实例由“instruction”、“input”和“output”组成。“instruction”是自然语言中的任务定义(例如,“Please answer the following question.”)。“input”是可选的,用作指令的补充内容(例如,“Which country’s capital is Beijing?”),“output”是正确遵循指令的文本结果(例如,“Beijing”)。
完整数据集的生成步骤如下:
从175个种子任务中随机抽取8个自然语言指令作为示例,并提示InstructGPT生成更多的任务指令。 确定步骤1中生成的指令是否为分类任务。如果是,他们要求InstructGPT根据给定的指令生成所有可能的输出选项,并随机选择一个特定的输出类别来提示InstructGPT生成相应的“input”内容。对于不属于分类任务的指令,应该有无数的“input”选项。使用输入优先策略,即提示InstructGPT先根据给定的“instruction”生成“input”,然后根据“instruction”和生成的“input”生成“output”。 基于步骤2的结果,使用InstructGPT使用输出优先或输入优先策略为相应的指令任务生成“input”和“output”。 对生成的指令任务进行后处理(如过滤相似指令,去除输入输出重复数据),最终得到52K的英文指令。
Evol-Instruct
evolution-directive是一个英语指令数据集,由包含52K条指令的训练集和包含218条指令的评估集组成。作者提示ChatGPT使用in-depth和in-breath演化策略重写指令。in-depth演化策略包含五种类型的操作,如增加约束、增加推理步骤、使输入复杂化等。in-breath策略将简单的指令升级为更复杂的指令或直接升级生成新的指令以增加多样性。作者首先使用52K(指令、响应)对作为初始集。然后,他们随机抽取一种演化策略,并要求ChatGPT根据所选择的演化策略重写初始指令。作者使用ChatGPT和规则过滤掉未演化的指令对,并用新生成的进化指令对更新数据集。在重复上述过程4次后,作者收集了250K个指令对。除了训练集,作者还从真实场景(例如,开源项目、平台和论坛)中收集了218条人工生成的指令,称为EvolInstruct测试集。
LIMA
LIMA是一个英语教学数据集,由一个包含1K数据的训练集组成实例和包含300个实例的测试集。训练集包含1K(“instruction”,“response”)对。对于训练数据,75%的样本来自三个社区问答网站(Stack Exchange, wikiHow和Pushshift Reddit Dataset);20%是由一组作者根据他们的兴趣手工编写的;5%的样本来自Super-Natural Instructions dataset。对于验证集,作者从写作集中抽样了50个实例。测试集包含300个示例,其中76.7%由另一组(B组)作者编写,23.3%来自Pushshift Reddit Dataset。
Super-Natural Instructions
Super-Natural Instructions是一个多语言指令集,由1616个NLP任务和5M个任务实例组成,涵盖了76种不同的任务类型(如文本分类、信息提取、文本重写、文本创作)以及55种语言。数据集中的每个任务都由“instruction”和“task instances”组成。具体来说,“instruction”有三个组成部分:用自然语言描述任务的“definition”;“positive examples”,即输入和正确输出的样本,以及对每个样本的简短解释;以及“negative examples”,即输入和不希望的输出的样本,以及对每个样本的简短解释。“task instances”是由文本输入和一系列可接受的文本输出组成的数据实例。Super-Natural Instructions中的原始数据来自三个来源:(1)现有的公共NLP数据集(例如CommonsenseQA);(2)通过众包过程生成的适用的中间注释(例如,在众包QA数据集期间将结果解释为给定问题);(3)由符号任务转换而成的合成任务,用几句话重新表述(例如,数字比较等代数运算)。
Dolly
Dolly是一个英语教学数据集,包含15,000个人工生成的数据实例,旨在使LLM能够与类似于ChatGPT的用户进行交互。该数据集旨在模拟广泛的人类行为,涵盖7种特定类型:开放式问答、封闭式问答、从维基百科提取信息、从维基百科总结信息、头脑风暴、分类和创意写作。数据集中每种任务类型的示例如下表所示:
OpenAssistant Conversations
OpenAssistant Conversations是一个人工制作的多语言助理式会话语料库,由来自66,497棵会话树的161,443条消息(即91,829个用户提示,69,614个助手回复)由35种语言组成,以及461,292个人工注释的质量评级。数据集中的每个实例都是一个对话树(CT)。具体来说,对话树中的每个节点表示由对话中的角色(即prompter、assistant)生成的消息。CT的根节点表示来自prompter的初始提示,而其他节点表示来自prompter或assistant的回复。从根到CT中任何节点的路径表示提示器和助手之间轮流进行的有效对话,称为线程。下图显示了一个对话树的示例,其中包含6个线程中的12条消息。
Baize
Baize是一个英语多回合聊天语料库,使用ChatGPT构建了111.5K个实例。每一轮都由用户的提示和助手的回应组成。Baize v1中的每个实例包含3.4轮对话。
为了创建Baize数据集,作者提出了self-chat,其中ChatGPT轮流扮演用户和人工智能助手的角色,并以会话格式生成消息。具体来说,作者首先制作了一个任务模板,定义了ChatGPT的角色和任务(如下表所示)。接下来,他们从Quora和Stack Overflow数据集中抽取问题作为对话种子。随后,他们用模板和样本种子提示ChatGPT。ChatGPT不断为双方生成消息,直到达到一个自然停止点。
指令微调的LLMs
这个小节将详细介绍通过指令微调训练的广泛使用的LLM模型。
InstructonGPT
InstructGPT(176B)用GPT-3(176B)初始化,然后根据人类指令进行微调。该微调过程由以下三个步骤组成:
对从Playground API历史记录中收集的人工过滤指令数据集进行监督微调(SFT); 基于一个标注数据集训练一个预测人类偏好的奖励模型,该数据集是通过对一条指令的多个响应进行采样而构建的,并对它们进行从好到坏的排序; 使用新的指令和步骤2中训练好的奖励模型从步骤1进一步优化模型。使用策略梯度强化学习方法近端策略优化(PPO)方法更新参数。步骤2和3交替进行多次,直到模型性能没有明显提高。
总体而言,InstructGPT优于GPT-3。在自动评估方面,InstructGPT在TruthfulQA数据集的真实性方面优于GPT-3 10%,在RealToxicityPrompts的toxicity优于GPT-3 7%。在NLP数据集(即WSC)上,InstructGPT达到了与GPT-3相当的性能。对于人类评估,在遵循正确指令、遵循明确约束、减少幻觉和产生适当反应四个不同方面,InstructGPT分别比GPT-3表现出+10%、+20%、-20%和+10%
BLOOMZ
BLOOMZ(176B)用BLOOM(176B)初始化,然后对指令数据集xP3进行微调。对于自动评估,在zero-shot设置下,BLOOMZ在共同参考分辨率、句子完成和自然语言推理数据集上的表现分别比BLOOM好+10.4%、20.5%和9.8%。对于HumanEval,就Pass@100指标而言,BLOOMZ优于BLOOM10%。对于生成任务,与BLOOM在lm-evaluation-harness上相比,BLOOMZ获得了+9%的BLEU改进。
Flan-T5
FLAN-T5(11B)是一个用T5(11B)初始化的LLM,然后在FLAN数据集上进行微调。在微调期间,FLAN-T5适应基于jaxx的T5X框架,并选择每2k步评估一次持久化任务的最佳模型。与T5的预训练阶段相比,微调花费了0.2%的计算资源(大约128个TPU v4芯片37小时)。为了进行评估,FLAN-T5(11B)优于T5(11B),并且在few-shot设置下获得与较大模型(包括PaLM (60B))相当的结果。FLANT5在MMLU、BBH、TyDiQA、MGSM和开放式生成上的性能分别优于T5+18.9%、+12.3%、+4.1%、+5.8%、+2.1%和+8%。并且RealToxicityPrompts,在few-shot设置中,FLAN-T5在BBH和TyDiQA数据集上的表现分别优于PaLM+1.4%和+1.2%
Alpaca
Alpaca(7B)是在InstructGPT(175B, text-davinci003)生成的构造指令数据集上,通过微调LLaMA(7B)训练的语言模型。在具有混合精度训练和完全共享数据并行性的8卡80GB A100设备上,微调过程大约需要3个小时。在评估方面,Alpaca(7B)达到了与InstructGPT(175B,text-davinci-003)相当的性能。具体来说,Alpaca在self-instruct数据集上的表现优于InstructGPT,获得了90次成功,而后者只有89次。
Vicuna
Vicuna(13B)是通过微调LLaMA(13B)在ChatGPT生成的会话数据集上训练的语言模型。作者从ShareGPT.com上收集了用户共享的ChatGPT对话,并在过滤掉低质量样本后获得了70K个对话记录。LLaMA(13B)使用针对多回合对话的修改损失函数对构建的会话数据集进行微调。为了更好地理解跨多回合对话的长上下文,作者将最大上下文长度从512扩展到2048。对于训练,作者采用梯度检查点和flash attention来降低微调过程中的GPU内存成本。在具有完全共享数据并行性的8×80GB A100设备上,微调过程需要24小时。作者建立了一个专门用于测量聊天机器人性能的测试集。他们收集了一个由费米问题、角色扮演场景、编码/数学任务等8个问题类别组成的测试集,然后让GPT4根据有用性、相关性、准确性和细节对模型的回答进行评分。在构建的测试集上,Vicuna(13B)优于Alpaca(13B),与ChatGPT相比,在45%的问题中产生了相同或更好的评分。
GPT-4-LLM
GPT-4-LLM(7B)是在GPT-4生成的指令数据集上通过微调LLaMA(7B)训练的语言模型。GPT-4-LLM使用LLaMA初始化,然后对构造的指令数据集进行监督微调。作者使用来自Alpaca的指令,然后使用GPT-4收集回复。LLaMA对GPT-4生成的数据集进行了微调。在一台8×80GB的A100机器上,微调过程大约需要三个小时,具有混合精度和完全共享的数据并行性。再使用近端策略优化(PPO)方法优化step-1模型,作者首先通过收集GPT-4、InstructGPT和OPT-IML对指令集合的响应构建比较数据集,然后要求GPT-4对每个响应进行1到10的评分。基于OPT使用评级训练奖励模型。通过使用奖励模型来计算策略梯度,对微调模型进行优化。
在评估中,GPT-4-LLM(7B)不仅优于基线模型Alpaca(7B),而且优于大型模型Alpaca(13B)和LLAMA(13B)。对于自动评估,GPT4-LLM(7B)在User-Oriented-Instructions-252、User-Oriented-Instructions-252和User-Oriented-Instructions-252数据集上的性能分别优于Alpaca 0.2、0.5和0.7。对于人工评估,在helpfulness、honesty、harmlessness方面,GPT-4-LLM分别比羊驼高11.7、20.9和28.6。
Claude
Claude是一种通过在指令数据集上微调预训练的语言模型来训练,旨在产生有益且无害的响应。首先对指令数据集进行监督微调。作者通过收集52K条不同的指令,并与GPT-4生成的响应配对,创建了一个指令数据集。在具有混合精度和完全共享数据并行性的8×80GB A100机器上,微调过程大约需要8小时。然后采用近端策略优化方法对step-1模型进行优化。作者首先通过收集来自多个大型语言模型对给定指令集的响应,然后要求GPT-4对每个响应进行评分,从而构建了一个比较数据集。然后,使用奖励模型和最近邻策略优化方法对第一步的微调模型进行优化。与backbone相比,Claude产生了更多有益和无害的响应。对于自动评估,Claude在RealToxicityPrompts的有害性方面优于GPT3 7%。对人工评估,在四个不同的方面,包括遵循正确的指令,遵循明确的约束,更少的幻觉,并产生适当的反应,Claude优于GPT-3+10%、+20%、-20%和+10%。
WizardLM
WizardLM(7B)是通过微调LLaMA(7B)在ChatGPT生成的指令数据集evolution-directive上训练的语言模型。它在evolution-directive的一个子集(70K)上进行微调,以便与Vicuna进行公平的比较。基于使用Deepspeed Zero-3技术的8 V100 GPU,微调过程在3个epoch上大约需要70个小时。在推理过程中,最大生成长度为2048。为了评估LLM在复杂指令上的性能,作者从真实场景中收集了218条人工生成的指令,称为Evol-Instruct测试集。对于人工评估,WizardLM在很大程度上优于Alpaca(7B) 和Vicuna(7B),并且在67%的测试样本上产生与ChatGPT相同或更好的响应。通过要求GPT-4对回答进行自动评估。具体来说,与Alpaca相比,WizardLM在Evol-Instruct测试集和Vicuna测试集上的性能提升了+6.2%,+5.3%。WizardLM在Evol-Instruct测试集上的表现优于Vicuna+5.8,在Vicuna测试集上的表现优于Vicuna+1.7%。
ChatGLM2
ChatGLM2(6B)是在包含中英文指令的双语数据集上通过微调GLM(6B)训练的语言模型。双语指令数据集包含1.4T令牌,中英文比例为1:1。数据集中的指令是从问答和对话完成任务中采样的。ChatGLM用GLM初始化,然后通过类似于InstructGPT的三步微调策略进行训练。为了更好地模拟多回合对话中的上下文信息,作者将最大上下文长度从1024扩展到32K。为了降低GPU在微调阶段的内存开销,作者采用了多查询关注和因果掩码策略。在推理过程中,ChatGLM2需要使用FP16的13GB GPU内存,并使用INT4模型量化技术支持使用6GB GPU内存的长达8K的对话。
对四个英语和中文基准进行了评估,包括MMLU,C-Eval,GSM8K和BBH。ChatGLM2(6B)在所有基准测试上都优于GLM(6B)和基准模型ChatGLM(6B)。具体来说,ChatGLM2在MMLU上优于GLM +3.1,在C-Eval上优于GLM +5.0,在GSM8K上优于GLM +8.6,在BBH上优于GLM +2.2。ChatGLM2在MMLU、C-Eval、GSM8K和BBH上的性能分别优于ChatGLM +2.1、+1.2、+0.4、+0.8。
LIMA
LIMA(65B)是基于提出的表面对齐假设构建的指令数据集上通过微调LLaMA(65B)训练的大型语言模型。表面对齐假设指的是模型的知识和能力几乎是在预训练阶段获得的,而对齐训练教会模型在用户偏好的形式化下生成响应。基于表面对齐假设,作者声称大型语言模型可以通过对一小部分指令数据进行微调来生成用户满意的响应。因此,作者构建了指令训练/验证/测试集来验证这一假设。
对构建的测试集进行评估。对于人工评估,LIMA分别比InstructGPT和Alpaca高17%和19%。此外,LIMA取得了与BARD、claude和GPT4相当的结果。对于自动评估,要求GPT-4对反应进行评分,评分越高表示表现越好,LIMA分别比InstructGPT和Alpaca高出20%和36%,达到与BARD相当的结果,而低于Claude和GPT-4。
其他
OPT-IML(175B):是一个通过在构建的指令元学习(IML)数据集上微调OPT(175B)模型来训练,该数据集由来自8个公开可用基准的1500多个NLP任务组成。经过微调后,OPT-IML在所有基准测试中都优于OPT。 Dolly 2.0(12B):使用预训练语言模型Pythia(12B) 进行初始化,并在指令数据集databrickks-dolly15k上进行微调,该数据集包含文本分类和信息提取等7类NLP任务。经过微调,Dolly 2.0(12B)在EleutherAI LLM评估上的性能大大优于Pythia(12B),并实现了与GPT-NEOX (20B)相当的性能,后者的参数是Dolly 2.0 (12B)的两倍。 Falcon-instruct(40B):是一个对Falcon(40B)在英语对话数据集上进行微调训练而成,该数据集包含来自Baize数据集的1.5亿个tokens,以及来自RefinedWeb数据集的额外5%的数据。为了减少内存使用,作者采用了flash attention和多查询技术。在评估中,falcondirective (40B)在Open LLM排行榜上的表现优于基线模型Falcon (40B),优于模型参数更多的Guanaco(65B)。 Guanaco(7B):是在构建的多语言对话数据集上通过微调LLaMA(7B)训练的多回合对话语言模型。多语言对话数据集来自两个来源:Alpaca,其中包含52K英语指令数据对;以及多语言(如简体中文、繁体中文、日语、德语)对话数据,包含534K+多回合对话。经过微调后,Guanaco将在多回合对话中生成特定角色的响应和对给定主题的连续响应。 Minotaur(15B)是通过微调Starcoder Plus(15B) 在包括WizardLM和gpteacher-general-directive在内的开源指令数据集上训练的大型语言模型。对于模型推理,Minotaur支持的最大上下文长度为18K个tokens。 Nous-Herme(13B):是通过微调LLaMA(13B)在指令数据集上训练的大型语言模型,该指令数据集包含超过300,000条指令,采样自GPTeacher,CodeAlpaca,GPT-4-LLM ,natural instructions和CamelAI中的生物物理化学子集。响应由GPT-4生成。对于评估,Nous-Herme (13B)在ARC挑战和BoolQ等多个任务上的性能与GPT-3.5-turbo相当。 TÜLU(6.7B):是在混合指令数据集上通过对OPT(6.7B) 进行精细调整而训练的LLM,该数据集包含FLAN V2、CoT、Dolly、Open Assistant-1、GPT4-Alpaca、Code-Alpaca和ShareGPT。经过微调,TÜLU(6.7B)平均达到ChatGPT的83%和GPT4的68%的性能。 YuLan-Chat(13B):是通过微调LLaMA (13B) 在包含25万个中英文指令对的构建双语数据集上训练出来的语言模型。经过微调,YuLan-Chat-13B在英语BBH3K数据集上取得了与最先进的开源模型ChatGLM(6B)相当的结果,并且优于Vicuna(13B)。 MOSS (16B):是一种双语对话语言模型,旨在进行多回合对话,并利用各种插件,通过对对话指令的微调进行训练。经过微调后,MOSS的性能优于骨干模型,并生成更符合人类偏好的响应。 airboros(13B):是在self-instruction数据集上通过微调LLAMA (13B)训练的LLM。经过微调后,airboros在所有基准测试上的性能都明显优于LLAMA (13B),并且与专门针对某些基准测试进行微调的模型取得了高度可比性的结果。 UltraLM (13B):是通过微调LLAMA (13B)训练的LLM。在评估中,UltraLM (13B)优于Dolly (12B),胜率高达98%。此外,它还超越了之前的最佳纪录开源模型和WizardLM的胜率分别为9%和28%。
多模态指令微调
多模态数据集
MUL-TIINSTRUCT是一个多模态指令调优数据集,由62个不同的多模态任务组成,采用统一的序列到序列格式。该数据集涵盖10个大类,其任务来源于21个现有的开源数据集。每个任务都配有5个专家编写的说明。对于现有的任务,作者使用他们可用的开源数据集中的输入/输出对来创建实例。而对于每个新任务,作者通过从现有任务的实例中提取必要的信息或重新表述它们来创建5k到5M个实例。MUL-TIINSTRUCT数据集已经证明了它在增强各种迁移学习技术方面的有效性。
PMC-VQA是一个大型医学视觉问答数据集,由149k图像的227k图像问题对组成,涵盖了各种模式或疾病。该数据集可用于开放式和多项选择任务。生成PMC-VQA数据集的管道包括从PMC-OA数据集中收集图像标题对,使用ChatGPT生成问答对,并手动验证数据集子集的质量。作者通过将视觉信息与大型语言模型对齐,提出了一种基于生成的医学视觉理解模型MedVInT。
AMM是用于2D图像和3D点云理解的综合多模态指令调优数据集。LAMM包含186K语言图像指令响应对和10K语言点云指令响应对。作者从公开可用的数据集中收集图像和点云,并使用GPT-API和自我指导方法根据这些数据集中的原始标签生成指令和响应。LAMM-Dataset通过结合来自Bamboo 数据集的分层知识图标签系统和相应的Wikipedia描述,包括用于常识知识问答的数据对。作者还提出了LAMMBenchmark,它在各种计算机视觉任务上评估现有的多模态语言模型(MLLM)。它包括9个常见图像任务和3个常见点云任务,以及LAMMFramework, LAMMFramework是一个主要的MLM训练框架,用于区分编码器,投影仪和LLM微调块,以避免不同模式的模态冲突。
多模态指令微调模型
InstructPix2Pix(983M) 是一个条件扩散模型,通过对Stable diffusion(983M)在一个构建的多模态数据集上进行微调训练,该数据集包含超过450K个文本编辑指令和编辑前后对应的图像。作者结合了两个大规模预训练模型的能力,一个是语言模型GPT-3,另一个是文本到图像模型Stable Diffusion,以生成训练数据集。GPT-3经过微调,可以根据图像提示生成文本编辑,而稳定扩散用于将生成的文本编辑转换为实际的图像编辑。然后使用潜在扩散目标在生成的数据集上训练InstructPix2Pix。下图显示了生成图像编辑数据集并在该数据集上训练扩散模型的过程。
LLaVA(13B) 是通过将CLIP(400M)的视觉编码器与语言解码器LLaMA(7B)连接而开发的大型多模态模型。LLaVA使用生成的教学视觉语言数据集进行微调,该数据集由158K唯一的语言图像指令跟随样本组成。数据收集过程包括创建对话、详细描述和复杂的推理提示。GPT-4用于将该数据集的图像-文本对转换为适当的指令跟随格式。使用标题和边界框等视觉特征对图像进行编码。与GPT-4相比,LLaVA在合成多模态指令跟踪数据集上的相对得分为85.1%当在Science QA上进行微调时,LLaVA和GPT-4的协同作用达到了92.53%的最新水平。
Video-LLaMA 是一个可以增强大型语言模型的理解能力的多模态框架,视频中的视觉和听觉内容。Video-LLaMA的架构包括两个编码器分支:视觉语言(VL)分支和音频语言(AL)分支,以及一个语言解码器(Vicuna (7B/13B),LLaMA(7B))。VL分支包括一个冷冻预训练图像编码器(BLIP-2的预训练视觉组件,其中包括一个ViT-G/14和一个预训练的Q-former)、一个位置嵌入层、一个视频Q-former和一个线性层。人工智能分支包括一个预训练的音频编码器(ImageBind)和一个音频Q-former。VL分支在具有视频到文本生成任务的Webvid-2M视频标题数据集上进行训练,并对来自MiniGPT-4、LLaVA和VideoChat的指令调优数据进行微调。AL分支在视频/图像指令数据上进行训练,将ImageBind的输出连接到语言解码器。经过微调,VideoLLaMA可以感知和理解视频内容,展示其整合听觉和视觉信息、理解静态图像、识别常识概念和捕捉视频中的时间动态的能力。
InstructBLIP(1.2B) 是一个视觉语言指令调优框架,使用预训练的BLIP-2模型初始化,该模型由图像编码器、LLM和查询转换器(Q-Former)组成。如下图所示,Q-Former从冻结图像编码器的输出嵌入中提取指令感知的视觉特征,并将这些视觉特征作为软提示输入提供给冻结的LLM。作者在各种视觉语言任务上评估了所提出的InstructBLIP模型,包括图像分类、图像字幕、图像问答和视觉推理。他们使用26个公开可用的数据集,将它们分为13个保留数据集和13个保留数据集,用于训练和评估。作者证明了InstructBLIP在广泛的视觉语言任务上实现了最先进的zero-shot性能。与BLIP-2相比,InstructBLIP的平均相对改进率为15.0%,最小的InstructBLIP(4B)在所有六个共享评估数据集上的平均相对改进率为24.8%,优于Flamingo(80B)。
Otter 是通过微调OpenFlamingo (9B)训练的多模态模型,其中语言和视觉编码器被冻结,仅微调感知器重采样模块、交叉注意层和输入/输出嵌入。作者组织了涵盖11个类别的多种多模态任务,并构建了2.8M多模态指令响应对的多模态上下文指令调优数据集MIMIC-IT,该数据集由图像-指令-答案三元组组成,其中指令答案是针对图像定制的。每个数据样本还包括上下文,其中包含一系列图像-指令-答案三元组,这些三元组在上下文上与查询的三元组相关。与OpenFlamingo相比,Otter展示了更准确地遵循用户指令并提供更详细的图像描述的能力。
MultiModal-GPT 能够遵循不同的指令,生成详细的标题,计算特定对象,并解决一般查询。MultiModal-GPT是通过微调OpenFlamingo(9B)在各种创建的具有开放数据集的视觉指令数据上进行训练的,包括VQA、图像字幕、视觉推理、文本OCR和视觉对话。
特定域内指令微调
这一节,将描述不同领域和应用中的指令微调。
对话
InstructDial是一个为对话设计的指令调优框架。它包含从59个对话数据集创建的一致文本到文本格式的48个对话任务的集合。每个任务实例包括任务描述、实例输入、约束、指令和输出。为了确保遵守指令,框架引入了两个元任务:(1)指令选择任务,其中模型选择与给定输入输出对对应的指令;(2)指令二进制任务,如果指令从输入导致给定输出,则模型预测“是”或“否”。两个基本模型T0-3B和BART0 在InstructDial的任务上进行了微调。InstructDial在未见过的对话数据集和任务上取得了令人印象深刻的结果,包括对话评估和意图检测。
意图分类和槽位标签
LINGUIST对指令数据集上的50亿个参数多语言模型AlexaTM 5B进行微调,用于意图分类和槽标记任务。每条指令由五个块组成:(1)生成输出的语言,(2)意图,(3)要包含在输出中的槽类型和值,(4)从槽类型标签到数字的映射,(5)最多10个示例来指示输出的格式。在mATIS++数据集的零采样跨语言设置中,LINGUIST在保持意图分类性能的同时,超越了具有6种语言槽对齐的机器翻译的强基线。
信息提取
InstructUIE是一种基于指令调优的统一信息提取(IE)框架,它将IE任务转换为seq2seq格式,并通过在构建的IT数据集上调优11B FlanT5来解决IE任务。下图显示了InstructUIE的整体架构。它引入了IE指令,这是一个32个不同的信息提取数据集的基准,采用统一的文本到文本格式,带有专家编写的指令。每个任务实例由四个属性描述:任务指令、选项、文本和输出。任务指令包含要提取的信息类型、输出结构格式以及在提取过程中需要遵守的附加约束或规则等信息。选项指的是任务的输出标签约束。文本是指输入的句子。输出是通过转换样本的原始标签(例如:"entity tag: entity span"用于NER)。在监督设置中,InstructUIE的表现与BERT相当,并且在zero-shot设置中优于SATA和GPT3.5。
方面级情感分析
Varia等人(2022)提出了一个统一的指令调整框架,用于基于微调的T5(220M)模型解决方面级的情感分析(ABSA)任务。该框架处理涉及ABSA的四个元素的多因子子任务,即方面术语、方面类别、意见术语和情感。它通过使用为每个任务提供的指令模板转换语料库中的每个句子,将这些子任务视为五个问答(QA)任务的组合。例如,使用的指令模板之一是“"What are the aspect terms in the text: $TEXT?”。该框架在少数几个镜头的学习场景中比目前最先进的情况有了很大的改进(平均为8.29 F1),在完全微调的场景中也保持了可比性。
写作
Zhang等人(2023d)提出了Writing-Alpaca-7B,它在writing instruction数据集上对LLaMa-7B进行微调,以提供书写辅助。提出的指令数据集是基于指令数据的EDITEVAL基准的扩展,删除了更新任务,引入了语法任务。指令方案严格遵循Stanford Alpaca项目中的指令方案,包括一个通用的序言、一个指导任务完成的指令字段、一个提供要编辑的文本的输入字段和一个需要模型填写的响应字段。Writing-Alpaca-7B在所有写作任务上都提高了LLaMa的性能,并且优于其他大型的现成LLM。
CoEdIT在指令数据集上对FLANT5(770M参数、3B参数和11B参数)进行微调,用于文本编辑,以提供书写辅助。指令数据集包括大约82K条<instruction: source, target>对。如下图所示,该模型接受用户指定所需文本特征的指令,例如“"Make the sentence simpler”,并输出编辑后的文本。CoEdIT在几个文本编辑任务上实现了最先进的性能,包括语法错误纠正、文本简化、迭代文本编辑和三个风格编辑任务:正式风格转换、中和、释义。此外,它可以很好地推广到在微调期间没有看到的新的相邻任务。
CoPoet 是一种协作诗歌写作工具,它利用一个大型语言模型(例如T5-3B、T5-11B和T0-3B模型),在多种诗歌写作指令集合上进行训练。指令数据集中的每个样本都包含一个<instruction,poem_line>对。有三种主要类型的指示:延续,词汇限制和修辞技巧。CoPoet由用户指令指导,用户指令指定所需的诗歌属性,例如写一个关于“love”的句子或以“fly”结尾的句子。
医学
Radiology-GPT是一种经过微调的放射学Alpaca-7B模型,该模型在放射学领域知识的广泛数据集上利用指令调整方法。放射报告通常包括两个相应的部分:“Findings”和“Impression”。“Findings”部分包含了放射学图像的详细观察,而“Impression”部分总结了从这些观察中得出的解释。Radiology-GPT为“Findings”文本提供了一个简短的说明:“"Derive the impression from findings in the radiology report”。来自同一报告的“Impression”文本作为目标输出。与一般语言模型(如StableLM、Dolly和LLaMA)相比,Radiology-GPT在放射诊断、研究和交流方面表现出显著的通用性。
ChatDoctor基于微调的LLaMA-7B模型,利用alpaca instruction数据集和HealthCareMagic100k医患对话数据集。并设计了提示模板,用于在医患对话期间检索外部知识数据库,如疾病数据库和维基百科检索,以获得更准确的模型输出。ChatDoctor显著提高了模型理解患者需求并提供明智建议的能力。通过为模型配备从可靠的在线和离线来源进行自我导向的信息检索,其响应的准确性大大提高。
ChatGLM-Med是基于ChatGLM-6B模型在中文医学教学数据集上进行微调的。指令数据集包括医学相关的问题和答案对,使用GPT3.5 API和医学知识图创建。该模型提高了ChatGLM在医学领域的问答性能。
算术
Goat是一种基于指令的微调LLaMA-7B模型,旨在解决算术问题。它通过使用ChatGPT生成数百个指令模板,以自然语言问答的形式表达算术问题,例如“What is 8914/64?”该模型采用了多种技术来增强其对不同问题格式的适应性,例如随机去除算术表达式中数字和符号之间的空格,将“*”替换为“x”或“times”。Goat模型在BIG-bench算法子任务上实现了最先进的性能。
code
WizardCoder 利用StarCoder 15B作为复杂指令微调的基础,将Evol-Instruct方法应用于代码领域。训练数据集是通过在Code Alpaca数据集上迭代应用Evol-Instruct技术生成的,该数据集包括每个样本的以下属性:指令、输入和预期输出。例如,当指令是“Amend the following SQL query to select distinct elements”时,输入是SQL查询,预期输出是生成的答案。WizardCoder在HumanEval和HumanEval+上的表现超过了所有其他开源Code LLMs。
高效的微调技术
高效的微调技术旨在通过多种方式(即基于附加、基于规范和基于重新参数化)优化一小部分参数,使LLM适应下游任务。基于附加的方法引入了原始模型中不存在的额外可训练参数或模块。基于规范的方法指定要调整的某些固有模型参数,同时冻结其他参数。重参数化方法将模型权重转换为更有效的参数形式,以便进行调优。关键假设是模型自适应是低秩的,因此权重可以重新参数化为低秩因子或低维子空间。内在提示调优找到一个低维子空间,该空间由跨不同任务的调优提示共享。
LoRA
Low-Rank Adaptation(LoRA)通过低秩更新实现了LLM的高效自适应。LoRA使用DeepSpeed作为训练框架。LoRA的关键观点是,新任务适应所需LLM权重的实际变化存在于低维子空间中。具体来说,对于预训练的权重矩阵,作者将适应的权重矩阵建模为,其中为低秩更新。参数化为,其中和是更小的可训练矩阵。选择的秩比的维数小得多。作者不是直接训练所有的,而是训练低维和,这间接地在对下游任务重要的方向的低秩子空间中训练。与完全调优相比,这导致可训练参数少得多。对于GPT-3,与完全微调相比,LoRA将可训练参数的数量减少了10,000倍,内存使用减少了3倍。
HINT
HINT结合了指令调优的泛化优势和高效的按需微调,避免了重复处理冗长的指令。HINT的本质在于超网络,它基于自然语言指令和少量示例生成用于LLM自适应的参数高效模块。所采用的超网络将指令和少量示例转换为编码指令,并使用预训练的文本编码器和基于交叉注意的参数生成器生成适配器和前缀参数。然后,将生成的适配器和前缀作为高效调优模块插入backbone。在推理时,超网络只对每个任务执行一次推理以生成适应的模块。这样做的好处是,与常规的微调或输入连接方法不同,HINT可以在不增加计算量的情况下合并长指令和附加的few-shots。
Qlora
QLORA包括最优量化和内存优化,旨在提供高效和有效的LLM微调。QLORA包含4位NormalFloat(NF4)量化,这是针对LLM权值的典型正态分布进行优化的量化方案。通过基于正态分布的分位数进行量化,NF4提供了比标准4位整数或浮点量化更好的性能。为了进一步减少内存,量化常数本身被量化为8位。这第二级量化平均为每个参数额外节省0.37 bits。QLORA利用NVIDIA的统一内存功能,在GPU内存超出时将优化器状态分页到CPU RAM。避免训练期间内存不足。QLORA能够在单个48GB GPU上训练65B参数LLM,与完整的16位微调相比没有退化。QLORA的工作原理是冻结4位量化的基本LLM,然后通过它反向传播成一组16位低秩适配器权重。
LOMO
LOw-Memory Optimization (LOMO) 通过融合梯度计算和更新,在有限的计算资源下实现LLM的全参数微调。其实质是在反向传播过程中将梯度计算和参数更新融合到一个步骤中,从而避免了全梯度张量的存储。LOMO在反向传播中计算完每个参数张量的梯度后,立即对其进行更新。一次存储一个参数的梯度将梯度内存减少到。LOMO采用梯度值裁剪、单独的梯度范数计算通道和动态损失缩放来稳定训练。激活检查点和ZeRO优化方法的集成节省了内存。
Delta-tuning
Delta-tuning 为理论分析提供了优化和最优控制的视角。通过将调优限制到低维流形来执行子空间优化。调整后的参数作为最优控制器,指导模型在下游任务中的行为。
评估、分析及限制
HELM 评估
HELM是对语言模型(LMs)的整体评估,旨在提高语言模型的透明度,更全面地了解语言模型的能力、风险和局限性。具体而言,与其他评价方法不同,HELM认为对语言模型的整体评价应关注以下三个因素:
Broad coverage。 在开发过程中,语言模型可以适应各种NLP任务(如序列标记和问题回答),因此,语言模型的评估需要在广泛的场景中进行。为了涵盖所有可能的场景,HELM提出了一种自上而下的分类法,该分类法首先将主要NLP会议(ACL2022)中的所有现有任务汇编到一个任务空间中,并将每个任务划分为场景(例如语言)和度量(例如准确性)的形式。然后,当面对特定任务时,分类法将在任务空间中选择一个或多个场景和指标来覆盖它。HELM通过分析每个任务的结构,明确了评估内容(任务场景和指标),将语言模型的场景覆盖率从17.9%提高到96.0%。 Multi-metric measurment。 HELM提出了多度量方法。HELM涵盖了16个不同的场景和7个指标。为了保证多尺度密集测量的结果,HELM测量了112种可能的核心情景中的98种(87.5%)。 Standardization。。HELM对30个知名语言模型进行了基准测试,包括UL2、GPT-3和GPT-NeoX等。有趣的是,HELM指出,T5和AnthropicLMv4-s3等LM在最初的工作中并没有直接进行比较,而GPT-3和YaLM等LLM在多次评估后仍然与其相应的报告存在差异。
低资源指令微调
Gupta等人(2023)[1]试图估计IT模型在各种任务上匹配SOTA监督模型所需的最小下游训练数据。作者在单任务学习(STL)和多任务学习(MTL)设置下,对来自超自然指令(SuperNI)的119个任务进行了实验。结果表明,在STL设置中,只有25%的下游训练数据的IT模型在这些任务上优于SOTA模型,而在MTL设置中,只有6%的下游训练数据可以使IT模型达到SOTA性能。这表明,指令调优可以有效地帮助模型在有限的数据下快速学习任务。但由于资源限制,Gupta等(2023)并未对T5-11B等LLM进行实验。因此,为了更全面地理解IT模型,有必要使用更大的语言模型和数据集进行进一步的研究。
更小的指令数据集
IT需要大量的专门指导数据进行培训。Zhou等人(2023)[2]假设预训练的LLM只需要学习与用户交互的风格或格式,并提出了LIMA,该LIMA通过仅在1,000个精心挑选的训练示例上对LLM进行微调来实现强大的性能。具体来说,LIMA首先用高质量的提示和响应手动策划了1,000个演示。然后使用1,000个演示来微调预训练的65b参数LLaMa。相比之下,在超过300个具有挑战性的任务中,LIMA的表现优于GPT-davinci003,GPT-davinci003是通过人类反馈调优在5200个示例上进行微调的。此外,LIMA只需要一半的演示量,就可以获得与GPT-4、Claude和Bard相当的结果。最重要的是,LIMA证明了只需要一些精心设计的指令进行微调,LLMs的丰富知识和能力就可以暴露给用户。
评价指令微调数据集
IT模型的性能高度依赖于IT数据集。然而,缺乏从开放式和主观方面对这些IT数据集的评估。通过在各种开放的IT数据集上微调LLaMa模型来执行数据集评估,并通过自动和人工评估来测量不同的微调模型。在IT数据集的组合上训练另一个模型。在所有任务中不存在单一的最佳IT数据集,而通过手动组合数据集可以获得最佳的整体性能。尽管IT可以给所有规模的LLM带来很大的收益,但较小的模型和基础质量较高的模型从IT中获益最多。
IT只是学习模式复制吗?
创建简化的任务定义,删除所有语义组件,只留下输出信息,采用包含不正确输入输出映射的虚假示例,可以解决模型通过指令调优获得的具体知识缺乏明确性的问题。实验表明,在这些简化任务定义或虚假示例上训练的模型可以达到与在原始指令和示例上训练的模型相当的性能。在当前IT模型中观察到的显着性能改进可能归因于它们捕获表层模式的能力,例如学习输出格式并进行猜测,而不是理解和学习特定任务。
Proprietary LLMs Imitation
LLM模仿是一种从更强大的模型收集输出的方法,并使用这些输出对开源LLM进行微调。通过这种方式,开源LLM可以获得与任何专有模型竞争的能力。在支持数据集的任务上,模仿模型比以前好得多,其输出看起来与ChatGPT相似。而在没有模拟数据集的任务中,模拟模型的准确率没有提高甚至下降。因此,正是模仿模型善于模仿ChatGPT的风格(如流利、自信、结构良好)的现象,使研究人员对模仿模型的一般能力产生了错觉。或许与其模仿专有模型,不如专注于提高基础模型和指令示例的质量。
进NLP群—>加入NLP交流群
参考资料
Himanshu Gupta et al.2023.Instruction tuned models are quick learners.: https://arxiv.org/abs/2306.05539
[2]Chunting Zhou et al.2023.Lima: Less is more for alignment.: https://arxiv.org/abs/2305.11206
微信扫码关注该文公众号作者