張俊林:由ChatGPT反思大語言模型(LLM)的技術(shù)精要(3)
一般我們經(jīng)常提到的人和LLM的接口技術(shù)包括:zero shot prompting、few shot prompting、In Context Learning,以及Instruct。這些其實都是表達某個具體任務(wù)的描述方式。不過如果你看文獻,會發(fā)現(xiàn)叫法比較亂。
其中Instruct 是ChatGPT的接口方式,就是說人以自然語言給出任務(wù)的描述,比如“把這個句子從中文翻譯成英文”,類似這種。zero shot prompting我理解其實就是現(xiàn)在的Instruct的早期叫法,以前大家習(xí)慣叫zero shot,現(xiàn)在很多改成叫Instruct。盡管是一個內(nèi)涵,但是具體做法是兩種做法。早期大家做zero shot prompting,實際上就是不知道怎么表達一個任務(wù)才好,于是就換不同的單詞或者句子,反復(fù)在嘗試好的任務(wù)表達方式,這種做法目前已經(jīng)被證明是在擬合訓(xùn)練數(shù)據(jù)的分布,其實沒啥意思。目前Instruct的做法則是給定命令表述語句,試圖讓LLM理解它。所以盡管表面都是任務(wù)的表述,但是思路是不同的。
而In Context Learning和few shot prompting意思類似,就是給LLM幾個示例作為范本,然后讓LLM解決新問題。我個人認為In Context Learning也可以理解為某項任務(wù)的描述,只是Instruct是一種抽象的描述方式,In Context Learning是一種例子示范的例子說明法。當(dāng)然,鑒于目前這幾個叫法用的有點亂,所以上述理解僅代表個人看法。
所以我們此處只對In Context Learning和Instruct進行介紹,不再提zero shot和few shot了。
如果你細想,會發(fā)現(xiàn)In Context Learning是個很神奇的技術(shù)。它神奇在哪里呢?神奇在你提供給LLM幾個樣本示例 ,然后給它 ,LLM竟然能夠成功預(yù)測對應(yīng)的 。聽到這你會反問:這有什么神奇的呢?Fine-tuning不就是這樣工作的嗎?你要這么問的話,說明你對這個問題想得還不夠深入。
如果你細想,會發(fā)現(xiàn)In Context Learning是個很神奇的技術(shù)。它神奇在哪里呢?神奇在你提供給LLM幾個樣本示例$,....,然后給它x_{n+1},LLM竟然能夠成功預(yù)測對應(yīng)的y_{n+1}$ 。聽到這你會反問:這有什么神奇的呢?Fine-tuning不就是這樣工作的嗎?你要這么問的話,說明你對這個問題想得還不夠深入。
Fine-tuning和In Context Learning表面看似都提供了一些例子給LLM,但兩者有質(zhì)的不同(參考上圖示意):Fine-tuning拿這些例子當(dāng)作訓(xùn)練數(shù)據(jù),利用反向傳播去修正LLM的模型參數(shù),而修正模型參數(shù)這個動作,確實體現(xiàn)了LLM從這些例子學(xué)習(xí)的過程。但是,In Context Learning只是拿出例子讓LLM看了一眼,并沒有根據(jù)例子,用反向傳播去修正LLM模型參數(shù)的動作,就要求它去預(yù)測新例子。既然沒有修正模型參數(shù),這意味著貌似LLM并未經(jīng)歷一個學(xué)習(xí)過程,如果沒有經(jīng)歷學(xué)習(xí)過程,那它為何能夠做到僅看一眼,就能預(yù)測對新例子呢?這正是In Context Learning的神奇之處。這是否讓你想起了一句歌詞:“只是因為在人群中多看了你一眼 再也沒能忘掉你容顏”,而這首歌名叫“傳奇”。你說傳奇不傳奇?
看似In Context Learning沒從例子里學(xué)習(xí)知識,實際上,難道LLM通過一種奇怪的方式去學(xué)習(xí)?還是說,它確實也沒學(xué)啥?關(guān)于這個問題的答案,目前仍是未解之謎?,F(xiàn)有一些研究各有各的說法,五花八門,很難判斷哪個講述的是事實的真相,甚至有些研究結(jié)論還相互矛盾。這里提供幾個目前的說法,至于誰對誰錯,只能你自己把握了。當(dāng)然,我認為追求這個神奇現(xiàn)象背后的真相,是一個好的研究課題。
試圖證明In Context Learning沒有從例子中學(xué)習(xí)的工作是“Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?”。它發(fā)現(xiàn)了:在提供給LLM的樣本示例$中,y_i是否x_i對應(yīng)的正確答案,其實并不重要,如果我們把正確答案y_i替換成隨機的另外一個答案y_ix映射到y的映射函數(shù)信息y=f(x),否則的話你亂換正確標(biāo)簽,肯定會擾亂這個y=f(x)$映射函數(shù)。也就是說,In Context Learning并未學(xué)習(xí)這個輸入空間到輸出空間的映射過程。
真正對In Context Learning影響比較大的是:x 和 y 的分布,也就是輸入文本 x 的分布和候選答案 y 有哪些,如果你改變這兩個分布,比如把 y 替換成候選答案之外的內(nèi)容,則In Context Learning效果急劇下降。
總之,這個工作證明了In Context Learning并未學(xué)習(xí)映射函數(shù),但是輸入和輸出的分布很重要,這兩個不能亂改。
有些工作認為LLM還是從給出的示例學(xué)習(xí)了這個映射函數(shù) y=f(x) ,不過是種隱式地學(xué)習(xí)。比如“What learning algorithm is in-context learning? Investigations with linear models”認為Transformer能夠隱式地從示例中學(xué)習(xí) x 到 y 的映射過程,它的激活函數(shù)中包含了一些簡單映射函數(shù),而LLM通過示例能夠激發(fā)對應(yīng)的那一個。而“Why Can GPT Learn In-Context? Language Models Secretly Perform Gradient Descent as Meta-Optimizers”這篇文章則將ICL看作是一種隱式的Fine-tuning。
總而言之,目前這還是一個未解之謎。
我們可以把Instruct當(dāng)作一種方便人類理解的任務(wù)表述,在這個前提下,目前關(guān)于Instruct的研究可以分成兩種:偏學(xué)術(shù)研究的Instruct,以及關(guān)于人類真實需求描述的Instruct。
我們先來看第一種:偏學(xué)術(shù)研究的Instruct。它的核心研究主題是多任務(wù)場景下,LLM模型對Instruct理解的泛化能力。如上圖中FLAN模型所示,就是說有很多NLP任務(wù),對于每個任務(wù),研究人員構(gòu)造一個或者多個Prompt模版作為任務(wù)的Instruct,然后用訓(xùn)練例子對LLM模型進行微調(diào),讓LLM以同時學(xué)習(xí)多個任務(wù)。訓(xùn)練好模型后,給LLM模型一個它沒見過的全新任務(wù)的Instruct,然后讓LLM 解決zero shot任務(wù),從任務(wù)解決得是否足夠好,來判斷LLM模型是否有對Instruct理解的泛化能力。
如果歸納下目前的研究結(jié)論(可參考“Scaling Instruction-Fine-tuned Language Models”/“Super-NaturalInstructions: Generalization via Declarative Instructions on 1600+ NLP Tasks”),能夠有效增加LLM模型Instruct泛化能力的因素包括:增加多任務(wù)的任務(wù)數(shù)量、增加LLM模型大小、提供CoT Prompting, 以及增加任務(wù)的多樣性。如果采取任意一項措施,都可以增加LLM模型的Instruct理解能力。
第二種是人類真實需求下的Instruct,這類研究以InstructGPT和ChatGPT為代表。這類工作也是基于多任務(wù)的,但是和偏向?qū)W術(shù)研究類工作最大的不同,在于它是面向人類用戶真實需求的。為什么這么說呢?因為它們用于LLM多任務(wù)訓(xùn)練的任務(wù)描述Prompt,是從大量用戶提交的真實請求中抽樣而來的,而不是固定好研究任務(wù)的范圍,然后讓研究人員來寫任務(wù)描述prompt。這里所謂的“真實需求”,體現(xiàn)在兩個方面:首先,因為是從用戶提交的任務(wù)描述里隨機抽取的,所以涵蓋的任務(wù)類型更多樣化,也更符合用戶的真實需求;其次,某個任務(wù)的prompt描述,是用戶提交的,體現(xiàn)了一般用戶在表達任務(wù)需求時會怎么說,而不是你認為用戶會怎么說。很明顯,這類工作改出來的LLM模型,用戶體驗會更好。
InstructGPT論文里,也拿這種方法和FLAN那種Instruct based方法做了比較。首先在GPT3上用FLAN提到的任務(wù)、數(shù)據(jù)以及Prompt模版進行微調(diào),來在GPT 3上復(fù)現(xiàn)FLAN方法,然后和InstructGPT進行比較,因為InstructGPT的基礎(chǔ)模型也是GPT3,所以只有數(shù)據(jù)和方法的差別,兩者可比,結(jié)果發(fā)現(xiàn)FLAN方法的效果,距離InstructGPT有很大的差距。那么背后的原因是什么呢?論文分析數(shù)據(jù)后認為,F(xiàn)LAN方法涉及到的任務(wù)領(lǐng)域相對少,是InstructGPT涉及領(lǐng)域的子集,所以效果不好。也就是說,F(xiàn)LAN論文里涉及到的任務(wù)和用戶真實需求是不符的,而這導(dǎo)致在真實場景下效果不夠好。而這對我們的啟示是:從用戶數(shù)據(jù)中收集真實需求,這事情是很重要的。
如果我們假設(shè)In Context Learning是用一些例子來具象地表達任務(wù)命令,Instruct是一種更符合人類習(xí)慣的抽象任務(wù)描述。那么,一個很自然的問題是:它們之間有什么聯(lián)系嗎?比如,我們是否能夠提供給LLM完成某個任務(wù)的若干具體示例,讓LLM找出其對應(yīng)的自然語言描述的Instruct命令?
目前有零星的工作在探索這個問題,我認為這個方向是很有研究價值的。先說答案,答案是:Yes,LLM Can?!癓arge Language Models Are Human-Level Prompt Engineers”是做這個方向很有趣的工作,如上圖所示,對于某項任務(wù),給LLM一些示例,讓LLM自動生成能夠描述這項任務(wù)的自然語言命令,然后它再用LLM生成的任務(wù)描述去測試任務(wù)效果。它使用的基礎(chǔ)模型是GPT 3和InstructGPT,經(jīng)過這項技術(shù)加持后,LLM生成的Instruct的效果相比未采用這項技術(shù)的GPT 3 以及InstuctGPT來說,指標(biāo)有極大地提升,而且在一些任務(wù)上超過人類的表現(xiàn)。
這說明了:具象的任務(wù)示例和任務(wù)的自然語言描述之間,有種神秘的內(nèi)在聯(lián)系。至于這種聯(lián)系到底是什么?我們目前對此還一無所知。
目前很多研究已證明LLM對于知識具有強大的記憶能力,但是,一般我們不會因為一個人記憶能力強,就說這人很聰明,是否具有強大的推理能力,往往是我們判斷一個人是否聰明的重要標(biāo)準(zhǔn)。類似的,如果LLM的效果想讓人覺得很驚艷,強大的推理能力是必備的。推理能力本質(zhì)上是綜合運用很多相關(guān)知識點,去推導(dǎo)出新知識或新結(jié)論。關(guān)于LLM的推理能力,是最近一年來LLM里最重要和熱門的研究領(lǐng)域之一。于是,我們關(guān)心的問題就是:LLM具備推理能力嗎?如果具備,那么它的推理能力夠強嗎?
這兩個問題目前的答案似乎應(yīng)該是:當(dāng)模型規(guī)模足夠大的時候,LLM本身是具備推理能力的,在簡單推理問題上,LLM已經(jīng)達到了很好的能力,但是復(fù)雜推理問題上,還需要更多深入的研究。
如果梳理現(xiàn)有LLM推理相關(guān)工作的話,我把它們歸到兩大類,體現(xiàn)出挖掘或促進LLM推理能力不同的技術(shù)思路:第一類研究比較多,可以統(tǒng)稱為基于Prompt的方法,核心思想是通過合適的提示語或提示樣本,更好地激發(fā)出LLM本身就具備的推理能力,Google在這個方向做了大量很有成效的工作。第二類做法是在預(yù)訓(xùn)練過程中引入程序代碼,和文本一起參與預(yù)訓(xùn)練,以此進一步增強LLM的推理能力,這應(yīng)該是OpenAI實踐出的思路。比如ChatGPT肯定具備很強的推理能力,但它并不要求用戶必須提供一些推理示例,所以ChatGPT強大的推理能力,大概率來源于使用代碼參與GPT 3.5的預(yù)訓(xùn)練。
這兩種思路其實大方向是迥異的:利用代碼增強LLM推理能力,這體現(xiàn)出一種通過增加多樣性的訓(xùn)練數(shù)據(jù),來直接增強LLM推理能力的思路;而基于Prompt的方法,它并不會促進LLM本身的推理能力,只是讓LLM在解決問題過程中更好地展示出這種能力的技術(shù)方法??梢钥闯?,前者(代碼方法)治本,后者治標(biāo)。當(dāng)然,兩者其實也是互補的,但從長遠看,治本的方法更重要。
這方面工作非常多,如果歸納一下的話,大致可以分為三條技術(shù)路線。
第一種思路是直接在問題上追加輔助推理Prompt。這種方法簡單直接,但在眾多領(lǐng)域都很有效。這個做法是由“Large language models are zero-shot reasoners”提出的,也被稱為zero-shot CoT。具體而言,分為兩個階段(如上圖所示),第一階段在提問的問題上追加“Let’s think step by step”這句提示語,LLM會輸出具體的推理過程;第二階段,在第一階段的問題后,拼接LLM輸出的具體推理過程,并再追加Prompt=“Therefore, the answer (arabic numerals) is”,此時LLM會給出答案。如此簡單的操作,卻可以大幅增加LLM在各項推理任務(wù)中的效果,比如在數(shù)學(xué)推理測試集GSM8K上,加上提示語后,推理準(zhǔn)確率直接從原先的10.4%提升到了40.4%,可謂神奇。
為什么LLM會具備給一句“Let’s think step by step”提示語,就能列出詳細的推理步驟并算出答案呢?其原因目前尚無定論,我的猜測是:很可能因為預(yù)訓(xùn)練數(shù)據(jù)里面存在大量的此種數(shù)據(jù),就是以“Let’s think step by step”開頭,然后后面是詳細的推理步驟,最后給出答案,而LLM在預(yù)訓(xùn)練的時候記住了這些模式。而當(dāng)我們輸入這個提示語的時候,激發(fā)LLM模糊得“回憶”起某些例子的推導(dǎo)步驟,于是即可模仿這些例子進行步驟推理并給出答案。當(dāng)然這只是我的無依據(jù)推論,若事實真的如此,如果你看過后面介紹的標(biāo)準(zhǔn)CoT做法,會發(fā)現(xiàn)Zero-shot CoT 本質(zhì)上和標(biāo)準(zhǔn)CoT很可能沒什么區(qū)別,只是標(biāo)準(zhǔn)CoT由人工來寫推理步驟的示例,而Zero-shot CoT大概率是通過提示語,激活了記憶中的某些包含推理步驟的示例,很可能是如此區(qū)別。而標(biāo)準(zhǔn)CoT效果比Zero-Shot CoT效果好也完全可以理解,因為畢竟靠LLM回憶示例,精準(zhǔn)性估計不會太高,而人工給出的示例,準(zhǔn)確性是有保障的,所以自然標(biāo)準(zhǔn)CoT效果會更好。
這側(cè)面說明了一個道理,就是LLM本身是具備推理能力的,只是我們沒有辦法把它的這種能力激發(fā)出來而已,通過合適的提示語來進行兩步提示,就在一定程度上可以釋放出它的這種潛力。另外,對于中文,很可能存在另外一個黃金提示語,比如“詳細解題思路如下”,類似這種,因為中文語料在講解推理步驟的時候,經(jīng)常用的引導(dǎo)句和“讓我們一步一步來思考”應(yīng)該是不同的,這是明顯的西方說法,而探索出這個中文黃金提示語,其實也是很有必要的。
第二種思路一般被稱為基于示例的思維鏈(few-shot CoT,Chain of Thought)Prompting。這個方向目前是LLM推理研究的主方向,很多工作都是在這個思路上做的,我們簡單介紹幾個效果顯著的代表性工作,基本能代表CoT的技術(shù)發(fā)展方向。
CoT的主體思想其實很直白;為了教會LLM模型學(xué)會推理,給出一些人工寫好的推理示例,示例里把得到最終答案前,一步步的具體推理步驟說清楚,而這些人工寫的詳細推理過程,就是思維鏈Prompting,具體例子可參照上圖中藍色文字部分。CoT的意思是讓LLM模型明白一個道理;就是在推理過程中,步子不要邁得太大,否則很容易出錯,改變思維模式,化大問題為小問題,步步為營,積小勝為大勝。最早明確提出CoT這個概念的文章是“Chain of thought prompting elicits reasoning in large language models”,論文發(fā)布于22年1月份,雖然做法很簡單,但是應(yīng)用CoT后LLM模型的推理能力得到了巨大提升,GSM8K數(shù)學(xué)推理測試集準(zhǔn)確率提高到60.1%左右。當(dāng)然,這種給出詳細推理步驟和中間過程的思想,并非CoT最早提出的,更早一些的“scratchpad”技術(shù)(可參考:Show Your Work: Scratchpads for Intermediate Computation with Language Models)首先采用了類似的思路。
CoT提出不久,很快在22年3月份,一項被稱為“Self-Consistency”的改進技術(shù)就將GSM8K測試集準(zhǔn)確率提高到74.4%,提出這項改進的論文是“Self-Consistency Improves Chain of Thought Reasoning in Language Models”?!癝elf-Consistency”的思路也很直觀(參考上圖):首先可以利用CoT給出幾個寫了推理過程的示例,然后要求LLM對給定的問題進行推理,如果是CoT,直接輸出一個推理過程和答案,整個過程就結(jié)束了?!癝elf-Consistency”則不然,它要求LLM輸出多個不同的推理過程和答案,然后采用投****的方式選出最佳答案,思路非常簡單直接,但是效果也確實好?!癝elf-Consistency”其實是教導(dǎo)LLM學(xué)會這么一個道理:孔乙己說過茴香豆的“茴”字有四種寫法,類似的,一個數(shù)學(xué)題的正確解法也可以有很多種,每個不同的推導(dǎo)過程都指向最終的答案。條條大路通羅馬,雖說也有個別迷路走到北京的,但是迷路的畢竟是少數(shù),看看大多數(shù)人走到哪里,哪里就是正確答案。簡單的方法往往蘊含著深刻的哲學(xué)含義,是不是這道理?
再往后,“On the Advance of Making Language Models Better Reasoners”這個工作在“Self-Consistency”基礎(chǔ)上,進一步集成了“從一個Prompt問題拓展到多個Prompt問題、檢查推理中間步驟的正確性以及對多個輸出的回答加權(quán)投****”這三個改進點,將GSM8K測試集準(zhǔn)確率提高到83%左右。
第三種思路體現(xiàn)了一種分治算法的思想。當(dāng)然這個所謂“分治”是我歸納的,別人沒這么說。這種思路的核心思想是:對于一個復(fù)雜的推理問題,我們把它分解成若干容易解決的子問題,一一解決掉子問題后,我們再從子問題的答案推導(dǎo)復(fù)雜問題的答案。你看這確實比較類似分治算法的思想吧。我個人覺得,這種思路可能才是揭示問題本質(zhì)、最終解決LLM復(fù)雜推理問題正宗的道路。我們以“Least-to-most prompting”技術(shù)為例來說明這種思路的一種具體實現(xiàn)方式,如上圖所示:它分為兩個階段,第一個階段,從原始問題我們可以得知最終要問的問題是什么,我們假設(shè)最終問題是Final Q,然后從原始問題填充Prompt模版:“如果要解決Final Q問題,那么我需要先解決”,然后把原始問題和這個Prompt交給LLM,讓LLM模型給出答案,等于讓LLM給出最終問題的前置子問題Sub Q;接下來我們進入第二個階段,讓LLM先回答剛才拿到的子問題Sub Q,并拿到對應(yīng)的答案,然后原始問題拼接子問題Sub Q及對應(yīng)答案,再去問LLM最終那個問題Final Q,此時LLM會給出最后的答案。如此這般,體現(xiàn)出拆解子問題,并從子問題的答案逐步找出最終答案的思路。
以上是目前利用Prompt激發(fā)LLM模型推理能力的三種主流做法,而關(guān)于LLM的推理能力,目前還觀察到一個有趣且費解的現(xiàn)象:除了文本外,如果能夠加入程序代碼一起參與模型預(yù)訓(xùn)練,則能大幅提升LLM模型的推理能力。這個結(jié)論從不少論文的實驗部分都可以得出(可以參考:AUTOMATIC CHAIN OF THOUGHT PROMPTING IN LARGE LANGUAGE MODELS/Challenging BIG-Bench tasks and whether chain-of-thought can solve them等論文的實驗部分)。
上圖給出了一份實驗數(shù)據(jù),來自于論文“On the Advance of Making Language Models Better Reasoners”,其中GPT3 davinci就是標(biāo)準(zhǔn)的GPT 3模型,基于純文本訓(xùn)練;code-davinci-002(OpenAI內(nèi)部稱為Codex)是同時在Code和NLP數(shù)據(jù)上訓(xùn)練的模型。如果比較兩者效果,可以看出,不論采用具體哪種推理方法,僅僅是從純文本預(yù)訓(xùn)練模型切換到文本和Code混合預(yù)訓(xùn)練模型,在幾乎所有測試數(shù)據(jù)集合上,模型推理能力都得到了巨大的效果提升,比如我們以“Self Consistency”方法為例,在大多數(shù)據(jù)集合上的性能提升,都直接超過了20到50個百分點,這是很恐怖的性能提升,而其實在具體推理模型層面,我們什么也沒做,僅僅是預(yù)訓(xùn)練的時候除了文本,額外加入了程序代碼而已。
除了這個現(xiàn)象,從上圖數(shù)據(jù)中,我們還可以得出其它一些結(jié)論,比如GPT 3這種純文本預(yù)訓(xùn)練模型,其實是具備相當(dāng)程度的推理能力的,除了在GSM8K這種數(shù)學(xué)推理上效果比較差外,其它推理數(shù)據(jù)數(shù)據(jù)集合表現(xiàn)也還可以,前提你需要采用合適的方法,來激發(fā)出它本身就具備的這種能力;再比如,text-davinci-002,也就是在code-davinci-002基礎(chǔ)上加入instruct fine-tuning后的模型(就是加入InstructGPT或ChatGPT模型的第一步),其推理能力要弱于Codex,但是有其它研究表明它在自然語言處理任務(wù)又要強于Codex。而這貌似說明了,加入instruct fine-tuning,會損害LLM模型的推理能力,但是會在一定程度上提升自然語言理解能力。而這些結(jié)論其實都是很有意思的,也能啟發(fā)后續(xù)進一步的思考和探索。
那么,一個自然的疑問是:為何預(yù)訓(xùn)練模型可以從代碼的預(yù)訓(xùn)練中獲得額外的推理能力?確切原因目前未知,值得深入探索。我猜測可能是因為原始版本的Codex(只使用代碼訓(xùn)練,可參考文獻:Evaluating Large Language Models Trained on Code)的代碼訓(xùn)練是從文本生成代碼,而且代碼中往往包含很多文本注釋,本質(zhì)上這類似于預(yù)訓(xùn)練模型做了<文本,Code>兩種數(shù)據(jù)的多模態(tài)對齊工作。而數(shù)據(jù)中必然包含相當(dāng)比例的數(shù)學(xué)或邏輯問題的代碼、描述和注釋,很明顯這些數(shù)學(xué)類或邏輯推理類的數(shù)據(jù),對于解決下游數(shù)學(xué)推理問題是有幫助的,我猜大概率原因在此。
上面介紹了LLM推理的主流技術(shù)思路和現(xiàn)有的一些結(jié)論,接下來談?wù)勎覍LM模型推理技術(shù)的思考,以下內(nèi)容純個人推斷,沒有太多證據(jù),還請謹(jǐn)慎參考。我的判斷是:雖然最近一年來,關(guān)于激發(fā)LLM的推理能力,這方面的技術(shù)進展很快,也取得了很大的技術(shù)進步,但是總體感覺是,我們可能走在正確的方向上,但是距離接觸到真正的問題本質(zhì)還有一段距離,對此要有更深入的思考和探索。
首先,我比較贊同上述分治算法的主體思路,對于復(fù)雜的推理問題,我們應(yīng)該把它拆解成若干簡單的子問題,因為子問題對于LLM來說回答正確的概率就大很多,讓LLM一一回答子問題后,再逐步推導(dǎo)出最終答案。受到“Least-to-most prompting”技術(shù)的啟發(fā),如果進一步思考,我覺得LLM推理本質(zhì)上很可能會是如下兩種可能的其中之一:不斷和LLM進行交互的圖上推理問題,抑或是不斷和LLM進行交互的程序流程圖執(zhí)行問題。
先說圖上推理問題,如上圖所示,假設(shè)我們有辦法能夠把復(fù)雜問題拆解成由子問題或者子步驟構(gòu)成的圖結(jié)構(gòu),圖中的節(jié)點是子問題或者子步驟,圖中的邊代表了子問題之間的依賴關(guān)系,就是說只有回答好子問題A,才能回答子問題B,而且圖中大概率存在循環(huán)結(jié)構(gòu),就是反復(fù)做某幾個子步驟。假設(shè)我們能夠得到上述的子問題拆解圖,那么可以根據(jù)依賴關(guān)系,引導(dǎo)LLM一步一步按照圖結(jié)構(gòu),回答必須首先回答的子問題,直到推導(dǎo)出最終答案。
再說程序流程圖問題,參考上圖,假設(shè)我們有辦法把復(fù)雜問題拆解成子問題或子步驟,并產(chǎn)生一個由子步驟構(gòu)成的類似程序流程圖的結(jié)構(gòu),在這個結(jié)構(gòu)里,有些步驟會反復(fù)執(zhí)行多次(循環(huán)結(jié)構(gòu)),有些步驟的執(zhí)行需要進行條件判斷(條件分支)??偠灾?,在執(zhí)行每個子步驟的時候和LLM進行交互,得到子步驟的答案,然后按照流程不斷執(zhí)行,直到輸出最終答案。類似這種模式。假設(shè)這個思路大致正確的話,也許可以從這個角度來解釋為何加入代碼會增強預(yù)訓(xùn)練模型的推理能力:大概率因為<文本,代碼>的多模態(tài)預(yù)訓(xùn)練模型,在模型內(nèi)部是通過類似這種隱含的程序流程圖作為兩個模態(tài)的橋梁,將兩者聯(lián)系起來的,即由文本描述到隱含的流程圖,再映射到由流程圖產(chǎn)生具體的代碼。也就是說,這種多模態(tài)預(yù)訓(xùn)練,可以增強LLM模型從文本構(gòu)建出隱含的流程圖并按照流程圖執(zhí)行的能力,也就是加強了它的推理能力。
當(dāng)然,上述思路最大的問題是,我們?nèi)绾胃鶕?jù)文本描述的問題,能夠靠LLM模型,或者其它模型,得到圖結(jié)構(gòu)或者流程圖結(jié)構(gòu)?這個可能是其中的難點。一種可能的思路就類似繼續(xù)增強文本和更高質(zhì)量的代碼預(yù)訓(xùn)練,走隱式學(xué)習(xí)內(nèi)部隱含結(jié)構(gòu)的方法。而目前的CoT技術(shù),如果套到上述思路來思考的話,可以這么理解:標(biāo)準(zhǔn)CoT,其實就是靠自然語言文本來描述圖結(jié)構(gòu)或者程序流程圖的;而“Least-to-most prompting”技術(shù),則是試圖根據(jù)最后一個圖節(jié)點,靠倒推來試圖推導(dǎo)出其中的圖結(jié)構(gòu),但是很明顯,目前的方法限制了它倒推的深度,也就是說它只能推導(dǎo)出非常簡單的圖結(jié)構(gòu),這正是限制它能力的所在。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。