語言模型的物理學 Physics of Language Models - ICML 2024 Tutorial

這是一個ICML 2024的tutorial talk,同時也是一系列的研究,talk的youtube link在這裡
本篇主要把看這個talk的一些讀書筆記記錄下來,雖然實際上talks是從 3 -> 2 -> 1 這個順序去講的,但這裡仍然以投影片的順序來描述,並把講者最後的感概放在Part 1的最後。

Intro



  • 把智慧分為1.結構、2.知識以及3.推論
  • 在可控制、理想的環境下做研究 (控制資料、調整參數)
  • 可重複性高的實驗 (使用100M大小的模型,推出通用法則)
  • 使用 probing 技巧去看模型裡面如何運作

1. Language Structures

這個部分有兩個目標: 
1. 語言模型的解釋
  •  並不是基於token level,而是更困難的階層式演算法
2.語言模型的結構
  • 如何LLM學習格式(format)? → hallucination(幻覺)
  • 實際上幻覺只是LLM學習格式學太快,但還沒學好底層任務而造成的
  • 希望解釋的是更階層式、複雜的語言架構
他們使用的方法是CFG(context-free grammar)來達成以上兩個目標

他們設計了自己的CFG,大約有20+的長度,這是一個非常長的CFG
  • CFG會從root開始 →  leaf 完成整個推論的樹,這樣長度的CFG會非常難從最終結果回推到他們的源頭,要完全記住這些samples也不可能,因為會有10的80次方個sample

 他們從三個面向來測試模型是否能學習這樣的CFGs: accuracy, diversity, distribution
  • 如果使用相對或旋轉嵌入的位置編碼,準確度會很高,但如果是用絕對的位置編碼就會得到很差的結果
為什麼會這樣呢?
  • 因為使用相對/旋轉的位置編碼對於語言架構的注意力來說非常有幫助
    • 相對注意力表現比旋轉好,但相對注意力太慢了
  • 但如果用一個GPT_stupid也可以發現不錯的表現 (這個GPT的head h會往回看2^h-1個token)
    • 例如第一個head會往前看第1個token,第二個head往前看前3個token,第三個head往前看前7個token,這些token的權重都是uniform attention的
也就是說,即使未來我們想要換掉注意力機制(like Mamba),我們最好還是給他一個位置編碼,即使只是給一個uniform的都好

LLM如何學習?
  • 在產生這一串sentence x的時候,實際上CFG是透過parsing tree來產生,而模型是看不到這個tree的
  • 那麼模型是否在預訓練的過程中祕密的學習到了解析CFG tree的方法呢? →  答案是yes
模型不只編碼了而且還在正確的位置上編碼了它
  • 舉例來說,有一個子樹的node是11,另一個node是7,他們其實是經過線性轉換後局部儲存在2, 1, 1這個附近的序列中
  • 即使GPT從未看過parsing tree,它仍然學習到了這個映射的規則
  • 但Encoder-based的模型(如BERT)是沒有這樣的能力的,因為這些模型會使用MLM來訓練,將一部分(如15%)的x遮蔽掉,要模型預測出被遮蔽掉的token是哪些
  • 而LM做的事情比Encoder-based得更困難,它得從leaf推到root才能知道下一個標記要產生的是什麼
  • 這其實也驗證了Part3討論過的"使用雙向模型無法讓模型提取知識"


對人類來說,我們使用DP來推論CFG tree,而在語言模型中,這些DP state其實是儲存在hidden state當中,除此之外,在做dp的時候也需要去將每個狀態連接起來,這件事情其實就是attention在做的

除了這個從attention機制得到的parse CFG的能力以外,語言模型還擁有產生下一個CFG的能力,這樣的能力還需要另一個層級的DP能力
  • 舉例來說,在產生node 9之前需要先確認 1.) node 9是否能被node 10所跟隨著且 2 .) node 8可以產生出它
  • 這個能力也是attention給語言模型的,可見attention有多麼強大

Summary of part 1

這裡是talk的最後,講者感概LLM竟然已經擁有了DP的能力。在他17歲參加IOI的時候最後一個問題就是DP,當時他並沒有解出來,這個今日的LLM智力已經超越17歲的他的這個事實使他開始研究了語言模型的物理學這個topic (講者曾拿過兩次IOI金牌)

2. Reasoning

2.1 Grade-School Math and the Hidden Reasoning Process

這個部分以國小的數學資料(iGSM)加上probing技巧來探索LLM的推論過程、LLM如何思考
GSM8k太小,有資料汙染,而使用GPT-4去擴充GSM8k又會有偏差,因此他們自己創造了iGSM
  •  他們從GSM8k中移除了一些常識資料,但保留數學推理過程的資料
舉例來說,為了去推論出某個高中有多少個背包,所產生出的所有拓樸圖node

他們計算了每個資料有多少的解決方案,結果是好十億、幾百億個,讓模型不可能硬記
  • 實驗結果發現,GPT-2可以達成level-1的推理能力,這表示模型在產生答案之前自己有想過,而非只靠CoT

