心法利器[108] | 微调与RAG的优缺点分析

心法利器

本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更有历史文章合集,欢迎下载。

往期回顾

  • 心法利器[103] | 大模型bad case修复方案思考

  • 心法利器[104] | 基础RAG-向量检索模块(含代码)

  • 心法利器[105]  基础RAG-大模型和中控模块代码(含代码)

  • 心法利器[106]  基础RAG-调优方案

  • 心法利器[107] onnx和tensorRT的bert加速方案记录

最近其实挺多文章都有在聊RAG的,但我回过头来分析发现,缺少一篇有关使用时机的文章。我本身非常喜欢RAG所代表的实践方案,但不代表所有情况下都推荐使用RAG,毕竟我们需要因地制宜,结合实际情况来进行方案选择,本文就带大家一起分析RAG的优劣势。

经过调查还是有不少人了解,所以我照例还是把最近有关的rag文章放在这里,后续我会弄合集:

目录:

  • 为什么用微调和RAG对比

  • 微调和RAG的优劣势对比

  • 技术方案分析案例

为什么用微调和RAG对比

开始可能有小伙伴会问我,为什么要拿微调和RAG进行对比,我自己的理解,主要是因为这个两个所代表的其实是在现实情况中对系统的调优方案,即调整模型内和调整模型外。

纵观整个算法领域,对模型内部调整,不外乎是那几种方案,特征变化带来的模型结构调整(特征可以是隐式的内部特征,也可以是输入端或输出端的显式调整),以及通过数据变化带来的内部参数更新。无论是哪种方案,都会很大程度地影响模型的预测效果,一般情况,会为以模型为中心的系统效果带来很大的影响。

模型外的调整,不外乎就是增加一些外部的组件,例如规则、检索模块等,从而让整个系统的效果带来一些变化,在全新版本大模型时代,大模型为我们提供了更灵活的输入接口,即我们可以用prompt的方式灵活指导模型输出,可以给参考材料、额外信息、提特别要求甚至是通过描述、样例的方式即可让大模型的输出符合我们预期。

而RAG的出现,一方面是因为大模型具有很强的指令生成能力,另一方面是模型内调整在现实应用情况一些局限性,从而形成了一个目前重要的应用思路,实践上最鲜明的两个特点,一个是内容批量的可控性和及时性,另一个是这种更新并不需要更新模型参数从而规避效果波动的风险。至于规则等的方案,某种程度上,其实就是RAG的一种特殊情况,例如什么情况需要触发什么回复策略的约束。

因此,我自己是认为,要去权衡RAG,不得不把他和微调进行对比,探索两者各自的优势,进一步在方案选型的时候,从感性理解到理性对比判断。

微调和RAG的优劣势对比

这里我写我的分析调研总结过程吧,然后汇总结论。

论文讨论

首先是论文层面,有一篇论文对这方面进行了讨论:“Fine-Tuning or Retrieval?,Comparing Knowledge Injection in LLMs”,这又是一篇微软的论文(怎么最近老是无意间碰到微软的论文,频率很高),这篇论文本身是从信息注入的角度来进行讨论的,从文章的实验看来,微调的效果始终比不过RAG的效果,而究其原因,作者在前文中其实有提到具体的表现,摘录一下:

  • 领域知识不足。对未接触过的内容,效果就会很差。

  • 信息过时。知识的更新只取决于训练集的截止时间。

  • 记忆力问题,对训练过程接触的知识,很大可能会忘记(说白了就是没学会),对已经学会的知识,也可能因为后续的训练而遗忘。

  • 推理失败。对已有知识,可能也会因为使用失败而让回答出现问题。

另外还发现了一篇还不错的论文,RAG vs Fine-tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture(嗯,这篇也是微软的),这里面也是做了比较多的实验和尝试,给出一些基于实验的分析,这篇更像是一篇调研报告,挺建议大家回头去精读的,我这里把比较重要的这张图摆出来。

3c2b01672ab0e25c45512ab51bb2356a.png

