語境學(xué)習(xí)、上下文學(xué)習(xí)In-Context Learning底層機制等原理詳解

大語言模型的預(yù)訓(xùn)練[5]:語境學(xué)習(xí)、上下文學(xué)習(xí)In-Context Learning:精調(diào)LLM、Prompt設(shè)計和打分函數(shù)(Scoring Function)設(shè)計以及ICL底層機制等原理詳解
1.In-Context Learning背景與定義
背景
大規(guī)模預(yù)訓(xùn)練語言模型(LLM)如 GPT-3 是在大規(guī)模的互聯(lián)網(wǎng)文本數(shù)據(jù)上訓(xùn)練,以給定的前綴來預(yù)測生成下一個 token(Next token prediction)。通過預(yù)測詞的訓(xùn)練目標(biāo)、大規(guī)模數(shù)據(jù)集以及超高參數(shù)量的模型相結(jié)合,產(chǎn)生了性能極強的 LLM,它可以 “理解” 任何文本輸入,并在其基礎(chǔ)上進行“寫作”,除此以外,GPT-3 的論文發(fā)現(xiàn),大規(guī)模的訓(xùn)練數(shù)據(jù)會產(chǎn)生一種有趣的新興行為,稱為 In-Context Learning(又稱上下文學(xué)習(xí),語境學(xué)習(xí), ICL),他并不需要調(diào)整模型參數(shù),僅用幾條下游任務(wù)的示例就可以取得極佳的結(jié)果。
定義
In-Context Learning 最初是在原始 GPT-3 論文中作為一種大語言模型學(xué)習(xí)任務(wù)的方式而被推廣的,能夠直接讓語言模型根據(jù)給定的幾個實例理解任務(wù),并給出問題答案;本質(zhì)上,它相當(dāng)于使用訓(xùn)練完好的語言模型估計給定示例條件下的條件概率分布模型。在 In-Context Learning 里,給語言模型一個 “提示(prompt)”,該提示是一個由輸入輸出對組成的列表,這些輸入輸出對用來描述一個任務(wù)。在提示的末尾,有一個測試輸入,并讓語言模型僅通過以提示為條件來預(yù)測下一個標(biāo)記。為了正確回答以下兩個提示,模型需要理解 In-Context Learning 的演示示例,以確定輸入分布(財經(jīng)或一般新聞)、輸出分布(積極 / 消極或主題)、輸入 - 輸出映射(情感或主題分類)以及格式。

和其他概念的區(qū)別
提示學(xué)習(xí):通過設(shè)計離散模板或者連續(xù)型參數(shù),學(xué)習(xí)合適的 prompt 引導(dǎo)模型輸出期望的結(jié)果,而 prompt 既可以是離散型,也可以是連續(xù)型。嚴(yán)格來講,如果將 in-context learning 中的若干示例的演示視作精選的 prompt 的話,可以視為提示學(xué)習(xí)中的一小部分。
小樣本學(xué)習(xí):小樣本學(xué)習(xí)為了學(xué)習(xí)到最佳模型參數(shù),仍然需要使用少量的監(jiān)督樣本做微調(diào),而 ICL 則不對模型做任何的微調(diào),直接將下游任務(wù)的輸入輸出拼接起來作為一個 prompt,引導(dǎo)模型根據(jù)輸入的測試集樣本 demo,給出任務(wù)的預(yù)測結(jié)果。
In-context learning 允許用戶為新用例快速構(gòu)建模型,而無需為每個任務(wù)微調(diào)和存儲新參數(shù)。它通常只需要很少的訓(xùn)練示例就可以使模型正常工作,而且即使對于非專家來說,也可以通過直觀的自然語言來進行交互。改變了之前需要把大模型用到下游任務(wù)的范式。對于一些 LLM 沒有見過的新任務(wù),只需要設(shè)計一些任務(wù)的語言描述,并給出幾個任務(wù)實例,作為模型的輸入,即可讓模型從給定的情景中學(xué)習(xí)新任務(wù)并給出滿意的回答結(jié)果。這種訓(xùn)練方式能夠有效提升模型小樣本學(xué)習(xí)的能力。
ICL 的關(guān)鍵思想是從任務(wù)相關(guān)的類比樣本中學(xué)習(xí)。下圖給出了一個描述語言模型如何使用 ICL 進行決策的例子。
首先,ICL 需要一些示例來形成一個演示上下文。這些示例通常是用自然語言模板編寫的。
然后 ICL 將查詢的問題(即你需要預(yù)測標(biāo)簽的輸入)和一個上下文演示(一些相關(guān)的示例)連接在一起,形成帶有提示的輸入,與監(jiān)督學(xué)習(xí)需要使用反向梯度更新模型參數(shù)的訓(xùn)練階段不同,ICL 不進行參數(shù)更新,而是直接在預(yù)訓(xùn)練的語言模型上進行預(yù)測。模型預(yù)計將從演示中學(xué)習(xí)到的模式進行正確的預(yù)測。
本質(zhì)上,它利用訓(xùn)練有素的語言模型根據(jù)演示的示例來估計候選答案的可能性。簡單理解,就是通過若干個完整的示例,讓語言模型更好地理解當(dāng)前的任務(wù),從而做出更加準(zhǔn)確的預(yù)測。