如何證明LLM真的自己有想過?
  •  他對模型的幾個步驟做probing
    • 在產生答案之前,問模型是否參數A對於回答某個問題是必要的 nece(A)
    • 在產生答案的時候,問模型是否知道參數A接下來可以被計算 can_next(A)
    • 在提問之前,問模型是否知道參數A依賴在參數B之上 dep(A,B)
    • 最後發現模型在這三個階段都有很高的掌握度 (99%)
除此之外,他們也發現LLM有level-2的推理能力
  • GPT-2學習到了對回答答案來說沒有幫助的知識 (依賴性和是否能在下一個步驟被計算)
  • 這可能是AGI的G的來源 (Generalizing to skills not taught in the training data)

LLM在iGSM上會犯的錯誤
  •  最常見的錯誤有兩種,寫下非必要的參數A(nece)以及寫出沒有準備好被計算的參數A導致推論卡住 (can_next),即使在GPT-4o上也會有這些錯誤

對nece來說,既然模型在回答之前就會開始思考,我們可以對這些錯誤做相關性測試,看是否錯誤之間是相關的,並且看是否能夠在模型回答之前就偵測到答案可能會有錯誤 
→  錯誤可能是系統性的而非隨機的

對can_next來說,模型是在心中認為這個參數準備好了但實際上沒有,那模型就很可能會犯下這個錯誤 
→ 為了增強模型的推論能力,模型在can_next上的準確度非常重要


過去的研究認為,對LLM來說只有尺寸是重要的 (width和depth不重要)
但他們的實驗發現,對推論來說,depth很重要 →  因為深度就是模型在心中推論過程的長度
而且這個特性是無法用CoT來解決的,因為模型在做CoT之前就有在思考了

Summary of 2.1


2.2 How to Learn from Mistakes

即使是最強大的模型也會在推論的時候犯錯
  • 假如模型可以透過多步驟的prompting來避免犯錯,為什麼不直接馬上糾正這個錯誤呢?



他們在probing can_next的時候發現LLM其實在犯錯的時候是知道自己已經犯錯了
  • 他舉的例子是從 “as" 這個字開始probe,來檢查模型是否真的知道他從這裡知道他犯錯了,實驗發現模型會表現出後悔的狀態,但他無法再回溯改變了
  • 假設我們給模型回溯的能力 →  拿一個在正確資料上預訓練的LLM來做為錯誤檢測器來檢測,假如檢測到錯誤就回溯,重新生成 → 可以得到 2% 的提升 (med)
為什麼只有這麼小的提升呢?
  • 因為這個回溯只是重新生成一次,這會依賴在隨機性上而非真正地去糾正(error correction)
  • 為了去糾正他,你會需要一個有錯誤資料和糾正資料的合成資料,這就是他們的合成資料

在這個合成資料中,他們在每一個句子中增加了一個以機率p出現的錯誤參數,在後面附加一個token [BACK]
  • 這並不會影響訓練和推論,而只是資料多了一些過去犯過的錯誤,但這樣做讓他們得到了巨大的提升 (+17%)
他們發現:
  • 這個機率p越高,提升就越多
  • 在預訓練的錯誤資料並不會讓模型在推論的時候容易犯錯,即使p=0.5也一樣不會影響推論的時候機率最大的會是答案(temp=0)或是beam search的使用
  • 不需要label masking把錯誤的資料遮蔽掉
  • 即使預訓練資料會因此變得很長,但推論的時候模型仍會給很短的答案

如果拿這包合成資料去做fine tune而非預訓練的話有用嗎? →  答案是沒用
  • 在fine tune階段才加入太遲了,因為糾錯能力是非常困難的技能,只能在預訓練的時候學習
他們嘗試了LoRA和beam search來fine tune,效果都不是很好

在現實世界中,如何準備這樣的糾錯資料? →  有兩個方法,dumber跟smarter idea
  • dumber: 隨機選擇一個句子作為插入在後面,製造出fake mistake (範例中是在”Define”後面隨機拿句子來插入)
  • smarter: 隨機選一個參數插入在後面,製造出fake mistake →  但這個方法是失敗的

Summary of 2.2

3. Knowledge

3.1 Knowledge storage and extraction

LLM在對於某人的出生年分做奇偶校驗常常失敗、也常常無法比較兩位名人的生日誰早誰晚
  • 針對這樣的問題,首先要先確認模型是否 1. 在訓練中看過名人的生日年 2. 能提取出名人的生日年 3.能提取出一些名人的出生年 但提取不出其他名人的出生年?
  • 接下來才能測試出他是否擁有這樣的能力
  • 即使他成功回答,也得檢查是否是因為資料汙染才能回答? (他可能早已看過這樣的問題跟答案的pair)
  • 而如果他失敗回答.他是不是因為他不知道偶數跟奇數的定義? 這是否是因為沒有做足夠的fine tune?

