心法利器[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.pswp.cn/news/718286.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718286.shtml
英文地址,請注明出處:http://en.pswp.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引腳的輸入輸…

Linux:用戶格式顯示進程

簡介 在Linux系統中,ps 命令用于查看當前系統中的進程。ps -aux 是該命令的一個常用選項組合,用于以用戶格式顯示所有進程。 ps -aux 輸出的信息內容及含義: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND r…

【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;構建可靠、高效的分布式系統變得愈發重要。然…

Vue 3 中如何遷移從 Vue 2 的項目?

引言 Vue.js 是一個流行的前端框架&#xff0c;它以其響應式數據綁定和組件化系統而聞名。隨著時間的推移&#xff0c;Vue.js 也在不斷發展和改進。Vue 3 是 Vue.js 的一個重大更新&#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 地理空間數據集的渲染…

編碼規范(前端)

文章目錄 1. 文檔說明1.1 編制說明1.2 名詞解釋 2.前端研發規范2.1 HTML編碼規范2.1.1 文檔類型2.1.2 語言2.1.3 元數據2.1.4 資源加載2.1.5 頁面標題2.1.6 編碼風格2.1.7 標簽2.1.8 屬性2.1.9 語義化 2.2 CSS編碼規范2.2.1 文件引用2.2.2 命名-組成元素 知識點 1. 文檔說明 1…

【數據分享】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, …

【軟件設計師】通俗易懂的去了解算法的特性和要求

&#x1f413; 算法 算法是對特定問題求解步驟的一種描述&#xff0c;算法是指令的有限序列。其中每一條指令表示一個或者多個操作。 &#x1f413; 算法的5種屬性 有窮性 一個算法必須總是在執行有窮的步驟后&#xff0c;且在每個步驟執行的過程中時間是有限的 1.有窮性意味…

深度學習 精選筆記(7)前向傳播、反向傳播和計算圖

學習參考&#xff1a; 動手學深度學習2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、請聯系侵刪。 ②已寫完的筆記文章會不定時一直修訂修改(刪、改、增)&#xff0c;以達到集多方教程的精華于一文的目的。 ③非常推薦上面&#xff08;學習參考&#x…

藍橋杯:單詞分析

題目 題目描述 小藍給學生們組織了一場考試&#xff0c;卷面總分為 100 分&#xff0c;每個學生的得分都是一個 0 到 100 的整數。 如果得分至少是 60 分&#xff0c;則稱為及格。如果得分至少為 85 分&#xff0c;則稱為優秀。 請計算及格率和優秀率&#xff0c;用百分數表…

Rstudio-深度學習執行代碼

RStudio是一個開源的集成開發環境&#xff08;IDE&#xff09;&#xff0c;專門用于R編程語言的開發和數據分析。R語言是一種流行的統計計算和數據可視化語言&#xff0c;廣泛用于數據科學、統計學和機器學習領域。 RStudio提供了許多功能強大的工具&#xff0c;包括代碼編輯器…