天天看點

大語言模型技術原理

作者:NineData

在今天這個時代,人們的工作和生活已經離不開資料通路,而幾乎所有平台背後的資料存儲和查詢都離不開資料庫。SQL作為一種資料庫的查詢和處理語言曆史悠久,最早由IBM于上世紀70年代初研究關系資料模型時提出,後續發展為一種廣泛使用的資料庫标準通路接口。

今天大語言模型的發展給了我們一個契機,重新審視這層标準,如何讓人們以更加自然的方式通路資料庫,資料以更直接、更靈活的方式傳回給客戶。由于曆史發展的原因,從資料庫分析出一個結論,需要“分析人員+報表前端+資料後端+SQL+資料存儲”的全路徑,這一使用範式在未來将受到挑戰。除了自然語言本身的優勢外,語境的上下文學習能力、遷移學習和文字總結能力也有很大的發揮空間,帶着這些思考,我們有必要了解一下大語言模型背後的發展及其技術原理。

一、大語言模型的發展

大語言模型作為一個被驗證可行的方向,其“大”展現在訓練資料集廣,模型參數和層數大,計算量大,其價值展現在通用性上,并且有更好的泛化能力。相較于傳統特定領域訓練出來的語言模型,有更廣泛的應用場景。這篇文章參考Google和OpenAI相關論文及部分作者的補充,結合我的了解嘗試用大家普遍看得明白的語言,對其技術發展和主要實作進行解析。

1.1 Transformer模型的提出

在Transformer提出之前,自然語言處理領域的主流模型是循環神經網絡(RNN,recurrent neural network),使用遞歸和卷積神經網絡進行語言序列轉換。2017年,谷歌大腦團隊在人工智能領域的頂會NeurIPS發表了一篇名為“Attention is all you need”的論文,首次提出了一種新的簡單網絡架構,即 Transformer,它完全基于注意力機制(attention),完全摒棄了循環遞歸和卷積。

遞歸模型通常沿輸入和輸出序列的符号位置進行計算,來預測後面的值。但這種固有的順序性質阻礙了訓練樣例内的并行化,因為記憶體限制限制了樣例之間的批處理。而注意力機制允許對依賴項進行模組化,而無需考慮它們在輸入或輸出序列中的距離。

Transformer避開了遞歸網絡的模型體系結構,并且完全依賴于注意力機制來繪制輸入和輸出之間的全局依存關系。 在八個P100 GPU上進行了僅僅12個小時的訓練之後,Transformer就可以在翻譯品質方面達到新的最先進水準,展現了很好的并行能力。成為當時最先進的大型語言模型(Large Language Model, LLM)。

總結兩個核心突破:

  1. 突破了遠距離文本依賴的學習限制,避開了遞歸網絡的模型體系結構,并且完全依賴于注意力機制來繪制輸入和輸出之間的全局依賴關系。關聯來自兩個任意輸入或輸出位置的信号所需的操作數随着距離增加,原來需要線性增長或對數增長,現在被收斂成一個常量,并通過多注意頭機制保障了準确性。
  2. 可高度并行進行訓練,這對發揮硬體紅利以及快速疊代模型非常重要。

下圖是論文提到的Transformer模型,對編碼器和解碼器使用堆疊式的自注意力和逐點式、全連接配接層,分别如圖1的左半部分(編碼器)和右半部分(解碼器)所示,相關技術細節後面會重點講到。

大語言模型技術原理

Transformer模型

OpenAI基于該工作基礎上發展了GPT(Generative Pre-training)生成式預訓練模型,這裡借用網上一張圖簡單改過,相關細節将在後面展開。

大語言模型技術原理

GPT的發展

1.2 生成式預訓練初現潛力:GPT-1

2018年,OpenAI公司發表了論文“Improving Language Understanding by Generative Pre-training”,

使用的模型有兩個階段,第一階段是無監督預訓練,基于海量的文本集通過Transformer學習一個大容量的語言模型,第二階段基于标注資料進行參數微調。得到的一般任務不可知模型(或稱為通用模型)優于經過判别訓練的模型,在論文標明的12種資料集中有9個取得更好效果。 在 GPT-1 中,采用了 12 層Transformer 的結構作為解碼器,每個 Transformer 層是一個多頭的自注意力機制,然後通過全連接配接得到輸出的機率分布。

