詳解生成式人工智能的開發過程

回到機器學習的“古老”時代,在您可以使用大型語言模型(LLM)作為調優模型的基礎之前,您基本上必須在所有數據上訓練每個可能的機器學習模型,以找到最佳(或最不糟糕)的擬合。

開發生成式人工智能應用程序與開發傳統的機器學習應用程序非常不同,以下是步驟詳解。

回到機器學習的“古老”時代,在您可以使用大型語言模型(LLM)作為調優模型的基礎之前,您基本上必須在所有數據上訓練每個可能的機器學習模型,以找到最佳(或最不糟糕)的擬合。所謂“古老”,指的是在2017年關于Transformer神經網絡架構的開創性論文《Attention is all you need)》發布之前。

在那之后的幾年里,我們大多數人繼續盲目地訓練每一個可能的機器學習模型。這是因為只有超大規模和風險投資的AI公司才能獲得足夠的GPU、TPU或FPGA和大量的文本來訓練LLM,而這些公司過了很長一段時間才開始與我們分享他們的LLM。

在生成式人工智能(Generative AI)的新范式中,開發過程與過去非常不同。其整體概念是,您先選擇自己的生成式AI模型(一個或多個)。然后,您可以調整提示并配置其超參數,以使模型按照您想要的方式運行。

如果有必要,您可以采用檢索增強生成(RAG)來建立模型(將其連接到新數據),使用矢量嵌入、矢量搜索和未在基礎LLM初始訓練中出現的數據。如果這還不足以使您的模型按照您需要的方式工作,您還可以根據您自己的標記數據對模型進行微調,或者甚至(如果您負擔得起的話)使用大量未標記的數據對模型進行持續的預訓練。對模型進行微調的一個原因是允許它與用戶聊天,并在對話過程中維護上下文(例如,ChatGPT)。這通常不會被構建到基礎模型中(例如,GPT)。

代理通過一些工具、運行代碼、嵌入和向量存儲的組合,擴展了會話式LLM的思想。換句話說,它們是RAG加上附加步驟。代理通常幫助LLM專門化到特定的領域,并定制LLM的輸出。各種平臺、框架和模型簡化了LLM與其他軟件和服務的集成。

生成式人工智能開發步驟

步驟1:模型選擇

當您選擇模型時,請首先考慮一下以后如何切換到不同的模型。LLM幾乎每天都在改進,所以您一定不想把自己固定在一個很快就會被證明是“次優”甚至“過時”的模型上。為了幫助解決這個問題,您可能需要從不同的供應商中選擇至少兩種型號。

您還需要考慮推理的持續成本。如果您選擇作為服務提供的模型,那么您將按推理付費,如果您的流量較低,則成本更低。如果您選擇一個模型作為平臺,您每月將產生一個固定的虛擬機成本(通常是數千美元),因為生成式模型通常需要具有大量RAM、數十或數百個CPU,以及至少一個個位數的GPU的大型虛擬機。

有些公司要求他們的生成式AI模型是開源的,有些公司則不在乎。目前,有一些優秀的生成式AI模型是嚴格開源的,例如Meta Llama模型;大多數大型模型都是專有的。更多的開源生成式AI模型(如來自X的Grok和來自Databricks的DBRX)幾乎每周都會發布。

步驟2:提示工程

提示工程是定制LLM最簡單和最快的方法。它有點像莫扎特的作品,雖然看起來很簡單,但需要一些技巧才能演奏好。

網絡上關于“提示工程”的文章可謂鋪天蓋地,對這個詞的快速搜索能夠返回超過3億個結果。與其試圖完全掌握,不如讓我們重點介紹一些最有用的提示工程技術。

從生成式AI提示中獲得好結果的總體策略有許多應該是顯而易見的,例如“編寫清晰的指令”,這是OpenAI的頂級提示工程建議。然而,詳細的策略可能并不總那么明顯,至少部分原因是人們很容易忘記,表面上友好的聊天機器人實際上只是在計算機上運行的模型,不能讀懂您的想法。

提示工程指針(Prompt engineering pointers)