值得注意的是,與需要使用反向梯度更新模型參數(shù)的訓(xùn)練階段的監(jiān)督學(xué)習(xí)不同,ICL 不需要參數(shù)更新,并直接對預(yù)先訓(xùn)練好的語言模型進行預(yù)測(這是與 prompt,傳統(tǒng) demonstration learning 不同的地方,ICL 不需要在下游 P-tuning 或 Fine-tuning)。該模型學(xué)習(xí)隱藏在演示中的模式,并據(jù)此做出正確的預(yù)測。使用下游任務(wù)的的演示信息學(xué)習(xí)并推理,通常是 “實例 - 標(biāo)簽” 形式(Fine tuning 與 Prompt Learning 仍需在大量訓(xùn)練數(shù)據(jù)中的學(xué)習(xí)類別表示等)。
Zero-shot learning,不允許輸入任何示例,只允許輸入一則任務(wù)說明。

One-shot learning,只允許輸入一條示例和一則任務(wù)說明。

Few-shot learning,區(qū)別于小樣本學(xué)習(xí)概念,無需更新參數(shù),允許輸入數(shù)條示例和一則任務(wù)說明。

2.ICL 兩個階段的優(yōu)化方法
ICL 分精調(diào)和推斷兩個優(yōu)化方法階段:
其中精調(diào)階段,目前優(yōu)化的方法基本都是基于 pretrained LLM,然后選擇性的預(yù)熱模型來增強和泛化 ICL 的能力;
推理階段優(yōu)化方法主要分為 Prompt 設(shè)計和打分函數(shù)(Scoring Function)設(shè)計兩種。 精調(diào)和推理階段是 ICL 的兩個主要階段。在精調(diào)階段,現(xiàn)有的 ICL 研究主要以預(yù)訓(xùn)練的 LLM 為主,并可選地預(yù)熱模型以增強和泛化 ICL 能力。在推理階段,演示設(shè)計和評分函數(shù)的選擇對于最終性能至關(guān)重要。