這次實踐對OpenAI來講,我覺得是奠定了他們往這個路線發展的核心因素,主要有幾個重點突破:

1、證明了通用模型訓練具有很大的價值潛力。之前用于學習特定任務的标注資料難以獲得,導緻模型效果不能持續提升,而通過Transformer無監督訓練+少量标注資料的Finetune就取得了更優的效果。

2、論文嘗試增加Transformer中間層, 在從2層到12層的數量增加中,平均每增加1層能夠提升9%的準确性。加上Transformer本身具備并行能力,這在GPU上無疑潛力巨大。

3、論文發現在第二步的Finetune中添加語言模組化作為輔助學習目标,能夠提高監督模型的泛化能力,并加速收斂。說明在更海量的資料集時,模型會更收益于輔助學習目标。

大語言模型技術原理

生成式預訓練初現潛力GPT-1

雖然論文摘要重點強調了該模型在缺少标注資料情況下對特定任務的優勢,但其實以上三點發現對OpenAI後續技術路線影響重大。但GPT-1在生成長文本時,仍然會出現資訊遺忘和重複等問題,和特定領域的模型對比還有很多不足。

1.3 泛化能力突破:GPT-2

2019年,OpenAI發表了最新進展,一篇“Language Models are Unsupervised Multitask Learners”的論文。重點實踐了更大的模型更廣的資料集具有更好的泛化能力。GPT-1是12層的transformer,BERT最深是24層的transformer,GPT-2則是48層,共有15億個參數的transformer,訓練集叫WebText,是從4500萬個連結提取文本去重後,得到800萬文檔共40GB文本。

論文認為現有系統用單個任務來訓練的單個領域資料集,是缺乏模型泛化能力的主要原因,是以在更廣的資料集上,GPT-2采用了多任務(multitask)的方式,每一個任務都要保證其損失函數能收斂,不同的任務共享主體transformer參數。

最終訓練出來的模型在不需要任何參數和模型改動下,在zero-shot(零樣本)任務中,在8個資料集中有7個表現為業界最優,這個泛化能力可以說已經很強大了,并且在機器翻譯場景取得亮眼結果,GPT也是在2.0出來後,開始備受關注。

1.4 更大參數更大資料集:GPT3

之前的模型要在特定領域有更好表現,依然需要上千條标注樣本資料來進行finetune,很大程度影響了模型的通用性,而人類能夠根據前面一句話知道語境(in-context),進而正确回答問題。GPT3就通過調大參數(1750億)來測試in-context 學習能力,并在沒有finetune情況下得到以下資料。在參數不斷增加的同時,分為三種場景看回答準确率表現:Zero-shot(0樣本),One-shot(隻給一個标準樣本),Few-shot(少量标準樣本,1000條左右)。下圖可以看到模型參數和樣本集對正确性的影響,随着參數增多,Few-shot相比Zero-shot的提升效果在拉大,說明越大的參數對樣本具有更強的泛化能力。

大語言模型技術原理

三種場景

大語言模型技術原理

模型參數和樣本集對正确性的影響

論文做了不同參數的驗證工作,n(params)是參數梳理,n(layers)是模型層數,d(model)是FFN層數的1/4,d(head)是多注意頭的維數,所有測試使用的上下文token數是2048。

大語言模型技術原理

驗證結果

GPT-3 在 GPT-2 追求無監督和零次學習的特征基礎上進行了改進,轉而追求無監督模式下的 few-shot(少量學習)。GPT-3采用了 96 層的多頭 Transformer,上下文視窗大小提升至 2048 個 token ,基于更大的資料集 45TB 的文本資料訓練,在多個 NLP 資料集上實作了出色的性能。GPT-3更多的工作在工程問題上,比如資料污染處理,GPU并行時減少節點間網絡互動和負載均衡等。

論文測試了超過24中場景,GPT-3在許多NLP資料集上實作了強大的性能,包括翻譯、問題回答和完形填空任務,以及一些需要實時推理或領域适應的任務,如解讀單詞、在句子中使用新單詞或執行3位數字算術。論文還表明,在few-shot設定下,GPT-3可以生成人類評估者難以區分的新聞文章。

