发表时间: 2023-10 · arXiv:2310.05915
原文: https://arxiv.org/abs/2310.05915
作者/机构: Baian Chen (System2 Research), Chang Shu (University of Cambridge), Ehsan Shareghi (Monash University), Nigel Collier (University of Cambridge), Karthik Narasimhan (PLI, Princeton University), Shunyu Yao (PLI, Princeton University)
一句话结论 本文提出了一种名为 FireAct 的语言模型微调方法,通过混合多种提示策略生成的代理轨迹对较小模型进行微调,显著提升了语言代理在问答任务中的性能、推理效率和鲁棒性。
要解决什么问题 现有的语言代理主要依赖对大型语言模型进行少样本提示(few-shot prompting)来执行任务,这种做法存在几个致命卡点。首先,少样本提示在上下文中提供的学习支持极为有限,导致代理在面对复杂任务或干扰信息时性能和鲁棒性不佳。其次,为了弥补提示方法的不足,高级代理严重依赖像 GPT-4 这样参数量巨大的闭源商业模型,直接带来了极高的单次推理成本和高昂的系统延迟。最后,过度依赖闭源大模型使得代理系统的可控性和可复现性难以保障。虽然对较小规模模型进行微调是降低延迟、摆脱大模型依赖的有效路径,但此前语言代理领域缺乏系统性的微调研究。如何构建高质量微调数据以覆盖代理所需的多样化推理和动作能力,并证明微调确实优于提示方法,是亟待解决的空白。
怎么做的 核心思路是通过“蒸馏”强模型的代理轨迹,利用多样化的任务和提示策略构建微调数据,将较小规模的语言模型训练成高效的独立代理。作者提出的 FireAct 方法由数据生成与统一格式微调两个环节构成。在数据生成阶段,FireAct 利用强大的大型语言模型(如 GPT-4)作为教师模型,针对不同数据集生成任务解决轨迹。为保证数据多样性,生成过程混合了三种提示方法:第一种是 ReAct,由多个“思考-行动-观察”循环组成,模型生成自由形式的思考来规划行动,并根据调用外部工具返回的观察结果进行下一步决策;第二种是思维链(CoT),用于生成中间推理步骤以解决无需外部工具的简单问题;第三种是 Reflexion,在 ReAct 基础上加入反馈和自我反思机制,允许模型在长轨迹中调整失败策略。在微调阶段,FireAct 将这三种方法生成的成功轨迹全部统一转换为 ReAct 的数据格式,并以此对较小模型进行微调。这种设计不仅让模型内化了调用工具和多步推理的能力,还赋予了模型隐式的方法选择机制。推理时,微调后的模型无需输入冗长的少样本提示,就能根据问题复杂程度,自动决定是采用 CoT 的单步直达、标准的 ReAct 搜索,还是触发 Reflexion 进行策略调整,从而彻底绕开少样本提示带来的上下文长度限制。
效果如何 实验在 HotpotQA、Bamboogle、StrategyQA 和 MMLU 四个问答数据集上展开,代理统一配备基于 SerpAPI 构建的谷歌搜索工具。训练数据由 GPT-4 生成,微调基础模型包括 175B 的 GPT-3.5 以及开源的 Llama-2(7B、13B)和 CodeLlama(7B、13B、34B)系列,主要采用 LoRA 方法在 A100 等 GPU 上微调。对比基线主要是依赖少样本提示的同尺寸或更大尺寸模型(代表传统的提示驱动路线,如提示式 GPT-3.5 和提示式 Llama-2)。量化结果显示微调带来显著提升:在 HotpotQA 任务上,仅用 500 条轨迹微调,Llama-2-7B 的精确匹配率从 14.8% 飙升至 26.2%(提升 77%),微调后的 Llama-2-13B 甚至超越了提示路线的更强商业模型 GPT-3.5。效率方面,微调版 GPT-3.5 的单次推理时间从 9.0 秒缩减至 2.7 秒,降低 70%。鲁棒性测试中,面对返回空值的干扰性工具输出,提示式基线性能暴跌 33.8%,而微调模型仅下降 14.2%。此外,多任务联合微调证明增加其他任务数据不损害原有任务表现。作者也坦承了局限与代价:全量参数微调性能优于 LoRA 但计算资源消耗巨大;微调模型向任务形式差异巨大的新任务泛化效果不佳;在相对简单的 MMLU 任务上,所有复杂代理机制表现反不如最简单的直接输入输出提示;且当前研究仅局限于问答场景和单一搜索工具。
本文探讨了通过微调语言模型(LMs)来构建语言代理这一被忽视的研究方向。
核心问题:目前大多数语言代理依赖于对现有语言模型进行少样本提示(few-shot prompting),这种方式学习支持有限,导致代理在性能和鲁棒性上表现不佳。特别是高级代理严重依赖于像GPT-4这样的大型模型,这带来了高成本、高延迟以及可控性和可复现性等问题。尽管微调是解决这些问题的有效方案,但在语言代理领域的研究却非常有限。
研究目标:系统性地研究语言代理的微调,旨在全面展示微调相比于提示方法的各种优势,并为从业者提供关于微调的实验设计、见解和开放性问题。
创新点:
我们的工作主要基于ReAct(Yao等人,2022b)【索引87,React: Synergizing reasoning and acting in language models. 2022. arXiv】,这是一种流行的语言代理方法。一个ReAct任务解决轨迹(如图5所示)由多个“思考-行动-观察”循环组成,其中语言模型生成自由形式的“思考”用于多种目的(例如,从观察中提取信息、提出和调整行动计划、跟踪任务进展),以及结构化的“行动”来与环境(工具)互动并接收“观察”反馈。ReAct的表现优于仅推理或仅行动的基线,因为推理可以指导行动,而行动可以通过新信息支持推理。因此,ReAct格式已成为许多后续语言代理的基础,例如Reflexion(Shinn等人,2023)【索引60,Reflexion: Language agents with verbal reinforcement learning. 2023. arXiv】、SwiftSage(Lin等人,2023)【索引31,Swiftsage: A generative agent with fast and slow thinking for complex interactive tasks. 2023. arXiv】和AutoGPT(Richards,2023)【索引53,AutoGPT. 2023. https://github.com/Significant-Gravitas/AutoGPT】。
Yao等人(2022b)【索引87,React: Synergizing reasoning and acting in language models. 2022. arXiv】的研究中也展示了一个初步的在HotpotQA(Yang等人,2018)【索引85,HotpotQA: A dataset for diverse, explainable multi-hop question answering. 2018. EMNLP】上进行的PaLM(Chowdhery等人,2022)【索引6,Palm: Scaling language modeling with pathways. 2022. arXiv】微调实验,其中一个微调后的PaLM-62B模型胜过了一个提示驱动的PaLM-540B模型。但是,这一发现是否能推广到其他类型的语言模型、提示方法或任务上,仍然是未知的。关于语言代理微调的后续研究一直很稀少(参见第2节)。
因此,我们提出了FireAct,一种针对语言代理的新颖微调方法。如图2(a)所示,FireAct同样利用对强语言模型进行少样本提示来生成多样化的ReAct轨迹,以微调一个较小的语言模型(即蒸馏(Hinton等人,2015)【索引19,Distilling the knowledge in a neural network. 2015. arXiv】)。但与Yao等人(2022b)【索引87,React: Synergizing reasoning and acting in language models. 2022. arXiv】不同,FireAct通过混合多种训练任务和提示方法来明确促进数据的多样性。这里我们考虑了另外两种与ReAct格式兼容的方法:
在推理过程中(图2(b)),FireAct代理减轻了对少样本提示的需求,这使得推理更加高效和便捷。它还可以根据任务的复杂性隐式地选择合适的方法,并由于拥有更广泛和更多样化的学习支持,比提示方法表现出更强的泛化能力和鲁棒性。
本文在成熟的问答(QA)任务上进行训练和测试。 这些任务遵循了先前工作(Wei等人,2022b【索引84,Chain of thought prompting elicits reasoning in large language models. 2022. arXiv】;Yao等人,2022b【索引87,React: Synergizing reasoning and acting in language models. 2022. arXiv】;Shinn等人,2023【索引60,Reflexion: Language agents with verbal reinforcement learning. 2023. arXiv】)的选择,因为它们拥有丰富且高质量的训练数据,并且评估方法(答案精确匹配)简单可靠。我们使用了四个数据集:
- HotpotQA (Yang等人,2018)【索引85,HotpotQA: A dataset for diverse, explainable multi-hop question answering. 2018. EMNLP】是一个具有挑战性的问答数据集,需要多步推理和知识检索。答案通常是一个简短的实体或是/否。我们使用2000个随机训练问题来策划微调数据,并使用500个随机开发集问题进行评估。
- Bamboogle (Press等人,2022)【索引48,Measuring and narrowing the compositionality gap in language models. 2022. arXiv】是一个包含125个多跳问题的测试集,其格式与HotpotQA相似,但经过精心设计,以避免通过谷歌搜索直接解决问题。
- StrategyQA (Geva等人,2021)【索引13,Did aristotle use a laptop? A question answering benchmark with implicit reasoning strategies. 2021. TACL】是一个是/否问答数据集,需要隐式推理步骤。
- MMLU (Hendrycks等人,2021)【索引18,Measuring massive multitask language understanding. 2021. ICLR】涵盖了57个多项选择问答任务,涉及初等数学、历史和计算机科学等多个领域。
我们使用SerpAPI构建了一个谷歌搜索工具。 遵循Press等人(2022)【索引48,Measuring and narrowing the compositionality gap in language models. 2022. arXiv】的做法,我们使用SerpAPI构建了一个谷歌搜索工具,该工具会返回“答案框”、“答案摘要”、“高亮词”或“首个结果摘要”中第一个存在的内容。这确保了响应简短且相关。我们发现,这样一个简单的工具足以满足跨任务的基本问答需求,并增加了我们微调模型的易用性和通用性。
我们研究了三类语言模型。
- OpenAI GPT。我们使用GPT-4(OpenAI,2023b)【索引43,Gpt-4 technical report. 2023】提示生成所有微调数据,并使用GPT-3.5(OpenAI,2023a)【索引42,Gpt-3.5 turbo fine-tuning and api updates. 2023】进行微调和提示。我们在2023年7月至9月期间以ChatCompletion模式使用了这两个模型。
- Llama-2 (Touvron等人,2023b)【索引78,Llama 2: Open foundation and finetuned chat models. 2023. arXiv】模型,参数量为7B和13B,使用“chat”模式。
- CodeLlama (Roziere等人,2023)【索引55,Code llama: Open foundation models for code. 2023. arXiv】模型,参数量为7B、13B和34B,使用“instruct”模式,这有助于进一步理解模型规模扩展效应以及代码微调对代理任务的重要性。
我们主要使用低秩自适应(LoRA)进行微调实验。 我们使用LoRA(Hu等人,2022)【索引21,Lora: Low-rank adaptation of large language models. 2022. ICLR】进行大多数微调实验,但为了进行某些比较,也使用了全模型微调。
我们将实验分为三个复杂性递增的部分。 考虑到语言代理微调涉及的多种因素,我们将实验分为三个部分:
- 使用单一提示方法在单一任务上进行微调(第5节);
- 使用多种方法在单一任务上进行微调(第6节);
- 使用多种方法在多任务上进行微调(第7节)。
数据集
模型架构
硬件配置
软件配置
本节实验在HotpotQA任务上,仅使用ReAct方法生成的轨迹进行微调,旨在验证微调的基本优势。
本节实验在HotpotQA任务上,混合使用ReAct、CoT和Reflexion三种方法的轨迹进行微调。
ReAct+CoT 对GPT-3.5和Llama-2模型有益,但对CodeLlama模型有害。ReAct+CoT+Reflexion 对CodeLlama-34B效果最好。本节实验使用来自HotpotQA、StrategyQA和MMLU三个数据集的数据对GPT-3.5进行微调。
本文系统性地研究了语言代理的微调,并通过FireAct方法展示了其多方面的优势。
微调与提示的选择:研究表明,提示(prompting)和微调(fine-tuning)分别适用于不同的场景。提示更适合于探索阶段,如开发新代理或解决新任务,因为它灵活便捷。而当任务确定、方法明确且数据充足时,微调则更适合于应用部署阶段,因为它能带来更优的性能、更强的泛化与鲁棒性,以及更低成本和更高效率的推理。
基础模型的选择:GPT-3.5在各种设置下 consistently 优于其他开源模型,且样本效率高。然而,实验也证明,通过提供足够且类型合适的微调数据,开源的Llama模型有潜力追赶上GPT-3.5的性能,同时具备更好的可控性和可复现性。从业者应根据需求权衡这两类模型的利弊。
代理的灵活性:FireAct的多方法微调有助于提升代理的灵活性和鲁棒性,使其能根据任务难度自适应地选择是否使用工具或进行反思。然而,如何让代理准确地判断“何时”寻求帮助(工具使用)和反馈(反思),仍然是一个有待解决的开放性问题。
局限与未来方向:
附录提供了主要实验结果的标准误差。 表6、表7和表8分别对应正文中的表1、表2和表5,补充了精确匹配(EM)分数的标准误差(σM),以增强结果的统计可靠性。
本节探讨了模型性能的上下限,并分析了数据混合的效果。 表10显示,性能的下限(随机选择代理方法)为32.4 EM,而上限(“神谕”式地为每个问题选择最佳方法)为52.0 EM。所有数据混合策略的性能都落在此区间内,证明了数据混合的有效性。特别是,加入CoT方法能带来显著的性能提升,尽管CoT方法单独使用时表现相对较差(28.0 EM)。这表明混合数据对微调过程有积极贡献。
数据混合改变了模型的行为分布。 图6的图表显示,混合数据会使模型的轮次分布(turn distribution)趋向于训练数据的分布。例如,对比ReAct+CoT(平均2.7轮,41.0 EM)和ReAct+Reflexion(平均3.8轮,38.8 EM),加入CoT(通常是单轮)会显著减少模型的平均交互轮次。
全量微调性能更优但成本高昂。 表11展示了Llama-2-7B在单任务(500条HotpotQA轨迹)和多任务(所有轨迹混合)设置下,分别使用LoRA和全量权重微调的EM分数。结果表明,全量微调在两种设置下都优于LoRA,但其计算资源需求也大得多。
使用原生分词器对CodeLlama有轻微提升。 表12比较了在CodeLlama模型上使用Llama分词器和CodeLlama原生分词器的性能差异。结果显示,对于CodeLlama-7B和CodeLlama-13B,使用原生分词器在HotpotQA任务上能带来轻微的性能提升。
掩蔽观察对学习世界模型的效果不一致。 表13展示了在训练中掩蔽观察(masking observations)对CodeLlama-7B和-13B模型性能的影响。实验旨在探究模型是否能学习世界建模。结果显示,对于CodeLlama-7B,掩蔽观察通常带来轻微性能提升;但对CodeLlama-13B,效果不一致,有时提升有时下降。这表明在当前设置下,这种方法对性能没有稳定的积极影响。
更多的训练轮数不一定带来持续的性能提升。 图7展示了GPT-3.5模型在HotpotQA数据集上随微调轮数增加的性能变化。从1轮增加到4轮,EM和F1分数普遍提高。但超过4轮后,尽管EM分数仍有微小增长,F1分数却趋于平稳甚至下降,表明进一步微调的收益递减。
微调结合少样本提示能增强泛化能力。 表14展示了在HotpotQA轨迹上微调的Llama-2-7B在其他任务上的表现。结果表明,微调与少样本提示相结合,能显著提升在相似任务Bamboogle上的性能,略微提升在MMLU上的性能,但在任务形式差异较大的StrategyQA上性能有所下降。
B.1 基础模型。 本文探索了三个代表性LLM家族的模型:(1)GPT家族,包括用于数据生成的GPT-4(OpenAI, 2023b)【索引43,Gpt-4 technical report. 2023】和用于微调的GPT-3.5,后者是基于GPT-3(Brown等人,2020)【索引4,Language models are few-shot learners. 2020. NeurIPS】的175B参数指令调优和RLHF版本。(2)Llama-2(Touvron等人,2023b)【索引78,Llama 2: Open foundation and finetuned chat models. 2023. arXiv】,这是一个参数从7B到70B的开源模型系列。(3)CodeLlama(Roziere等人,2023)【索引55,Code llama: Open foundation models for code. 2023. arXiv】,这是一个从Llama-2派生、专为代码生成设计的模型家族,参数从7B到34B。
B.2 单方法单任务设置。 我们从HotpotQA训练集中抽取样本,让GPT-4(OpenAI, 2023b)【索引43,Gpt-4 technical report. 2023】通过少样本示例生成了500条ReAct轨迹,并进行了人工验证,用于代理微调。我们还从7,405个开发集样本中选出500个用于评估,使用精确匹配(EM)和F1分数作为指标。GPT-3.5使用了OpenAI微调API对GPT-3.5-Turbo-0613进行微调,而Llama-2和CodeLlama则在A100-80GB、RTX 6000 Ada、RTX 4090和RTX 3090 GPU上,使用带int8量化的低秩自适应(LoRA)(Hu等人,2022)【索引21,Lora: Low-rank adaptation of large language models. 2022. ICLR】对Llama-2-Chat-HF和CodeLlama-Instruct-HF进行微调。GPT-3.5微调了3个epoch,Llama-2和CodeLlama家族微调了30个epoch。如果ReAct算法在11步内未完成,则强制终止。学习率为3e-4,训练批次大小为16。Llama和Codellama模型的评估温度为0.6,GPT-3.5的温度为0。模型评估也使用了int8量化。
B.3 Llama和CodeLlama的计算。 表15展示了用于微调和推理Llama-2及CodeLlama模型的计算资源。
附录C部分提供了用于生成微调数据的具体提示(Prompts)示例,包括HotpotQA、MMLU和StrategyQA任务的ReAct和CoT提示,以确保实验的可复现性。