2.1. 通過精調(diào)優(yōu)化 ICL 效果
在推理前,通過持續(xù)學(xué)習(xí)讓語言模型的 ICL 能力得到進一步提升,這個過程稱之為 warmup,warmup 會優(yōu)化語言模型對應(yīng)參數(shù)或者新增參數(shù),區(qū)別于傳統(tǒng)的 finetune,finetune 旨在提升 LLM 在特定任務(wù)上的表現(xiàn),而 warmup 則是提升模型整理的 ICL 性能。
雖然預(yù)訓(xùn)練后的語言模型已經(jīng)初步具備 ICL 能力,但預(yù)訓(xùn)練的 MLM 目標(biāo)和下游 ICL 目標(biāo)還是存在差距的,怎樣精調(diào)才能把模型預(yù)熱(warmup)、提升 ICL 效果是一個重要的研究方向。注:這里的「精調(diào)」、「預(yù)熱」不是為了讓模型適配某個下游任務(wù),而是讓模型具備更好的通用 ICL 能力
有監(jiān)督 ICL 訓(xùn)練
第一類方法非常直覺,既然要消除差距,可以直接在有監(jiān)督的 ICL 數(shù)據(jù)上訓(xùn)練,通過構(gòu)建對應(yīng)的 in-context 的監(jiān)督數(shù)據(jù)跟多任務(wù)訓(xùn)練,進行對應(yīng)的 in-context finetune,從而縮小預(yù)訓(xùn)練跟下游 ICL 的差距。MetaICL 就直接把很多任務(wù)整合成了 ICL 的形式精調(diào)模型,在 52 個數(shù)據(jù)集上取得了比肩直接精調(diào)的效果。
另外還有部分研究專注于 Instruction tuning,構(gòu)建更好的任務(wù)描述讓模型去理解,而不是只給幾個例子(demonstration),比如 LaMDA-PT、FLAN。
自監(jiān)督 ICL 訓(xùn)練
有監(jiān)督的數(shù)據(jù)畢竟是有限的,于是開始有研究者思考能不能借鑒預(yù)訓(xùn)練的方式,自監(jiān)督地進行 ICL 訓(xùn)練。根據(jù) ICL 的格式將原始數(shù)據(jù)轉(zhuǎn)換成 input-output 的 pair 對數(shù)據(jù)后利用四個自監(jiān)督目標(biāo)進行訓(xùn)練,包括掩碼語言,分類任務(wù)等。
有監(jiān)督 ICL 訓(xùn)練和自監(jiān)督 ICL 訓(xùn)練旨在通過引入更加接近于 in-context learning 的訓(xùn)練目標(biāo)從而縮小預(yù)訓(xùn)練跟 ICL 之間的差距。比起需要示例的 in-context fine tuning,只涉及任務(wù)描述的 instruct finetuning 更加簡單且受歡迎。另外,在 warmup 這個階段,語言模型只需要從少量數(shù)據(jù)訓(xùn)練就能明顯提升 ICL 能力,不斷增加相關(guān)數(shù)據(jù)并不能帶來 ICL 能力的持續(xù)提升。從某種角度上看,這些方法通過更加模型參數(shù)可以提升 ICL 能力也表明了原始的 LLM 具備這種潛力。雖然 ICL 不要求 warmup,但是一般推薦在推理前增加一個 warm up 過程。
2.2 在推理階段優(yōu)化 ICL 效果
推理階段的優(yōu)化方法分為 Prompt 設(shè)計和打分函數(shù)(Scoring Function)設(shè)計兩種
Prompt 設(shè)計
作為激發(fā)大模型能力的輸入,Prompt 對 ICL 的效果影響很大??梢詮慕M織方式和格式來進行 Prompt 的設(shè)計。組織方式是指如何選擇數(shù)據(jù)樣本并排序,格式是指怎么去寫 Prompt。
對于數(shù)據(jù)樣本的選取,可以有以下方法:
無監(jiān)督:首先就是根據(jù)句向量距離或者互信息等方式選擇跟當(dāng)前輸入 x 最相似的樣本作為演示例,另外還有利用自使用方法去選擇最佳的示例排列,有的方法還會考慮到演示示例的泛化能力,盡可能去提高示例的多樣性。除了上述這些從人工撰寫的樣本中選擇示例的方式外,還可以利用語言模型自身去生成合適的演示示例。
有監(jiān)督:第一種是先利用無監(jiān)督檢索器召回若干相似的樣本,再通過監(jiān)督學(xué)習(xí)訓(xùn)練的 Efficient Prompt Retriever 進行打分,從而篩選出最合適的樣本。此外還有把樣本選擇建模成序列決策任務(wù),把最終效果當(dāng)作 reward,用強化學(xué)習(xí)的方式去選擇樣本。
對于數(shù)據(jù)樣本的排序,目前的研究并不多,有兩個思路:
基于一些距離度量,把跟輸入相近的排在后面(靠近輸入)。
在 Lu 等人的研究中,他們找到了信息熵和 ICL 效果的聯(lián)系,因此根據(jù)熵來決定最佳排序。
對于 Prompt 的格式,常見有兩種:指令(Instruction)和推理步驟(Reasoning Steps)說明。
Instruction:任務(wù)的指令描述非常依賴人工,不過也可以嘗試讓語言模型自動生成描述并選擇。
Reasoning Steps:對于更復(fù)雜的任務(wù),可以人工顯示地把推理步驟寫出來,比如 Chain-of-thought(CoT),來啟發(fā)模型的推理能力。除了純?nèi)斯ぷ珜懲?,還有以下方法:
讓模型自己生成推理步驟
Multi-stage ICL:分多個步驟來完成任務(wù),每一步都設(shè)計不同的子問題,讓模型一步步解答。比如 Self-Ask 這篇工作甚至讓模型自己問自己。再比如 Least-to-Most Prompting 這篇工作先讓模型把大問題拆成多個子問題,再挨個回答。
打分函數(shù)(Scoring Function)
評分函數(shù)決定我們?nèi)绾螌⒄Z言模型的預(yù)測轉(zhuǎn)換為對特定答案可能性的估計。
直接估計方法(Direct):直接取候選答案的條件概率,可以用語言模型詞匯表中的符號表示 (Brown et al., 2020)。選擇概率較高的答案作為最終答案。但是,這種方法的缺點是只能衡量固定模式的答案(答案標(biāo)記應(yīng)該放在輸入序列的末尾)。
困惑度(Perplexity PPL):計算由演示示例 C、輸入查詢 x 和候選標(biāo)簽 y 的標(biāo)記組成的整個輸入序列 S = {C, s(x, y, I)} 的句子 Perplexity。由于 PPL 計算整個句子的概率,它消除了標(biāo)記位置的限制,但需要額外的計算時間。再用語言模型過一遍句子,這種方法可以解決上述固定模式的問題,但計算量增加了。
通道模型 (Channel):評估 P(x|y) 的條件概率(貝葉斯推理),即在給定標(biāo)簽的情況下估計輸入查詢的可能性。通過這種方式,語言模型需要生成輸入中的每個令牌,這可以在不平衡的訓(xùn)練數(shù)據(jù)狀態(tài)下提高性能。
3.應(yīng)用
上下文學(xué)習(xí)在許多 NLP 的 benchmark 測試中,已經(jīng)媲美甚至超過全資源微調(diào)的方法,例如在 LAMBADA(常識句子補全)和 TriviaQA(問答)上達到 SOTA 的。 更令人意外的是上下文學(xué)習(xí)使人們能夠在短短幾個小時內(nèi)啟動的一系列應(yīng)用程序,包括根據(jù)自然語言描述編寫代碼、幫助設(shè)計應(yīng)用程序模型以及概括電子表格功能。
4.ICL 的優(yōu)缺點
4.1 優(yōu)點
輸入的形式是自然語言,這提供了一個跟 LLM 交流的可解釋性手段,可以讓我們更好地跟語言模型交互,通過修改模版和示例說明我們想要什么,甚至可以把一些知識直接輸入給模型,通過這些示例跟模版讓語言模型更容易利用到人類的知識。
這種學(xué)習(xí)方式類似于人類類比學(xué)習(xí)的決策過程,即通過幾個例子去類比,而不是像精調(diào)一樣從大量語料中統(tǒng)計出規(guī)律。
相比于監(jiān)督學(xué)習(xí),ICL 是一種免訓(xùn)練的學(xué)習(xí)框架。不僅減少了計算模型適配新任務(wù)的計算成本,而且可以使語言模型即服務(wù) (Language-Model-as-a-Service, LMaaS) 這種模式成為可能,更容易應(yīng)用到更多真實場景的任務(wù)。
4.2 缺點
模型對不同的 contexts 較為敏感。很小的變化甚至?xí)?dǎo)致很大的方差。
缺乏對 in-context learning 的理論和實驗分析。In-context learning 到底學(xué)到的是什么,又是怎么學(xué)到的。
應(yīng)用受限。context size 的上限為 2048 個字符。由于 content limit,一些任務(wù)更適合用 fine-turning 來做。這也導(dǎo)致一些研究結(jié)論其實并未在文本生成類的任務(wù)上進行驗證。
few-shot setting 下的性能飽和問題,即隨著 training examples 的數(shù)量的增加 (一般是 16 或者 32 左右),in-context learning 的性能不再提升。
5.ICL底層機制
5.1. 預(yù)訓(xùn)練怎樣影響 ICL
ICL 是在 GPT-3 中首次提出的,它表明隨著模型尺寸的增大,ICL 的能力變得更加明顯。
然而,一些研究表明,小規(guī)模的 PLM 也可以通過專門設(shè)計的訓(xùn)練任務(wù)(例如,學(xué)習(xí)以任務(wù)示例和查詢作為輸入來預(yù)測標(biāo)簽)表現(xiàn)出強大的 ICL 能力,甚至可能超過更大的模型。這表明訓(xùn)練任務(wù)的設(shè)計是影響 LLM ICL 能力的一個重要因素。
除了訓(xùn)練任務(wù)外,最近的研究還調(diào)查了 ICL 和預(yù)訓(xùn)練語料庫之間的關(guān)系。研究表明,ICL 的性能在很大程度上取決于預(yù)訓(xùn)練語料庫的來源,而不是規(guī)模。
另一項研究對訓(xùn)練數(shù)據(jù)分布的影響進行了深入分析。他們發(fā)現(xiàn),當(dāng)訓(xùn)練數(shù)據(jù)可以聚類到許多不常見的類中,而不是均勻分布時,ICL 就會出現(xiàn)。
5.2.LLMs 怎樣執(zhí)行 ICL
在推理階段,研究人員專注于基于給定的演示來分析 ICL 能力是如何運行的,因為不涉及顯式學(xué)習(xí)或更新。他們通常從梯度下降的角度進行分析,并將 ICL 視為隱式微調(diào)。
在這個框架下,ICL 過程可以解釋如下:通過前向計算,LLM 生成關(guān)于演示的元梯度,并通過注意力機制隱式地執(zhí)行梯度下降。實驗也表明,LLM 中的某些注意力頭能夠執(zhí)行與任務(wù)無關(guān)的原子操作(例如,復(fù)制和前綴匹配),這與 ICL 能力密切相關(guān)。
為了進一步探索 ICL 的工作機制,一些研究將 ICL 抽象為一個算法學(xué)習(xí)過程。具體而言,LLM 在預(yù)訓(xùn)練期間基本上通過其參數(shù)對隱式模型進行編碼。通過 ICL 中提供的例子,LLM 可以實現(xiàn)諸如梯度下降之類的學(xué)習(xí)算法,或者直接計算閉式解,以在前向計算期間更新這些模型。在這個解釋框架下,已經(jīng)表明 LLM 可以有效地學(xué)習(xí)簡單的線性函數(shù),甚至可以使用 ICL 學(xué)習(xí)一些復(fù)雜的函數(shù),如決策樹。
5.3. 為什么有效
訓(xùn)練數(shù)據(jù)分布:模型在大量的語料預(yù)訓(xùn)練過程中,學(xué)習(xí)到大量的 “concept”?!癱oncept” 可以看作是一個潛在的變量,變量包含多種多樣文本級別的數(shù)據(jù)。“concept”結(jié)合非常多的潛在變量指定了一個文本語義的方方面面。
學(xué)習(xí)機制:有學(xué)者猜測 LM 可能自己就具備學(xué)習(xí)的能力,在做 ICL 的時候?qū)W到了這些知識,或者隱式直接精調(diào)了自己。
Transformer 模塊:有學(xué)者發(fā)現(xiàn) Transformer 里的某些注意力頭會通過拷貝固定的模式來預(yù)測下一個 token。
6.關(guān)鍵知識點
ICL有效果的原因:訓(xùn)練數(shù)據(jù)的分布、學(xué)習(xí)機制、Transformer模塊
ICL的分類常見有哪幾種:1.只允許輸入一條示例和一則任務(wù)說明;2.允許輸入數(shù)條示例和一則任務(wù)說明;3.不允許輸入任何示例,只允許輸入一則任務(wù)說明。
In-Context Learning只對大模型有效
在訓(xùn)練階段,可以通過自監(jiān)督的In-Context Learning訓(xùn)練優(yōu)化模型效果,從而讓模型具備更好的通用能力。
In-Context Learning類似于人類的類比學(xué)習(xí)的決策過程,舉一反三。
推理階段的優(yōu)化方法分為微調(diào)(Fine tune)和打分函數(shù)(Scoring Function)設(shè)計
大語言模型在使用ICL進行決策時,不需要進行參數(shù)更新,然后進行預(yù)測。
更多優(yōu)質(zhì)內(nèi)容請關(guān)注公號:汀丶人工智能;會提供一些相關(guān)的資源和優(yōu)質(zhì)文章,免費獲取閱讀。
