您的位置:首頁 >資訊 > 正文

環(huán)球消息!Language Model Reasoning

來源:程序員客棧2023-02-21 23:57:33

自從那篇著名的《Chain of Thought Prompting Elicits Reasoning in Large Language Models》發(fā)布以來,一下子引爆了使用 Large Language Models (LLMs) 做推理任務(wù)的熱潮。同時(shí),越來越多的研究者開始深挖 LLMs 的各種能力。其中,推理能力作為一種可能的“象征著真正的智慧”的能力,在過去的一年里興許不是被探索和研究得最多的,但肯定是被討論得最為熱烈的,ChatGPT的發(fā)布更是將氣氛推到了頂峰,LLMs 自此徹底破圈。盡管如此,大家很快就發(fā)現(xiàn),雖然LLMs 的續(xù)寫或回答能力很強(qiáng),說起話來語言流暢優(yōu)美,態(tài)度彬彬有禮,但在事實(shí)性問題,以及需要深思熟慮,多步推理 (Multi-step Reasoning) 的問題上,LLMs 的表現(xiàn)依然不盡如人意。為了更好地了解 LLMs 與 Reasoning 這個(gè)領(lǐng)域的情況與進(jìn)展,我會在本文中介紹過去一年多的時(shí)間里,嘗試使用語言模型來解決推理任務(wù)的幾篇論文。由于能力所限,我無法覆蓋所有的相關(guān)論文,但會在文末列出更多的相關(guān)文獻(xiàn)供讀者朋友參考。

首先,我將介紹一些背景,因?yàn)橛行┳x者可能不熟悉這個(gè)領(lǐng)域,然后是現(xiàn)有的工作,最后對它們的共同點(diǎn)和區(qū)別做一些總結(jié)。


(資料圖)

背景介紹

那么,前面總是提到推理 (Reasoning) 這個(gè)詞,什么是推理?我嘗試用自己的語言來解釋“推理”的含義,最后發(fā)現(xiàn)我寫得還不如 ChatGPT,于是這里我就簡單地摘抄幾句它寫的解釋:

Reasoning is the process of thinking about something in a logical way in order to form a conclusion or judgment.

Reasoning involves the use of evidence, logic, and critical thinking skills to carefully evaluate and understand information, ideas, and arguments.

Reasoning is a method that allows us to make decisions and draw conclusions based on available information.

翻譯過來就是推理是以合乎邏輯的方式思考問題,以形成結(jié)論或判斷的過程。推理涉及使用證據(jù)、邏輯和批判性思維技能來仔細(xì)評估和理解信息、想法和論點(diǎn)。推理是一種方法,使我們能夠根據(jù)現(xiàn)有的信息做出決定并得出結(jié)論。憑我高中語文和英語作文經(jīng)常不及格的水平來看我認(rèn)為它解釋得非常到位了。

目前,較為常見的 NLP 推理任務(wù)大概可以被分成上圖這三種:數(shù)學(xué)推理,常識推理以及符號推理。前兩種很容易理解,就是字面意思,而最后一種,即符號推理,通常指的是給定一些特定符號代表的狀態(tài),然后對它們做一些操作,問題就是最后的狀態(tài)是什么樣的,例如給定一個(gè)列表,對其進(jìn)行旋轉(zhuǎn)操作,問你最終的狀態(tài)是什么。下圖中列出了這三種類型的任務(wù)的一些代表性數(shù)據(jù)集。

下圖是上面提到的數(shù)據(jù)集的一些示例。數(shù)學(xué)推理任務(wù)為綠色,常識推理為橙色,藍(lán)色為符號推理。這張圖是借用自 Chain of Thought,后面會介紹。

看到這里不太熟悉語言模型的讀者也許還有一些疑問,為什么我們要用語言模型來解決推理任務(wù)?為什么不能給每個(gè)任務(wù)都設(shè)計(jì)一些專門的模型?比如上面的math word problems,我們可以設(shè)計(jì)一個(gè)復(fù)雜的pipeline來抽取這其中的變量和計(jì)算關(guān)系,最后輸出答案,以及什么date understanding,last letter concatenation,coin flip,這些甚至可以通過精心設(shè)計(jì)的規(guī)則達(dá)到100%的準(zhǔn)確率。