这篇相比上面一篇,分析的维度更丰富了,有考虑成本等问题,但论文的分析还是有一定局限性,很多情况其实不会考虑到现实情况的很多问题,例如,数据数量和质量问题,实际业务需求等。

社区讨论

有关社区的讨论,一般是通过百度谷歌等渠道来检索类似的文章讨论,另外知乎、微信搜索也是不错的渠道。我找到的比较好的讨论,我都列举出来吧:

  • 何时应微调 LLM?何时又该使用 RAG?:https://www.zhihu.com/question/638730387

  • 如何选择最适合你的LLM优化方法:全面微调、PEFT、提示工程和RAG对比分析:https://zhuanlan.zhihu.com/p/661830285

  • 大模型优化:RAG还是微调?https://blog.csdn.net/qq_41929396/article/details/132689632

  • RAG与微调—哪个是提升LLM性能的最佳工具?https://zhuanlan.zhihu.com/p/679528711

  • 专补大模型短板的RAG有哪些新进展?这篇综述讲明白了:https://www.jiqizhixin.com/articles/2024-01-08-8

这里尽量不要读个一两篇就完事了,最好多读几篇,能理解的更加全面完整。

汇总结论

这里我分几个方面来进行对比吧。

首先是知识层面,这个应该是RAG使用者最关心的。

  • RAG对知识的更新时间和经济成本更低。不需要训练,只需要更新数据库即可。

  • RAG对知识的掌控力会更强,相比微调更不用担心学不到或者是遗忘的问题。

  • 但是如果模型强缺乏某个领域的知识,足量数据的微调才能让模型对该领域有基本的概念,如果不具备领域知识基础,RAG仍旧无法正确回答。

然后是具体任务效果的问题。

  • RAG相比微调能更容易获得更好的效果,突出的是稳定性、可解释性。

  • (有点经验之谈了)对任务模式比较简单的任务,微调能触碰到更高的上限,但是对训练、数据等方面的要求会更苛刻。

  • 幻觉方面,RAG从各种实测来看,短板基本都在检索模块,只要检索不出大问题,整体效果还是RAG比较有优势的。

第三块来聊成本了,现实应用很难避开成本的问题。

  • 训练角度,RAG的成本就是更新数据库,但是微调就需要大量的显卡、时间资源。

  • 推理角度,考虑到RAG本身需要检索,而且检索层为了确保检索准确,还需要很多额外工作,所以推理的耗时会比微调多,但具体多多少,就要看检索模块的复杂程度了,如果这里面还需要额外调大模型,那成本就会多很多,如果只是小模型之类的,那这个增加可以说是忽略不计。微调后的大模型直接使用,和原本模型的耗时一致。

  • 系统拓展角度。随着项目的发展,大模型训练不一定能支撑多任务,而拿着大模型训好几个,对部署而言并不方便。

上面的内容所体现出来的,更多是RAG的优势,看起来似乎微调就没有什么好处了。但事实并非如此,RAG还是有很多不适用的环境的。

  • RAG依赖知识库。如果不具备构造知识库的条件,那RAG无从谈起,例如没有具体的业务数据,或者是机器不支持支撑检索之类的。

  • 业务需求并非对知识依赖。例如某些业务的话术生成,更多是对语言风格的约束,此时要么通过prompt解决,要么就是构造业务数据来进行训练即可,根本没有构造RAG的必要。

  • 依赖实时信息而非固有信息。直接举例,对话摘要应该是大模型具有的比较强的能力,这种任务更多是依赖收到的对话记录,而非一些固有存储好的内容,此时通过工程手段直接把信息获取导入到模型即可,不需要把对应内容入库了。如果对对话摘要的内容不满意,则应该是通过prompt和微调来解决。当然有人可能会说通过few-shot的方式,可以用RAG,这个当然是可以的,但就不是必须了。

  • 指令不生效或者领域知识完全不具备。这个不多解释了,大模型此处是短板,那即使是RAG,把答案摆在面前,也解决不了问题。

  • 内容会受到检索结果局限。有些创造性的任务,本身是想通过大模型获取新的灵感,然而检索结果给到大模型后,大模型往往容易受到限制,这个限制在有些时候是好事,但并非所有时候。