1.5 火爆的ChatGPT:GPT 3.5

2022年3月,OpenAI再次發表論文“Training language models to follow instructions with human feedback”,通過人工回報和微調,使語言模型與使用者對各種任務的意圖保持一緻。并推出了InstructGPT模型,InstructGPT 是基于 GPT-3 的一輪增強優化,是以也被稱為 GPT-3.5。盡管GPT3.5還會犯一些簡單的錯誤,但論文工作表明利用人類回報進行微調是一個很有前景的方向。

論文提供了一種方法,能通過對人類回報進行微調,使語言模型在廣泛的任務應用中更好地遵從使用者意圖。從一組人工編寫的prompts和通過OpenAI API送出的prompts開始,論文收集了所需模型行為的标記樣本資料集,并使用監督學習對GPT-3進行微調。然後,論文對模型輸出進行人工排名,使用來自人類回報的強化學習(Reinforcement Learning from Human Feedback,RLHF)進一步微調這個監督模型。InstructGPT模型的參數為1.3B,而GPT-3模型的參數為175B,約為InstructGPT模型的130倍,但InstructGPT模型的輸出卻優于GPT-3模型的輸出。

訓練過程首先聘請了40個承包商來标注資料,收集送出給OpenAI的prompts的人工答案樣本集,以及一些人工寫的prompts作為訓練監督學習的基線。然後,在更大的prompts集上對比OpenAI的輸出,并人工标記差距,據此訓練出一個獎勵模型(Reward Model)來預測人類喜好的輸出。最後用PPO來最大化這個獎勵模型和fine-tune對監督模型的效果。這部分具體技術細節将在後面展開。論文認為模型如果有價值觀的話,展現更多的是标注者的價值觀念而不是更廣泛人的價值觀。

對人類任務意圖的識别,是一個非常重要的能力。ChatGPT 采用 InstructGPT 相同結構的模型,針對 Chat 進行了專門的優化, 同時開放到公衆測試訓練,以便産生更多有效标注資料。基于人類回報的強化學習(RLHF)是 ChatGPT 差別于其他生成類模型的最主要特點,該法幫助模型盡量減少有害的、不真實的及有偏見的輸出,提升自然溝通效果。 同時,為了更好地支援多輪對話,ChatGPT 引入了一種基于堆棧的上下文管理的機制,幫助 ChatGPT 跟蹤和管理多輪對話中的上下文資訊,進而在多輪對話中生成連貫自然的回複。

1.6 目前的技術局限性

  1. 專業的領域,缺乏語料訓練的情況下,GPT無法生成合适的回答。
  2. 可信度問題,缺乏答案的具體來源。
  3. 時效性問題,大模型底層訓練資料是過往資料,再一次訓練的成本很高。
  4. 數理問題會一本正經地胡說八道,Stephen Wolfram創造了計算知識搜尋引擎和計算語言wolfram,有機會将自然語言轉為計算符号再進行計算,解決這一問題。
  5. 模型的訓練方法有個緻命的問題,訓練好的模型在回答問題時,在各個答案裡選一個最優答案,但答案依然可能是錯的,模型本質是黑盒的,目前還未能對内部邏輯進行分解,無法保證不産生有害或傷害客戶的描述。如果調教訓練模型更加謹慎,可能會拒絕回答(以避免提示的誤報)。有時模型最終對一個短語沒有反應,但對問題/短語稍作調整,它最終會正确回答。

二、主要技術細節

Google的論文比較簡短,看到劉岩推薦的Jay Alammer對Transformer的講解,這裡也做了部分引用,這裡希望用大家看得懂的話,抽取主要技術細節講清楚。

從數學或機器學習的角度來看,語言模型都是對詞語序列的機率相關性分布的模組化,即利用已經說過的語句(語句可以作為數學中的向量)作為輸入條件,預測下一個時刻不同語句甚至語言集合出現的機率分布。 GPT生成式預訓練模型也是根據語料機率來自動生成回答的每一個字,ChatGPT在此基礎上通過使用基于人類回報的強化學習(Reinforcement Learning from Human Feedback,RLHF)來幹預增強學習以取得更好效果。

2.1 什麼是Transformer?

本文重點介紹Transformer核心結構和技術點,略過訓練優化部分。

