调整开源大语言模型(LLM)的系列博客的第二篇文章。本文讨论:“什么时候应该进行微调,什么时候应该考虑其他技术?”
在 LLM 出现之前,微调通常用于小规模模型(100M – 300M 参数)。当时,最先进的领域应用通过监督微调(SFT)构建,即使用标注数据对预训练模型进行进一步训练,以适应自己的领域和下游任务。然而,随着大型模型(>1B 参数)的兴起,微调的问题变得更加复杂。最重要的是,大型模型的微调需要更大的资源和商业硬件。下表 1 列出了在三种情况下,微调 Llama 2 7B 和 Llama 2 13B 模型的峰值 GPU 内存使用量。QLoRA 这样的算法使得使用有限资源对大模型进行微调变得更加可行。作为示例,表 1 显示了 Llama 2 7B 的三种微调模式(全微调、LoRA 和 QLoRA)的峰值 GPU 内存。类似的内存减少也在使用 PEFT 或量化技术对 Llama 1 进行的微调中被报道。除了计算资源外,参数全量微调的一个常见问题是灾难性遗忘。PEFT 技术旨在通过对少量参数进行训练来解决这些问题。
表 1:在 Llama 2 7B 上使用不同微调方法([来源](https://github.com/pytorch/torchtune?tab=readme-ov-file#fine-tuning-recipes))的内存消耗(单位:GB)。QLoRA 使用了 4-bit NormalFloat 量化。
某些用例可能需要 LLM 反映特定的个性或为特定的受众服务。通过使用自定义数据集微调 LLM,我们可以调整聊天机器人的响应,使其更贴近特定用户的需求或预期体验。我们还可能希望以特定格式输出结果,如 JSON、YAML 或 Markdown。
微调可以纠正通过提示词工程和上下文学习难以解决的幻觉或错误。它还可以增强模型执行新技能或任务的能力,而这些技能或任务难以通过提示表达。这一过程有助于纠正模型在执行复杂提示时的失误,并提高其生成预期输出的可靠性。我们提供两个示例:
尽管 LLM 经过大量通用数据训练,但它们并不总是能够掌握每个小众领域的细微差别、术语或特定性。在法律、医疗或金融等领域,微调已被证明可以提高下游任务的准确性。我们提供两个示例:
微调可以将 Llama 2 70B/GPT-4 等大模型的技能提炼到较小的模型中,如 Llama 2 7B,从而在不影响质量的情况下降低成本和延迟。此外,微调减少了对冗长或特定提示词(提示词工程中使用)的需求,从而节省 Token 并进一步降低成本。例如,这篇文章展示了如何通过微调 GPT-3.5 评审模型,将其从更昂贵的 GPT-4 模型中提炼出来,最终节省了成本。
通过微调,往往可以实现新的能力。我们提供三个示例:
上下文学习(ICL)是一种强大的提升 LLM 系统性能的方式。由于其简便性,ICL 应在进行任何微调活动之前尝试。此外,ICL 实验有助于评估微调是否能提升下游任务的性能。使用 ICL 时的一些常见考虑因素包括:
共识是,当 LLM 的基础性能不令人满意时,你可以“从 RAG 开始,评估其性能,如果不够理想,再转向微调”,或者“RAG 可能比微调更有优势” (来源)。然而,我们认为这种范式过于简化,因为在多个场景下,RAG 不仅不是微调的替代方案,反而更多的是微调的补充方法。根据问题的特性,可能需要尝试一种或两种方法。采用这篇文章的框架,以下是一些问题,帮助你确定微调或 RAG(或两者)是否适合你的问题:
在大多数情况下,微调和 RAG 的混合解决方案将带来最佳效果——问题随之变成了做两者的成本、时间和独立收益。
请参考上述问题,以指导你是否需要 RAG 和/或微调,并通过内部实验来分析错误并理解可能的指标提升。最后,微调探索确实需要一个稳健的数据收集和数据改进策略,我们建议在开始微调之前进行这一步。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。