技术方案分析案例

借助两个比较典型的案例,大家应该能体会这两者的区别了。

产品百科问答

电商场景下,客服都要具备一个能力,就是产品百科问答,用户会需要咨询某些商品的属性等细节消息,这是一个很具体的场景了。然而实际我们需要面对的,除了这个功能本身,还需要解决一个问题,即商品信息是需要更新和变化的,例如新商品上架、价格优惠修改等,这个信息是需要快速反映在问答系统中的,此时我们RAG非常有必要性。

  • 商品信息的更新,不定期且频繁,这种更新通过微调来做,敏捷度不足,风险也比较高。

  • 知识如果是结构化,本身用于微调训练并不方便,需要转化,但是数据库存储则比较方便。

  • 商品型号很多很接近,容易混淆,大模型很容易出现“张冠李戴”现象。

日常工作工具

写周报、灵感、工作日志、修改一份材料、查错查重、话术推荐、会议纪要之类的,类似这些问题,我们更多的日常使用方式就是prompt+大模型完成,我们做起来非常自然,可能顶多会根据自己的需求加一些例子,但往往不会优先考虑RAG。

  • 对固有信息要求不高,甚至没有需求。

  • 供给检索的数据,如果不是因为产品本身的信息收集,一般情况下很难获取,对RAG而言可以说是无米之炊了。

  • 类似灵感的任务,案例反而可能限制模型发挥。

  • 要求的更多是指令的执行能力,这个如果不具备,很可能就要考虑通过微调来整了。

2a998140e0094f75be038bc9e44ee631.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修复通达OA 百度ueditor 文件上传漏动

前些日子,服务器阿里云监控报警,有文件木马文件,因为非常忙,就没及时处理,直接删除了木马文件了事。 谁知,这几天对方又上传了木马文件。好家伙,今天不花点时间修复下,你都传上瘾了…

PHP【swoole】

前言 Swoole官方文档:Swoole 文档 Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无…

Dynamo初学尝试梳理

学习Dynamo有一段时间了,最近整理了下自己的笔记,分享一些给初学者,做个备忘吧!(PS:很多资料网上都能搜到,我仅仅是收集整理下笔记,分享给大家) 今天先简单介绍下Dynamo…

展厅设计中多媒体的常用技术

1、互动投影 可以大大提高展厅和观众之间的互动体验,使观众不仅可以享受观看,还可以在轻松娱乐的氛围中娱乐的氛围中享受每个展览的背景故事和内涵,使整个参观过程非常轻松愉快。 2、幻影成像 可以全面展示企业产品的生产过程,让观…

STM32 (4) GPIO(1)

1.芯片的引脚分布 2.普通IO引脚的命名规则 3.IO复用 IO引脚身兼数职的现象叫做IO复用,可以使芯片拥有更多的功能,例如: PA9和PA10既可以用于GPIO的引脚,也可以用于串口或定时器的引脚 通用:CPU直接控制IO引脚的输入输…

【OpenGL编程手册-04】详细解释着色器

着色器 目录 一、说明二、着色器语言GLSL2.1 典型的着色器代码2.2 数据类型2.2.1 向量 2.3 输入与输出2.3.1 顶点着色器2.3.2 片段着色器 2.4 Uniform2.5 函数后缀含义2 .6 更多属性! 三、我们自己的着色器类四、从文件读取五、 编译着色器练习 一、说明 在Hello T…

shopee、美客多、敦煌、国际站卖家如何掌握测评补单的核心要素

对于卖家而言,测评补单是一种经济高效的推广策略,它对于提升商品流量、优化转化率、增强关键词质量分以及加强链接权重都起到了积极的推动作用。然而,要实现自养号测评,需满足以下条件: 首要之务,建立一个稳…

