臺州北京網(wǎng)站建設(shè)seo公司是做什么的
ChatGPT 的卓越表現(xiàn)得益于其背后多項核心算法的支持和配合。本文將分別介紹作為其實現(xiàn)基礎(chǔ)的 Transformer 模型、激發(fā)出其所蘊含知識的Prompt/Instruction Tuning 算法、其涌現(xiàn)出的思維鏈能力、以及確保其與人類意圖對齊的基于人類反饋的強化學習算法。
1.基于Transformer的預訓練語言模型
ChatGPT 強大的基礎(chǔ)模型采用 Transformer 架構(gòu), Transformer 是一種基于自注意力機制的深度神經(jīng)網(wǎng)絡(luò)模型,可以高效并行地處理序列數(shù)據(jù)。
原始的 Transformer 模型包含兩個關(guān)鍵組件:編碼器和解碼器。編碼器用于將輸入序列映射到一組中間表示,解碼器則將中間表示轉(zhuǎn)換為目標序列。編碼器和解碼器都由多層的注意力模塊和前饋神經(jīng)網(wǎng)絡(luò)模塊組成。其中自注意力模塊可以學習序列中不同位置之間的依賴關(guān)系,即在處理每個位置的信息時,模型會考慮序列中其他所有位置上的信息,這種機制使得 Transformer模型能夠有效地處理長距離依賴關(guān)系。在原始 Transformer 模型基礎(chǔ)上,相繼衍生出了三類預訓練語言模型:編碼預訓練語言模型、解碼預訓練語言模型和編解碼預訓練語言模型。
1.1 編碼預訓練語言模型(Encoder-only Pre-trained Models)
這類模型在預訓練過程中只利用原始 Transformer 模型中的編碼器。相應(yīng)的預訓練任務(wù)通常選用掩碼語言建模任務(wù)(Masked Language Modeling), 即掩碼住(用特殊字符 [MASK] 替換)輸入句子中一定比例的單詞后,要求模型根據(jù)上下文信息去預測被遮掩的單詞。其中有有代表性的工作包括 BERT, ALBERT, RoBERTa 等。
- BERT:BERT 模型是最經(jīng)典的編碼預訓練語言模型,其通過掩碼語言建模和下一句預測任務(wù),對 Transformer 模型的參數(shù)進行預訓練。
- ALBERT:ALBERT 是一個輕量化的 BERT 模型,通過分解詞向量矩陣和共享 Transformer 層參數(shù)來減少模型參數(shù)個數(shù)。
- RoBERTa:相較于 BERT 模型, RoBERTa 在預訓練階段,采用了更多的語料以及動態(tài)掩碼機制(不同輪次同一樣本掩碼不同的單詞),去掉了下一 句預測任務(wù),同時采用了更大的批大小。
1.2 解碼預訓練語言模型(Decoder-only Pre-trained Models)
GPT (Generative Pre-trained Transformer) 是由 OpenAI 提出的只有解碼器的預訓練模型。相較于之前的模型,不再需要對于每個任務(wù)采取不同的模型架構(gòu),而是用一個取得了優(yōu)異泛化能力的模型,去針對性地對下游任務(wù)進行微調(diào)。在本章節(jié)將介紹 GPT 系列模型,包括 GPT-1、 GPT-2 和 GPT-3。
(1)GPT-1
GPT-1 在文章“Improving Language Understanding by Generative PreTraining”[1] 中被提出。在 GPT 被提出之前,大多數(shù)深度學習方法都需要大量人工標注的高質(zhì)量數(shù)據(jù),但是標注數(shù)據(jù)的代價是巨大的,這極大程度上限制了模型在各項任務(wù)性能的上限。如何利用容易獲取的大規(guī)模無標注數(shù)據(jù)來為模型的訓練提供指導成為 GPT-1 中需要解決的第一個問題。另外自然語言處理領(lǐng)域中有許多任務(wù)依賴于自然語言在隱含空間中的表征,不同任務(wù)對應(yīng)的表征很可能是不同的,這使得根據(jù)一種任務(wù)數(shù)據(jù)學習到的模型很難泛化到其他任務(wù)上。因此如何將從大規(guī)模無標注數(shù)據(jù)上學習到的表征應(yīng)用到不同的下游任務(wù)成為 GPT-1 需要解決的第二個問題。
針對第一個問題, GPT-1 中使用了自左到右生成式的目標函數(shù)對模型進行預訓練。這個目標函數(shù)可以簡單理解為給定前 i?1i - 1i?1 個 token,對第 iii 個 token 進行預測?;谶@樣的目標函數(shù), GPT-1 就可以利用無標注的自然語言數(shù)據(jù)進行訓練,學習到更深層次的語法信息與語義信息。
針對第二個問題,在完成了無監(jiān)督的預訓練之后, GPT-1 接著使用了有標注的數(shù)據(jù)進行有監(jiān)督的微調(diào)使得模型能夠更好地適應(yīng)下游任務(wù)。給定輸入token 序列x1,x2,...,xmx1, x2, ..., xmx1,x2,...,xm 與標簽 y 的數(shù)據(jù)集,對模型的參數(shù)進行再次訓練調(diào) 整,用到的優(yōu)化模型是在給定輸入序列時預測的標簽最接近真實值
具體來說, GPT-1 在大規(guī)模無標注語料庫上預訓練之后,再利用有標注數(shù)據(jù)在特定的目標任務(wù)上對模型參數(shù)進行微調(diào),實現(xiàn)了將預訓練中獲得的知識遷移到下游任務(wù)。
GPT-1 的結(jié)構(gòu)很簡單,由 12 層 Transformer Block(自注意力模塊和前饋神經(jīng)網(wǎng)絡(luò)模塊)疊加而成。下圖是 GPT-1 原文中的總覽圖,左側(cè)是 GPT-1 的架構(gòu)以及訓練時的目標函數(shù);右側(cè)是對于不同任務(wù)上進行微調(diào)時模型輸入與輸出的改變。
(2)GPT-2
與 GPT-1 中的通過預訓練-微調(diào)范式來解決多個下游任務(wù)不同, GPT- 2 更加側(cè)重于 Zero-shot 設(shè)定下語言模型的能力。 Zero-shot 是指模型在下游任務(wù)中不進行任何訓練或微調(diào),即模型不再根據(jù)下游任務(wù)的數(shù)據(jù)進行參數(shù)上的優(yōu)化,而是根據(jù)給定的指令自行理解并完成任務(wù)。
簡單來講, GPT-2 并沒有對 GPT-1 的模型架構(gòu)進行創(chuàng)新,而是在 GPT- 1 的基礎(chǔ)上引入任務(wù)相關(guān)信息作為輸出預測的條件,將 GPT-1 中的條件概 率 p(output∣input)p(output|input)p(output∣input) 變?yōu)?p(output∣input;task)p(output|input; task)p(output∣input;task);并繼續(xù)增大訓練的數(shù)據(jù)規(guī)模以及模型本身的參數(shù)量,最終在 Zero-shot 的設(shè)置下對多個任務(wù)都展示了巨大的潛力。
雖然 GPT-2 并沒有模型架構(gòu)上的改變,但是其將任務(wù)作為輸出預測的條件引入模型從而在 Zero-shot 的設(shè)置下實現(xiàn)多個任務(wù)的想法一直延續(xù)至今。這樣的思想事實上是在傳達只要模型足夠大,學到的知識足夠多,任何有監(jiān)督任務(wù)都可以通過無監(jiān)督的方式來完成,即任何任務(wù)都可以視作生成任務(wù)。
(3)GPT-3
GPT-3使用了與 GPT-2 相同的模型和架構(gòu)。文中為了探索模型規(guī)模 對于性能的影響,一共訓練了 8 個不同大小的模型,并將最大的具有 1750 億參數(shù)的模型稱為 GPT-3。
GPT-3 最顯著的特點就是大。大體現(xiàn)在兩方面,一方面是模型本身規(guī)模大,參數(shù)量眾多,具有 96 層 Transformer Decoder Layer,每一層有 96 個 128 維的注意力頭,單詞嵌入的維度也達到了 12,288;另一方面是訓練過程中使用到的數(shù)據(jù)集規(guī)模大,達到了 45TB。在這樣的模型規(guī)模與數(shù)據(jù)量 的情況下, GPT-3 在多個任務(wù)上均展現(xiàn)出了非常優(yōu)異的性能,延續(xù) GPT-2 將無監(jiān)督模型應(yīng)用到有監(jiān)督任務(wù)的思想, GPT-3 在 Few-shot, One-shot 和 Zero-shot 等設(shè)置下的任務(wù)表現(xiàn)都得到了顯著的提升。
1.3 基于編解碼架構(gòu)的預訓練語言模型(Encoder-decoder Pretrained Models)
基于編碼器的架構(gòu)得益于雙向編碼的全局可見性,在語言理解的相關(guān)任務(wù)上性能卓越,但是因為無法進行可變長度的生成,不能應(yīng)用于生成任務(wù)。
基于解碼器的架構(gòu)采用單向自回歸模式,可以完成生成任務(wù),但是信息只能從左到右單向流動,模型只知“上文”而不知“下文”,缺乏雙向交互。針對 以上問題,一些模型采用序列到序列的架構(gòu)來融合兩種結(jié)構(gòu),使用編碼器提取出輸入中有用的表示,來輔助并約束解碼器的生成。
- BART:BART 的具體結(jié)構(gòu)為一個雙向的編碼器拼接一個單向的自回歸解碼器,采用的預訓練方式為輸入含有各種噪聲的文本,再由模型進行去噪重構(gòu)。在解碼器部分, BART 每一層對編碼器的最后一層的隱藏表示執(zhí)行交叉注意力機制以聚合關(guān)鍵信息。 BART 在維基百科和 BookCorpus 數(shù)據(jù)集上訓練,數(shù)據(jù)量達 160GB。
- T5:BART 為了兼顧不同任務(wù)設(shè)計了復雜的預訓練任務(wù),針對如何在多個任務(wù)中實現(xiàn)優(yōu)秀的遷移性能這一問題,谷歌研究者提出了一種新的范式:將所有自然語言處理任務(wù)統(tǒng)一成“文本到文本”的生成任務(wù)。 T5 通過在輸入之前加入提示詞,實現(xiàn)了用單個模型解決機器翻譯、文本摘要、問答和分類等多個任務(wù)。針對遷移學習需要的巨量、高質(zhì)量和多樣的預訓練數(shù)據(jù), T5 在谷歌專門構(gòu)造的 C4 數(shù)據(jù)集上進行訓練。
- Switch Transformers:隨著語言模型的深入研究,參數(shù)量的增加可以顯著提高模型的性能,但隨之而來的就是應(yīng)用時越來越大的運算量。 SwicthTransformer 將混合專家網(wǎng)絡(luò)(Mixture-of-Experts, MoE)的條件運算思想引入 Transformer 的全連接層,實現(xiàn)增加模型的尺寸而不增加推理時的運算量。
2.提示學習與指令精調(diào)
2.1 提示學習概述
提示學習(Prompt Learning) 簡單來說是通過一些方法編輯下游任務(wù)的輸入,使其形式上模擬模型預訓練過程使用的數(shù)據(jù)與任務(wù)。比如做情感分類任務(wù)時,監(jiān)督學習的做法是輸入“我今天考砸了”,模型輸出分類的分數(shù)或分布,而提示學習的做法則是在“我今天考砸了”后拼接上自然語言描述“我感覺很 ____”,讓模型生成后面的內(nèi)容,再根據(jù)某種映射函數(shù),將生成內(nèi)容匹配到某一分類標簽。
可以看出,提示學習這種方式拉近了測試分布與預訓練分布的距離,進而可以利用大規(guī)模預訓練語言模型在預訓練過程中習得的強大語言建模能力,使其不經(jīng)過微調(diào)就可以在各種下游任務(wù)上取得很好的結(jié)果。后續(xù)更有工作提出了自動提示搜索和連續(xù)提示的方法,使得提示本身也可以微調(diào),使其 有了更好的靈活性。
相較于提示學習, 指令精調(diào)(Instruction Tuning) 可以說是提示學習的加強版。兩種學習方法的本質(zhì)目標均是希望通過編輯輸入來深挖模型自身所蘊含的潛在知識,進而更好的完成下游任務(wù)。
而與提示學習不同的是,指令學習不再滿足于模仿預訓練數(shù)據(jù)的分布,而是希望通過構(gòu)造“指令 (Instruction)”并微調(diào)的方式,學習人類交互模式的分布,使模型更好的理解人類意圖,與人類行為對齊;在指令學習中,模型需要面對的不再是單純的補全任務(wù),而是各種不同任務(wù)的“指令”,即任務(wù)要求。模型需要根據(jù)不同的任務(wù)要求,做出相匹配的正確回復?!爸噶睢迸e例如下:
- 請將下面這句話翻譯成英文“ChatGPT 都用到了哪些核心技術(shù)?”
- 請幫我把下面這句話進行中文分詞“我太喜歡 ChatGPT 了!”
- 請幫我寫一首描繪春天的詩詞,詩詞中要有鳥、花、草。
從樣例中可以看出,原本自然語言處理中的經(jīng)典任務(wù),經(jīng)過任務(wù)要求的包裝后,就變成了更符合人類習慣的“指令”。
研究表明,當“指令”任務(wù)的種類達到一定量級后,大模型甚至可以在沒有見過的零樣本(Zero-shot) 任務(wù)上有較好的處理能力。因此,指令學習可以幫助語言模型訓練更深層 次的語言理解能力,以及處理各種不同任務(wù)的零樣本學習能力。 OpenAI 提出的 InstructGPT 模型使用的就是指令學習的思想, ChatGPT 沿襲了InstructGPT 的方法。
2.2 ChatGPT中的指令學習
ChatGPT 所用到的指令學習數(shù)據(jù)集的構(gòu)造方法和訓練方法與 InstructGPT 大致相同,因此介紹 InstructGPT 構(gòu)造“指令”數(shù)據(jù)集的細節(jié)。
InstructGPT 的“指令”數(shù)據(jù)集由兩部分構(gòu)成,其中一部分收集于全球用戶使用 OpenAI 的 API 后的真實人機交互數(shù)據(jù),這些數(shù)據(jù)在使用之前都經(jīng)過了信息去重和敏感信息過濾;另一部分數(shù)據(jù)則來自于人工標注。
為了使標注人員能夠標注出高質(zhì)量的數(shù)據(jù)集, OpenAI 通過前期的審核和面試,聘請了一個由 40 人組成的標注團隊。在這些人工標注的數(shù)據(jù)中,總共分為三類,其一是為了增加數(shù)據(jù)集中任務(wù)的多樣性,由標注人員寫出任意任務(wù)的 “指令”;其二是小樣本(Few-shot)數(shù)據(jù),由標注人員寫出“指令”和一些對應(yīng)的問答對,用于訓練模型的小樣本學習(Few-shot learning)能力;其三 是在 OpenAI API 中已有的用例,標注人員模仿這些用例寫出相類似的“指令”數(shù)據(jù)。這些數(shù)據(jù)包含了語言模型中常見的任務(wù)類型(生成、問答、聊天、改寫、總結(jié)、分類等),其中 45.6% 的“指令”為生成任務(wù)類型,在所有類型中占比最大。
InstructGPT 通過在構(gòu)造的”指令”數(shù)據(jù)集上進行有監(jiān)督微調(diào)(Supervised fne-tuning, SFT)和基于人工反饋的強化學習(Reinforcement Learning from Human Feedback, RLHF)以使模型與人類需求對齊。
在實驗結(jié)果上,將運用指令學習后且含有 175B 參數(shù)的 InstructGPT 模 型,在指令學習的經(jīng)典數(shù)據(jù)集 FLAN、 T0 上進行精調(diào)后發(fā)現(xiàn), InstructGPT 模型對比 FLAN、 T0 兩個模型在效果上均有一定程度的提升。
3.思維鏈(Chain of Thought, COT)
人類在解決數(shù)學應(yīng)用題這類復雜推理任務(wù)的過程中,通常會將問題分解為多個中間步驟,并逐步求解,進而給出最終的答案,例如求解問題“小華每天讀 24 頁書, 12 天讀完了《紅巖》一書,小明每天讀 36 頁書,幾天可以讀完《紅巖》?”,人會將問題分解為(1)“紅巖共 24*12=288(頁)”、(2)“小明可以用 288÷36=8(天)”。受此啟發(fā),谷歌研究人員 Jason Wei(現(xiàn) OpenAI 員工)等提出了思維鏈,通過在小樣本提示學習的示例中插入一系列中間推理步驟,有效提升了大規(guī)模語言模型的推理能力,圖中展示模型通過產(chǎn)生思維鏈來正確求解數(shù)學應(yīng)用題。
相較于一般的小樣本提示學習,思維鏈提示學習有幾個吸引人的性質(zhì):
- 在思維鏈的加持下,模型可以將需要進行多步推理的問題分解為一系列的中間步驟,這可以將額外的計算資源分配到需要推理的問題上。
- 思維鏈為模型的推理行為提供了一個可解釋的窗口,使通過調(diào)試推理路徑來探測黑盒語言模型成為了可能。
- 思維鏈推理應(yīng)用廣泛,不僅可以用于數(shù)學應(yīng)用題求解、常識推理和符號操作等任務(wù),而且可能適用任何需要通過語言解決的問題。
- 思維鏈使用方式非常簡單,可以非常容易地融入語境學習(in-context learning),從而誘導大語言模型展現(xiàn)出推理能力。
4.基于人類反饋的強化學習(Reinforcement Learning with Human Feedback, RLHF)
RLHF 是 ChatGPT/InstrcutGPT 實現(xiàn)與人類意圖對齊,即按照人類指令盡可能生成無負面影響結(jié)果的重要技術(shù)。該算法在強化學習框架下實現(xiàn),大體可分為以下兩個階段:
(1)獎勵模型訓練
該階段旨在獲取擬合人類偏好的獎勵模型。獎勵模型以提示和回復作為輸入,計算標量獎勵值作為輸出。獎勵模型的訓練過程通過擬合人類對于不同回復的傾向性實現(xiàn)。具體而言,首先基于在人類撰寫數(shù)據(jù)上精調(diào)的模型,針對同一提示采樣多條不同回復。然后,將回復兩兩組合構(gòu)成一條獎勵模型訓練樣本,由人類給出傾向性標簽。最終,獎勵模型通過每條樣本中兩個回復的獎勵值之差計算傾向性概率擬合人類標簽,進而完成獎勵模型的訓練。
(2)生成策略優(yōu)化
給定習得的獎勵模型, ChatGPT/InstructGPT 的參數(shù)將被視為一種策略,在強化學習的框架下進行訓練。首先,當前策略根據(jù)輸入的查詢采樣回復。然后,獎勵模型針對回復的質(zhì)量計算獎勵,反饋回當前策略用以更新。值得注意的是,為防止上述過程的過度優(yōu)化,損失函數(shù)同時引入了詞級別的 KL 懲罰項。此外,為了避免在公開 NLP 數(shù)據(jù)集上的性能退化,策略更新過程兼顧了預訓練損失。