自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大模型的提示工程:提示是對程序的搜索 精華

發(fā)布于 2024-5-27 14:07
瀏覽
0收藏

Google 研究員 Fran?ois Chollet 是一位在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域具有重要影響力的一線工程師。他以創(chuàng)建流行的開源機(jī)器學(xué)習(xí)庫 Keras 而聞名, 同時(shí)也是流行的機(jī)器學(xué)習(xí)實(shí)戰(zhàn)書籍《Deep Learning with Python (使用 Python 來深度學(xué)習(xí))》 的作者。不久前他發(fā)表博文:“How I think about LLM prompt engineering (大模型的提示工程之我見)”,深入地探討了大模型提示工程。Chollet 從語言模型架構(gòu)、學(xué)習(xí)機(jī)制和能力的演進(jìn)來理解大模型的提示工程。他特別指出大模型實(shí)際上是一個(gè) (向量) 程序數(shù)據(jù)庫,而且該數(shù)據(jù)庫是連續(xù)的和內(nèi)插的,因而對大模型的提示是對其中某個(gè)程序(通過內(nèi)插)來查詢,所以提示工程實(shí)際上是在向量程序空間內(nèi)的搜索。提示學(xué)習(xí)是當(dāng)今大模型應(yīng)用的主要方式; 這樣的探討對于大模型理解和應(yīng)用都是有益的。我們特將該內(nèi)容編譯出來和各位客戶、合作伙伴朋友分享。

回溯:Word2Vec 的涌現(xiàn)詞算術(shù)

在 2013 年,谷歌的Mikolov 等人注意到了一些令人矚目的現(xiàn)象。

他們當(dāng)時(shí)正在構(gòu)建一個(gè)將詞匯中的單詞嵌入到向量空間的模型——這個(gè)問題在當(dāng)時(shí)已經(jīng)有著悠久的學(xué)術(shù)歷史,可以追溯到上世紀(jì) 80 年代。他們的模型使用了一種優(yōu)化目標(biāo),旨在將單詞之間的相關(guān)關(guān)系轉(zhuǎn)化為嵌入空間中的距離關(guān)系:每個(gè)單詞被分配一個(gè)向量,這些向量被優(yōu)化,使得經(jīng)常一起出現(xiàn)的單詞的向量點(diǎn)積(余弦相似度)接近 1,而很少一起出現(xiàn)的單詞的向量點(diǎn)積接近 0。

他們發(fā)現(xiàn),由此產(chǎn)生的嵌入空間不僅能夠捕捉語義相似性,還具有某種涌現(xiàn)學(xué)習(xí)的能力——它能夠進(jìn)行“詞算術(shù)”,而這并不是它被訓(xùn)練去做的事情。在空間中存在一個(gè)向量,當(dāng)它加到任意一個(gè)表示男性的名詞上時(shí),得到的點(diǎn)會接近于它的女性對應(yīng)詞。比如:V(國王) - V(男人) + V(女人) = V(王后)。一個(gè)“性別向量”。非???!似乎有幾十個(gè)這樣的神奇向量——一個(gè)復(fù)數(shù)向量,一個(gè)將野生動物名稱轉(zhuǎn)化為其對應(yīng)的寵物名稱的向量等等。

大模型的提示工程:提示是對程序的搜索-AI.x社區(qū)

圖示:一個(gè)二維嵌入空間,使得將“狼”與“狗”鏈接的向量與將“虎”與“貓”鏈接的向量相同。

Word2Vec 和大語言模型:Hebbian 學(xué)習(xí)類比

時(shí)間快進(jìn)十年——我們現(xiàn)在已經(jīng)進(jìn)入了大語言模型的時(shí)代。從表面上看,現(xiàn)代大語言模型與原始的 word2vec 模型似乎完全不同。它們能夠生成流暢的語言——這是 word2vec 完全無法做到的——并且似乎對任何話題都有一定的了解。然而,它們實(shí)際上與古老的 word2vec 有很多共同之處。

兩者都是關(guān)于將 token(單詞或子詞)嵌入到向量空間中。兩者都依賴于相同的基本原理來學(xué)習(xí)這個(gè)空間:一起出現(xiàn)的 token 在嵌入空間中會更接近。用于比較 token 的距離函數(shù)在兩種情況下是相同的:余弦距離。甚至嵌入空間的維度也相似:大約在 10e3 或 10e4 的數(shù)量級上。

你可能會問——等等,我被告知大語言模型是自回歸模型,通過基于之前的單詞序列預(yù)測下一個(gè)單詞來進(jìn)行訓(xùn)練。這與 word2vec 最大化共存 token 點(diǎn)積的目標(biāo)有什么關(guān)系呢?

實(shí)際上,大語言模型似乎確實(shí)將相關(guān)的 token 編碼在相近的位置,所以兩者之間一定存在某種聯(lián)系。答案是自注意力機(jī)制。

