【LLM 10大觀念-2】Good Data is All You Need
大家新年快樂XD,為了要保持寫作的好習慣,跨年時間就趕快來寫這個系列第二篇:Good data is all you need。如果還沒看過我上一篇的朋友,可以先回頭把前一篇:Scaling看完,這個系列我希望做一個完整的總結,幫助LLM相關從業者、研究員、企業用最短的時間把2023年最重要的LLM概念融會貫通,加速2024年個人與企業的發展。
今天是系列的第二篇,我特別把Data的重要性拿出來講,並且希望從多個角度,幫助大家建立一個對Data的全面理解。
看完這篇你將學習到:
1. Data 與 Transfer Learning 的關係
2. 一個好的Dataset的組成
3. Data Mixture
4. Data Quality
1. Data 與 Transfer Learning 的關係
當談及Data的重要性時,大家可能首先想到的是數據科學領域中廣為流傳的名言:"Garbage in, Garbage out",這句話深刻地揭示了一個事實:數據的品質直接影響到模型的輸出品質。這是每位從業者都知道的基本原則(我稍後會再次提到數據品質)。
然而,對於ML和DL的從業者來說,除了Data品質,還有許多其他方面需要考慮,其中極為重要的一點便是Transfer Learning。
Transfer Learning(遷移學習)的概念是:我們可以訓練模型在某一領域(A領域)學習知識,然後將這些知識在另一領域(B領域)中應用
先來回顧歷史,在我初學DL的時候,有兩張圖片對我理解Transfer Learning很有幫助,都是來自於FeiFei Li老師的cs231n課程(暫時找不到public的course website,之後如果有新版課程網站會馬上補上。)
第一:NN在學習的時候,在淺層會學會抽取較為"粗淺"(Low level)的特徵,而越深層則會學會越"複雜"(High level)的特徵。
第二:我們可以藉由判斷Target domain跟Original domain的差異,來決定要Transfer(遷移)哪個層次的知識。
Ex: 如果差異很大的話,我們就只能Transfer Low level feature(基礎、粗淺的特徵),因此需要重新訓練較多層的Network,反之,如果差異很小,則可以Transfer High level feature(複雜的特徵),因此可以訓練較少層的Network。
因此在很長一段時間(2016前後),CV任何任務的標準都是先拿一個在imagenet上pretrained好的resnet,來當作新任務的基準。在所有研究員心中,都知道"pretrain在足夠大的dataset(Ex: imagenet)上學習圖像分類,幾乎對所有視覺任務都有幫助"
而在2018年,CVPR的Best Paper [2],Stanford跟UCB共同提出了Taskonomy,更細顆粒度的思考到底"學什麼會得到那些可遷移(Transferable)的能力(Ability)",一次性討論26個CV的任務(包含2D, 2.5D和3D的任務)的Transfer關係。(如下圖)
而後提出了1個我認為很重要的結論:
每個CV Task對於其他任務的Transfer效率有顯著的不同。每個任務只能提供某幾種特定的視覺能力,而我們如果能找到最佳的Transfer路徑,則能大幅提高最終效果或是訓練效率。
在2018年,NLP也開始進入了pretrain model的時代,AI2先提出了ELMo[2],說明pretrained在Language modeling上的LSTM可以更好的表達詞意,而後Google提出BERT[3],發現pretrained在Language modeling上的Transformer可以對幾乎所有NLP任務都得到顯著的提升。
但Pretrain Language Model的成功卻在NLP領域引起了超大的爭議:
“學習預測下一個字能不能讓模型學會任何(文意)知識?”
這個爭論我想即便到今天,都還是很難有結論,但我們可以思考這個爭論的本質,其實是在思考,Language modeling到底帶給模型哪些Transferable ability(可遷移的能力)?
而到了2022年,NLP領域也出現了對標Taskonomy的Paper <Not All Tasks Are Born Equal> [4],更進一步討論,不同NLP的任務分別又能夠帶給模型哪些能力的增強。
說了這麼多,其實就想提一個重點,對於ML/DL的Data,最重要的問題是:每個Dataset能讓模型學會哪些類型的Transferable Ability(可遷移的能力)?有些Dataset、任務能夠讓模型學會常識(Common Sense)、有些可以讓模型學會推理、有些可以讓模型學會對話,而我們在收集資料集時,就應該像是在準備料理的食譜一樣,精心的針對我們想要的最終結果去準備食材。
2. 一個好的Dataset的組成
第一段花了很多篇幅講了Data跟Transfer Learning的關係,提到了每個Dataset、任務都有可能讓模型學會某些類型的Transferable Ability。只要接受了這個結論,就馬上會想到我的下個結論:
一個好的Training Dataset應該同時包含兩種類型的Dataset:
- 目標任務的Training data
- 能帶給模型重要的Transferable Ability的相關Training data。
更形象一點,如果我們要做一個UberEat的客服機器人。
我們的資料集除了要有UberEat的客服對話資料(目標任務)以外,最好能教會模型基礎對話能力跟日常生活常識。而這個概念就是Data Mixture,是我認為在LLM pretraining跟finetuning中最重要的關鍵。
Data Mixture: 我們應該在Training dataset中以多少比例包含哪些資料。
3. Data Mixture
Data Mixture在LLM的pretraining跟instruction tuning階段都至關重要。
這個段落就希望把2023年最重要的關於Data Mixture的知識都梳理一遍。
Data Mixture = 在Training Data中我們要混進去哪些"種類"的資料,藉此帶給LLM那些特定的能力。
一般來說,我們會在三個階段思考關於Data Mixture這個問題,這些階段分別是Pretraining、Continual Pretraining和Supervised Finetuning。在每個階段,我們都需要仔細考慮我們所使用的Data Mixture。
A. Pretraining 階段
Pretraining在我心中是LLM訓練中最重要的過程,因為他耗費了巨大的運算量跟訓練量,LLaMa-2就已經做到2T的tokens,Qwen用了3T的tokens,未來更多Pretraining的模型很有可能也會運用更大量的token,或是更好的資料來進行pretraining。因為訓練量極大,所以這個階段也是LLM學習到最多能力的階段。
Meta AI跟PSL University [5]在23年6月就做了一個非常有趣的實驗,在GPT2的Pretraining過程中隨著時間會學習到越來越多不一樣的語言能力(如下圖),而這甚至只在GPT2 * 48GB的訓練資料而已。
因為Pretraining階段LLM會學到最多基礎能力,所以就像是要教小孩一樣,打好基礎的重點是:甚麼都要學到,並且不要過於偏科。
在過去我們已知幾件事
- 從GPT2 openAI僅用WikiText就讓模型學會相對robust的語言能力 [5]。
- Chinchilla跟LLaMa1套用了遠比GPT2更diverse的Data Mixture [6]。有Common Crawl跟C4兩個大範圍Web crawling + cleaning的資料集強化語言能力跟大部分的知識、常識,也有Wikipedia這種提供較正式的知識內容,The Pile包含大量文學類型的書籍,StackExchange跟Github提供coding內容,Arxiv提供進階的學術知識。(非常建議每個從業人員最少從這些Data source中認真做分析,更了解training data。)
- 單獨train在Common Crawl就提供LLM相對強勁的基礎常識 [7],在MMLU上可以比混了Wikipedia的Data mixture達到更好的分數,但差距不明顯。
- Galactica [8] 跟Minerva [9] 使用更多的論文比重,全方位的提升了LLM的理解能力以及自然科學的相關知識。
- 加入Code data 可能可以提升 LLM的理解能力 [10, 11]。
- LLaMa2之後Meta為了提升模型的coding能力,又額外訓練了500B的coding data才得到code-llama。[12]
- LLaMa1的訓練資料中,89.7%是英文,中文只有不到0.13%,所以中文能力很差。[13]
- Baichuan2跟Qwen分別用了2.6T跟3T tokens,並且絕大多數都是中文跟英文的資料,才把模型做成足夠強的雙語模型。[14, 15]
第1跟第2點,建立了基準的Pretraining data,而3~6則是可以幫助思考"文理平衡",就像我們以前國中小,文科理科都要學習,3~6點我則把文科跟理科分別的代表Pretraining data列出來,而7跟8則是考慮多語言。
上面我只有真的列最基礎的知識,具體怎麼配比、怎麼樣去做訓練,建議大家還是多參考我上面分享的論文以及各種Foundation model的論文。
目前國內真的有能力做Pretraining的公司寥寥無幾,因此大多時候我們都是使用國外Pretrained好的大模型,Ex: LLaMa-2, Mistral, Baichuan, Qwen, Yi …等。
因此對大部份組織而言,我認為需要學會的是:
- 知道如何解讀Public Benchmark的分數,不同分數分別可以代表LLM的哪些基礎能力。
- 更進一步回頭判斷,今天是哪些Pretraining data帶給LLM這些你想要的基礎能力。
B. Continual Pretraining 階段
相較於pretraining,Continual pretraining的重點是在已有基礎能力的模型上加強在模型domain的知識。一般而言是使用10B~100 tokens的資料來繼續做pretraining,因此我們稱為continual pretraining。
在Continual pretraining的過程中,最害怕的其實就是模型在學新知識的過程中把舊的知識接連忘掉,也就是俗稱的Forgetting。
Harvard跟Stanford就曾發表論文驗證LLM training的過程中的Forgetting問題。隨著LLM學習新的知識,最一開始學習的知識會不斷的遺忘。[16](如下圖)
因此在continual pretraining這個階段通常我們會「混入帶給模型通用知識的資料」,讓模型不斷「複習」這些重要知識。
BloomBergGPT在訓練時用了金融資料跟通用資料1:1的比例[17],ChatHome則進行ablation study發現領域資料跟通用資料大概在1:5~1:10之間[18]。(如下圖)
不過關鍵不是「哪個比例最好?」,而是在進行Continual pretraining的時候,一定要藉由loss來觀測Forgetting的狀況,並且運用Scaling law來找出最好的data配比。
C. Supervised finetuning 階段
Supervised finetuning階段,我們有兩個目標:1. 希望模型學會對話、解決任務,而不是單純預測下一個字。2. 額外再讓模型學會特定領域的任務能力。
我們一樣要考量Forgetting的問題,我們依然重視的是「讓LLM學會專業任務的前提下,也要兼顧基礎能力,不要變成一個只會解任務的專家。」
很多公司會收集完一包特定任務的SFT data就直接丟下去finetune,結果finetune 3~5個epoch後發現LLM完全忘記怎麼講話。這就是典型的把模型訓練成只會解特定任務的專家了。
Google在2022年提出Flan v2[19] dataset,用來讓LLM學會解決通用任務跟對話,而Flan v2中顯現出,當我們把越來越多種類的supervised data包含進我們的SFT data後,可以顯著提升我們模型全方面的能力。
MAmmoTH [20]採取類似概念,在訓練模型數學理解能力時,也混入大量不同方面的數學理解finetuning data,並構建出MathInstruct,包含大部分的數學通用能力。(如下圖)。
帶來的是不論在in-domain還是out-domain的測試集上,都遠優於原本的SOTA(如下圖)
因此當我們要進行SFT的時候,我們不只要特定任務的data,還要盡量混一些跟這個任務相關的其他supervised finetuning data,讓模型變成一個大範圍任務都通用的通才,而非學會特定任務就忘記基礎能力。
4. Data Quality
前面花了大量篇幅說明Data mixture的重要性,最後無法避免的還是要提到Data本身的品質(Quality)。
Data Quality因為知識也很多,我之後應該也會額外用一篇進行更詳細的介紹,不過這邊就提幾個最重要的研究。
在提到細節前,要先了解的是Data Quality在LLM的training、finetuning過程中通常包含兩種涵義:
微觀層面:每一筆Data本身format是好的(Ex: 好學、包含足夠多資訊),
巨觀層面:Dataset整體沒有contain任何會讓LLM學壞或是學不起來的性質(Ex: 重複資料太多、過多情色或暴力內容…等)
先來講微觀層面:每一筆Data本身format是好的。
Lee et al. [22]發現,當我們要讓模型學會基礎的加減乘除,如果只是單純的把128+367=495這樣的等式放進訓練資料,模型學習會有一個明顯的天花板,並且學習速率也較慢。但是如果我們把更多的運算過程,包含中間逐位運算以及進位的過程都加入訓練資料,這種時候模型就會以更短的時間、更少的訓練資料學會基礎數學運算。(如下圖)
在前面我們提到的MAmmoTH[20],其實也採用CoT跟PoT來構建他的Supervised Finetuning dataset,以達到更好的效果。如果不清楚CoT跟PoT的話,我後面也會用一篇來說明,不過核心思想就是讓模型(Ex: GPT4)盡量詳細說明自己的思考過程,藉此得到更完整的訓練資料。
因此微觀層面,其實影響模型學習的一個因素,就是你的訓練資料中,有沒有足夠詳盡的推理過程。這其實也很好理解,如果模型都只看「問題-答案」,那很多時候可能只是在背答案,如果給模型看「問題-答案-解題過程」,那模型就能更清楚整個學習的重點、邏輯。
Meta也提出了LIMA [23],說明微觀層面上,如果Data的品質夠高,我們可以用很少量的SFT data,就讓模型學會跟人對話。在LIMA論文中,他們只使用1,000個sample就達到了比其他SOTA更強的效果。
我想很多人都知道LIMA,也知道「SFT Data的品質比SFT Data的數量更重要」這個結論,但是LIMA具體Data有多好,可能是大家比較沒有注意的。我想要特別提兩點。
第一、LIMA裡面Task Diversity超高
跟我前面提的SFT要盡量加大diversity一致,LIMA在緊緊1,000筆資料,就cover的STEM, wiki, code, …等領域
而且如果你逐一去看裡面的資料,STEM就包含了75種不一樣的領域,而Other則更包含了99種不同的問題領域(英文問題、廚藝問題...等)。所以LIMA即便只用1000筆資料,還是保證了Task diversity。
第二、LIMA裡面過半資料有完整的解釋,而不是單純的回答問題而已。
推薦大家去逐一筆看LIMA的資料品質有多高,不過以下拿一筆資料作為範例。LIMA的資料大多遵循類似的風格,回答問題時包含「基礎回答、引經據典、詳細的說明、最後再次總結」。
這種格式其實也跟我們前面的數學運算例子一樣,在學習數學運算中我們希望看到每一位的運算過程跟進位的過程。而在LIMA中,每次回答問題,都提供思考跟推理過程,以及完整的論述,這才是所謂「高品質的資料」。
巨觀層面的問題又更多了,我打算留到之後用其他篇幅來進行說明。
結語
Data是幾乎所有公司在開發自己的LLM時都會遇到的問題。Data需要考量的面相又多又複雜,我自己最重視的就是兩點:Data Mixture跟Data Quality。
Data Mixture思考的是:我們要在Training data中加入哪些種類的Data?帶給LLM哪些能力?
Data Quality則要從微觀跟巨觀考量,圍觀考量每一個Data point是否可學、好學?巨觀則考量整的Dataset是否有某些糟糕的性質沒有被處理好?
這篇我提供一些過去半年對我很有幫助的思考脈絡及研究,即便如此依然還有很多東西沒辦法完整敘述,建議有興趣的人再從Reference paper中去深入思考更多的問題,以及期待我這個系列之後的更新。
Reference
- Zamir, Amir R., et al. “Taskonomy: Disentangling task transfer learning.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
- Sarzynska-Wawer, Justyna, et al. “Detecting formal thought disorder by deep contextualized word representations.” Psychiatry Research 304 (2021): 114135.
- Devlin, Jacob, et al. “Bert: Pre-training of deep bidirectional transformers for language understanding.” arXiv preprint arXiv:1810.04805 (2018).
- Zhou, Jing, et al. “Not All Tasks Are Born Equal: Understanding Zero-Shot Generalization.” The Eleventh International Conference on Learning Representations. 2022.
- Evanson, Linnea, Yair Lakretz, and Jean-Rémi King. “Language acquisition: do children and language models follow similar learning stages?.” arXiv preprint arXiv:2306.03586 (2023).
- Touvron, Hugo, et al. “Llama: Open and efficient foundation language models.” arXiv preprint arXiv:2302.13971 (2023).
- Shen, Zhiqiang, et al. “SlimPajama-DC: Understanding Data Combinations for LLM Training.” arXiv preprint arXiv:2309.10818 (2023).
- Taylor, Ross, et al. “Galactica: A large language model for science.” arXiv preprint arXiv:2211.09085 (2022).
- Lewkowycz, Aitor, et al. “Solving quantitative reasoning problems with language models.” Advances in Neural Information Processing Systems 35 (2022): 3843–3857.
- Yang, Ke, et al. “If LLM Is the Wizard, Then Code Is the Wand: A Survey on How Code Empowers Large Language Models to Serve as Intelligent Agents.” arXiv preprint arXiv:2401.00812 (2024).
- Hao Fu, Yao; Peng and Tushar Khot. 2022. How does gpt obtain its ability? tracing emergent abilities of language models to their sources. Yao Fu’s Notion.
- Roziere, Baptiste, et al. “Code llama: Open foundation models for code.” arXiv preprint arXiv:2308.12950 (2023).
- Touvron, Hugo, et al. “Llama 2: Open foundation and fine-tuned chat models.” arXiv preprint arXiv:2307.09288 (2023).
- Bai, Jinze, et al. “Qwen technical report.” arXiv preprint arXiv:2309.16609 (2023).
- Yang, Aiyuan, et al. “Baichuan 2: Open large-scale language models.” arXiv preprint arXiv:2309.10305 (2023).
- Kleiman, Anat, et al. “Predicting Task Forgetting in Large Language Models.” (2023).
- Wu, Shijie, et al. “Bloomberggpt: A large language model for finance.” arXiv preprint arXiv:2303.17564 (2023).
- Wen, Cheng, et al. “ChatHome: Development and Evaluation of a Domain-Specific Language Model for Home Renovation.” arXiv preprint arXiv:2307.15290 (2023).
- Chung, Hyung Won, et al. “Scaling instruction-finetuned language models.” arXiv preprint arXiv:2210.11416 (2022).
- Yue, Xiang, et al. “Mammoth: Building math generalist models through hybrid instruction tuning.” arXiv preprint arXiv:2309.05653 (2023).
- Penedo, Guilherme, et al. “The RefinedWeb dataset for Falcon LLM: outperforming curated corpora with web data, and web data only.” arXiv preprint arXiv:2306.01116 (2023).
- Lee, Nayoung, et al. “Teaching arithmetic to small transformers.” arXiv preprint arXiv:2307.03381 (2023).
- Zhou, Chunting, et al. “Lima: Less is more for alignment.” arXiv preprint arXiv:2305.11206 (2023).