首先,語言模型很靈活,我們不再需要設(shè)計(jì)一個(gè)管道來處理輸入的信息。在傳統(tǒng)的Knowledge based Question Answering中,涉及到實(shí)體抽取、識別關(guān)系、檢索知識庫等等,這是一個(gè)非常復(fù)雜的過程。而使用語言模型,目前,我們只需要設(shè)計(jì)一個(gè)輸入輸出的模板,然后它就可以通過 In-context learning 來回答新的問題。最近大火的 ChatGPT 基于的是 *Reinforcement Learning from Human Feedback (RLHF)*,我們甚至不再需要設(shè)計(jì)模板,只需要直接問問題就夠了。

其次,由于超大參數(shù)量+超大規(guī)模語料的預(yù)訓(xùn)練過程,語言模型通常包含了不同領(lǐng)域的豐富知識,這意味著我們不再需要刻意地維護(hù)一個(gè)結(jié)構(gòu)化的知識庫以供檢索模型使用。當(dāng)然,這也有弊端,那就是模型訓(xùn)練結(jié)束后,它的知識就固定在了那一刻,往后世界上發(fā)生的任何事它都無從知曉了,這也是未來需要解決的一個(gè)問題。

最后,語言模型可以用自然語言生成中間推理步驟,相比那些直接輸出概率分布的分類模型,這為我們觀察模型如何一步步達(dá)到最終答案提供了一個(gè)窗口。例如一個(gè)情感分類問題,語言模型能告訴你某句話里的某個(gè)詞表達(dá)的是不滿情緒,因而它將其分為負(fù)類,而用類似BERT這樣的模型,要么是直接輸出一個(gè)二分類的概率分布,要么是通過設(shè)計(jì)模板+完形填空的方式 (This movie is awesome. Sentiment: [MASK]),得到一個(gè)看似具有解釋性的答案,但是其實(shí)模型輸出的只不過是從一個(gè)二分類概率分布變成了一個(gè)全詞表的概率分布,經(jīng)過一些后處理,最終又變成了一個(gè)二分類的概率分布。

相關(guān)工作

下面正式開始介紹相關(guān)的論文。總體上,我把介紹的相關(guān)工作分成三個(gè)主要的類型,如下圖所示:一個(gè)生成器加一個(gè)驗(yàn)證器,思維鏈提示 (CoT Prompt) 以及前兩種的混合方法。在第一種類型中,生成器負(fù)責(zé)生成多個(gè)推理路徑,驗(yàn)證器用于評估這些生成的解答,并選出最終的答案。

思維鏈提示主要是靠人工編寫一些帶有詳細(xì)中間推理步驟的問答范本作為 Prompt 拼在要問的問題前面,模型模仿前面的例子對問題做出詳細(xì)的推理和解答,這通常被稱為語境學(xué)習(xí) (In-context learning)。

一個(gè) Generator + Verifier 的典型工作是《Training Verifiers to Solve Math Word Problems》,作者來自O(shè)penAI。隨這篇論文一起發(fā)布的還有當(dāng)前十分流行的數(shù)學(xué)題數(shù)據(jù)集 GSM8K,它包含了大約8000個(gè)小學(xué)數(shù)學(xué)問題。因?yàn)樗麄儧]有給自己的工作起名字,所以后面就簡單用OpenAI來指代這項(xiàng)工作。在這項(xiàng)工作中,他們用標(biāo)準(zhǔn)的語言建模目標(biāo) (standard language modeling objective) 在GSM8K上訓(xùn)練了一個(gè)GPT-3,作為生成器。

然后,他們使用這個(gè)生成器為訓(xùn)練集中的每個(gè)問題采樣100條sulutions。他們使用生成的solutions再額外訓(xùn)練一個(gè)GPT-3作為驗(yàn)證器,該驗(yàn)證器對solution中的每個(gè)token都預(yù)測一個(gè)分?jǐn)?shù),如果最終答案是正確的,預(yù)測的分?jǐn)?shù)應(yīng)該是1,否則應(yīng)該是0,損失用均方誤差計(jì)算。