自注意力是 Transformer 架構(gòu)中最重要的組成部分。它是一種通過線性組合先前空間中的 token 嵌入來學(xué)習(xí)新的 token 嵌入空間的機(jī)制,這種組合會給已經(jīng)“更接近”的 token(即點(diǎn)積更高的 token)更大的權(quán)重。它會傾向于將已經(jīng)接近的向量拉得更近——隨著時(shí)間的推移,相關(guān)關(guān)系會轉(zhuǎn)化為嵌入空間中的接近關(guān)系(以余弦距離衡量)。Transformer 通過學(xué)習(xí)一系列逐步改進(jìn)的嵌入空間來實(shí)現(xiàn),每個(gè)空間都是基于對前一個(gè)空間的元素進(jìn)行重新組合。

大模型的提示工程:提示是對程序的搜索-AI.x社區(qū)

自我注意力是如何工作的:在這里,注意力分?jǐn)?shù)是在“站”和序列中的所有其他單詞之間計(jì)算的,然后它們被用來加權(quán)成為新的“站”向量的詞向量的總和。

自注意力賦予了 Transformer 兩個(gè)關(guān)鍵屬性:

1. 它們學(xué)習(xí)的嵌入空間在語義上是連續(xù)的,即在嵌入空間中移動一點(diǎn)只會使相應(yīng) token 的語義稍微改變一點(diǎn)。word2vec 空間也具有這個(gè)屬性。

2. 它們學(xué)習(xí)的嵌入空間在語義上是可插值的,即在嵌入空間中的兩個(gè)點(diǎn)之間取中間點(diǎn)會產(chǎn)生一個(gè)表示相應(yīng) token “中間含義”的點(diǎn)。這是因?yàn)槊總€(gè)新的嵌入空間都是通過在前一個(gè)空間的向量之間進(jìn)行插值構(gòu)建的。

請注意,這與大腦的學(xué)習(xí)方式非常相似。大腦中的關(guān)鍵學(xué)習(xí)原則是Hebbian 學(xué)習(xí)——簡而言之就是“一起激活的神經(jīng)元會連接在一起”。神經(jīng)激活事件之間的相關(guān)關(guān)系(可能代表動作或感知輸入)轉(zhuǎn)化為大腦網(wǎng)絡(luò)中的距離關(guān)系,就像Transformer(和 word2vec)將相關(guān)關(guān)系轉(zhuǎn)化為向量距離關(guān)系一樣。兩者都是信息空間的映射。

從涌現(xiàn)詞算術(shù)到涌現(xiàn)向量程序

當(dāng)然,word2vec 和大語言模型之間也存在顯著的差異。word2vec 并不是為生成文本而設(shè)計(jì)的。大語言模型要大得多,能夠編碼復(fù)雜得多的變換。問題是,word2vec 確實(shí)是一個(gè)玩具模型:它之于語言建模,就像對 MNIST 圖像像素進(jìn)行邏輯回歸之于最先進(jìn)的計(jì)算機(jī)視覺模型一樣?;驹泶笾孪嗤婢吣P腿狈θ魏斡幸饬x的表示能力。word2vec 甚至不是一個(gè)深度神經(jīng)網(wǎng)絡(luò)——它具有淺層、單層的架構(gòu)。與此同時(shí),大語言模型具有任何人訓(xùn)練過的任何模型的最高表示能力——它們具有幾十個(gè) Transformer 層,總共幾百層,參數(shù)數(shù)量達(dá)到數(shù)十億。

就像 word2vec 一樣,大語言模型通過將 token 組織到向量空間中來學(xué)習(xí)有用的語義函數(shù)。但由于表示能力的提高和更精細(xì)的自回歸優(yōu)化目標(biāo),我們不再局限于像“性別向量”或“復(fù)數(shù)向量”這樣的線性變換。大語言模型可以存儲任意復(fù)雜的向量函數(shù)——實(shí)際上,將它們稱為向量程序比函數(shù)更準(zhǔn)確。

word2vec 使你能夠進(jìn)行一些基本操作,比如 plural(貓) → 貓們,或者 male_to_female(國王) → 女王。而大語言模型則可以進(jìn)行純粹的魔法操作——比如 write_this_in_style_of_shakespeare(“...你的詩...”) → “...新詩...”。它們包含了數(shù)百萬這樣的程序。

大語言模型作為程序數(shù)據(jù)庫

你可以將大語言模型視為類似于數(shù)據(jù)庫:它存儲信息,你可以通過提示來檢索這些信息。但大語言模型和數(shù)據(jù)庫之間有兩個(gè)重要的區(qū)別。