編解碼元件結構

Transformer 本質上是一個 Encoder-Decoder 架構,包括編碼元件和解碼元件。比如在機器翻譯任務中,将一種語言的一個句子作為輸入,然後将其翻譯成另一種語言的一個句子作為輸出。編碼元件和解碼元件可以有很多層,比如Google剛提出時的論文用的是6層,後面GPT-1是12層,然後到GPT-3是96層。

大語言模型技術原理

Encoder-Decoder 架構

每個編碼器由兩個子層組成:Self-Attention 層(自注意力層)和 Position-wise Feed Forward Network(前饋網絡,縮寫為 FFN),每個編碼器的結構都是相同的,但是它們使用不同的權重參數。編碼器的輸入會先流入 Self-Attention 層。它可以讓編碼器在對特定詞進行編碼時使用輸入句子中的其他詞的資訊(可以了解為:當我們翻譯一個詞時,不僅隻關注目前的詞,而且還會上下文關注其他詞的資訊)。

解碼器也有編碼器中這兩層,但是它們之間還有一個編解碼注意力層(即 Encoder-Decoder Attention),其用來幫助解碼器關注輸入句子中需要關注的相關部分。

大語言模型技術原理

Encoder-Decoder Attention

  • 編碼器對文本的處理

對文本處理和通常的 NLP 任務一樣,首先使用詞嵌入算法(Embedding)将每個詞轉換為一個詞向量(vector)。在 Transformer 論文摘要提到詞嵌入向量的次元是 512,所有編碼器都會接收到包含多個大小為 512 的向量清單(List of vectors)。嵌入僅發生在最底層的編碼器中,其他編碼器接收的是上一個編碼器的輸出。這個清單大小是我們可以設定的參數——基本上這個參數就是訓練資料集中最長句子的長度。對輸入序列完成嵌入操作後,每個詞都會流經編碼器内的兩層,然後逐個編碼器向上傳遞。

大語言模型技術原理

編碼器對文本的處理

Self-Attention 原理

之前說Transformer的自注意機制突破了文本關注距離的限制,是以非常關鍵。先看這樣一個句子:

The animal didn't cross the street because it was too tired           

這個句子中的"it"代表什麼意思,是animal,還是street還是其他?這個對人來說很容易,但對模型來說不簡單。self-Attention就是用來解決這個問題,讓it指向animal。通過權重之後可以得到類似圖8的權重情況,The animal獲得最大關注。

大語言模型技術原理

Self-Attention 原理

在self-attention中,每個單詞有3個不同的向量,它們分别是Query向量( Q ),Key向量( K )和Value向量( V ),長度均是64。它們是通過3個不同的權值矩陣由嵌入向量 X 乘以三個不同的權值矩陣 W^Q , W^K ,W^V 得到,其中三個矩陣的尺寸也是相同的。均是 512×64 。

Query,Key,Value的概念取自于資訊檢索系統,舉個簡單的搜尋的例子來說。當你在某電商平台搜尋某件商品(年輕女士冬季穿的紅色薄款羽絨服)時,你在搜尋引擎上輸入的内容便是Query,然後搜尋引擎根據Query為你比對Key(例如商品的種類,顔色,描述等),然後根據Query和Key的相似度得到比對的内容(Value)。

self-attention中的Q,K,V也是起着類似的作用,在矩陣計算中,點積是計算兩個矩陣相似度的方法之一,是以式1中使用了QK^T進行相似度的計算。接着便是根據相似度進行輸出的比對,這裡使用了權重比對的方式,而權值就是query與key的相似度。

多注意頭機制

Multi-headed attention增強了自注意能力,其一是擴充了關注的位置,使之同時關注多個不同位置,其二是它為注意力層提供了多個“表示子空間”,如論文用了8個注意頭,那就有8組不同的Q/K/V矩陣,每個輸入的詞向量都被投影到8個表示子空間中進行計算。

具體流程如下圖,“Thinking Machines"的詞向量經過最下面那層編碼器後,使用不同的權重矩陣進行 8 次自注意力計算,就可以得到 8 個不同的 Z矩陣(0-7)。然後将8個Z矩陣拼接起來,和權重矩陣W0相乘,就得到最終的矩陣 Z,這個矩陣包含了所有注意力頭的資訊。這個矩陣會輸入到 FFN 層。