在測試階段,他們對測試問題采樣出100條solutions,然后使用驗(yàn)證器選擇得分最高的solution作為最終答案。它將 GPT-3 175B 的準(zhǔn)確率從33%的提升到了57%。使用驗(yàn)證器的 GPT-3 6B 達(dá)到了約40%的準(zhǔn)確率,超過了微調(diào)后的 GPT-3 175B。這證明了使用一個(gè)額外的驗(yàn)證器來選擇solution是十分有效的。值得注意的一點(diǎn)是,他們用 GPT-3 生成推理過程時(shí)使用了計(jì)算器來輔助 GPT-3,即 GPT-3 只需要列出正確的計(jì)算公式,計(jì)算器會保證它一定會得到正確的答案。

也許這個(gè)做法看起來不那么優(yōu)雅,為什么不讓整個(gè)的生成過程都完全由語言模型完成?我個(gè)人認(rèn)為這種做法其實(shí)是既好用,又符合常理的。試想一下人在做計(jì)算題的時(shí)候,能完全不依賴計(jì)算器嗎?對大多數(shù)人來說,兩位數(shù)的乘除法就已經(jīng)不是能立馬得出答案的了,更不要說三位數(shù)及以上的乘除法了,但是人只要能保證計(jì)算邏輯的正確性,列出完整正確的公式,那么一切交給計(jì)算器就好了,這也是人類能完成各種各樣極其龐大復(fù)雜的工程的核心所在,那就是人會使用工具。我覺得在這里讓語言模型結(jié)合計(jì)算器來解決數(shù)學(xué)問題是完全沒有問題的,如果反其道而行,非要在語言模型的算術(shù)能力上面做文章,死磕語言模型的加減乘除能力,才是本末倒置,畢竟,人發(fā)明計(jì)算器的目的就是為了把人從各種低階重復(fù)機(jī)械的計(jì)算中解放出來,人才有更多時(shí)間和精力去思考那些更高維度更抽象的東西。

這項(xiàng)工作叫作 Chain of Thought Prompt,它開啟了一扇新的大門:提示大規(guī)模語言模型去一步一步地解決問題。這個(gè)想法非常直接和簡單,但其效果卻實(shí)在令人驚訝。具體方法就是在測試輸入的前面拼接了幾個(gè)由問題、中間推理步驟和最終答案組成的人工寫的例子,然后LLMs通過 In-context learning 就學(xué)會了要一步一步解決問題,而標(biāo)準(zhǔn)的 few-shot prompt 則效果很差。

在 CoT 論文出來后不久,緊接著 Goolge 又發(fā)表了一篇提升 CoT 的論文,就是所謂的自洽 (Self-Consistency)。這個(gè)方法非常簡單,就是對給定問題采樣多個(gè)solutions,并通過多數(shù)投票獲得最終答案。方法其實(shí)并不新鮮,采樣多個(gè)再選取最好的那個(gè)之前 OpenAI 早就提出來了,只不過這里更簡化了一步,去掉了 Verifier,借助大模型的能力直接用多數(shù)投票就能得到不錯(cuò)的效果。其實(shí)我覺得OpenAI肯定早在做那篇文章時(shí)也試過了用多數(shù)投票方法的效果,他們也采樣了100條,沒有道理不會做一個(gè)很簡單的多數(shù)投票來看看效果如何,畢竟等待訓(xùn)練Verifier完成的時(shí)間也沒事情做。我個(gè)人認(rèn)為這篇 Self-Consistency 的創(chuàng)新性較為有限,屬于是站在了 Chain-of-Thought 肩膀上的一篇手速快的“實(shí)驗(yàn)報(bào)告”。

雖然性能相當(dāng)好,但我個(gè)人認(rèn)為自洽性只是一種技巧。同時(shí),和思維鏈提示一樣,它們目前最大的問題是只對非常非常大的語言模型有效。在我的實(shí)驗(yàn)中,思維鏈提示對60億參數(shù)的 GPT-J 幾乎不起作用,使用自洽性后在 GSM8K 上只能提高0.5%的準(zhǔn)確率。(不過,對大公司來說,對小模型沒用可能不算一個(gè)問題吧。。。)