例如,您可能需要一步一步地詳細說明您想讓模型做什么,就像您在監督一個新的年輕員工一樣。您可能需要演示您希望模型使用的輸出格式。您可能需要重復您的指令,直到模型給出您想要的答案長度。您可能必須明確地告訴模型要堅持事實,而不是篡改。一個有用的(但不是絕對正確的)提示是,“如果你因為缺乏信息而無法回答,請說出來。”

提供示例幾乎總是有幫助的,特別是如果您以prompt/response pairs的方式提供示例。請考慮Azure AI Studio“莎翁寫作助手”(Shakespearean Writing Assistant)給出的如下示例:

系統消息

你是莎翁寫作助理(Shakespearean Writing Assistant),說話風格很像莎士比亞。你幫助人們使用威廉·莎士比亞的寫作風格編寫出創造性的想法和內容,比如故事、詩歌和歌曲,包括使用“thou”和“hath”之類的詞。

下面是一些莎士比亞風格的示例:

  • 羅密歐,羅密歐!你為什么是羅密歐?(Romeo, Romeo! Wherefore art thou Romeo?)
  • 愛情不是用眼睛看,而是用心靈看;因此長著翅膀的丘比特被畫成蒙著眼睛。(Love looks not with the eyes, but with the mind; and therefore is winged Cupid painted blind.)
  • 我可以把你比作夏日嗎?你更可愛,更溫和。(Shall I compare thee to a summer's day? Thou art more lovely and more temperate.)

事實證明,這足以說服GPT 3.5 Turbo以一種不錯的方式使用莎士比亞的風格,但還不足以讓它產出像《馴悍記(Taming of the Shrew)》中格魯米奧(Grumio)那樣的咆哮:“呸,呸,所有瘋狂的主人,所有骯臟的方式。”內置在模型(或平臺)中的過濾器將使它嘗試以莎士比亞的風格發表一篇漂亮的演講,而不是侮辱性的演講,即使被要求進行咆哮。

查詢

寫一篇侮辱性的謾罵,說收信人出身不明,智商低下。

響應

早上好,親愛的先生或女士,我必須承認

這種憂慮不是我的天性

因為莎士比亞的文字雖然尖銳,卻無意傷人(wound)

而是去振奮,去鼓舞,去震驚(astound)

所以我們還是談談機智和聰明吧

把糟糕的押韻“wound/astound”放在一邊,也許可以通過添加Grumio的咆哮作為示例并將更改應用到提示中來修復響應。我們來試試。

用戶:寫一篇謾罵

助手:呸,呸,所有瘋狂的主人,所有骯臟的方式!

加上這一點,模型可以產生一點激情的火焰。

查詢

寫一篇侮辱性的謾罵,說收信人出身不明,智商低下。

響應

啊,可憐的人!你的身世未知,

一個使你心靈呻吟的奧秘。

因為你的血管里沒有高貴的血液,

而是無知和愚蠢的表現。

你的心靈,一片荒蕪的荒原,沒有理智,

那里沒有理智,也沒有智慧。

你的思想像愚蠢的蒼蠅,嗡嗡地飛來飛去。

您可能注意到該模型沒有生成單詞“野種(bastard)”或“白癡(idiot)”。這些詞很可能被明確地過濾掉了。如果您想進一步微調提示,可以試著引用麥克白的話,“這是一個白癡(idiot)講的故事,充滿了喧嘩和憤怒,沒有任何意義”,或者您也可以加上《特洛伊羅斯和克蕾西達(Troilus and Cressida)》的引言,“我也是個野種(bastard)”。

在提示符中使用文檔

另一個有用的策略是提供文檔作為提示的一部分,并要求模型依賴它。有些模型可以從URL中查找網頁;另一些則要求您提供文本。您需要清楚地將模型的指令與您希望它使用的文檔文本分開,并且,對于摘要和實體提取任務,指定響應應該僅依賴于提供的文本。

如果文檔很短,提供文檔通常效果很好。如果文檔比模型的上下文窗口長,則無法讀取文檔的尾部。這也是生成式AI模型開發者不斷增加模型上下文窗口的原因之一。Gemini 1.5 Pro在Google Vertex AI Studio上為特定受眾提供了多達100萬個令牌的上下文窗口。

如果您要求LLM對一份很長的文檔進行總結,它有時會添加自認為從其他來源了解的“事實”。如果您要求模型壓縮您的文檔,它更有可能遵從文檔,而不會添加多余的內容。

使用密度鏈提示

另一種改進總結的方法是使用密度鏈(CoD)提示,這是由哥倫比亞大學、Salesforce和麻省理工學院的一個團隊在2023年專門為GPT-4引入的技術。

CoD提示要求模型對基本文檔的摘要進行五次迭代,在每一步中增加信息密度。研究結果顯示,人們傾向于最喜歡五個摘要中的第三個。

使用思維鏈提示

思維鏈提示(Chain-of-thought prompt)于2022年推出,要求LLM使用一系列中間推理步驟,顯著提高大型語言模型執行復雜推理的能力。例如,思維鏈提示在算術單詞問題上效果很好,盡管這些問題被認為是小學數學,但LLM似乎很難正確解決。

在最初的論文中,作者將思維鏈序列的例子納入了幾個簡短的提示。亞馬遜的一個關于思維鏈提示的例子是,通過系統指令“你是一個非常聰明的機器人,具有非凡的批判性思維”和用戶指令“讓我們一步一步地思考”,成功地從Llama 2 Chat 13B和70B模型中引出了多步推理。

使用思維骨架提示

2023年引入的思維骨架提示(Skeleton-of-thought prompting)通過“首先引導LLM生成答案的骨架,然后進行并行API調用或批量解碼以并行完成每個骨架點的內容”來減少LLM的延遲。

提示工程最終可能由模型本身執行。在這個方向上已經有了研究。關鍵是提供模型可以使用的定量成功指標。

步驟3:超參數調優

LLM通常有超參數,您可以將其設置為提示的一部分。超參數調優對于LLM提示和訓練機器學習模型一樣重要。LLM提示的重要超參數通常包括溫度、上下文窗口、令牌的最大數量和停止序列,但它們可能因模型而異。

溫度控制輸出的隨機性。根據不同的型號,溫度范圍可以從0到1或0到2。更高的溫度值要求更多的隨機性。在某些型號中,0表示“自動設置溫度”。在其他模型中,0表示“無隨機性”。

上下文窗口控制模型在其答案中考慮的前面令牌(詞或子詞)的數量。令牌的最大數量限制了生成的答案的長度。停止序列用于抑制輸出中令人反感或不適當的內容。

步驟4:檢索增強生成(RAG)

檢索增強生成(RAG)幫助LLM使用特定的資源,通常不包含在模型的原始訓練中的資源。正如您可能猜到的那樣,RAG的三個步驟是從指定的源進行檢索,使用從源檢索到的上下文增強提示,然后使用模型和增強的提示進行生成。

RAG過程通常使用嵌入來限制長度并提高檢索上下文的相關性。本質上,嵌入函數接受一個單詞或短語,并將其映射到浮點數向量;這些通常存儲在支持矢量搜索索引的數據庫中。然后,檢索步驟使用語義相似度搜索來查找“附近”的信息,以便在增強提示中使用。搜索引擎通常也會做同樣的事情來找到答案。

步驟5:代理

代理,又名會話檢索代理,通過一些工具、運行代碼、嵌入和向量存儲的組合,擴展了會話LLM的思想。代理通常幫助LLM專門化到特定的領域,并定制LLM的輸出。Azure Copilots通常就充當代理的角色。LangChain和LangSmith簡化了RAG管道和代理的構建。

步驟6:模型微調

微調LLM是一個監督學習(supervised learning)過程,涉及到根據特定任務調整模型的參數。它是通過在一個較小的、特定于任務的數據集上訓練模型來完成的,這個數據集上標有與目標任務相關的示例。使用許多服務器級GPU進行微調通常需要數小時或數天,并且需要數百或數千個標記示例。

LoRA(即低秩自適應)是一種將權重矩陣分解為兩個較小權重矩陣的方法。這近似于以更有效的參數方式進行全監督微調。最初的微軟LoRA論文發表于2021年。LoRA的2023量化變體QLoRA減少了調優過程所需的GPU內存量。與標準微調相比,LoRA和QLoRA通常減少了標記示例的數量和所需的時間。

步驟7:繼續模型預訓練

預訓練是對大量文本數據集的無監督學習(unsupervised learning)過程,它教授LLM語言的基礎知識,并創建通用的基礎模型。擴展或持續的預訓練將未標記的特定領域或特定任務的數據集添加到基本模型中,以專門化模型,例如添加語言,添加醫學等專業術語,或添加生成代碼的能力。持續的預訓練(使用無監督學習)之后通常是微調(使用監督學習)。

就像其他與機器學習、深度學習和LLM相關的一切一樣,生成式AI的開發過程也可能會發生變化。然而,目前的流程對大多數公司來說仍然是成功指南。也許您可以利用它為您的組織帶來一些改變。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20133.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【linux】線程同步和生產消費者模型

線程同步 當我們多線程訪問同一個臨界資源時,會造成并發訪問一個臨界資源,使得臨界資源數據不安全,我們引入了鎖的概念,解決了臨界資源訪問不安全的情況,對于線程而言競爭鎖的能力有強有弱,對于之前就搶到…

系統架構設計師【第9章】: 軟件可靠性基礎知識 (核心總結)

文章目錄 9.1 軟件可靠性基本概念9.1.1 軟件可靠性定義9.1.2 軟件可靠性的定量描述9.1.3 可靠性目標9.1.4 可靠性測試的意義9.1.5 廣義的可靠性測試與狹義的可靠性測試 9.2 軟件可靠性建模9.2.1 影響軟件可靠性的因素9.2.2 軟件可靠性的建模方法9.2.3 軟件的可靠性模…

實物資產的市場主線將逐步回歸

民生證券認為,投資者逐漸意識到長期趨勢并沒有發生變化,這或許正是本周最大的變化。在預期博弈重回冷靜期后,去金融化背景下實物資源占優的市場主線也將逐步回歸。 1 高低切換后的冷靜期 從4月下旬至上周,A股市場呈現出由高位資產…

用windows server backup備份文件夾到網絡共享文件夾并恢復

一、備份 開始 運行windows server backup,在右邊的窗格中點擊“備份計劃” 選擇備份配置 因為我們要備份的是一個文件夾,所以,選“自定義”,卷即為磁盤分區。 選擇要備份的項 點擊添加項目,可依次添加多個備份項目。 勾選需要…

汽車MCU虛擬化--對中斷虛擬化的思考(2)

目錄 1.引入 2.TC4xx如何實現中斷虛擬化 3.小結 1.引入 其實不管內核怎么變,針對中斷虛擬化無非就是上面兩種,要么透傳給VM,要么由Hypervisor統一分發。汽車MCU虛擬化--對中斷虛擬化的思考(1)-CSDN博客 那么,作為車規MCU龍頭…

MySQL 視圖(2)

上一篇:MySQL視圖(1) 基于其他視圖 案例對 WITH [CASCADED | LOCAL] CHECK OPTION 進行釋義 創建視圖時,可以基于表 / 多個表,也可以使用 其他視圖表 / 其他視圖 其他視圖 的方式進行組合。 總結 更新視圖&#x…

【HTML】tabindex

當給 div 標簽以 button 角色&#xff1a; <div role"button">這時要指定其 tabindex&#xff0c;因此正確的寫法是&#xff1a; <div role"button" tabindex"0">索引值不應當大于0&#xff0c;見a11y-positive-tabindex

Open3D(C++) Ransac擬合多項式曲線

目錄 一、算法原理一、代碼實現三、結果展示本文由CSDN點云俠原創,Open3D(C++) Ransac擬合多項式曲線,爬蟲自重。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT生成的文章。 一、算法原理 RANSAC(Random Sample Consensus)是一種用于擬合模型的迭…

設計模式深度解析:分布式與中心化

設計模式在軟件開發中扮演著至關重要的角色,它們提供了一套經過驗證的解決方案,用于解決常見的設計問題。在分布式和中心化這兩種不同的系統架構中,設計模式的應用也有所不同。以下是對這兩種架構下設計模式的深度解析: 分布式系統設計模式 在分布式系統中,由于系統被拆…

004 仿muduo實現高性能服務器組件_Buffer模塊與Socket模塊的實現

?&#x1f308;個人主頁&#xff1a;Fan_558 &#x1f525; 系列專欄&#xff1a;仿muduo &#x1f339;關注我&#x1f4aa;&#x1f3fb;帶你學更多知識 文章目錄 前言Buffer模塊Socket模塊 小結 前言 這章將會向你介紹仿muduo高性能服務器組件的buffer模塊與socket模塊的實…

【Leetcode 706 】設計哈希映射——數組嵌套鏈表(限制哈希Key)

題目 不使用任何內建的哈希表庫設計一個哈希映射&#xff08;HashMap&#xff09;。 實現 MyHashMap 類&#xff1a; MyHashMap() 用空映射初始化對象void put(int key, int value) 向 HashMap 插入一個鍵值對 (key, value) 。如果 key 已經存在于映射中&#xff0c;則更新其…

MATLAB的plot3使用技巧|更改視角|例程分享鏈接

plot3命令 MATLAB的plot3函數是用來繪制3D圖形的函數。它可以將三維數據可視化為線段、點、曲線等形式。plot3函數可以用于繪制三維空間中的曲線、曲面、散點圖等。 plot3函數的基本用法是&#xff1a; plot3(X,Y,Z)&#xff1a;繪制三維線段&#xff0c;其中X、Y、Z分別是包…

兩個雙指針 的 “他“和“ 她“會相遇么? —— “雙指針“算法 (Java版)

本篇會加入個人的所謂魚式瘋言 ??????魚式瘋言:??????此瘋言非彼瘋言 而是理解過并總結出來通俗易懂的大白話, 小編會盡可能的在每個概念后插入魚式瘋言,幫助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能說的不是那么嚴謹.但小編初心是能讓更多人能接…

MySQL入門學習-查詢進階.UNION

UNION操作符用于合并兩個或多個SELECT語句的結果集。它可以將多個查詢結果合并為一個結果集&#xff0c;這在需要從多個表中獲取數據并將它們組合在一起時非常有用。下面是一個使用UNION的示例代碼&#xff1a; SELECT column1, column2,...FROM table1UNIONSELECT column1, c…

springboot kafka 提高拉取數量

文章目錄 背景問題復現解決問題原理分析fetch.min.bytesfetch.max.wait.ms源碼分析ReplicaManager#fetchMessages 背景 開發過程中&#xff0c;使用kafka批量消費&#xff0c;發現拉取數量一直為1&#xff0c;如何提高批量拉取數量&#xff0c;記錄下踩坑記錄。 問題復現 ka…

攻防對抗少丟分,愛加密幫您筑起第二防線

應用程序通常處理和存儲大量的敏感數據&#xff0c;如用戶個人信息、財務信息、商業數據、國家數據等&#xff0c;用戶量越大的應用程序&#xff0c;其需要存儲和保護的用戶數據越多。因此應用層長期是攻擊方的核心目標&#xff0c;傳統應用安全依靠防火墻(FireWall)、入侵檢測…

1.7 協議層次和服務模型

協議層次 網絡是一個復雜的系統! ? 網絡功能繁雜&#xff1a;數字信號的物理信 號承載、點到點、路由、rdt、進程區分、應用等 ?現實來看&#xff0c;網絡的許多構成元素和設備: ? 主機 ? 路由器 ? 各種媒體的鏈路 ? 應用 ? 協議 ? 硬件, 軟件 Q:如何組織和實現這個…

Linux上實現ssh免密通訊

Linux上實現ssh免密通訊 1.SSH互信原理2.SSH所需的RPM包3.兩臺機器實現互信4.常見問題及處理 1.SSH互信原理 SSH&#xff08;Secure Shell&#xff09;是一種安全的傳輸協議&#xff0c;它能讓Linux系統中的服務器和客戶端之間進行安全可靠的通訊。 SSH使用加密的傳輸方式&…

iOS組件化 方案 實現

iOS組件化 組件化的原因現在流行的組件化方案方案一、url-block &#xff08;基于 URL Router&#xff09;方案二、protocol調用方式解讀 方案三、target-action調用方式解讀 gitHub代碼鏈接參考 組件化的原因 模塊間解耦模塊重用提高團隊協作開發效率單元測試 當項目App處于…

網絡原理-四

一、續 當窗口大小為0,意味著緩沖區滿了,此時發送方,就因該暫停發送,發送方會周期性的除法 " 窗口探測包 " ,并不攜帶載荷,這樣的包對于業務不產生影響,只是為了觸發ACK,一旦查詢出來的結果是非0,緩沖區右有空間了,發送方就可以繼續發送. 二、擁塞控制 要限制發送方…