大語言模型技術原理

矩陣會輸入到 FFN 層

現在重新看之前的例子,在多注意頭機制下,"it" 關注的詞有哪些,頂部的8種顔色代表8個注意頭,可以看到有個注意頭最關注"the animal",另一個注意頭關注"tired",從某種意義上說,模型對“it”這個詞的表示融入了“animal”和“tired”的表示。

大語言模型技術原理

多注意頭機制

  • 是以多注意頭本質上是用更多個角度進行注意力計算再統一起來,能夠增強對句子上下文的完整了解。
  • 解碼器的關聯 在解碼器中,Transformer block比編碼器中多了個encoder-cecoder attention。在encoder-decoder attention中,Q來自于解碼器的上一個輸出, K 和 V 則來自于編碼器的輸出。這些向量将在每個解碼器的 Encoder-Decoder Attention 層被使用,幫助解碼器把注意力關注到輸入序列的合适位置。 下圖顯示在翻譯I am a student過程中,每一輪解碼器都生成一個詞,如圖示生成到"a"時,"a"會加入作為下一輪的輸入Q,然後解碼器結合輸入和編碼器的K、V,生成"student"。

2.2 ChatGPT是如何提升訓練效果的?

ChatGPT的背後是大型語言模型 (Large Language Model,LLM) 生成領域的新訓練範式:RLHF (Reinforcement Learning from Human Feedback) ,即基于來自人類回報的強化學習來優化語言模型。關于RLHF訓練有個TAMER架構(Training an Agent Manually via Evaluative Reinforcement)值得參考。

  • RLHF 是一項涉及多個模型和不同訓練階段的複雜概念,這裡我們按三個步驟分解:
  • 預訓練一個語言模型 (LM) ;
  • 聚合問答資料并訓練一個獎勵模型 (Reward Model,RM) ;
  • 用強化學習 (RL) 方式微調 LM。

GPT3訓練後的大語言模型是根據機率分布,計算出下一個最大可能的詞,他不管事實邏輯上的準确性,也沒有所謂的意識,是以有時會一本正經地胡說八道。RLHF是用生成文本的人工回報作為性能衡量标準,或更進一步用該回報作為獎勵來優化模型,使得在一般文本資料語料庫上訓練的語言模型能和複雜的人類價值觀對齊。具體步驟如下:

首先,我們使用經典的預訓練目标訓練一個語言模型。對這一步的模型,OpenAI 在其第一個流行的 RLHF 模型 InstructGPT 中使用了較小版本的 GPT-3。然後進行以下步驟:

  1. 訓練監督政策語言模型

GPT-3本身無法識别人類指令蘊含的不同意圖,也很難判斷生成内容是否高品質。為了解決這一問題,訓練過程是從資料集中随機抽取問題,由标注人員給出高品質答案,相當于提供了一系列人工編寫的prompts和對應的答案資料集。然後用這些人工标注好的資料集微調GPT3.5模型,獲得SFT模型(Supervised Fine-Tune)。

  1. 訓練獎勵模型

訓練方法:根據第一階段的模型,随機抽取問題,給出多個不同的回答,人工選出最優答案進行标注,有點類似教學輔導。将高品質答案的獎勵值進入下一輪強化學習RL,訓練一個獎勵模型來預測人類偏好的輸出。

RM 的訓練是 RLHF 差別于舊範式的開端。這一模型接收一系列文本并傳回一個标量獎勵,數值上對應人的偏好。我們可以用端到端的方式用 LM 模組化,或者用子產品化的系統模組化 (比如對輸出進行排名,再将排名轉換為獎勵) 。這一獎勵數值将對後續無縫接入現有的強化學習 RL 算法至關重要。

關于模型選擇方面,RM 可以是另一個經過微調的 LM,也可以是根據偏好資料從頭開始訓練的 LM。例如 Anthropic 提出了一種特殊的預訓練方式,即用偏好模型預訓練 (Preference Model Pretraining,PMP) 來替換一般預訓練後的微調過程。微調LM被認為對樣本資料的使用率更高,但對于哪種 RM 更好尚無定論。

  1. 近端政策優化 (Proximal Policy Optimization,PPO)