自我改進(jìn) (Self-Improvement) 是差不多同一班人馬的另一項(xiàng)后續(xù)工作。在 CoT 與 Self-Consistency 的基礎(chǔ)上,它對訓(xùn)練集問題采樣出較多的solutions,使用多數(shù)投票來獲得答案,如果模型對這個(gè)答案非常有信心,即相當(dāng)大比例的solutions都是相同的答案,那么他們就會保留這些solutions,用于之后回頭微調(diào)語言模型。使用模型生成的solutions來微調(diào)它自己,所以這種方法被稱為 Self-Improvement。

谷歌對 PaLM 540B 進(jìn)行了微調(diào),效果當(dāng)然又提升了,只能說有錢真的可以為所欲為。只是這項(xiàng)工作的可能對普通科研工作者來說沒有太多的啟發(fā),除非它能證明更小的模型也能自我改進(jìn),但是就像前面我所說的,當(dāng)模型較小的時(shí)候,準(zhǔn)確率本身已經(jīng)極低了,根本無法獲得像用大模型生成一樣的高質(zhì)量 solutions,那么自我改進(jìn)又從何談起呢?

除此以外,還有幾項(xiàng)工作專注于改進(jìn)原始的 CoT。例如這項(xiàng)工作,Zero-shot-CoT,它嘗試克服 CoT 需要人工標(biāo)注的缺點(diǎn)。它使用了兩個(gè)階段的提示,首先加入一個(gè)提示“讓我們一步一步地思考”,就可以使LLMs一步一步地寫出推理過程。然后,他們使用一個(gè)能夠抽取答案的提示來獲得最終的答案。其效果非常令人驚訝,在一些數(shù)據(jù)集上甚至可以和 Few-shot-CoT相媲美,雖然有些數(shù)據(jù)集還是差了不少,總體上我認(rèn)為這項(xiàng)工作是非常簡潔和優(yōu)雅的。這項(xiàng)工作也和 CoT 一起中了NeurIPS。

Automatic CoT 是另一項(xiàng)后續(xù)工作。盡管 Zero-shot-CoT 很簡單,表現(xiàn)也不錯(cuò),但它比 Few-shot-CoT 還是要差一些的。這項(xiàng)工作嘗試使用 Zero-shot-CoT 來構(gòu)建 Few-shot-CoT 的例子,以此消除 Zero-shot-CoT 和 Few-shot-CoT 之間的差距。

具體來說,該方法是首先用k-means將訓(xùn)練集中的問題分成k個(gè)cluster,對于每個(gè)cluster,根據(jù)問題與聚類中心的距離進(jìn)行排序,返回排序后的問題列表。接著,遍歷這個(gè)問題列表,使用 Zero-shot-CoT 編寫問題的推理路徑,當(dāng)生成的solution的質(zhì)量滿足要求時(shí),將這個(gè)例子保存,作為之后 Few-shot-CoT 的prompt,同時(shí)打破當(dāng)前的循環(huán),在下一個(gè)cluster上重復(fù)上述過程,構(gòu)建另一個(gè)范例。

最終的效果確實(shí)不錯(cuò),但是可能將其稱為 Automatic CoT 還是有些不那么確切,畢竟整個(gè)過程并不是那么的 automatic。這篇工作也中了 ICLR 2023。

另一項(xiàng)與 CoT 提示非常相似的工作是 least-to-most prompt。其思路是將復(fù)雜的問題簡化為較容易的子問題,并按順序解決這些子問題,最終解決原始問題。