jenkins插件下载失败bug

如果遇到安装jenkins插件经常失败并报以下类似错误,很可能是因为jenkins国外官方插件地址下载速度非常慢,我们可以修改为国内插件地址。 java.io.IOException: Failed to load: SCM API Plugin (scm-api 676.v886669a_199a_a_) - Jenkins (2.361.4) or h…

详细分析Java类调用Service接口失效的注意事项(附Demo)

目录 前言1. 问题所示2. 原理分析3. 解决方法 前言 试错了一小时&#xff0c;发现接口返回null&#xff01;&#xff01; 最后梳理其知识点并总结其原理 1. 问题所示 接口类如下&#xff1a; public interface IInfoService extends BaseService<Info> {错误方式一&a…

【Zookeeper】ZooKeeper的一些重要功能和作用

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 结语 我的其他博客 前言 随着分布式系统的普及和应用场景的不断增加&#xff0c;构建可靠、高效的分布式系统变得愈发重要。然…

C 嵌入式系统设计模式 19:保护调用模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之五…

Cesium 3D Tiles 简介

3D Tiles 是大规模异构 3D 地理空间数据集&#xff08;例如点云、建筑物和摄影测量&#xff09;的开放标准。3D Tiles 基于 glTF 和其他 3D 数据类型构建&#xff0c;是一种可类似二维瓦片模式的流式传输的优化格式&#xff0c;旨在适应当今不断增长的 3D 地理空间数据集的渲染…

【数据分享】1979~2020年MSWEP降水数据集

各位同学们好&#xff0c;今天和大伙儿分享的是1979~2020年MSWEP降水数据集。如果大家有下载处理数据等方面的问题&#xff0c;您可以私信或者评论。 Beck, H. E., E. F. Wood, M. Pan, C. K. Fisher, D. G. Miralles, A. I. J. M. van Dijk, T. R. McVicar, and R. F. Adler, …

深度学习 精选笔记(7)前向传播、反向传播和计算图

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

U盘无法读取?轻松掌握正确解决方法!

“为什么我的u盘插入电脑后会显示无法读取呢&#xff1f;想查看一些比较重要的文件&#xff0c;但就是无法读取U盘&#xff0c;想问问大家&#xff0c;我应该怎么操作呢&#xff1f;” U盘作为一种便捷的数据存储设备&#xff0c;广泛应用于我们的日常生活和工作中。然而&#…

独立游戏《星尘异变》UE5 C++程序开发日志2——创建并编写一个C++类

在本篇日志中&#xff0c;我们将要用一个C类来实现一个游戏内的物品&#xff0c;同时介绍UCLASS、USTRUCT、UPROPERTY的使用 一、创建一个C类 我们在UE5的"内容侧滑菜单"中&#xff0c;在右侧空白中右键选择"新建C类"&#xff0c;然后可以选择一个想要的…

Spring AOP(Aspect-Oriented Programming,面向切面编程)介绍

Spring AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是Spring框架的一个重要模块&#xff0c;它提供了一种强大的方式来帮助开发者实现横切关注点&#xff08;cross-cutting concerns&#xff09;的模块化。横切关注点是指那些影响多个模块…

Linux设备模型(十一) - platform设备

一&#xff0c;platform device概述 在Linux2.6以后的设备驱动模型中&#xff0c;需关心总线、设备和驱动这3个实体&#xff0c;总线将设备和驱动绑定。在系统每注册一个设备的时候&#xff0c; 会寻找与之匹配的驱动&#xff1b;相反的&#xff0c;在系统每注册一个设备的时…

可让照片人物“开口说话”阿里图生视频模型EMO,高启强普法

3 月 1 日消息&#xff0c;阿里巴巴研究团队近日发布了一款名为“EMO&#xff08;Emote Portrait Alive&#xff09;”的 AI 框架&#xff0c;该框架号称可以用于“对口型”&#xff0c;只需要输入人物照片及音频&#xff0c;模型就能够让照片中的人物开口说出相关音频&#xf…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …