Prompt、RAG、微调还是重新训练?选择正确的生成式 AI 的方法指南

2023-08-17 21:24:23

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


一、前言

这篇博客试图根据一些常见的可量化指标,为您选择适合您用例的生成式人工智能方法提供指导。

生成式 AI 正在以惊人的速度发展,许多组织都在尝试利用这项先进技术来解决业务问题。虽然有很多流行的方法可供选择,但是当涉及到选择正确的方法来实施生成式 AI 解决方案时,仍缺乏明确的指导。最常讨论的方法有:

  • 提示工程(Prompt Engineering
  • 检索增强生成(Retrieval Augmented Generation,RAG
  • 微调(Fine-tuning
  • 从零开始训练自己的基础模型(Foundation Model

这里不包括 “按原样使用模型” 选项,因为几乎没有任何业务用例可以有效地使用基础大模型。原封不动地使用基础大模型可以很好地用于一般搜索,但如果要做好特定的业务,则需要考虑上述选项之一。


二、主要内容

比较是如何进行的?分析是基于以下指标进行的

  • 准确性(回答的准确程度如何?)
  • 实施复杂性(实施过程有多复杂?)
  • 工作量(需要多少努力来实现?)
  • 总拥有成本(TCO)(拥有解决方案的总成本是多少?)
  • 更新和更改的便利性(架构是否耦合度低?替换 / {/} /升级组件是否容易?)

假设:我们将根据这些指标对每种解决方案进行评估,并且分析仅适用于比较,而不是普遍适用。例如:如果针对某个指标,提示工程被评为低分,意味着它在该指标上的表现低于其他选项,并不一定意味着它在该指标上普遍表现差。

首先让我们来谈谈最受关注的问题:哪种方法提供了最准确的回答?

  • 提示工程(Prompt Engineering)的核心是在提供尽可能多的上下文信息的同时,通过提供少量示例(few-shot learning)来更好地让大模型了解您的用例。虽然结果在孤立情况下看起来令人印象深刻,但与本文中讨论的其他方法相比,它产生的结果最不准确。
  • 检索增强生成(Retrieval Augmented Generation,RAG)的高质量结果是由于直接来自向量化信息存储的增强用例特定上下文。与 提示工程相比,它产生了大幅改善的结果,并且极低几率出现幻觉。
  • 微调(Fine-tuning)在准确性方面提供了相当高的结果,其输出质量与 RAG 相媲美。由于我们正在使用特定领域的数据更新模型权重,因此该模型能够产生更具上下文的回复。与 RAG 相比,质量可能会稍微好一些,这取决于使用情况。因此,评估是否真的值得花时间在两者之间进行权衡分析非常重要。通常选择微调的原因不仅仅是准确性,还包括数据变化频率、控制模型工件以符合监管、合规和可复现性等方面的考虑。
  • 从头开始训练可以产生最高质量的结果。由于模型是根据特定用例的数据进行训练,幻觉的可能性几乎为零,并且输出的准确性也是很高的。

在这里插入图片描述

实施复杂性。让我们看看实施这些方法有多容易或困难。

  • 提示工程(Prompt Engineering)的实施复杂度相对较低,因为它几乎不需要编程。需要具备良好的英语(或其他人类解释)语言技能和领域专业知识,以制定一个带有上下文学习方法和少样本学习方法的良好提示。
  • 检索增强生成(Retrieval Augmented Generation,RAG) 比提示工程更复杂,因为你需要具备编码和架构技能来实现这个解决方案。根据在 RAG 架构中选择的工具不同,复杂度可能会更高。
  • 微调(Fine-tuning)的复杂性甚至比提示工程和 RAG 还要高,因为模型的权重 / {/} /参数是通过调整脚本进行更改的,这需要数据科学和机器学习专业知识。
  • 从头开始训练具有最高的实施复杂性,因为它需要大量的数据整理和处理,并且需要深入的数据科学和机器学习专业知识来训练一个相当大的 Foundation Model。

在这里插入图片描述

努力,让我们了解每个解决方案需要多少努力。请注意,实施复杂性和付出的努力并不总是成正比。

  • 提示工程(Prompt Engineering)需要大量的反复努力才能做到完美。大语言模型对提示的用词比较敏感,有时候改变一个词甚至动词都会导致完全不同的回应。因此,为了让相应的大语言模型输出期望的结果,需要进行多次迭代才能做到准确无误。
  • 检索增强生成(Retrieval Augmented Generation,RAG) 还需要适度的努力,比提示工程稍微高一些,因为涉及到创建 Embeddings 和设置向量存储的任务。
  • 微调(Fine-tuning)是一项比提示工程和 RAG 更费力的任务。虽然 Fine-tuning 可以使用很少的数据进行(在某些情况下甚至只需 30 个或更少的示例),但是设置 Fine-tuning 并正确获取可调参数值需要时间。
  • 从头开始训练是所有方法中最费力的。它需要大量的迭代开发,以获得具有正确技术和业务结果的最佳模型。该过程始于收集和整理数据,设计模型架构,并尝试不同的建模方法,以找到适用于特定用例的最佳模型。这个过程可能非常漫长(几周到几个月),并且需要大量的计算资源。

在这里插入图片描述

总拥有成本(TCO),接下来是关于 TCO 的比较。

请注意,我们不仅仅谈论的是服务 / {/} /组件的费用,而是完全拥有解决方案所需的成本,包括构建和维护解决方案所花费的熟练工程师时间、自行维护基础设施的成本、为执行补丁和更新而进行停机时间、设置支持渠道、招聘、提升技能以及其他杂项费用。

  • 提示工程(Prompt Engineering) 的成本可以非常低,因为您只需要维护提示工程模板,并在大模型版本更改或完全新的大模型出现时及时更新它们。除此之外,还会有一些通常与托管大模型或通过无服务器 API 使用它相关的费用。
  • 检索增强生成(Retrieval Augmented Generation,RAG) 的成本会比提示工程高一些,这是因为架构中涉及到多个组件。这将取决于使用的 Embedding 模型、向量存储和大模型。因此,它与提示工程相比成本更高,因为您需要支付三个不同的组件而不只是一个大模型。
  • 微调(Fine-tuning)的成本将高于 RAG 和提示工程,因为您正在调整一个需要强大计算能力、深度机器学习技能和对模型架构的理解的模型。特别是,由于每次基础模型版本更新或新批次数据进来时都需要进行调优,维护这样的解决方案的成本较高,并携带有关用例最新信息。
  • 从头开始训练的总体成本最高,因为团队需要负责整个数据处理和机器学习训练、调优和部署过程。这将需要一群高技能的机器学习专业人员来完成。由于需要频繁重新训练模型以使其与使用案例周围的新信息保持更新,因此维护这样的解决方案的成本非常高。

在这里插入图片描述

灵活应对变化,让我们来看一下在更新和更改方面的选择。

  • 提示工程(Prompt Engineering) 具有非常高的灵活性,因为您只需要根据大模型和用例的变化来更改提示模板即可。
  • 检索增强生成(Retrieval Augmented Generation,RAG) 在架构变更方面具有最高的灵活性。您可以独立地改变 Embedding 模型、向量存储和 LLMs,对其他组件的影响很小到中等程度。它还具备在过程中添加更多组件(如复杂授权)而不影响其他组件的灵活性。
  • 微调(Fine-tuning)对于变化的适应性较低,因为任何数据和输入的更改都需要进行另一轮微调,这可能会非常复杂且耗时。此外,将同一个经过微调的模型适应到不同用例中也需要付出很大努力,因为相同的模型权重 / {/} /参数在其他领域上可能表现不佳。
  • 从头开始训练的灵活性最小。因为在这种情况下,模型是从头构建的,对模型进行更新会触发另一个重新训练周期。可以说,我们也可以对模型进行微调而不是从头重新训练,但准确性会有所变化。

在这里插入图片描述


三、总结

正如上面的所有比较所显示的那样,其实没有明确的赢家。实际应用取决于在设计基于生成式 AI 解决方案时对您的组织最重要的指标是什么

总结以上内容,选择正确的生成式 AI 的方法指南:

  • 您希望在更改大模型和提示模板方面具有更高的灵活性,并且您的使用案例不包含大量领域上下文时,请使用提示工程(Prompt Engineering)。
  • 使用检索增强生成(Retrieval Augmented Generation,RAG)时,您可以在保持输出质量高的同时,获得最高程度的灵活性来更改不同组件(数据源、Embeddings、大模型、向量引擎)。
  • 使用微调(Fine-tuning)时,您可以更好地控制模型的构件和版本管理。当领域特定术语非常与数据相关(比如法律、生物学等)时,它也许会非常有用。
  • 如果以上方法都不适用于您,并且您有能力构建一个拥有数万亿个经过精心筛选的标记化数据样本、先进硬件基础设施和一支高技能机器学习专家团队,那么您可以从头开始训练一个基础大模型。当然,这需要相当昂贵的预算和时间成本来实现和落地应用。

📚️ 参考链接:

更多推荐

“全景江西·南昌专场”数字技术应用场景发布会 | 万广明市长莅临拓世集团展位,一览AIGC科技魅力

随着数字技术的迅猛发展,传统产业正在发生深刻的变革,新兴产业蓬勃兴起。但要想实现数字经济超常规发展,就要在数字产业化上培育新优势,大力实施数字经济核心产业提速行动,加快推进“一核三基地”建设。在这个数字经济时代,创新和科技成为了推动社会进步的关键力量。数字经济的崛起也意味着更多的机会和挑战。它不仅为企业提供了更多创新和

【微信小程序】文章样式,标题样式,及设置背景~

|background-size设置背景图片大小。图片可以保有其原有的尺寸,或者拉伸到新的尺寸,或者在保持其原有比例的同时缩放到元素的可用空间的尺寸。|background-size:cover;适配屏幕大小文章样式,标题样式,及设置背景~index.wxml<viewclass="about"><viewclass=

Fork() 函数:“父” 与 “子” 进程的交互(进程的创建)

阅读导航前言一、fork函数初识1.基本概念2.fork函数返回值二、fork函数的写时拷贝三、总结温馨提示前言前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim、gcc/g++使用、yum工具以及git命令行提

蓝桥杯2023年第十四届省赛真题-更小的数--题解

目录蓝桥杯2023年第十四届省赛真题-更小的数题目描述输入格式输出格式样例输入样例输出提示【思路解析】【代码实现】蓝桥杯2023年第十四届省赛真题-更小的数时间限制:3s内存限制:320MB提交:895解决:303题目描述小蓝有一个长度均为n且仅由数字字符0∼9组成的字符串,下标从0到n−1,你可以将其视作是一个具有n

Go基础语法:变量和常量

2.1变量的声明变量名、常量名、函数名统称为标识符。标识符由字母、数字和下划线组成,只能以字母或下划线开头。Go语言中推荐使用驼峰命名方式。命名方式:stu_name下划线方式;stuName小驼峰方式;StuName大驼峰方式Go语言中的变量必须先声明再使用;非全局变量(函数内的变量)声明之后必须使用,否则报错同一个

典型数据结构-图,图的存储、基本操作和遍历

图引自:《数据结构教程》。概念图可以使得元素之间的关系是多对多。图中任意两个数据元素之间都可能存在连接关系。图作为一种数据结构,可以表达数据元素之间广泛存在着的更为复杂的关系。在众多应用之中,如电子线路分析、工程计划分析、寻找最短路径等等,图是描述这类关系的一个十分自然的模型。有关图论的内容是离散数学的主要内容之一,这

go语言操作数据库

1.10GO连接MySQL因为Go语言没有提供任何官方数据库驱动,所以需要安装第三方函数库。由于在github上安装,所以需要安装git软件,安装过程一直点击下一步即可。安装完成后需要配置环境变量1.10.1安装gitgit软件安装完毕后,配置git的环境变量,这样可以使用get的指令1.10.2安装数据库驱动设置GO

简单几个配置 Go 实现敏感数据脱敏,可以自定义数据脱敏规则(附完整实现源码)

简单几个配置Go实现敏感数据脱敏,可以自定义数据脱敏规则(附完整实现源码)。介绍为了保障企业的数据安全和隐私安全,godlp提供了一系列针对敏感数据的识别和处置方案,其中包含敏感数据识别算法,数据脱敏处理方式,业务自定义的配置选项和海量数据处理能力。godlp能够应用多种隐私合规标准,对原始数据进行分级打标、判断敏感级

pytorch环境配置

pytorch安装与基础pytorch相关配置一:安装cuda1:找到nvidiacontrolpanel2:打开控制面板,找到系统信息中的,组件即可查看到cuda版本,这里我的cuda版本为12.0.1503:下载对应版本的cudatoolkit(我下载的12.0.1)4:安装流程5.验证是否安装成功二:配置cuDN

5-2 Pytorch中的模型层layers

深度学习模型一般由各种模型层组合而成。torch.nn中内置了非常丰富的各种模型层。它们都属于nn.Module的子类,具备参数管理功能。例如:nn.Linear,nn.Flatten,nn.Dropout,nn.BatchNorm2d,nn.Embeddingnn.Conv2d,nn.AvgPool2d,nn.Con

Go并发可视化解释 – select语句

上周,我发布了一篇关于如何直观解释Golang中通道(Channel)的文章。如果你对通道仍然感到困惑,请先查看那篇文章。Go并发可视化解释—Channel作为一个快速复习:Partier、Candier和Stringer经营着一家咖啡店。Partier负责接受顾客的订单,然后将这些订单传递给厨房,Candier和St

热文推荐