DIVERSE 結(jié)合了 CoT 和驗(yàn)證器。主要有兩個(gè)方面的改進(jìn),首先它使用了更多樣的 few-shot 例子并證明了其有效性,這也被后來的 automatic CoT 工作再一次證明;其次是它訓(xùn)練了一個(gè)額外的驗(yàn)證器來為每個(gè)推理路徑產(chǎn)生一個(gè)分?jǐn)?shù)。與OpenAI和Google的工作不同的是,OpenAI使用一個(gè)驗(yàn)證器來選擇最高分的solution,而Google則使用多數(shù)投票來選擇最終答案,DIVERSE 使用驗(yàn)證器預(yù)測的分?jǐn)?shù)作為權(quán)重來投票選擇最終答案。

11月有三篇idea比較類似的文章掛在arxiv上,分別是《Teaching Algorithmic Reasoning via In-context Learning》,《PAL: Program-aided Language Models》和《Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks》。它們背后的想法比較相似,盡管實(shí)施細(xì)節(jié)有些不同。PAL 這篇文章使用 prompt 來提示 LLMs 寫 python 代碼,而把最終的計(jì)算留給 python 解釋器。事實(shí)上,應(yīng)用額外的工具來處理計(jì)算應(yīng)該算是由 OpenAI 在他們最早的工作中提出的,他們提出利用計(jì)算器來處理語言模型生成的方程式。我認(rèn)為他們之間的區(qū)別在于它提示 LLMs 寫下并保存中間變量,以便最終用編程語言計(jì)算結(jié)果,而不是通過“=”號來觸發(fā)調(diào)用計(jì)算器。

到目前為止,本文所介紹的所有工作都是基于超大語言模型的,難道推理問題只是參數(shù)千億規(guī)模的 LLMs 的游戲?下面介紹兩篇沒有依賴這些超大模型來解決推理任務(wù)的工作。

第一篇是《STaR: Self-Taught Reasoner Bootstrapping Reasoning With Reasoning》,這項(xiàng)工作叫作 STaR。具體來說,他們用 few-shot 提示了一個(gè)語言模型來生成推理過程的例子,并過濾出答案正確的那些例子,以便進(jìn)一步微調(diào)語言模型。不斷重復(fù)這個(gè)過程,使用改進(jìn)后的模型來生成下一次的訓(xùn)練集。但這個(gè)方法的性能增益很快就飽和了,因?yàn)榍耙粋€(gè)循環(huán)中未能解決的問題,到了下一個(gè)循環(huán)還是沒能解決。因此,他們提出了一種叫做 合理化 (rationalization) 的方法,即在問題中加入一個(gè)提示,事實(shí)上就是直接告訴語言模型哪個(gè)答案是正確的,并希望語言模型能寫出一個(gè)合理的推理過程。

在常識推理任務(wù)上,STaR 表現(xiàn)良好,可與微調(diào)后的GPT-3相媲美。但是在像GSM8K這樣的更難的數(shù)據(jù)集上,它的表現(xiàn)卻遠(yuǎn)遠(yuǎn)不能令人滿意。正如下圖所示,一個(gè)只有幾十億個(gè)參數(shù)的語言模型似乎不可能在困難的推理問題上取得與那些有上千億參數(shù)的模型相當(dāng)?shù)男阅埽热鏕SM8K。CoT prompt 都不起作用,直接微調(diào) + STaR 也不起作用。

但是,有一項(xiàng)工作證明了這不是真的,像 GPT-J 這樣的模型在數(shù)學(xué)推理任務(wù)上可以與那些 LLMs 相媲美,甚至超過它們。《Solving Math Word Problem via Cooperative Reasoning induced Language Models》這篇工作借鑒了認(rèn)知科學(xué)的理念,尤其是雙過程理論(dual process theory)。人類的推理有一個(gè)雙過程框架,由一個(gè)即時(shí)反應(yīng)系統(tǒng)(系統(tǒng)1)和一個(gè)深思熟慮的推理系統(tǒng)(系統(tǒng)2)組成,整個(gè)推理由它們的交互決定。作者設(shè)計(jì)了一個(gè)類似人類的推理架構(gòu)叫作 CoRe,系統(tǒng)1作為生成器,系統(tǒng)2作為驗(yàn)證器。

整體的方法框架如下圖所示。

在 Step 1,作者 follow 了 OpenAI 的原始工作。

