過去三個月,LLaMA系模型發(fā)展如何?指令微調(diào)的核心問題又是什么?
符堯(yao.fu@ed.ac.uk),愛丁堡大學(xué) (University of Edinburgh) 博士生,本科畢業(yè)于北京大學(xué)。
ChatGPT 大火之后,在 2023 年 2 月 24 日,LLaMA 的出現(xiàn)讓 instruction tuning 這個方向變得火熱;3 月 18 日,Alpaca 讓大家看到從成熟的模型 distill 小模型成為還不錯的 ChatBot 的可能性,從而引發(fā)羊駝系模型寒武紀大爆發(fā)。但僅僅過去三個月,大家開始發(fā)現(xiàn)意識到用 ChatGPT 的數(shù)據(jù)訓(xùn)練 LLaMA 的各種問題。本文回顧在過去三個月內(nèi)的 LLaMA 系模型的發(fā)展,討論 Instruction Tuning 的下一步挑戰(zhàn)。
Disclaimer: 這篇文章算是一個 quick research memo,是從我近期的一個分享大綱里 edit 出來的,做了一些刪減和補充;現(xiàn)階段開源社區(qū)對于 LLM 訓(xùn)練清楚 / 不清楚的地方同時存在,我盡量做到引用 / 討論的內(nèi)容都是有切實證據(jù),而不是基于流言。很多的內(nèi)容是我跟對應(yīng)論文的原作者直接討論過的。但即便這樣,我的 take 也可能有誤,很多也討論不出來,所以請大家直接在評論區(qū) comment,積極參與討論,真理越辯越明。
目錄
圖片
1 - 起源
最開始三篇
- InstructGPT: Training language models to follow instructions with human feedback
- FLANv1: Finetuned Language Models Are Zero-Shot Learners
- T0: Multitask Prompted Training Enables Zero-Shot Task Generalization
對比
- InstructGPT 的目標(biāo)是對齊,zero-shot /cross lingual 是副產(chǎn)物
- 這篇文章用的 7B 的 Reward model 來對應(yīng) 175B 的 Policy model,然后被 DeepSpeed Chat 以及之后一系列 RL 的開源工作 follow,這種做法應(yīng)該是錯的。
- 正確的做法應(yīng)該是用 Reward model scale up 換取 policy model 減小,見 [Scaling Laws for Reward Model Overoptimization](https://arxiv.org/abs/2210.10760) — 也就是說把兩個模型大小換過來,用 175B 的 reward 去 PPO 7B 的 policy
- 模型上線現(xiàn)階段 10-50B 是一個比較跑得起的量級,再大太貴了
- FLANv1 和 T0 的目標(biāo)是 zero-shot,所以不對齊
然后是 Self-instruct
- Self-Instruct: Aligning Language Models with Self-Generated Instructions
注意 self-instruct 的重點
- Base model 可以是任意,不需要是經(jīng)過了 alignment 之后的模型 (ChatGPT)
- 復(fù)現(xiàn)了從初代 davinci 到 text-davinci-001 的過程 — 非常 insightful!!
圖片
然后是 FLANv2 — 很重要,我可能讀了十遍以上,建議背誦全文
- Scaling Instruction-Finetuned Language Models
- 效果除了不加 human preference 之外其他都加,等下專門討論
- Human preference 確實是喜歡能說的,但是能說的模型不一定能干活。Flan 能干活,但是不能說,跟程序員一樣
2 - LLaMA 出現(xiàn)之后
- Alpaca:起始文章,但是模型本身強度并不多高
- Vicuna
- 在開源中只做對話強度不錯,格式符合人類喜好,生成內(nèi)容多,unique token 多
- Automatic eval 中,可能 in-context learning /reasoning/knowledge suboptimal (體現(xiàn)在 MMLU,BBH 分數(shù)),不是說它不行,而是說它可以更好
- GPT-4 eval 到底行不行還不好說,LMSys 團隊自己說行,前提是 prompt engineering 做得足夠到位:Judging LLM-as-a-judge with MT-Bench and Chatbot Arena
- 另外 LMSys 的團隊在 efficiency 方面非常強,模型的 serve 看 [vllm](https://github.com/vllm-project/vllm) 這個 project,或許是開源最快的
- 然后一系列以 GPT-4 做 judge 然后號稱自己達到了 GPT3.5 x% 水準的模型,全部不推薦,因為 Eval 不可靠
- 但是存在幾篇工作在 alignment 的時候沒有依賴 ChatGPT,這些工作推薦,它們包括
- LIMA: Less Is More for Alignment — 關(guān)注他們選數(shù)據(jù)的方法,推薦花一個小時的時間把他們的 [數(shù)據(jù)](https://huggingface.co/datasets/GAIR/lima) 有感情地朗讀一遍,這樣就知道什么樣的 SFT 的數(shù)據(jù)是好數(shù)據(jù)了
- Dromedary: Principle-Driven Self-Alignment of Language Models from Scratch with Minimal Human Supervision — 關(guān)注他們 prompt engineering 的方法,這個基本上是一個 LLaMA 版的 Constitutional AI - SFT
- 然后是一些 paper (終于) 開始分析 instruction tuning 的 data mixture
- Tulu: How Far Can Camels Go? Exploring the State of Instruction Tuning on Open Resources
- 結(jié)果非常 mix,沒辦法下結(jié)論哪種 mixture 好
- 但是知道哪種不好:NLP benchmark
3 - Eval 怎么做
首先,不要在一堆 benchmark 上算分數(shù)看平均,特別是不要在 GPT-3 的測試任務(wù)上看平均,因為平均下來大家都一樣;推薦只看核心的有區(qū)分度的 benchmark
沒有區(qū)分度的例子:
- LM-Eval-Harness(https://github.com/EleutherAI/lm-evaluation-harness) ,benchmark 太多,平均下來掩蓋優(yōu)質(zhì) benchmark
- 這里面其實涵蓋了 MMLU 和 MATH,但是被其他數(shù)據(jù)集平均了
- Summarization + Rouge / Translation + BLEU:
- Rouge 和 BLEU 模型強弱只有四五分的差別,數(shù)字太小 v.s. accuracy 下模型強弱是 90 分和 10 分的差別,數(shù)字足夠大
- Rouge 和 BLEU 和人類偏好不 align — 注意 BLEU 也不完全 align
那么 Pretrain 建議看哪些呢?
- 區(qū)分度,模型強弱需要能一眼看出
- 分方向,現(xiàn)階段可以暫時分成
- 英文知識 — MMLU
- 中文知識 — C-Eval
- 推理 — GSM8k / BBH
- 代碼 — HumanEval / MBPP
- 解決上面四項平衡之后,可以接著做
- MATH:高難度 reasoning
- Dialog:這個可能只有 human eval 才行,automatic eval 搞不定
接下來講 Automatic Eval
Automatic Eval - 適合 pretrained checkpoint - 基本上可以看 https://github.com/FranxYao/chain-of-thought-hub 的做法
- Knowledge: MMLU
- 這個數(shù)據(jù)集很穩(wěn)定,基本上沒有 sensitivity issue
- Reasoning:
- GSM8k: 也比較穩(wěn)定,但要注意答案提取函數(shù)的提出率,低于九十的話得多加 regular expression
- BBH - Algorithmic:
- 不是很穩(wěn)定,需要注意答案提出率
- BBH - Language:
- 不是很穩(wěn)定,需要注意答案提出率 — Chain-of-thought Hub 馬上會出一個答案提出率對于結(jié)果的 sensitivity 的分析,結(jié)論是 BBH 比較 sensitive
- 現(xiàn)在除了增大模型之外,還不清楚哪些操作可以增加 BBH 數(shù)據(jù)集上的分數(shù)
- Coding:
- Human Eval / MBPP: 似乎比較穩(wěn)定但需要注意做 unbiased estimation
- 先看上面的幾個數(shù)據(jù)集,分數(shù)能夠 match llama 之后,就看 MATH
- MATH:
- 超級難,GPT-4 的分數(shù)
- naive prompting: 42
- → complexity based prompting: 50 https://openreview.net/forum?id=yf1icZHC-l9
- → progressive hint prompting: 53 https://arxiv.org/abs/2304.09797
- → majority voting over 18k: 69.6
- → best of n with outcome based reward modeling: 72.4
- → best of n with [process-based reward modeling](https://arxiv.org/abs/2305.20050): 78.2
- → PPO + process-based reward modeling = ? 推測會上 90
- 泛化?— 應(yīng)該是比較強的,泛化一般而言跟基礎(chǔ)模型大小正相關(guān),跟 SFT 數(shù)據(jù)總量負相關(guān),跟 SFT 數(shù)據(jù)豐富度正相關(guān)
- 如果不是 GPT-4
- Minerva / PaLM-2: 34.3
- Galactica: 33.6 — 這篇文章操作很好,因為 Hallucination 被噴下架導(dǎo)致重要性被嚴重低估
- 88B paper + 7B code + 7B encyclopedias, textbooks and educational material + 2B KB + 1B CC + 0.4B prompt /instruction * 4 epochs
- LLaMA 65B: 10.6
- 其他:低于 10 分
對于一個已經(jīng) finetune 成了 chatbot 的模型
- 首先把上述 benchmark 用 few-shot 的方式過一遍,確保不要掉點
- 如果只是 dialog finetuning 的話可能會傷已有的能力 (MMLU / BBH)
- 如果掉點,則考慮 LM mixing / FLANv2 mixing
- 注意 Chatbot 的 few-shot prompting 要用 dialog 的版本因為 single round 里塞很多 in-context example 模型可能不 instruction-following 不夠強,見 CoT Hub 的 standard prompt library(https://github.com/FranxYao/chain-of-thought-hub/blob/main/spl/gsm8k/chat/few_shot_cot.chatml)
- 然后就是去 eval 用戶偏好了,這個時候只能人做
- 如果有很大的,已經(jīng)訓(xùn)練好了的 reward model,可以用它 eval 上線的小型 / 中等模型,這個其實跟人做 eval 區(qū)別不大
- 對于一個很大的 Policy Model
- Online iterative RLHF 前期怎樣都需要需要 expert eval
- 后期需要 expert eval [with AI assistance](https://arxiv.org/abs/2206.05802)
那么能不能用稍微弱一點的模型做 eval 呢?— 可以用,但是注意 query 的難度和分布,注意 prompt engineering
- 如果不經(jīng)過 prompt engineering ,肯定不行,因為各種 bias
- 如果 query 難度不夠,diversity 不夠,也不一定行
- 如果 query 難度足夠 + 經(jīng)過了瘋狂 prompt engineering,則對于 information seeking 類型的 eval ,或許可以,see https://arxiv.org/abs/2306.05685
- 但是對于 reasoning 相關(guān),non-information seeking 相關(guān)(比如 TLDR),又不一定行
- 對于 information seeking 相關(guān)的 query 會 biased 到長的回復(fù)
回復(fù)越長,GPT-4 越喜歡,分越高
4 - FLANv2 的效果,Long-Context
FLANv2 是一個很神奇的數(shù)據(jù)集,它除了不加 user preference 之外什么都加
- 注意 CoT prompting
- 只在 62B 之后才會比 Direct 更好
- 不加 knowledge (MMLU) 只加 reasoning (BBH)
- FLANv2 增加的效果有
- knowledge (MMLU)
- reasoning (BBH)
- Multilingual (TyDiQA / MGSM)
- 注意 FLAN 的作者們驗證過,沒有數(shù)據(jù)泄露
- 注意以上內(nèi)容對 in-context learning 和 zero-shot 均成立
- 但是 FLAN 的回復(fù)短,所以不加 user preference — Flan 的性格就像直男,能干活兒,話太少
注意區(qū)分數(shù)據(jù)泄漏和分布內(nèi)泛化
- 如果一個數(shù)據(jù)集的測試集被用來訓(xùn)練模型,叫做數(shù)據(jù)泄漏,此時模型的分數(shù)會特別高,不可信
- 如果一個數(shù)據(jù)集的訓(xùn)練集被用來訓(xùn)練模型,叫做分布內(nèi)泛化,此時模型的分數(shù)是可信的
- 有些數(shù)據(jù)集分布內(nèi)泛化的難度不高,比如 MMLU / C-Eval,基本上做 data scaling 就可以加分
- 有些數(shù)據(jù)集,如果模型不強,即使看過了訓(xùn)練集,模型在測試集上也做不好,比如 GSM8K — 這種類型的數(shù)據(jù)集是優(yōu)質(zhì) eval 數(shù)據(jù)集
- 代碼的難度可能介于 MMLU 和 GSM8k 之間,分布內(nèi)泛化不像 GSM8K 那么難,但也不簡單
然后根據(jù)最近Zero-Scrolls 上的數(shù)據(jù)(https://www.zero.scrolls-benchmark.com/leaderboard),F(xiàn)LAN 還可以加 Long-context Reasoning ,不知道為什么
圖片
注意這里 FlanT5 和 T0pp 只有 instruction 的數(shù)據(jù)集有區(qū)別,但是 FlanT5 僅靠 T5 的 relative positional encoding 來 naively scale 到 8k 的 context length 會顯著高于 T0
Long Context 或許 data engineering 跟 neural architecture engineering 同樣重要
5 - 代碼
兩篇文章的 data engineering 非常出色
- WizardCoder: Empowering Code Large Language Models with Evol-Instruct
- 通過不斷 prompt AlpacaCoder 構(gòu)造 instruction tuning 數(shù)據(jù)集,基于wizardlm的方法,使用了 chatgpt 來生成復(fù)雜指令和對應(yīng)的回答
- HumanEval,DS-1000 僅次于 GPT-4,超過 Claude / Bard
- base model 用的是 StarCoder,這意味著 The Stack V3 的質(zhì)量再次得到驗證,同時注意 pretrain code data 可以過多個 epoch 但網(wǎng)頁只過一個 epoch
- Phi-1: Textbooks Are All You Need
- Pretrain 數(shù)據(jù)集來源于 filtered code + prompt ChatGPT
- Instruction tuning 的數(shù)據(jù)集來自于 prompt ChatGPT
- base model 只有 1B
怎么評價
- 一定要好好研究他們是如何 prompt base model 的 — 要對 base model 有信心,只要 MMLU / BBH / HumanEval 分高,它的潛力就超過你的想象
- prompt 出來的數(shù)據(jù)集相當(dāng)于給 HumanEval / MBPP 這種比較短的算法題搞了一個超大訓(xùn)練集
- 但是不可以認為它對著測試集優(yōu)化,因為它泛化的空間應(yīng)該大于 HumanEval / MBPP — 這個泛化空間跟 model scale 顯著正相關(guān)
- 在此基礎(chǔ)上,比較難的點是
- Repo-level code understanding /completion — HumanEval / MBPP 還是有點短
- Ability balance — 如果照著 Phi-1 的做法,除了代碼之外的其他能力都會被沖掉
另外關(guān)于代碼和文本的 data mixture: https://arxiv.org/abs/2305.16264
圖片
Continue training 時使用 50% 的代碼作為 data mixture 不會傷模型 language 的能力,反而會提升 coding 和 reasoning
6 - Putting them together: 能力平衡
目標(biāo):
- 構(gòu)造一個 instruction tuning data mixture,使得 dialog /coding 增加
- 同時 MMLU (English knowledge) / C-Eval (Chinese knowledge) / BBH and GSM8K (reasoning) 不掉點
- In-context learning 不掉點
思路
- 可以用 FLAN 打底 — 它非常大幾乎相當(dāng)于 continue training
考慮做一個中文版的 FLAN — 最近智源發(fā)的COIG-PC(https://huggingface.co/datasets/BAAI/COIG-PC) 似乎有點像 - code 的部分參照 WizardCoder 和 Phi-1 的做法
- 以上數(shù)據(jù)做好之后,搜 instruction tuning 的 data mixture and data curriculum 的超參數(shù)
- 用上面提到的方法做 Eval
7 - 總結(jié)
- 現(xiàn)階段 instruction tuning 核心問題是能力平衡
- 基礎(chǔ)能力的 Eval 可以參照 Chain-of-thought Hub,但 dialog 還是得人來,且人也不一定 eval 得足夠好
- FLAN 非常神奇,可以考慮做一個中文版
- 抓緊把 instruction tuning 收尾,快點進到 reward modeling 階段
- 注意要先把 reward modeling 本身做好,確保 reward model 有判斷力,再去做 PPO
- 不要 reward model 還沒搞清楚就上 PPO ,步子邁太大容易扯到