微信扫码
与创始人交个朋友
我要投稿
一般来说,目前有三种主要方法可以提升 LLM 的输出质量:
提示工程(Prompt engineering)
微调(Fine-tuning)
检索增强生成(Retrieval-Augmented Generation, RAG)
我在以前的文章中有深入探讨过 RAG 相关的内容,感兴趣的读者欢迎移步:一文读懂 RAG:它是如何重新定义 AI 的未来?
理论上来说,从提示工程开始来学习是最好的选择,它能够帮助你识别遇到的局限性,并确定可以使用的其他解决方案。
例如,LLM 是否需要更多的上下文信息?如果是,那么 RAG 可能是一个很好的方案。
又或者,LLM 是否能够一致的遵循 Prompt?如果不能,那么这时候,可能就得采用微调了。
因此,当谈到微调(Fine-tuning)与提示工程(Prompt engineering)时,我们不应该将其视为非此即彼的选择,反而,在某些情况下需要两者结合使用。
什么是微调?
微调涉及对预训练模型(比如 OpenAI 的 GPT-3.5 就属于预训练模型)进行进一步训练,使其在处理最初未涵盖的细微差别时能有更好的理解和响应能力。有一些工具可以帮助你进行微调,比如 Entry Point。
例如,在医疗领域,对 LLM 进行微调,使其能够识别病人数据中的细微差别,从而生成个性化的治疗方案。
提示工程涉及编写定制化的输入,也就是我们常说的提示词(Prompt),以获得期望的输出。
这种方法不需要改变模型的底层结构,但需要设计精确的提示词来引导模型产生准确的响应。
提示工程的方法有很多,例如少样本提示(Few-shot prompting)、链式思维提示(Chain of Thought Prompting)、链式密度提示(chain of density)等。每种方法都有助于应对当今 LLM 存在的一些限制。
关于这几种提示工程的方法,也可参考以前的文章。
在上文中也提到了,这并不是一个非此即彼的问题。
两种方法在不同的方面都能提升 LLM 的输出质量。
微调相对耗费资源,需要花费时间和精力生成和清理数据以进一步训练模型。然而,微调能提供高度准确和上下文相关的输出,并且通过减少提示词中的 token 数量来降低成本。
另一方面,提示工程更加灵活和适应性强,能够快速应用到 LLM 中,但是并不能像微调那样提供深度定制化。
让我们来看两篇正面比较微调与提示工程的论文。
2023 年 11 月,微软发布了一篇名为《Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine(通用的基础模型能否超越专用微调的模型?医疗领域的案例研究)》的论文。
当时的普遍看法是,医疗领域非常适合微调,因为它需要专业知识,并且处理的是患者间复杂多变的数据。
在这篇论文中,微软研究人员设计了一个实验,比较了一个微调模型与一个使用提示工程框架的基础模型的性能。
基础模型 GPT-4 使用了微软的 MedPrompt 框架,而微调模型 Med-PaLM 2 是由 Google 专门为医疗领域开发的。
我将在后续文章中深入探讨 MedPrompt 框架。
在这项研究中,使用 MedPrompt 框架的 GPT-4 在所有九项基准测试中都达到了最先进的性能,比 Med-PaLM 2 高出最多 12 个百分点。
此外,MedPrompt 在各种数据集上的测试表现都很好,证明了提示工程框架在不同领域中同样有效。
那么,既然 Google 的微调模型被一个通用模型超越了,是否可以说在微调与提示工程的较量中,提示工程取得了胜利呢?微调还有价值吗?
答案是肯定的,但在像这种使用专有数据来训练模型新知识的情况下,情况就会有所不同了。
也就是说,在涉及专有数据的时候,基础模型就足够强大,不一定需要微调了。
因为基础模型已经非常先进,并处理了大量数据,即使你的数据包含独特的细微差别,这些模型也可能有足够的信息进行泛化和推断。
微调在向模型展示输出的语调和结构方面非常有帮助。它还可以帮助节省提示词的 token 数量,因为你不需要在提示词中提供详细的指令或示例。
但在这项研究中,并没有测试使用微调模型和 MedPrompt 框架结合这种场景,这种模型和方法组合的表现如何,确实很让人好奇。
就在今年 5 月,澳大利亚的一所大学发布了一篇关于微调与提示工程的论文:《Fine-Tuning and Prompt Engineering for Large Language Models-based Code Review Automation(在基于 LLM 的自动化代码审查中的微调与提示工程的应用研究)》。
本次实验旨在评估 LLM 在代码审查任务中的表现,比较微调与提示工程的有效性。实验中测试了两个 LLM:GPT-3.5 和 Magicoder,采用了几种不同的方法。
1. 微调:通过进一步训练使模型适应代码审查的背景。
2. 提示工程:包括零样本学习(Zero-shot Learning)、少样本学习(Few-shot Learning)和使用角色扮演(Personas)。
实验使用的数据集由 GitHub 上的代码组成,模拟了真实世界的场景。
• 精确匹配(Exact Match, EM):该指标评估模型生成的代码与测试数据集中实际修改后的代码的匹配度。为进行评估,生成的代码和实际代码都被标记化,并在 token 级别进行比较。
• GPT-3.5:
• 温度(Temperature):0.0
• top_p:1.0
• 最大长度(Max Length):512
• 微调参数如训练轮数(Number of Epochs)和学习率(Learning Rate)等均按照 OpenAI API 的默认设置。
• Magicoder:
• 使用与 GPT-3.5 相同的超参数设置,以便进行直接比较。
超参数是指在机器学习模型训练过程中设置的参数,这些参数的值是在训练开始之前就需要确定的,不会在训练过程中自动调整。超参数的设置可以显著影响模型的性能和训练效率。比如,上文中提到的温度、最大长度等。
由于使用整个训练集的成本较高,研究人员选择了一部分随机样本进行微调。具体来说,使用了大约 6% 的训练样本来微调模型,总成本约为 $40。
训练集包含提交审查的代码和相应的修改后代码,使模型能够从实际的更改中学习。
1. 微调后的 GPT-3.5 在零样本学习中表现优于所有提示工程方法,精确匹配(Exact Match, EM)比未微调模型高出 63.91% 至 1,100%。
2. 少样本学习是表现最好的提示工程方法,比 GPT-3.5 在零样本学习中的 EM 高出 46.38% 至 659.09%。如果你读过我们的少样本提示指南,这并不令人意外。
3. 包含角色扮演(如“假设你是 <编程语言> 的资深开发人员”)的提示效果较差。加入角色扮演后,GPT-3.5 的 EM 下降了 1.02% 至 54.17%。
4. 角色扮演提示可能引入了偏见,或引导模型走上错误的路径,不符合优化和审查代码所需的实际标准。
正如本文开头所提到的,提示工程和微调并不是互斥的策略,希望这篇文章能让你对这两种方法有更深入的了解。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-08-13
2024-04-26
2024-08-21
2024-07-09
2024-06-13
2024-08-04
2024-04-11
2024-07-18
2024-07-01