使用PPO優化獎勵模型的政策。使用獎勵模型的輸出作為标量獎勵,并使用PPO算法對監督政策進行微調,以優化該獎勵。

訓練方法:PPO的核心目的是将線上的人工學習轉為離線學習,機器自己給自己打分。利用第二階段訓練好的獎勵模型,在資料集中随機抽取問題,使用PPO模型生成多個回答,并用上一階段訓練好的RM模型分别給出品質分數。把回報分數按排序依次傳遞,産生政策梯度,通過強化學習的方式更新PPO模型參數。

最後步驟2和步驟3可以循環疊代,可以不斷完善模型。

PPO算法補充說明:

長期以來出于工程和算法原因,人們認為用強化學習訓練 LM 是不可能的。而目前多個組織找到的可行方案是使用政策梯度強化學習 (Policy Gradient RL) 算法、近端政策優化 (Proximal Policy Optimization,PPO) 微調初始 LM 的部分或全部參數。PPO 算法已經存在了相對較長的時間,有大量關于其原理的指南,因而成為 RLHF 中的有利選擇。

我們将微調任務表述為 RL 問題。首先,該政策 (policy) 是一個接受提示并傳回一系列文本 (或文本的機率分布) 的 LM。這個政策的行動空間 (action space) 是 LM 的詞表對應的所有詞元 (一般在 50k 數量級) ,觀察空間 (observation space) 是可能的輸入詞元序列(詞彙量 ^ 輸入标記的數量,比較大) 。獎勵函數是偏好模型和政策轉變限制 (Policy shift constraint) 的結合。

PPO 算法确定的獎勵函數具體計算如下:将提示 x 輸入初始 LM 和目前微調的 LM,分别得到了輸出文本 y1, y2,将來自目前政策的文本傳遞給 RM 得到一個标量的獎勵 rθ。将兩個模型的生成文本進行比較,計算差異的懲罰項,懲罰每個訓練批次中生成大幅偏離初始模型的RL政策,以確定模型輸出合理連貫的文本。

大語言模型技術原理

PPO 算法确定的獎勵函數

總體來說,ChatGPT 在人工标注的prompts和回答裡訓練出SFT監督政策模型,再通過随機問題由模型給出多個答案,然後人工排序,生成獎勵模型,再通過PPO強化訓練增強獎勵效果。最終ChatGPT能夠更好了解指令的意圖,并且按指令完成符合訓練者價值觀的輸出。

最後,大語言模型作為一個被驗證可行的方向,其“大”展現在資料集廣泛,參數和層數大,計算量大,其價值展現在通用性上,有廣泛的應用場景。大語言模型能夠發展,主要還是模型具備很好的并行擴充性,随着資料量和計算量的增加,主要挑戰在工程和調優上。海外除了GPT、還有LLama、PaLM等,國内目前也有很多相應的研究,因為很多基礎技術以前就存在,最近國内追趕速度也很快,我們預期國内半年左右能夠到GPT 3.5水準。NineData也非常看好這個方向,并且已經将大語言模型應用到NineData平台的SQL開發中,支援通過自然語言直接查找、變更資料,提供資料庫問題和知識問答、資料庫SQL優化建議等多項能力,後續我們還将推出更多有價值的功能,歡迎登陸使用。https://www.ninedata.cloud

作者簡介:

陳長城(天羽),玖章算術技術副總裁,前阿裡雲資深技術專家,在資料庫領域深耕15年,主導了阿裡資料庫基礎架構演進(IOE到分布式、異地多活、容器化存計分離)和雲原生資料庫工具體系建設。

大語言模型技術原理

陳長城(天羽),玖章算術技術副總裁,前阿裡雲資深技術專家

參考文獻:

Google Brain: “Attention is all you need”

OpenAI: “Improving Language Understanding by Generative Pre-training”

OpenAI: “Language Models are Unsupervised Multitask Learners”

OpenAI: “Language Models are Few-Shot Learner”

OpenAI: “Training language models to follow instructions with human feedback”

Luke Cheng:https://github.com/huggingface/blog/blob/main/zh/rlhf.md

Jay Alammar: http://jalammar.github.io/illustrated-transformer/

繼續閱讀