文章目錄
- 大模型簡介
- 以后的介紹流程
- 基礎知識
- 訓練流程介紹
- pre-train
- 對齊和指令微調
- 規模拓展
- 涌現能力
- 系統學習大模型的記錄
- https://github.com/LLMBook-zh/LLMBook-zh.github.io
大模型簡介
?歷史我就不寫了,簡單說說大模型的應用和特點。人類使用大模型其實分為兩個主要部分:能力和知識。其中絕大部分人利用了大模型中蘊含的知識和總結的能力,當做全能搜索引擎使用,我認為這僅僅是大模型使用的皮毛,大模型擁有的能力在微調后可以勝任大部分人類的工作,在大部分工作中可以當做人來使喚。
?大模型在能力方面大概分為以下幾點:
- 具有較強的通用任務解決能力
- 具有較好的復雜任務推理能力
- 具有較強的人類指令遵循能力(chat模型)
- 具有較好的人類對齊能力(RLHF)
- 具有可拓展的工具使用能力
?我認為,大模型的所有知識和能力來源是通過其龐大的參數量進行不同的訓練方法產生的:預訓練中的數據提供的通用知識和MASK訓練其基礎能力,繼續訓練中補充專業知識,Instruction tuning誘發模型本身的能力使其對齊人類的問題和訓練新能力,RLHF對齊人類道德價值觀念和表達方式。
以后的介紹流程
?主要分為以下部分來進行介紹,這一部分主要介紹基礎知識。
- 現有數據和API整理
- 預訓練技術
- 微調與對齊
- 大模型使用部分(部署)
- 評測
- 應用
基礎知識
訓練流程介紹
pre-train
?為了預訓練大語言模型,需要準備大規模的文本數據,并且進行嚴格的清洗,去除掉可能包含有毒有害的內容(大模型之間架構的區別并不大,主要是數據質量和SFT,RLHF的差距),最后將清洗后的數據進行詞元化(Tokenization)流,并且切分成批次(Batch),用于大語言模型的預訓練。由于大語言模型的能力基礎主要來源于預訓練數據,因此數據的收集與清洗對于模型性能具有重要的影響。收集高質量、多源化的數據以及對于數據進行嚴格的清洗是構建大語言模型關鍵能力的重中之重,需要大模型研發人員的高度關注。目前的開源模型普遍采用 2~3T 規模的詞元進行預訓練,并有趨勢進一步擴大這一規模。這一過程對于算力需求量極高,一般來說訓練百億模型至少需要百卡規模的算力集群(如 A100-80G)聯合訓練數月時間(與具體的算力資源相關);而訓練千億模型則需要千卡甚至萬卡規模的算力集群,對于算力資源的消耗非常驚人。
?盡管整體的預訓練技術框架非常直觀,但是實施過程中涉及到大量需要深入探索的經驗性技術,如數據如何進行配比、如何進行學習率的調整、如何早期發現模型的異常行為等。預訓練過程需要考慮各種實施細節,而這些細節有很多并沒有公開發表的經驗可循,需要研發人員具有豐富的訓練經驗和異常處理能力,避免大規模訓練開始以后進行回退和反復迭代,從而減少算力資源的浪費,提升訓練成功的幾率。大語言模型的研發看似是一個算力需求型的工程,實際上相關人才是最重要的。可以說,一個大語言模型項目的核心訓練人員的能力最后會決定模型的整體水平。
對齊和指令微調
- 簡單來講,pre-train后的模型只具備續寫能力,完全不能直接解決任務、對話等功能,其中蘊含的是大量的知識和語序信息,需要設計SFT來進行誘發;SFT是給固定問題一個標準答案,和小模型中的FT差不多,可以增強模型解決復雜問題的能力;RLFH是將大模型與人類的語言和生活習慣、道德觀念對齊的步驟。(原來GPT3剛上線的時候可以騙出來一些危險和違法言論,現在騙不出來了)
?【經過大規模數據預訓練后的語言模型已經具備較強的模型能力,能夠編碼豐富的世界知識,但是由于預訓練任務形式所限,這些模型更擅長于文本補全,并不適合直接解決具體的任務。盡管可以通過上下文學習(In-Context Learning, ICL)等提示學習技術進行適配,但是模型自身對于任務的感知與解決能力仍然較為局限。這里做一個簡單的類比。預訓練后的模型就像進入工作崗位的畢業生,盡管學習了很多通用的文化課,具備了一定的實習經驗,但是仍然需要加強面向特定崗位的工作能力,并且深入了解工作崗位所涉及的相關要求。因此,用人單位往往需要設置特定的培訓環節,對于新入職的人員針對業務場景以及所需要的技術進行專門提升。相似地,當預訓練結束后,通常需要對于大語言模型進行微調與對齊,使之更好地被用于任務求解,為人類服務。
?目前來說,比較廣泛使用的微調技術是“指令微調”(也叫做有監督微調,Supervised Fine-tuning, SFT),通過使用任務輸入與輸出的配對數據進行模型訓練,可以使得語言模型較好地掌握通過問答形式進行任務求解的能力。這種模仿示例數據進行學習的過程本質屬于機器學習中的模仿學習(Imitation Learning)。給定一個特定任務,雖然可能存在很多解答方式,模仿學習旨在加強對于標準答案(即師傅的示范動作)的復刻學習。一般來說,指令微調很難教會大語言模型預訓練階段沒有學習到的知識與能力,它主要起到了對于模型能力的激發作用,而不是知識注入作用。與預訓練相比,指令微調通常來說需要的指令實例數據規模要小的多。通常來說,數十萬到百萬規模的指令微調數據能夠有效地激發語言模型的通用任務解決能力,甚至有些工作認為數千條或者數萬條高質量指令數據也能達到不錯的微調效果。因此,指令微調對于算力資源的需求相對較小。一般情況下,若干臺單機八卡(A100-80G)的服務器就能在一天或數天的時間內完成百億模型的指令微調,當指令數據規模較大的時候可以進一步增加所需要的算力資源。這個過程還可以進一步加入多輪次的對話數據來增強模型的人機對話能力。
?除了提升任務的解決能力外,還需要將大語言模型與人類的期望、需求以及價值觀對齊(Alignment),這對于大模型的部署與應用具有重要的意義。OpenAI在 2022 年初發布了 InstructGPT [28] 的學術論文,系統地介紹了如何將語言模型進行人類對齊。具體來說,主要引入了基于人類反饋的強化學習對齊方法 RLHF(Reinforcement Learning from Human Feedback),在指令微調后使用強化學習加強模型的對齊能力。在 RLHF 算法中,需要訓練一個符合人類價值觀的獎勵模型(Reward Model)。為此,需要標注人員針對大語言模型所生成的多條輸出進行偏好排序,并使用偏好數據訓練獎勵模型,用于判斷模型的輸出質量。由于強化學習需要維護更多的輔助模型進行訓練,通常來說對于資源的消耗會多于指令微調,但是也遠小于預訓練階段所需要的算力資源。
?目前還有很多工作試圖通過消除獎勵模型的使用,或其他使用 SFT 方式來達到與 RLHF 相似的效果,從而簡化模型的對齊過程。】
規模拓展
- 原理論認為,每一個參數可以存儲2bit信息,但是這在大模型上好像不太適用LLaMA-2 (7B) 的模型就使用了 2T 的詞元進行訓練,很多更小的模型也能夠通過使用超大規模的預訓練數據獲得較大的模型性能提升。這種現象的一個重要原因是由于 Transformer 架構具有較好的數據擴展性,到目前為止,還沒有實驗能夠有效驗證特定參數規模語言模型的飽和數據規模(即隨著數據規模的擴展,模型性能不再提升)。
- 可預測的擴展(Predictable Scaling):在實踐中,擴展法則可以用于指導大語言模型的訓練,通過較小算力資源可靠地估計較大算力資源投入后的模型性能,這被稱為可預測的擴展 。可以預測擴展后的模型的性能和訓練情況。(其實就是用7b先跑跑,小模型可以一定程度代表大規模模型的效果)
- 任務層面的可預測性. 現有關于擴展法則的研究大多數是基于語言建模損失進行的,就是預測下一個詞是什么的損失。在實踐中,損失較小的模型在下游任務重表現更好,因為語言建模能力可以認為是模型能力的總和考量。但是有些任務隨著loss的下降表現變差(逆向擴展現象)。所以損失越小不一定代表下游任務效果越好,但是對于大部分任務是正相關的。
涌現能力
- 實際上就是模型隨著參數量增長逐漸可以解決某些較為復雜的問題。