前言:最近 LLM 大火,相關(guān)領(lǐng)域熟人都想往這個(gè)方向靠,好幾個(gè)朋友咨詢了這塊,也有幫做模擬面試。最近有個(gè)哥們讓我推薦對(duì)這個(gè)領(lǐng)域整體快速了解的資料。于是我就花了些時(shí)間整理資料,希望可以俯瞰當(dāng)前 LLM 領(lǐng)域,能夠給個(gè)整體的印象,如若對(duì)某個(gè)細(xì)分板塊感興趣,讀者也可以找更深入的資料。
本文假設(shè)讀者有一定相關(guān)領(lǐng)域的知識(shí),至少是機(jī)器學(xué)習(xí),深度學(xué)習(xí),或者數(shù)據(jù)科學(xué)的經(jīng)驗(yàn)。
首先 Andrej 的 State of GPT 是必看的:對(duì)整個(gè) LLM 的全景講的很清晰,不虧是我輩 CS231n 的好老師,高屋建瓴
W&B 關(guān)于 LLM 的 Tutorial 干貨不少:Current Best Practices for Training LLMs from Scratch
兩篇比較好的綜述:
An Overview on Language Models: Recent Developments and Outlook:偏訓(xùn)練技巧
Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond:偏應(yīng)用
GPT4 Technical Report:GPT4技術(shù)報(bào)告
Spark of AGI[視頻]:對(duì) GPT4 的詳細(xì)測(cè)評(píng)
PALM2 Technical Report:PALM2技術(shù)報(bào)告
大概看看現(xiàn)在最好能做到什么程度,雖然細(xì)節(jié)干貨少。
接著按不同模塊分別推薦些我能想到的比較重要入門論文和資料,精力有限,肯定是掛一漏萬,歡迎指正完善。
預(yù)訓(xùn)練可先看一些經(jīng)典基座模型訓(xùn)練流程:
GPT3 論文:不用多說
LLAMA:經(jīng)歷各種檢驗(yàn)最靠譜英文模型,很多訓(xùn)練細(xì)節(jié)值得參考
BloombergGPT:雖是金融領(lǐng)域模型,但各種思想都類似,很踏實(shí),特別給訓(xùn)領(lǐng)域模型借鑒
Transformer Math 101:很干的一篇關(guān)于訓(xùn)練中各種計(jì)算的博客,扎實(shí)
[可選] 谷歌系的:PaLM,F(xiàn)lan-PaLM:一個(gè)預(yù)訓(xùn)練,一個(gè)指令微調(diào),大公司還是挺多insight可學(xué)習(xí)
[可選] BLOOM,BLOOMZ:可以大概看看,比較糙,特別是和大公司幾篇對(duì)比
W&B 關(guān)于預(yù)訓(xùn)練數(shù)據(jù)處理較全面博客:Processing Data for Large Language Models
實(shí)際數(shù)據(jù)集參考,會(huì)有各種細(xì)節(jié):
ROOTS:BigScience 開源數(shù)據(jù)集
The RefinedWeb Dataset:最近模型 Falcon 的數(shù)據(jù)集
[可選] RedPajama:號(hào)稱復(fù)刻 LLAMA,沒有報(bào)告,更多都在源代碼里面,可以簡(jiǎn)單看看有時(shí)間看代碼
[可選] The Stack:代碼領(lǐng)域的數(shù)據(jù)集,感興趣也值得一看
近期一些關(guān)于數(shù)據(jù)推薦論文:
Scaling Data-Constrained Language Models
A Pretrainer's Guide to Training Data: Measuring the Effects of Data Age, Domain Coverage, Quality, & Toxicity
Megatron-DeepSpeed:現(xiàn)在基本都基于這套框架訓(xùn),有必要瀏覽下原論文
DeepSpeed 相關(guān):ZeRO優(yōu)化器必看,可能看視頻會(huì)更好理解些
混合精度及其他相關(guān)訓(xùn)練技巧:
Performance and Scalability:How To Fit a Bigger Model and Train It Faster Hugging face相關(guān)博客
更多關(guān)于混合精度的討論,Nvidia 相關(guān)文檔,看2和3就行,關(guān)于 BF16 的討論(結(jié)論能上BF16就上)
lilian寫的關(guān)于大規(guī)模分布式訓(xùn)練相關(guān)的綜述:How to Train Really Large Models on Many GPUs?
Huggingface 的 Tokenizers 的相關(guān) Tutorial:看下面這幾節(jié)就行
Normalization and pre-tokenization
Byte-Pair Encoding tokenization
[感興趣看] WordPiece tokenization
[感興趣看] Unigram tokenization
Building a tokenizer, block by block
[可選] SentencePiece 的 Readme,就是另一個(gè)訓(xùn)練詞表的庫
就是搜集到指令數(shù)據(jù),然后直接 finetune 訓(xùn)練,難點(diǎn)在于在于怎么收集到較好的SFT數(shù)據(jù)。
主要可分成下面幾種方法:
人工標(biāo)注寫
基于模板
基于開源共享數(shù)據(jù)
網(wǎng)上相似數(shù)據(jù)爬取
OpenAI API接口通過 Prompt 工程構(gòu)建
基于模板:
FLAN 模型:前 ChatGPT 時(shí)代,可以看看如何基于模板構(gòu)建一些傳統(tǒng)指令數(shù)據(jù),還出了v2
基于 OpenAI API 和開源共享數(shù)據(jù)(后 ChatGPT 時(shí)代):
Exploring the Impact of Instruction Data Scaling on Large Language Models
Towards Better Instruction Following Language Models for Chinese
直接從 ChatGPT 和 GPT4 抓數(shù)據(jù)來訓(xùn)SFT:Alpaca,Vicuna,GPT4ALL
中文這塊:Belle 的兩篇論文也可以簡(jiǎn)單看看,看怎么構(gòu)建數(shù)據(jù)(比如Self-Instruct)
基于網(wǎng)絡(luò)爬取數(shù)據(jù)及人工標(biāo)注
LIMA: Less Is More for Alignment:怎么構(gòu)建一個(gè)多樣化的SFT數(shù)據(jù)集
建議給 OpenAI 在這塊的努力都刷一遍,會(huì)有很清晰了解,各種細(xì)節(jié)?,F(xiàn)在大多引 22 年 InstructGPT,但 OpenAI 這整套流程也都是一步步完善出來的。最早期在 GPT2 就探索用 Human Preference,中間如何嘗試、遇到什么問題、以及怎么解決都寫得挺清楚,甚至還專門寫了怎么培訓(xùn)標(biāo)注人員,當(dāng)時(shí) OpenAI 是真的挺 Open:
Fine-Tuning GPT-2 from Human Preference(Blog):做 SFT 來獲得人類偏好,但 SFT 數(shù)據(jù)都是模型采樣后人標(biāo)出來的
Learning to summarize from human feedback(Blog):基本這套 SFT、Reward Model、RLHF 流程齊全了,用在 Summarization 任務(wù),只標(biāo)了 Pair-wise 的數(shù)據(jù),而不是后面的 Rank
Summarizing Books with Human Feedback(Blog):當(dāng)摸清楚這套流程之后,OpenAI 開始對(duì) RLHF 增大規(guī)模,也開始發(fā)現(xiàn)生成這塊的評(píng)估難,引入模型輔助的評(píng)估
WebGPT: Improving the Factual Accuracy of Language Models through Web Browsing[Blog]:OpenAI 想用強(qiáng)化來訓(xùn)練模型瀏覽網(wǎng)絡(luò),然后做檢索增強(qiáng)
InstructGPT:Training language models to follow instructions with human feedback[Blog]:最后才到 InstructGPT,羅馬不是一天建成,能看到 OpenAI 在 RLHF 上是積累了很長(zhǎng)時(shí)間的,到 InstructGPT 可能是 API 用戶反饋有類似需求,當(dāng)時(shí)沒引起太大反響,直到加入了對(duì)話數(shù)據(jù),并且給模型放出來給大家用,也就是 ChatGPT.
關(guān)于 Search 和 Sample,還有 Topp Topk 討論:獻(xiàn)丑了
Zero-shot 和 Few-Shot 給 GPT3 那篇看完就差不多懂了,這里列些較經(jīng)典方法
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models:思維鏈,開山之作,本質(zhì)上給LLM模型更多 token 來用來思考,增加結(jié)果準(zhǔn)確性
Self-Consistency Improves Chain of Thought Reasoning in Language Models:思維鏈后續(xù),其實(shí)就是類似search算法給搜索空間擴(kuò)大,比如beam從1改成多個(gè),然后最后結(jié)果 ensemble 一下
Tree of Thoughts: Deliberate Problem Solving with Large Language Models:給鏈擴(kuò)展成樹,進(jìn)行檢索和集成,上面兩種都變成樹的某個(gè)特例
[可選] ChatGPT Prompt Engineering for Developers:吳教授 DeepLearning AI 關(guān)于 ChatGPT prompt 相關(guān)
Reflexion: Language Agents with Verbal Reinforcement Learning:提出反思系統(tǒng),模型能對(duì)自己之前的結(jié)果進(jìn)行反思,之后再做出修改
AutoGPT介紹:基于 GPT API 非??岬膽?yīng)用,通過設(shè)計(jì)維護(hù)幾個(gè)GPT角色,還有Memory系統(tǒng),給AutoGPT一個(gè)目標(biāo)和初始任務(wù),就能讓它成為一個(gè)無情的做任務(wù)機(jī)器人,完成任務(wù),創(chuàng)造新任務(wù),排好優(yōu)先級(jí),繼續(xù)做任務(wù)
[可選] Generative Agents: Interactive Simulacra of Human Behavior:寫 AutoGPT 的時(shí)候莫名讓我想起這篇,雖然是講用GPT做游戲任務(wù)的思考機(jī)器,但是本身里面就涉及到大量應(yīng)用相關(guān)的設(shè)計(jì)
[可選] Large Language Models as Tool Makers:idea 也很酷,維護(hù)幾個(gè)GPT角色,讓一個(gè)做工具,一個(gè)使用工具解決問題,還有個(gè)判斷什么時(shí)候需要做新工具,也是系統(tǒng)的設(shè)計(jì)
有些能力調(diào)外部接口會(huì)容易很多,包括最新信息獲取
Toolformer: Language Models Can Teach Themselves to Use Tools:占坑之作,方法較 naive
TaskMatrix.AI: Completing Tasks by Connecting Foundation Models with Millions of APIs:給 Tools 理念推到更大的框架
[可選]對(duì)這個(gè)領(lǐng)域興趣,還可以看Gorilla,HuggingGPT
搜索增強(qiáng)LLM(雖然我認(rèn)為檢索也只是一個(gè)工具):REPLUG: Retrieval-Augmented Black-Box Language Models
CodeX:Evaluating Large Language Models Trained on Code:Code相關(guān)必讀,現(xiàn)在普遍認(rèn)為Code對(duì)推理能力會(huì)有一定提升
因?yàn)閿?shù)學(xué)涉及到模型的推理能力,所以一般認(rèn)為較重要
Training Verifiers to Solve Math Word Problems:讓模型解數(shù)學(xué)題,提出了 Verifier 的思路,就是對(duì)多條打分選最高。
Building Systems with the ChatGPT API:吳教授關(guān)于 OpenAI API應(yīng)用的課程
[可選] OpenAI CookBook:OpenAI 官方的 API 使用說明,里面很多特別實(shí)用的建議
Efficient Training of Language Models to Fill in the Middle:無損 FIM 損失,增加模型中間填充能力
UL2: Unifying Language Learning Paradigms:對(duì)T5的損失進(jìn)行改進(jìn),兼容考慮了GPT單向生成損失,PALM2聲稱用的是它的變種
聯(lián)系客服