在 Step 2,不同于之前的工作是在完成所有的生成后再使用驗(yàn)證器來選擇 solution,作者認(rèn)為在生成的過程中間提供反饋是非常重要的,這樣的話對推理路徑的搜索就是在指導(dǎo)下進(jìn)行的,那些高質(zhì)量的路徑會被更多地探索。作者使用了了兩個(gè)驗(yàn)證器,一個(gè)是 GPT-J 用于提供 token-level 反饋,另一個(gè)用 DeBERTa 用于提供 sentence-level 反饋。這種樹狀搜索過程與蒙特卡洛樹搜索(MCTS)算法非常相似,因此作者利用這種算法將生成器和驗(yàn)證器結(jié)合起來,讓它們共同解決推理問題。

在 Step 3,為了進(jìn)一步提高模型的推理能力,作者利用這個(gè)閉環(huán)的協(xié)同推理框架來生成更多的例子以進(jìn)一步微調(diào)語言模型和驗(yàn)證模型。值得注意一點(diǎn)是,作者發(fā)現(xiàn)直接用最終答案來過濾生成的例子效果并不理想。相反,他們通過生成器和驗(yàn)證器的合作來過濾它們,所以過濾也是一個(gè)協(xié)同過程,作者把這個(gè)過程稱為自我思考(Self-Thinking)。最后重復(fù) Step 2 和 Step 3 直到性能飽和。

作者在 GSM8K 上對模型進(jìn)行了微調(diào),而在其他數(shù)學(xué)推理數(shù)據(jù)集上進(jìn)行 zero-shot。可以看出,推理能力可以在同一領(lǐng)域內(nèi)轉(zhuǎn)移,在GSM8K上的微調(diào)有助于語言模型解決其他數(shù)學(xué)推理問題。使用了 CoRe 的 GPT-J 可以與那些超大的語言模型相媲美。即使在最難的數(shù)據(jù)集GSM8K上,它也超過了OpenAI 以前的微調(diào) SoTA,后者使用兩個(gè) GPT-3 175B,一個(gè)作為生成器,一個(gè)作為驗(yàn)證器。在其他數(shù)據(jù)集上的 zero-shot 結(jié)果也超過了之前的 fine-tune SoTA。

總結(jié)

下圖是對這些工作的特點(diǎn)的一個(gè)簡單總結(jié):

可以預(yù)見的是,在未來的一段時(shí)間里 LLMs 與 Reasoning 將會吸引更多的研究者參與進(jìn)來。同時(shí),ChatGPT 的能力還在被不停地探索和挖掘,以往那些簡單的下游任務(wù),如情感分類,摘要,文本糾錯(cuò),風(fēng)格遷移,在這些超大模型出現(xiàn)之后,極有可能自此退出研究界,只在工業(yè)界里的某些特定場景下被繼續(xù)研究。不管怎么樣,新技術(shù)產(chǎn)生問題一定還是要比它能夠解決的問題要多的,它會解放我們研究那些較為簡單低階任務(wù)的精力,從而讓我們有更多時(shí)間去研究如何解決更加有挑戰(zhàn)性的問題,那些曾經(jīng)想都沒想過或者無從下手的問題,現(xiàn)在正等著我們一個(gè)個(gè)去攻破。

參考文獻(xiàn)

[1] Training Verifiers to Solve Math Word Problems

[2] Chain of Thought Prompting Elicits Reasoning in Large Language Models

[3] Self-Consistency Improves Chain of Thought Reasoning in Language Models

[4] Large Language Models Can Self-Improve

[5] Large Language Models are Zero-Shot Reasoners

[6] Automatic Chain of Thought Prompting in Large Language Models

[7] Least-to-Most Prompting Enables Complex Reasoning in Large Language Models

[8] On the Advance of Making Language Models Better Reasoners

[9] Teaching Algorithmic Reasoning via In-context Learning

[10] PAL: Program-aided Language Models

[11] Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks

[12] STaR: Self-Taught Reasoner Bootstrapping Reasoning With Reasoning

[13] Solving Math Word Problem via Cooperative Reasoning induced Language Models

最近更新