大模型什么时候应该进行微调
在当前的企业级人工智能应用中,经常遇到一个核心问题:如何选择合适的技术路径来实现业务目标。是直接使用闭源大模型的 API(如 ChatGPT、Claude),还是基于开源模型进行微调?许多公司在评估 LLM 托管和部署解决方案时,往往忽略了这一决策背后的成本、性能与数据隐私权衡。
本文将基于实际应用场景,深入分析何时应该使用封闭 API,何时需要进行模型微调,以及两者之间的技术边界。
封闭 API 的适用场景与局限
对于大多数通用型任务,尝试实现 ChatGPT API 通常是第一步。例如,您想总结文档、回答常见问题,或者在网站上安装聊天机器人。通常你会发现,ChatGPT 在多语言任务和通用知识问答上表现得相当不错。
成本考量
人们普遍认为这些模型太贵了。但以 0.002 美元/1K 代币的价格计算,您可以至少在 100 个样本上进行测试,并评估 LLM 是否适合您的特定应用程序。事实上,在每天数千次 API 调用或在该范围内的情况下,ChatGPT API 的成本往往比自行搭建自定义开源模型的托管基础设施更便宜。自建需要承担 GPU 硬件成本、运维人力、电力及网络开销。
RAG 架构的补充作用
一种常见的说法是,假设您想要回答有关数千或数万份内部文档的问题。在这种情况下,仅根据此数据训练或微调开源模型并向微调模型询问有关此数据的问题,并不一定是最优解。事实证明,这并不像听起来那么简单,因为维护高质量的数据集和训练流程本身就有门槛。
但 ChatGPT 有一个简单的解决方案可以回答包含大量上下文中的问题,即检索增强生成(RAG)。
其基本逻辑是将所有文档作为小文本块存储在向量数据库中。向模型提供所有必要信息以回答问题的问题已从模型架构转移到包含文档块的数据库。然后可以通过计算问题和文档块之间的相似性来找到相关文档。这通常是通过将块和问题转换为词嵌入向量,并计算块和问题之间的余弦相似度,最后仅选择高于特定阈值的块作为相关上下文来完成的。
最后,问题和上下文可以组合成如下提示,并输入 LLM API:
prompt = f"回答问题。上下文:{context} \n 问题:{question}"
您可能会问 - 为什么不将整个文档和问题输入提示中,而不是将其分成多个块?我们将文档分成块而不是将所有文档合并到一个提示中的原因是因为 LLM 对最大输入和输出长度有一定的限制。对于 ChatGPT,这是 4096 个令牌,或者大约 6-7 页文本。当答案明显存在于这些文档中时,将文档卸载到数据库并使用封闭的 LLM API 进行查询可能会很有效。
但在很多情况下,这些可能会产生次优结果。例如,如果您希望模型就某个利基主题提供专家观点,例如推测美国经济的财务前景,或者需要遵循特定的公司写作风格,单纯的 RAG+API 可能无法满足需求。
特定领域的大模型需求
好的,您尝试过 ChatGPT 或 BARD — 但您不喜欢它。答案有点不对劲。例如,您询问 ChatGPT:
'美国经济的通胀可能会持续多久?'
它返回了:
作为人工智能语言模型,我无法确定地预测未来,尤其是对于复杂的经济系统。不过,我可以为您提供一些信息和观点,可能有助于您了解当前的情况。
通货膨胀是一种复杂的现象,可能由多种因素引起,例如需求增加、供应限制……
不幸的是,这对你来说还不够好。当然,您可以向 ChatGPT 提供一些有关美联储主席杰罗姆·鲍威尔声明的最新消息。但这并不能为您提供与您交谈时所获得的同样丰富的领域经验。想想成为某个领域的专家需要什么。虽然其中一部分是阅读有关该主题的书籍,但也有很多是与该领域的主题专家互动,并从经验中学习。虽然 ChatGPT 接受过大量金融书籍的培训,但它可能还没有接受过顶级金融专家或其他特定领域专家的培训。那么如何才能让大模型成为金融领域的'专家'呢?这就是微调的用武之地。
大模型微调技术详解
在讨论微调 LLM 之前,我们先谈谈微调像 BERT 这样的小型语言模型,这在 LLM 之前很常见。对于像 BERT 和 RoBERTa 这样的模型,微调相当于传递一些上下文和标签。任务定义明确,例如从上下文中提取答案,或将电子邮件分类为垃圾邮件与非垃圾邮件。
然而,大型语言模型(LLM)之所以风靡一时,是因为它们可以通过改变你构建提示的方式无缝地执行多个任务,并且你拥有类似于与另一端的人交谈的体验。我们现在想要的是将大模型微调为某个学科的专家,并像'人'一样参与对话。这与在特定任务上微调 BERT 等模型有很大不同。
微调方法演进
最早的开源突破之一是斯坦福大学的一组研究人员对 7B LLaMA 模型进行了微调,他们将其称为 Alpaca,在 52K 指令上的价格不到 600 美元。不久之后,Vicuna 团队发布了 130 亿参数的模型,达到了 ChatGPT 质量的 90%。