建立知識庫,將知識分為幾個子問題,他認為最自然的知識就是自傳(biography)
  • 給一段自傳 →  產生出6個問題 →  把自傳 + 3個問題拿去預訓練,剩下3個問題拿來測試 →  如果能回答出測試的答案就表示擁有這樣的知識 (knowledge extraction),這樣的訓練方法是mixed training
  • 但是大家並不是這樣做的,實際上大家是直接在整段自傳上做預訓練 →  然後把3個問題拿去做 instrution fine tuning 3個拿來測試 →  這樣會得出差勁的結果,即使把模型調大、加一些trick也不會變好 →  必須要做 knowledge extentsion,產生出很多類似的問題描述來幫助模型學習
結論: 做knowledge extentsion的時候擴充pretrain data是必要的

但為甚麼extentsion會是必要的呢? 接下來他們使用 probing 來去測試看看為甚麼
  • 他們針對輸出層做測試,發現沒做擴充的資訊更雜,模型學習的方向很可能會是錯的,而有做擴充的就會更容易以正確的方式儲存知識

那麼,是否所有問題都需要被擴充呢? 實際上不用
  • 他們使用有擴充的名人自傳+沒擴充的少數人自傳來預訓練,然後只用名人的問題來做fine tune,結果發現模型在少數人的問題上也答得不錯
  • 這是因為模型在擴充的名人資料上已經學習到如何正確儲存知識,這個知識是可以擴充到所有案例上的

Summary of 3.1


3.2 Knowledge manipulation

task: knowledge classification
  • 如果沒用CoT,評估的時候就會很差,無論是訓練有CoT而推論沒用CoT還是都沒有CoT都會很差
  • 這個實驗表明了模型必須要把推論過程寫出來(顯性知識),才能操作知識

task: inverse search
  • 無論使用任何技巧、加大模型,模型都做不到inverse search
  • 只有在你的資料中有已經reserve的資料才做得到,而且你必須在預訓練的時候就reverse,fine tune的時候才reverse已經太遲了



即使是GPT-4和Llama-3都適用在以上講的原則上 (小模型的實驗可以應用在大模型上)
  • 講者用中文的四字成語來舉例,GPT-4其實無法回答出四字成語中缺了哪個字這樣的問題,顯示出即使是大模型,在缺少資料的情況下是沒有reverse的能力的
  • 這也可以做為圖靈測試,只要去問LLM兩個人的生日年數是奇數還是偶數,就能夠知道是否是人類
Summary of 3.2


3.3 Knowlege capacity scaling laws

所有的LLM都可以儲存2bit/param的知識
  • 以log2來儲存所有的可能性,例如有一個人叫做Eugeo,他出生的城市是從300種城市中隨機產生的,那這個知識的大小就會是log2(300)=8.23bits
  • 由此可推算出一個計算公式來計算出知識的大小

由此推論,一個充分被訓練好的LLM可永遠用2bit/params來儲存知識
  • 這個能力只跟模型尺寸有關,跟width, depth無關,跟資料型態、超參數也無關
他們認為7B模型就足夠儲存所有英文wiki跟教科書的資訊 (只是設為目標,他們還沒做到)


甚麼是充分訓練?
  • 這個知識已經被模型看過1000次曝光就算是充分訓練
  • 曝光(exposures)不等於通過(passes),如果1-pass中有些名詞會有超過100萬筆,這樣就算曝光超過100萬次 (同一個名詞在不同風格、情況下被模型看過)
他們如何推論出2bits/params scaling laws 的方式?
  • 他們發現固定資料大小,測試不同模型大小表現的時候,模型學習到的知識會更接近2bits的曲線 (使用 GPT-2 rotaray 畫出的曲線)

  • 如果模型沒有充分訓練(曝光<1000, 屬於稀有知識),這樣的知識可能只有1bit/params,此時使用不同的模型架構就會有不同的表現 (GPT-2的表現會比Llama/Mistral好) →  因為Gated MLP
  • 除此之外,如果把GPT-2的MLP layer移除,GPT-2也會表現很差,但只是把MLP layer尺寸下降到1/4的話也不會影響太多

在混合資料上的實驗 (品質好的資料和品質差的資料混在一起)
  •  在預訓練中品質差資料(junk data)的存在對模型有很大的傷害 (需要多20倍、3倍的曝光)
如何解決這個問題? →  在每一個預訓練資料的段落之前加入 domain tokens
  • 這使得LLM可以自動檢測出哪些domain可以獲得高品質的知識,並優先向這些domain學習 (你不需要告訴她這是哪些domain,他會自己學)


Summary of 3.3

留言

這個網誌中的熱門文章

機器學習競賽王者演算法:XGBoost、LightGBM、CatBoost

十種常見的軟體架構模式 10 Common Software Architectural Patterns

為什麼只能在訓練資料上平衡不平衡的資料集? Why should you deal with an imbalanced dataset only on training data?