第一個(gè)區(qū)別是,大語言模型是一種連續(xù)的、可插值的數(shù)據(jù)庫。數(shù)據(jù)不是以一組離散的條目存儲,而是存儲在一個(gè)向量空間——一條曲線上。你可以在曲線上移動(它是語義連續(xù)的,正如我們所討論的)來探索附近的相關(guān)點(diǎn)。你可以在不同的點(diǎn)之間進(jìn)行插值,以找到它們的中間點(diǎn)。這意味著你可以從數(shù)據(jù)庫中檢索到比你輸入的更多的信息——但并不是所有的信息都是準(zhǔn)確的或有意義的。插值可能導(dǎo)致泛化,但也可能導(dǎo)致幻覺。

第二個(gè)區(qū)別是,大語言模型不僅包含數(shù)據(jù)。它當(dāng)然包含了很多數(shù)據(jù)——事實(shí)、地點(diǎn)、人物、日期、事物、關(guān)系。但它也是——也許主要是——一個(gè)程序數(shù)據(jù)庫。

但是,這些程序并不是你所習(xí)慣處理的那種。你可能會想到確定性的Python 程序——一系列符號語句逐步處理數(shù)據(jù)。但并不是這樣。相反,這些向量程序是高度非線性的函數(shù),它們將潛在的嵌入空間映射到其自身。類似于 word2vec 的神奇向量,但要復(fù)雜得多。

提示作為程序查詢

要從大語言模型中獲取信息,你必須提示它。如果大語言模型是一個(gè)包含數(shù)百萬向量程序的數(shù)據(jù)庫,那么提示就像是在該數(shù)據(jù)庫中的搜索查詢。提示的一部分可以被解釋為“程序鍵”,即你想要檢索的程序的索引,另一部分可以被解釋為程序的輸入。

考慮以下提示示例:“用莎士比亞的風(fēng)格重寫以下詩歌:...我的詩...”

大模型的提示工程:提示是對程序的搜索-AI.x社區(qū)

“用 ... 風(fēng)格重寫”是程序鍵。它指向程序空間中的特定位置。

“莎士比亞”和“...我的詩...”是程序輸入。

大語言模型的輸出是程序執(zhí)行的結(jié)果。

現(xiàn)在,請記住,大語言模型作為程序數(shù)據(jù)庫的類比只是一種思維模型——還有其他模型可以使用。一個(gè)更常見的模型,但不太具有啟發(fā)性,是將大語言模型視為自回歸文本生成器,根據(jù)訓(xùn)練數(shù)據(jù)分布輸出最有可能跟隨提示的單詞序列——即關(guān)注大語言模型被優(yōu)化的任務(wù)。如果你在思考大語言模型的工作方式時(shí),能記住多種模型,你會更好地理解它們——希望你會發(fā)現(xiàn)這個(gè)新的模型有用。

提示工程作為程序搜索過程

記住,這個(gè)“程序數(shù)據(jù)庫”是連續(xù)的和可插值的——它不是一個(gè)離散的程序集。這意味著一個(gè)稍微不同的提示,比如“用 x 的風(fēng)格從歌詞上重新表述這段文本”,仍然會指向程序空間中非常相似的位置,得到的程序行為會非常接近但不完全相同。

你可以使用數(shù)千種不同的變體,每個(gè)變體都會導(dǎo)致一個(gè)相似但不完全相同的程序。這就是為什么需要提示工程。你的第一次嘗試、直覺上的程序鍵沒有理由在目標(biāo)任務(wù)上產(chǎn)生最佳的程序。大語言模型不會“理解”你的意思,然后以最佳方式執(zhí)行它——它只會檢索你的提示所指向的程序,而你的提示可能指向了眾多可能的位置中的一個(gè)。

提示工程是一個(gè)在程序空間中搜索的過程,目標(biāo)是找到在你的目標(biāo)任務(wù)上表現(xiàn)最佳的程序。這與你在谷歌搜索軟件時(shí)嘗試不同的關(guān)鍵詞沒有什么不同。

如果大語言模型真的理解你告訴它們的內(nèi)容,那么就不需要這個(gè)搜索過程了,因?yàn)殛P(guān)于你的目標(biāo)任務(wù)的信息量不會因?yàn)槟愕奶崾局惺褂谩爸貙憽倍皇恰爸匦卤硎觥保蛘吣闶欠裨谔崾厩凹由稀爸鸩剿伎肌倍淖?。永遠(yuǎn)不要假設(shè)大語言模型第一次就“理解”了——記住,你的提示只是無限程序海洋中的一個(gè)地址,它們都是通過自回歸優(yōu)化目標(biāo)將 token 組織到向量空間中的副產(chǎn)品。

一如既往,理解 LLM 最重要的原則是你應(yīng)該抵制將它們擬人化的誘惑。

本文轉(zhuǎn)載自??MoPaaS魔泊云??,作者: Fran?ois Chollet ????

標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