【导读】:本文是LLM模型微调第七篇,分享Meta于20240807的开源三篇文章:Methods for adapting large language models,To fine-tune or not to fine-tune,How to fine-tune: Focus on effective datasets。
Methods for adapting large language models
预训练-Pre-training
预训练是使用数万亿个数据标记从头开始训练LLM的过程。该模型使用自监督算法进行训练。
最常见的训练方式是通过自回归预测下一个token[predicting the next token](也称为因果语言建模)。
预训练通常需要数千小时的GPU计算时间,分布在多个GPU上。预训练得到的模型称为基础模型。
继续预训练-Continued pre-training
继续预训练(也称为第二阶段预训练)涉及使用新的、未见过的领域数据(domain data)进一步训练基础模型。使用的是与初始预训练相同的自监督算法。所有模型权重通常都参与其中,原始数据的一部分与新数据混合使用。
微调-Fine-tuning
微调是使用标注数据集(annotated dataset)以监督方式或基于强化学习的技术对预训练语言模型进行适应的过程。与预训练相比,主要有两个区别:
1.在标注数据集上的监督训练——使用包含正确标签/答案/偏好的数据集,而不是自监督训练。
2.需要的标记较少(从数千或数百万个标记),主要目的是增强如指令跟随、人类对齐、任务性能等能力。
理解当前微调领域的两个维度是:改变的参数百分比 和 微调后新增的能力。
#改变的参数百分比
根据改变的参数数量,算法分为两类:
1.完全微调(Full Fine-Tuning):更改模型的所有参数,并包括对像XLMR和BERT(100 – 300M参数)这样的小型模型的传统微调,以及对像Llama 2、GPT-3(1B+参数)这样的大型模型的微调。
2.参数高效微调(PEFT):与完全微调不同,PEFT算法 只微调少量额外参数 或更新预训练参数的一个子集,通常为总参数的1 – 6%。
#对基础模型增加的能力
微调的目的是为预训练模型添加新的能力,例如:指令跟随、人类对齐等。Chat-tuned Llama 2 是一个带有指令跟随和对齐能力的微调模型的例子。
检索增强生成-Retrieval augmented generation(RAG)
企业还可以通过添加特定领域的知识库(domain-specific knowledge base)来适应LLM。RAG本质上是“搜索驱动的LLM文本生成”。
RAG使用动态提示上下文,该上下文通过用户问题检索,并注入到LLM提示中,以引导模型使用检索到的内容,而不是其预训练的知识。Chat LangChain 是一个流行的基于RAG的Q/A聊天机器人,运行在LangChain文档上。
上下文学习-In-context learning(ICL)
使用ICL,通过在提示中放置原型示例来适应LLM。“通过示例演示”已在多个研究中显示出有效性。
示例可以包含不同种类的信息:
仅输入和输出文本—即少样本学习 推理痕迹:添加中间推理步骤;参见链式思维(Chain-of-Thought,CoT)提示 计划和反思痕迹:添加教会LLM计划和反思其问题解决策略的信息;参见ReACT还有多种策略来修改提示,Prompt Engineering Guide包含了全面的概述。
需要考虑的因素:所需模型能力、训练成本、推理成本、数据集类型等。
❌ 预训练
预训练是LLM训练的重要部分,使用token prediction variant 作为损失函数。其自监督特性允许在大量数据上进行训练。例如,Llama 2是在2万亿个标记上进行训练的。这需要巨大的计算基础设施:Llama 2 70B耗费了172万 GPU小时。因此,对于资源有限的团队,不推荐将预训练作为LLM适应的可行方法。
由于预训练计算成本高,因此更新已经预训练的模型权重可能是将LLM适应于特定任务的有效方法。任何更新预训练模型权重的方法都容易受到所谓的灾难性遗忘现象(catastrophic forgetting)的影响,即模型遗忘之前学到的技能和知识。例如,一项研究显示,在医学领域进行微调的模型在执行指令跟随和常见QA任务时性能下降。其他研究也表明,通过预训练获得的一般知识可能会在后续训练中被遗忘。例如,这项研究提供了一些关于LLM在领域知识、推理和阅读理解方面的知识遗忘的证据。
❌ 继续预训练
考虑到灾难性遗忘,最近的发展表明,继续预训练(CPT)可以在比预训练所需计算成本低得多的情况下进一步提升性能。CPT对那些需要LLM获得新转化技能的任务可能是有益的。例如,报告显示继续预训练在增加多语言能力方面取得了成功。
但CPT需要大量的数据和计算资源。例如,Pythia套件经历了第二阶段的预训练,产生了FinPythia-6.9B。这个专门针对金融数据设计的模型,在使用包含240亿个标记的数据集进行CPT的18天内完成。
此外,CPT也容易受到灾难性遗忘的影响。因此,对于资源有限的团队,不推荐继续预训练作为LLM适应的可行方法。
总之,使用自监督算法和未标注数据集进行LLM适应,如预训练和继续预训练,是资源和成本密集型的,不推荐将CPT作为可行的方法。
✅ 全参微调和参数高效微调(PEFT)
与使用未标注数据集的预训练相比,使用较小的标注数据集进行微调是一种更具成本效益的方法。通过将预训练模型适应于特定任务,微调模型在各种应用和特定领域(如法律、医学或金融)中显示出达到最先进的结果。
微调,特别是参数高效微调(PEFT),只需要预训练/继续预训练所需计算资源的一小部分。因此,PEFT是资源有限的团队适应LLM的可行方法。
✅ 检索增强生成(RAG)
如果您的应用需要从动态知识库中提取信息(例如QA机器人),RAG可能是很好的解决方案。
基于RAG的系统的复杂性主要在于检索引擎的实现。此类系统的推理成本可能更高,因为提示包括检索的文档,大多数提供商使用按标记计费的模式。
✅ 上下文学习(ICL)
ICL不需要额外的训练数据或计算资源,是适配LLM最具成本效益的方式。
然而,与RAG类似,随着推理时处理更多的token,推理的成本和延迟可能会增加。
https://ai.meta.com/blog/how-to-fine-tune-llms-peft-dataset-curation/
To fine-tune or not to fine-tune
在LLMs兴起前,微调通常用于较小规模的模型(100M – 300M参数)。最先进的领域应用是通过监督微调(SFT)构建的,即进一步使用标注数据对预训练模型进行训练,以适应特定领域和下游任务。
然而,随着大规模模型(>1B参数)的出现,微调的问题变得更加复杂。最重要的是,大型模型需要更大的资源和商业硬件进行微调。除了计算资源,完全参数微调的常见陷阱是灾难性遗忘。PEFT技术旨在通过训练少量参数来解决这些问题。
微调可能带来益处的典型场景
以下场景是可以受益于微调的用例:
1.语气、风格和格式定制: 使用案例可能希望LLM能够模仿特定的角色或服务于特定的受众。通过使用自定义数据集对LLM进行微调,可以使聊天机器人的响应更加符合受众的特定要求或预期体验。还可能希望以特定的方式结构化输出—例如,JSON、YAML或Markdown格式的输出。
2.提高准确性和处理边缘情况: 微调可以用于纠正那些难以通过提示工程和上下文学习修正的幻觉或错误。它还可以增强模型执行新技能或任务的能力,这些能力很难在提示中表达。这个过程可以帮助纠正模型在复杂提示下的失败,提高模型生成期望输出的可靠性。提供两个示例:
通常,对于较小的初始准确度(<50%),微调在几百个示例的情况下可以带来显著提升。Phi-2在金融数据情感分析上的准确性从34%提高到85%。ChatGPT在Reddit评论情感分析上的准确性提高了25个百分点(从48%提高到73%),仅使用了100个示例。
3.解决代表性不足的领域: 尽管LLM在大量的通用数据上进行训练,但它们可能并不总是擅长每个特定领域的微妙术语、术语或特性。对于法律、医疗或金融等多样化领域,微调已被证明有助于提高下游任务的准确性。提供两个示例:正如这篇文章指出的,患者的医疗历史包含高度敏感的数据,这些数据通常不会在公共领域中找到。因此,用于总结医疗历史的LLM系统需要进行微调。对于如印度语言等代表性不足的语言,使用PEFT技术的微调帮助提高了这些语言中所有任务的表现。
4.成本降低: 微调可以将大型模型如Llama 2 70B/GPT-4的技能提炼到较小的模型如Llama 2 7B中,从而降低成本和延迟,同时不影响质量。此外,微调减少了对冗长或特定提示(如在提示工程中使用)的需求,从而节省了token并进一步降低了成本。例如,这篇文章展示了如何通过提炼更昂贵的GPT-4模型来微调GPT-3.5,这样可以节省成本。
5.新任务/能力: 经常可以通过微调实现新的能力。提供了三个示例:微调LLM以更好地利用来自给定检索器的上下文或完全忽略它,微调LLM评估其他LLM的能力,如基础性、合规性或有用性,微调LLM以增加上下文窗口。
微调 vs. 通过上下文(少样本)学习
上下文学习(ICL)是一种有效提升基于LLM系统性能的方法。由于其简单性,在进行任何微调活动之前,应该优先尝试ICL。此外,ICL实验有助于评估微调是否能改善下游任务的性能。在使用ICL时,一些常见的考虑因素包括:
1.随着需要展示的示例数量增加,推理成本和延迟也会增加。
2.示例数量增加时,LLM可能会忽略某些示例。可能需要构建RAG系统,根据输入找到最相关的示例。
3.LLM可能会重复给定示例中的知识。这种情况在微调时也可能发生。
微调 vs. RAG
通常的共识是,当LLM的基础性能不够强时,可能“从RAG开始,评估其性能,如果发现效果不佳,再转向微调”,或者认为“RAG可能在某些方面优于微调”(来源)。然而,认为这种观点过于简单,因为在某些情况下,RAG不仅不是微调的替代方案,反而是微调的补充方法。
根据问题的特性,可能需要尝试其中一种或两种方法。采用本文的框架,以下是一些问题,您可以通过这些问题来判断微调或RAG(或两者兼而有之)是否适合您的问题:
您的应用是否需要外部知识?微调通常无法有效地注入新知识。 您的应用是否需要自定义语气/行为/词汇或风格?对于这些类型的要求,微调通常是正确的方法。 您的应用对幻觉(虚假生成内容)有多大的容忍度?在需要抑制错误和虚假内容的应用中,RAG系统提供了内置机制来最小化幻觉的产生。 可用的标注训练数据有多少? 数据的静态/动态性如何?如果问题需要访问动态的数据集,微调可能不适合,因为LLM的知识可能很快会变得过时。 LLM应用需要多大程度的透明度/可解释性?RAG本质上可以提供参考,对于解释LLM输出非常有用。 成本和复杂性:团队是否具备构建搜索系统或先前微调的经验? 应用中的任务多样性如何?**在大多数情况下,微调和RAG的混合解决方案将产生最佳结果—此时的问题在于同时进行两者的成本、时间和额外独立效益。**可参考上述问题来指导决策,以确定是否需要RAG和/或微调,并通过内部实验来了解通过错误分析可以获得的指标提升。最后,进行微调探索确实需要健全的数据收集和数据改进策略,建议将其作为开始微调的前置步骤。
https://ai.meta.com/blog/when-to-fine-tune-llms-vs-other-techniques/
How to fine-tune: Focus on effective datasets
无论是完全微调还是PEFT技术,在学术研究和实际应用中,应用于新领域时都展示了提升下游任务性能的能力。选择其中一种方法通常取决于可用的计算资源(GPU时间和GPU内存)、非目标下游任务的性能(即学习-遗忘权衡)以及人工标注的成本。
完全微调更容易遭遇两个问题:模型崩溃和灾难性遗忘。 模型崩溃(model collapse )是指模型的输出趋于有限的一组结果,原始内容分布的尾部消失。灾难性遗忘(catastrophic forgetting),是指会导致模型丧失某些能力。尽管需要更多研究,但一些早期的实证研究表明,与PEFT技术相比,完全微调技术更容易遇到上述问题。
PEFT本质上可以作为微调的自然正则化手段。PEFT通常训练下游模型所需的计算成本较低,对于数据集规模有限的资源受限场景,更具可操作性。在某些情况下,完全微调在特定任务上的表现更优,但通常伴随着遗忘原模型某些能力的代价。本文在比较LoRA与完全微调时深入探讨了在特定下游任务性能和其他任务性能之间的“学习-遗忘”权衡。
在资源受限的情况下,与完全微调相比,PEFT技术通常能提供更高的性能提升/成本比。如果下游任务的性能至关重要,完全微调将是最有效的选择。在任一场景中,关键在于创建一个高质量的数据集,并牢记以下重要原则。
在各种文献的微调实验表明,数据集对于微调效果至关重要。数据策划不仅仅是“更高质量和更多样本”,还可以通过智能化的数据集收集,来提高在资源受限的微调实验中的性能。
数据质量/数量-Data quality/quantity
1.数据质量至关重要: 看到的一个普遍趋势是,质量比数量更重要—即与大规模的低质量数据集相比,小规模的高质量数据集更具价值。高质量的关键原则包括一致的标注、无错误、无错误标记的数据、无噪声的输入/输出,以及与总体人群相比具有代表性的分布。在微调时,LIMA数据集中的几千个精选样本比Alpaca数据集中50,000个机器生成的样本表现更好。OpenAI的微调文档建议,即使是50到100个样本的数据集也可能产生显著的差异。
2.更难的语言任务需要更多数据: 相对较难的任务,如文本生成和摘要,较难进行微调,需要比分类和实体提取等较容易的任务更多的数据。“更难”可以有多种含义:输出中包含更多的标记、需要更高阶的人类能力、或存在多个正确答案。
3.有效的高质量数据收集: 由于数据收集成本高昂,建议使用以下策略来提高样本效率并降低成本:观察失败模式:观察之前机器学习能力失败的示例,并添加针对这些失败模式的示例。人为参与:这是扩大数据标注规模的较为廉价的方式。使用LLM自动生成基本响应,然后由人工标注者在较短时间内进行标注。
数据多样性-Data diversity
简单来说,如果过度训练模型的某一特定类型的响应,即使在该响应并非最合适答案时,模型也会倾向于给出该响应。这里的经验法则是尽可能确保训练数据反映模型在现实世界中的行为。
1.重复: 在微调和预训练中,重复被发现是导致模型退化的原因。通过去重来实现多样性,往往能改善性能指标。
2.输入的多样性: 通过对输入进行改写以增加多样性。在微调SQLCoder2时,团队重新措辞了SQL查询的伴随文本,以引入语法和语义上的多样性。类似地,人们使用指令反向翻译技术,在人工编写的文本上生成问答数据集,方法是询问LLM“这可能是哪些问题的答案?”。
3.数据集的多样性: 在微调更通用的下游任务时,例如多语言适应,使用多样化的数据集已被证明可以改善在学习新能力和遗忘原模型能力之间的权衡。针对不同语言(如印地语和奥里亚语)微调的模型使用了丰富的特定语言数据集,并结合其他指令微调数据集如FLAN、Alpaca、Dolly等以引入多样性。
4.标准化输出: 去除输出中的空格和其他格式化技巧已被证明有效。SQLCoder2通过去除生成的SQL中的空格,让模型专注于学习重要的SQL概念,而不是如空格和缩进之类的技巧。如果您希望在回答中使用特定的语气,如“客服聊天机器人是…”,那么请在每个示例中将这些内容添加到数据集中。
基于LLM的数据流水线-LLM-based data pipelines
为策划高质量多样化的数据集,数据流水线通常使用LLM来降低标注成本。以下是一些已观察到的技术:
1.评估: 先使用高质量数据集来训练模型,再利用其标注大型数据集,以过滤出高质量示例。
2.生成: 通过高质量示例引导LLM,并提示其生成类似的高质量示例。合成数据集的最佳实践正在逐渐成形。
3.人为参与: 使用LLM生成初始输出集,并通过人类评估进行质量提升,方法可以是编辑或选择偏好。
调试数据集-Debugging your datasets
1.评估您的数据集中的错误输出: 如果模型在某些方面仍然表现不佳,请添加训练示例,直接向模型展示如何正确执行这些方面。如果模型在语法、逻辑或风格上有问题,请检查您的数据是否也存在类似问题。例如,如果模型现在说“我将为您安排这个会议”(当它不应该这样做时),看看现有的示例是否教会模型它可以 做不能做的新事情。
2.仔细检查正类/负类的平衡: 如果数据中60%的助手响应是“我无法回答这个问题”,但在推理时只有5%的响应应该这么说,您可能会得到过多的拒绝响应。
3.全面性和一致性: 确保您的训练示例包含生成响应所需的全部信息。如果希望模型根据用户的个人特征进行称赞,而训练示例中包含了针对对话中没有出现的特征进行的称赞,模型可能会学会幻觉出信息。确保您的所有训练示例的格式与推理时预期的格式一致。查看训练示例中的一致性和一致性。如果训练数据由多人创建,模型性能可能会受到不同人之间一致性和一致性的限制。例如,在文本提取任务中,如果人们只对70%的提取片段达成一致,那么模型可能无法做得更好。
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【】
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。
总结
**总结**:本文是LLM模型微调系列的第七篇文章,主要分享了Meta在2024年8月7日开源的三篇关于大语言模型(LLM)适应技术的文章。文章内容涵盖了LLM的多种适应方法、微调与否的考量以及优化数据集的管理。以下是主要内容的总结:
### **一、LLM适应方法**
1. **预训练(Pre-training)**:使用数万亿个标记数据从头开始训练LLM,自监督学习,计算资源消耗巨大,不建议资源有限团队使用。
2. **继续预训练(Continued Pre-training)**:使用新的领域数据进一步训练基础模型,成本低于完全预训练,但仍可能遭遇灾难性遗忘问题,不推荐资源有限团队作为主要适应方法。
3. **微调(Fine-tuning)**:
- **完全微调(Full Fine-Tuning)**:更改模型所有参数,计算资源消耗相对较大,可能遭遇模型崩溃和灾难性遗忘问题。
- **参数高效微调(PEFT)**:仅微调模型的一小部分参数(如1-6%),计算成本较低,适合资源受限的团队。
4. **检索增强生成(RAG)**:添加特定领域知识库,通过检索驱动文本生成,适合需要从外部知识源获取信息的应用。
5. **上下文学习(ICL)**:通过示例演示在提示中放置原型示例来适应LLM,成本低但可能增加推理成本。
### **二、选择适应方法的考量**
选择LLM适应方法时需考虑所需模型能力、训练成本、推理成本及数据集类型等因素。预训练和继续预训练成本高昂,不适用于多数资源有限的场景。微调和RAG则根据具体应用需求来选择。
### **三、微调 or 不微调?**
在大规模模型(>1B参数)兴起后,微调的复杂性增加,尤其是全参数微调可能会面临灾难性遗忘等问题。PEFT技术通过训练少量参数解决部分问题,适用于多数资源受限的场景。
### **四、微调典型场景**
- 语气、风格和格式定制
- 提高准确性和处理边缘情况
- 解决代表性不足的领域
- 成本降低
- 增添新任务/能力
### **五、完全微调 vs. 参数高效微调(PEFT)**
- 完全微调虽在某些任务上可能表现更优,但易导致原始能力遗忘和模型崩溃。
- PEFT作为自然正则化手段,通常计算成本更低,尤其在资源受限时更具优势。
### **六、数据集管理**
高质量和多样性的数据集对微调效果至关重要,需要注意以下方面:
- 数据质量比数量更重要。
- 较难任务需要更多数据。
- 提高数据标注效率的策略,如结合LLM自动生成和基本人工标注。
- 输入和输出标准化,增加数据多样性,避免出现过拟合。
- 使用LLM基于的数据流水线降低标注成本。
- 调试数据集,纠正错误和保持数据的一致性。
### **学习资源**
作者还分享了大量的AI大模型学习资料,包括学习路线、报告合集、经典PDF书籍和商业化落地方案,这些资源对AI爱好者和从业者都极具价值。