要决定上述哪种方法适合特定应用◆★■■★★,你应该考虑各种因素◆★◆:所追求任务所需的模型能力■■★◆◆、训练成本★■、推理成本、数据集类型等。
- 对于印地语等代表性较少的语言,使用PEFT进行微调有助于完成这些语言的所有任务。
另外,研究者可能还希望它能以特定的方式组织输出★◆■★■,例如,JSON■★★◆◆◆、YAML或Markdown格式的输出。
- 数据集多样性:当为更通用的下游任务微调时(例如,多语言适配),使用多样化的数据集已被证明◆■,可以改善模型在遗忘原始能力和学习新能力之间的权衡。
- LLM应用程序需要有多透明/可解释■■?RAG本身可以提供引用◆■,这些引用对于解释LLM输出非常有用。
预训练是LLM训练的重要组成部分,它使用token预测变量作为损失函数。自监督算法,使得大量数据训练成为可能◆■◆。
PEFT通常需要相对较少的计算资源来训练下游模型,并且在数据集规模有限的资源受限场景下,更易于使用。
如果希望模型基于用户的个人特征来赞美用户,而训练示例中包含了助手对前面对话中没有出现的特征的赞美★◆■◆,模型可能会学会虚构信息。
- 人机协作:使用大模型生成初始输出集,然后由人类通过编辑或选择偏好来提高质量■◆■◆。
它还可以增强模型执行新技能或任务的能力,这些技能或任务很难在提示中表达。
除了「更好的质量和更多的示例」之外,还有更多的细微差别,你可以明智地投资数据集收集,以在资源受限的微调实验中提高性能。
还有很多研究可以佐证,通过预训练获得的通用知识,在后续训练过程中可能会被遗忘◆★。
你可能会注意到■◆★◆,QLoRA等算法使得利用有限资源★■■,对大模型进行微调变得更加容易。
- 参数高效微调(PEFT)★■★★:PEFT算法只微调少量额外参数,或更新预训练参数的子集,通常是总参数的1%-6%◆■★■,而不是对所有LLM权重进行离线微调◆★★。
简单来说■◆◆,如果你用特定类型的回应过度训练模型◆■★■◆★,它会倾向于给出那种回应,即使不是最合适的答案。
最后,微调中的探索,确实需要一个强大的数据收集和数据改进策略■★■★★,Meta建议将其作为开始微调的前奏◆★◆■★■。
OpenAI微调文档表明,即使是50-100个示例的数据集也可能产生影响。
总之◆◆■★,创建一个基于LLM的系统是迭代的,上面的流程图概述了这一迭代过程,并为LLM适配战略奠定了坚实的基础。
- 重复:无论是在微调还是预训练中■■★■,这都被发现是导致模型性能下降的原因■★■■★。通过去重实现多样性,往往会提高性能指标。
- 质量是最重要的:一个大趋势是质量比数量更重要■◆◆。也就是说,拥有一小部分高质量的数据,比拥有一大批低质量的数据更好。
- 生成■■:用高质量示例来引导大模型■◆,并通过提示生成类似的高质量样例。合成数据集的最佳实践正在逐渐形成。
- 全面微调:顾名思义◆★,这包括更改模型的所有参数◆■★★◆,包括在XLMR和BERT(100-300M参数)等小模型上所做的传统微调,以及对Llama 2、GPT3(1B+参数)等大模型上的微调■◆。
此外,微调减少了对冗长或特定提示的需要,从而节省了象征性成本并进一步降低了成本。
2 微调LLM「法官」★★★■,以评估其他LLM的指标,如接地性、合规性或有用性
- 降低成本:微调可以将较大参数模型(如Llama 2 70B/GPT-4)中的技能,提炼成小模型(如Llama 2 7B)中的技能,从而在不影响质量的情况下降低成本和延迟。
总而言之,微调是大模型开发中的一个关键方面,需要在艺术和科学之间取得微妙的平衡■★◆◆◆■。
最常见的情况是,训练通过自回归预测下一个token(也称为因果语言建模)。
- 你的应用程序对幻觉的容忍度如何?在抑制虚假和想象力编造至关重要的应用中,RAG系统提供内置机制,最大限度地减少幻觉。
对于ICL,通过在提示符中放置原型示例来适配LLM■★。多项研究表明◆■■,「举一反三」是有效的◆◆■■■★。这些示例可以包含不同类型的信息■◆■■■★:
质量的关键原则是一致的注释,没有错误★■◆、没有错误标签的数据、有噪音的输入/输出◆■◆■■◆,以及与总体相比具有代表性的分布。
例如★★■◆,如果模型现在说「我会为你安排这个会议」(实际上它不应该这样做),看看现有的例子是否教导模型说它可以做一些它实际上不能做的新事情■◆◆■■。
因此,对于资源有限的团队,Meta同样不建议将继续预训练训作为LLM适配的可行方法。
比如■★◆★◆★,PYTHIA套件经历了第二阶段的预训练,最终得到了FinPYTHIA-6.9B。该模型专为金融数据设计的,使用240亿token的数据集,进行了18天的继续预训练。
在Llama 1中,由于参数高效微调(PEFT)或量化,内存也有类似的减少■★。
然而★★,Meta认为这种范式过于简单化,因为在多种情况下,RAG不仅不是微调的替代方案,而且更像是微调的补充方案。
然而,随着更大参数模型的出现(1B)★★★◆,微调的问题变得微妙了起来。
- 随着例子越来越多★★★★■,LLM忽略一些例子是很常见的。这意味着你可能需要一个基于RAG的系统,根据输入找到最相关的示例。
除计算资源外,灾难性遗忘(详见本系列第一部分)也是全参数微调的常见隐患。
而要了解微调的现状,可以从两个方面入手:参数变化的百分比和微调后新增的能力。
- 语气■★◆◆■、风格★★■★、形式定制■★★★■:使用案例可能会寻求反映特定角色或服务特定受众的LLM★◆■◆★。
不过,任何更新预训练模型权重的方法★★★,都容易出现一种「灾难性遗忘」的现象。
在某些情况下,全面微调在特定任务上表现更好,但代价往往是遗忘原始模型的一些能力◆■◆。
选择其中一种方法,可归结为可用计算量(GPU小时数和GPU内存)◆★■、目标下游任务以外的任务性能(学习和遗忘权衡)以及人工注释成本■■◆。
为了整理高质量◆■◆★、多样化的数据集■■◆,数据管道经常使用大语言模型来降低标注成本◆◆★■■★。
企业还可以通过添加特定领域的知识库来适配LLM,RAG是典型的「搜索驱动的LLM文本生成」■■。
微调是以监督方式使用带注释的数据,或使用基于强化学习的技术,来适配预训练语言模型的过程。
「更难」可以指多个■■◆■★:输出中有更多的token,需要更高级别的人类能力,多个正确答案。
与使用未注释的数据集进行预训相比,使用较小的带注释的数据集进行微调,是一种更具成本效益的方法◆★。
预训练通常需要数千个GPU小时(105-107个),并分布在多个GPU上进行。
- 数据的静态/动态程度如何?如果问题需要访问动态数据语料库,微调可能不是正确的方法,因为对LLM的知识可能很快就会过时。
- 有效的高质量数据收集:由于数据收集成本较高,建议使用以下策略来获得更高的样本效率和成本
在学术和实际应用中★★◆◆,当应用于新领域时■◆■,全面微调和PEFT都显示出下游性能的提升。
对于不同的领域■◆■★,如法律、医疗或金融,微调已被证明有助于提高下游任务的准确性★■■★。
在微调时,几千个精选的LIMA数据集示例,比50K机器生成的Llama数据集具有更好的性能■◆★■◆★。
- 你的应用程序是否需要自定义语气/行为/词汇或风格?对于这些类型的需求◆◆,微调通常是正确的方法。
- 处理代表性不足的领域:尽管LLM接受了大量通用数据的训练,但它们可能并不总是精通每一个特定领域的细微差别的行话、术语或具体情况★■。
根据本文的框架◆◆,你可以提出以下问题,以确定微调或 RAG(或两者)是否适用■★■★★◆:
在预训练计算成本很高的情况下,更新预预训练好的模型权重,可能是一种有效的方法◆■★◆★,来适配特定任务。
这个过程可以帮助纠正模型没有遵循复杂提示的错误■★◆★,并提高其产生所需输出的可靠性。
例如★■,表1显示了Llama 2 7B上三种微调模式(全面微调★■■■■、LORA和QLoRA)的峰值GPU内存■◆■■★■。
这种系统的推理成本可能会更高,因为输入提示包含了检索到的文档◆■★■,而大多数服务提供商采用按token计费的模式。
- 评估数据集中的不良输出:如果模型在某些方面仍然表现不佳◆★■★◆★,添加直接向模型展示如何正确处理这些方面的训练示例。
- 标准化输出◆★◆★■:移除输出中的空白和其他格式技巧被证明是有帮助的◆■★◆◆。如果你想要回答中有特定的语气,比如「服务台聊天机器人是..◆★.」,那么就为每个例子在数据集中添加这些内容。
确保所有的训练示例◆■★■★,都采用与推理时预期相同的格式,查看训练示例中的一致性和协调性。
- 评估:用高质量数据集训练一个模型,然后用它来标注较大数据集,以筛选出高质量的样例。
比如★◆,此前一项研究显示,在医疗领域微调训练后的模型★◆◆★■■,在遵循指令和常见问答任务上的性能出现下降◆★◆★◆■。
在资源受限的情况下,PEFT可能会比全面微调提供更好的性能提升/成本比。
如何使用特定领域数据微调LLM,如何确定微调适配自己的用例,以及如何管理良好训练数据集的经验法则。
因此,对于资源有限的团队■★◆★,Meta不建议将预训练作为LLM适配的可行方法。
1 观察失效模式:观察先前机器学习能力失败的例子,并添加针对这些失效模式的样例。
预训练是指★★◆★,使用数万亿个token数据,从头开始训练LLM的过程,通常使用自监督算法进行训练。
- 计划和反思追踪:添加信息,教LLM计划和反思其解决问题的策略,可参阅ReACT
ICL不需要任何额外的训练数据或计算资源,使其成为一种具有成本效益的方法。然而,与RAG类似,随着推理时处理更多的token◆◆★■,推理的成本和延迟可能会增加。
在大模型兴起之前,微调通常用于参数比较少的模型(100M – 300M)■◆◆■◆。
微调,特别是参数高效微调■◆★◆■,只需要预训练/继续预训练所需计算资源的一小部分。
- 正如本文中指出的■★■◆■,患者的病历包含高度敏感的数据★★◆◆★,这些数据通常不会在公共领域中找到。因此◆★◆■★★,基于LLM的病历摘要系统需要进行微调。
在大多数情况下◆◆★★★■,微调和RAG的混合解决方案◆★★◆,将产生最好的结果◆★■◆★,问题就在于两者的成本、时间和额外的独立效益。
聊天微调Llama 2,就是一个具有附加指令遵循和对齐能力的微调模型的例子。
- 更困难的语言任务需要更多数据★◆◆■:相对困难的任务◆■★◆★,如文本生成和摘要★◆■★■★,更难微调,比起更容易的任务◆■■■,如分类和实体提取,需要更多数据★■★。
2 人机协作■★■◆◆:这是一种更经济的数据标注扩展方式■■■■◆◆。可以使用LLM自动生成基础回答,人类标注者可以基于此更快地进行标注。
- 仔细检查正面/负面类别的平衡◆■■:如果数据中60%的助手回应说「我无法回答这个问题」,但在推理时只有5%的回应应该这样说■◆■★★■,你可能会得到过多的拒绝回应。
在这部分★■★,Meta将重点介绍微调的设计变量,并就资源受限的情况下★★★■■,微调模型的最佳实践提供方向性指导。
通过使用定制数据集对LLM进行微调,可以塑造聊天机器人的响应★◆,使其更符合受众的特定需求或预期的体验◆★★★。
总而言之,在预训练和持续预训练中■■,使用自监督算法和未加注释的数据集,微调LLM是资源和成本密集型的,不建议将其作为一种可行的办法。
RAG于2020年推出,它使用动态提示上下文★◆◆■■,通过用户问题检索并注入LLM提示,以引导其使用检索到的内容,而不是预训练的知识◆◆■★◆。
- 需要较少的token(数千或数百万,而不是预训练中需要的数十亿或数万亿),其主要目的是提高能力,如指令遵循■■◆★★◆、人类对齐、任务执行等。
而且■◆★★★◆,微调后模型被证明在法律★■◆■、医疗或金融等专业领域的广泛的应用中,实现了SOTA。
鉴于灾难性的遗忘,最近的研究表明,继续预训练(CPT)可以导致模型性能的进一步提高★■■★★,而计算成本只是预训练的一小部分◆◆◆。
继续预训练(也称为第二阶段预训练)将使用全新的、未见过的领域数据进一步训练基础模型。
如果你的应用程序需要从动态知识库(例如QA机器人)中提取,RAG可能是一个很好的解决方案。
普遍的共识是◆★★◆,当LLM基本性能不尽如人意时■★★★,可以先从RAG开始★★◆★■★,衡量其性能,如果发现不足,再转向微调。
- 提高精度并处理边缘情况:微调可以用于纠正幻觉或错误,这些错误很难通过prompt和上下文学习来纠正■★◆◆★◆。
通常来说,对于较小的初始精度(50%),微调是一个巨大的障碍,需要用几百个示例。
- 在包含正确标签/答案/偏好的注释数据集上进行监督训练,而不是自监督训练
而且,最先进领域应用程序,也是使用监督微调(SFT)构建的,即使用自己专业领域和下有任务的注释数据,进一步训练预训练的模型。
一些早期的实证研究表明,与PEFT技术相比★■◆,全面微调更容易出现上述问题◆★★■★,但还需要做更多的研究◆★◆◆■■。