給你數(shù)據(jù)和算力,你也成不了 OpenAI
最近在研究大模型訓(xùn)練和微調(diào)相關(guān)的內(nèi)容,聽領(lǐng)導(dǎo)說的最多的一句話“那不是有數(shù)據(jù)有算力就能搞定的嗎”,于是調(diào)研了下 qwen 系列的訓(xùn)練細(xì)節(jié)。
再整理過程中,再次感慨,怪不得有了數(shù)據(jù)和算力,也不是每家公司都是 OpenAI。
Qwen2.5-Math
QWEN2.5-MATH TECHNICAL REPORT: TOWARD MATHEMATICAL EXPERT MODEL VIA SELF- IMPROVEMENT
1. 預(yù)訓(xùn)練階段
Qwen2.5-Math 的預(yù)訓(xùn)練階段是在 Qwen2-Math 的基礎(chǔ)上進(jìn)行改進(jìn)的。這個(gè)階段的主要目標(biāo)是構(gòu)建一個(gè)高質(zhì)量、數(shù)學(xué)內(nèi)容豐富的預(yù)訓(xùn)練數(shù)據(jù)集。
數(shù)據(jù)處理
- 數(shù)據(jù)召回:
- 使用 FastText 分類器從網(wǎng)絡(luò)源(如 Common Crawl)中召回?cái)?shù)學(xué)相關(guān)數(shù)據(jù)。
- 采用迭代訓(xùn)練策略,每個(gè) epoch 使用更多數(shù)學(xué)數(shù)據(jù)來不斷提升分類器性能。
- 利用已召回?cái)?shù)據(jù)的元信息(如 URL)擴(kuò)展數(shù)據(jù)池,以識(shí)別遺漏的數(shù)學(xué)相關(guān)數(shù)據(jù)。
- 數(shù)據(jù)去重:
- 使用 MinHash 等技術(shù)對(duì)相似的數(shù)學(xué)文檔進(jìn)行過濾。
- 數(shù)據(jù)質(zhì)量過濾:
- 使用 Qwen2-0.5B-Instruct 模型評(píng)估潛在數(shù)據(jù)條目的質(zhì)量。
- 根據(jù)語(yǔ)言模型給出的評(píng)分,優(yōu)先選擇高質(zhì)量數(shù)據(jù)納入最終數(shù)據(jù)集。
- 合成數(shù)據(jù)生成:
- 使用 Qwen2-72B-Instruct 模型生成大量數(shù)學(xué)預(yù)訓(xùn)練語(yǔ)料。
- 利用已收集的高質(zhì)量數(shù)學(xué)數(shù)據(jù)作為參考材料。
- 從參考中提取和精煉現(xiàn)有的數(shù)學(xué)問答數(shù)據(jù)。
- 直接生成新的數(shù)學(xué)問答對(duì)。
訓(xùn)練設(shè)置
- 數(shù)據(jù)集:Qwen Math Corpus v2,包含超過 1 萬億個(gè) token。
- 初始化:從 Qwen2.5 系列基礎(chǔ)模型初始化參數(shù)。
- 上下文長(zhǎng)度:4K tokens。
- 模型規(guī)模:提供 1.5B、7B 和 72B 三種規(guī)模的模型。
2. 監(jiān)督微調(diào)階段 (Supervised Fine-tuning, SFT)
SFT 階段主要針對(duì)鏈?zhǔn)剿季S (Chain-of-Thought, CoT) 和工具集成推理 (Tool-Integrated Reasoning, TIR) 兩種能力進(jìn)行訓(xùn)練。
CoT 數(shù)據(jù)處理
- 數(shù)據(jù)集構(gòu)建:
580K 英文和 500K 中文數(shù)學(xué)問題。
- 來源包括 GSM8K、MATH、NuminaMath 等標(biāo)注數(shù)據(jù)集和 K-12 數(shù)學(xué)問題集。
- 數(shù)據(jù)合成:
- 使用 MuggleMath 方法從標(biāo)注數(shù)據(jù)演化生成新問題。
- 使用難度評(píng)分模型對(duì)問題集進(jìn)行分類,以保持不同難度水平的平衡分布。
- 回答生成:
- 采用迭代方法,利用拒絕采樣、獎(jiǎng)勵(lì)建模和標(biāo)注答案指導(dǎo)。
- 對(duì)于有標(biāo)注答案的問題,從候選池中選擇 top-k 正確答案的推理路徑。
- 對(duì)于合成問題,使用加權(quán)多數(shù)投票機(jī)制推斷最可能正確的推理路徑。
TIR 數(shù)據(jù)處理
- 數(shù)據(jù)集構(gòu)建:
- 190K 標(biāo)注問題和 205K 合成問題。
- 來源包括 GSM8K、MATH、CollegeMath、NuminaMath 等數(shù)據(jù)集。
- 數(shù)據(jù)合成:
- 使用 MuggleMath 和 DotaMath 技術(shù)在 GSM8K 和 MATH 訓(xùn)練集上進(jìn)行查詢演化。
- 回答生成:
- 對(duì)于標(biāo)注問題,使用在線拒絕微調(diào) (RFT) 迭代生成工具集成推理路徑。
- 在每次 RFT 迭代中,對(duì)當(dāng)前最佳模型進(jìn)行多次核采樣,增加困難問題的樣本大小。
- 對(duì)于合成問題,使用從在線 RFT 過程中得到的最優(yōu)模型生成推理樣本。
訓(xùn)練設(shè)置
- 訓(xùn)練周期:3 個(gè) epoch
- 序列長(zhǎng)度:4,096 tokens
- 批量大?。?/li>
72B 模型:256
1.5B 和 7B 模型:128
- 學(xué)習(xí)率:
- 72B 模型:5 × 10^-6
- 1.5B 和 7B 模型:2 × 10^-5
- 學(xué)習(xí)率調(diào)度:逐漸衰減到 7 × 10^-7
3. 獎(jiǎng)勵(lì)模型訓(xùn)練階段 (Reward Model, RM)
數(shù)據(jù)處理
- 數(shù)據(jù)集:361K 英文和 257K 中文數(shù)學(xué)問題,每個(gè)問題配對(duì) 6 個(gè)來自 Qwen2.5-Math 的樣本回答。
- 標(biāo)注策略:
根據(jù)回答的最終答案正確性確定正負(fù)樣本。
正確答案標(biāo)記為正樣本,錯(cuò)誤答案標(biāo)記為負(fù)樣本。
過濾掉所有回答全對(duì)或全錯(cuò)的情況。
通過使用不同規(guī)模和版本的模型生成回答,確保數(shù)據(jù)集難度分布均衡和正負(fù)樣本比例平衡。
訓(xùn)練策略
- 初始化:從監(jiān)督微調(diào)模型初始化。
- 模型架構(gòu)調(diào)整:
將語(yǔ)言建模頭替換為標(biāo)量值頭(兩個(gè)線性層)。
- 損失函數(shù):獎(jiǎng)勵(lì)模型使用列表式排序損失:
其中, 表示獎(jiǎng)勵(lì)模型的輸出, 是問題, 是對(duì)應(yīng)的回答。
4. 強(qiáng)化學(xué)習(xí)階段 (Reinforcement Learning, RL)
訓(xùn)練策略
采用群組相對(duì)策略優(yōu)化 (Group Relative Policy Optimization, GRPO)
目標(biāo)函數(shù)
群組相對(duì)策略優(yōu)化 (Group Relative Policy Optimization, GRPO) 的目標(biāo)函數(shù):
獎(jiǎng)勵(lì)塑型
結(jié)合規(guī)則驗(yàn)證器和獎(jiǎng)勵(lì)模型的獎(jiǎng)勵(lì):
其中, 是獎(jiǎng)勵(lì)模型的輸出, 是規(guī)則驗(yàn)證器的稀疏獎(jiǎng)勵(lì), 設(shè)置為 0.5。
這樣的格式化使公式更加清晰,并且符合 LaTeX 語(yǔ)法,可以在支持 LaTeX 渲染的 Markdown 環(huán)境中正確顯示。
實(shí)現(xiàn)細(xì)節(jié)
- 基于開源 RLHF 框架 ChatLearn
- 查詢選擇:從獎(jiǎng)勵(lì)模型的訓(xùn)練集中選擇,保留 2 到 5 個(gè)正確回答的查詢
- 采樣策略:每個(gè)查詢采樣 32 個(gè)回應(yīng)
- 訓(xùn)練設(shè)置:
- 7B 模型:每個(gè) episode 4,096 個(gè)樣本,學(xué)習(xí)率 1 × 10^-5
- 72B 模型:每個(gè) episode 2,048 個(gè)樣本,學(xué)習(xí)率 5 × 10^-6
- 全局 batch size:512
- KL 系數(shù):1 × 10^-3
Qwen2.5-Coder
Technical Report Qwen2.5-Coder Technical Report
1. 預(yù)訓(xùn)練階段
Qwen2.5-Coder的預(yù)訓(xùn)練分為兩個(gè)主要階段:文件級(jí)預(yù)訓(xùn)練和倉(cāng)庫(kù)級(jí)預(yù)訓(xùn)練。
1.1 數(shù)據(jù)處理
1.1.1 數(shù)據(jù)來源
- 源代碼數(shù)據(jù):來自GitHub的92種編程語(yǔ)言的公共倉(cāng)庫(kù),包括Pull Requests、Commits、Jupyter Notebooks和Kaggle數(shù)據(jù)集。
- 文本-代碼對(duì)應(yīng)數(shù)據(jù):從Common Crawl中提取,包括代碼相關(guān)的文檔、教程、博客等。
- 合成數(shù)據(jù):使用CodeQwen1.5生成的大規(guī)模合成數(shù)據(jù)集。
- 數(shù)學(xué)數(shù)據(jù):來自Qwen2.5-Math的預(yù)訓(xùn)練語(yǔ)料庫(kù)。
- 文本數(shù)據(jù):來自Qwen2.5模型的高質(zhì)量通用自然語(yǔ)言數(shù)據(jù)。
1.1.2 數(shù)據(jù)清洗
- 對(duì)GitHub數(shù)據(jù)應(yīng)用了一系列基于規(guī)則的過濾方法。
- 對(duì)文本-代碼混合數(shù)據(jù)集采用了粗到細(xì)的層級(jí)過濾方法,使用較小的模型(如fastText)構(gòu)建清洗管道。
- 對(duì)合成數(shù)據(jù)引入執(zhí)行器進(jìn)行驗(yàn)證,確保只保留可執(zhí)行的代碼。
1.1.3 數(shù)據(jù)混合比例
經(jīng)過實(shí)驗(yàn),最終選擇了70%代碼、20%文本和10%數(shù)學(xué)的數(shù)據(jù)混合比例。最終的預(yù)訓(xùn)練數(shù)據(jù)集包含5.2萬億個(gè)token。
1.2 文件級(jí)預(yù)訓(xùn)練
1.2.1 訓(xùn)練目標(biāo)
- 下一個(gè)token預(yù)測(cè)
- 填空任務(wù)(Fill-in-the-Middle, FIM)
1.2.2 FIM格式
<|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf}<|fim_middle|>{code_mid}<|endoftext|>
1.2.3 訓(xùn)練參數(shù)
- 最大訓(xùn)練序列長(zhǎng)度:8,192 tokens
- 位置編碼:RoPE (Rotary Position Embedding)
1.3 倉(cāng)庫(kù)級(jí)預(yù)訓(xùn)練
1.3.1 目的
增強(qiáng)模型的長(zhǎng)文本理解能力。
1.3.2 訓(xùn)練參數(shù)
- 訓(xùn)練序列長(zhǎng)度:從8,192 tokens擴(kuò)展到32,768 tokens
- RoPE基頻:從10,000調(diào)整為1,000,000
- 使用YARN機(jī)制,使模型能夠處理長(zhǎng)達(dá)131,072 (132K) tokens的序列
1.3.3 數(shù)據(jù)
使用了約300B的高質(zhì)量長(zhǎng)代碼數(shù)據(jù)。
1.3.4 FIM格式
<|repo_name|>{repo_name}
<|file_sep|>{file_path1}
{file_content1}
<|file_sep|>{file_path2}
{file_content2}
<|file_sep|>{file_path3}
<|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf}<|fim_middle|>{code_fim}<|endoftext|>
2. 指令微調(diào)階段
2.1 數(shù)據(jù)準(zhǔn)備
2.1.1 多語(yǔ)言編程代碼識(shí)別
- 微調(diào)CodeBERT模型以識(shí)別近100種編程語(yǔ)言。
- 保留主流編程語(yǔ)言的指令數(shù)據(jù),隨機(jī)丟棄長(zhǎng)尾語(yǔ)言的部分指令數(shù)據(jù)。
- 移除大部分不包含代碼片段的樣本。
2.1.2 GitHub指令合成
- 使用LLM從代碼片段生成指令。
- 使用代碼LLM生成響應(yīng)。
- 使用LLM評(píng)分器過濾低質(zhì)量樣本。
2.1.3 多語(yǔ)言代碼指令數(shù)據(jù)
實(shí)施了一個(gè)多語(yǔ)言多代理協(xié)作框架:
- 創(chuàng)建特定語(yǔ)言的智能代理。
- 實(shí)施協(xié)作討論協(xié)議。
- 使用自適應(yīng)內(nèi)存系統(tǒng)。
- 進(jìn)行跨語(yǔ)言討論。
- 開發(fā)協(xié)同評(píng)估指標(biāo)。
- 實(shí)施自適應(yīng)指令生成。
2.1.4 基于清單的指令數(shù)據(jù)評(píng)分
評(píng)估以下方面:
- 問題與答案的一致性
- 問題與答案的相關(guān)性
- 問題與答案的難度
- 代碼是否存在
- 代碼正確性
- 代碼清晰度
- 代碼注釋
- 易學(xué)性
最終得分計(jì)算:
其中是一系列預(yù)定義的權(quán)重。
2.1.5 多語(yǔ)言沙箱進(jìn)行代碼驗(yàn)證
包括以下模塊:
- 語(yǔ)言支持模塊
- 樣本代碼庫(kù)
- 單元測(cè)試生成器
- 代碼執(zhí)行引擎
- 結(jié)果分析器
2.2 訓(xùn)練策略
2.2.1 粗到細(xì)微調(diào)
- 首先使用數(shù)千萬低質(zhì)量但多樣化的指令樣本進(jìn)行微調(diào)。
- 然后使用數(shù)百萬高質(zhì)量指令樣本進(jìn)行監(jiān)督微調(diào)。
- 對(duì)于同一查詢,使用LLM生成多個(gè)候選答案,然后用LLM評(píng)分選擇最佳答案進(jìn)行監(jiān)督微調(diào)。
2.2.2 混合調(diào)優(yōu)
- 構(gòu)造帶有FIM格式的指令對(duì),以保持模型的長(zhǎng)文本理解能力。
- 使用tree-sitter-languages解析代碼片段,提取基本邏輯塊作為中間代碼進(jìn)行填充。
- 優(yōu)化指令模型時(shí),主要使用標(biāo)準(zhǔn)SFT數(shù)據(jù),輔以少量FIM指令樣本。
3. 數(shù)據(jù)去污染
- 使用10-gram重疊方法進(jìn)行數(shù)據(jù)去污染。
- 移除了關(guān)鍵數(shù)據(jù)集,如HumanEval、MBPP、GSM8K和MATH。
- 移除了與測(cè)試數(shù)據(jù)有10-gram字符串級(jí)別重疊的任何訓(xùn)練數(shù)據(jù)。
4. 模型架構(gòu)
Qwen2.5-Coder有兩種規(guī)模的模型:1.5B和7B參數(shù)。它們的主要特征如下:
配置 | Qwen2.5-Coder 1.5B | Qwen2.5-Coder 7B |
隱藏層大小 | 1,536 | 3,584 |
層數(shù) | 28 | 28 |
查詢頭數(shù) | 12 | 28 |
鍵值頭數(shù) | 2 | 4 |
頭大小 | 128 | 128 |
中間層大小 | 8,960 | 18,944 |
詞嵌入綁定 | True | False |
詞匯表大小 | 151,646 | 151,646 |
訓(xùn)練token數(shù) | 5.5T | 5.5T |
4.1 特殊token
模型引入了幾個(gè)特殊token來更好地理解代碼:
1. 預(yù)訓(xùn)練階段
1.1 數(shù)據(jù)處理
Qwen2 使用了一個(gè)新的大規(guī)模、高質(zhì)量的多語(yǔ)言數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練,相比 Qwen 和 Qwen1.5,主要改進(jìn)包括:
- 質(zhì)量提升:
使用更復(fù)雜的啟發(fā)式和基于模型的方法進(jìn)行過濾
利用 Qwen 模型篩選低質(zhì)量數(shù)據(jù)和合成高質(zhì)量預(yù)訓(xùn)練數(shù)據(jù)
- 數(shù)據(jù)擴(kuò)展:
- 收集了更大量的高質(zhì)量代碼、數(shù)學(xué)和多語(yǔ)言數(shù)據(jù)
- 支持約 30 種語(yǔ)言
- 分布優(yōu)化:
- 對(duì)縮小版模型進(jìn)行實(shí)驗(yàn),優(yōu)化不同來源和領(lǐng)域數(shù)據(jù)的混合比例
最終的預(yù)訓(xùn)練數(shù)據(jù)集從 Qwen1.5 的 3 萬億 tokens 擴(kuò)展到了 7 萬億 tokens。
1.2 模型架構(gòu)
Qwen2 采用基于 Transformer 的架構(gòu),主要特點(diǎn)包括:
- 使用 Grouped Query Attention (GQA)
- 實(shí)現(xiàn) Dual Chunk Attention (DCA)
- 采用 YARN 機(jī)制
- 使用 SwiGLU 作為激活函數(shù)
- 采用 Rotary Positional Embeddings (RoPE)
- 使用 QKV bias
- 采用 RMSNorm 和 pre-normalization
1.3 訓(xùn)練細(xì)節(jié)
報(bào)告中對(duì)預(yù)訓(xùn)練階段的具體超參數(shù)配置沒有詳細(xì)說明。但提到了以下細(xì)節(jié):
- 序列長(zhǎng)度:在預(yù)訓(xùn)練的最后階段,將上下文長(zhǎng)度從 4,096 tokens 擴(kuò)展到 32,768 tokens
- RoPE 基頻:從 10,000 修改為 1,000,000
- 采用 YARN 機(jī)制和 Dual Chunk Attention 機(jī)制,使模型能夠處理長(zhǎng)達(dá) 131,072 tokens 的序列
2. 后訓(xùn)練階段
2.1 數(shù)據(jù)處理
后訓(xùn)練數(shù)據(jù)包括兩部分:
- 示范數(shù)據(jù)
- 偏好數(shù)據(jù)
數(shù)據(jù)構(gòu)建過程包括協(xié)作數(shù)據(jù)標(biāo)注和自動(dòng)數(shù)據(jù)合成。
2.2 監(jiān)督微調(diào) (SFT)
- 數(shù)據(jù)集:超過 500,000 個(gè)示例
- 訓(xùn)練輪數(shù):2 epochs
- 序列長(zhǎng)度:32,768 tokens
- 學(xué)習(xí)率:從 逐漸降低到
- 權(quán)重衰減:0.1
- 梯度裁剪:最大值為 1.0
2.3 基于人類反饋的強(qiáng)化學(xué)習(xí) (RLHF)
RLHF 訓(xùn)練包括離線訓(xùn)練和在線訓(xùn)練兩個(gè)階段:
- 離線訓(xùn)練:
- 使用預(yù)編譯的偏好數(shù)據(jù)集 P
- 采用 Direct Preference Optimization (DPO)
- 在線訓(xùn)練:
- 使用獎(jiǎng)勵(lì)模型進(jìn)行實(shí)時(shí)反饋
- 每個(gè) episode 中,從當(dāng)前策略模型采樣多個(gè)回復(fù)
- 使用 DPO 進(jìn)行優(yōu)化
采用 Online Merging Optimizer 來緩解對(duì)齊稅。
3. 模型配置
以 Qwen2-72B 為例的主要配置:
- Hidden Size: 8,192
- 層數(shù): 80
- Query Heads: 64
- KV Heads: 8
- Head Size: 128
- Intermediate Size: 29,568
- 詞匯表大?。?151,646
- 預(yù)訓(xùn)練 tokens: 7T
4. 長(zhǎng)上下文處理
為增強(qiáng)長(zhǎng)上下文能力,Qwen2 采取了以下策略:
- 在預(yù)訓(xùn)練最后階段將上下文長(zhǎng)度從 4,096 tokens 擴(kuò)展到 32,768 tokens
- 引入大量高質(zhì)量的長(zhǎng)文本數(shù)據(jù)
- 將 RoPE 的基頻從 10,000 修改為 1,000,000
- 采用 YARN 機(jī)制和 Dual Chunk Attention 機(jī)制
這些策略使模型能夠處理長(zhǎng)達(dá) 131,072 tokens 的序列,同時(shí)保持高性能。
5. 詞匯表和分詞器
Qwen2 使用與 Qwen 相同的基于字節(jié)級(jí)字節(jié)對(duì)編碼的分詞器:
- 詞匯表大?。?51,643 個(gè)常規(guī) token 和 3 個(gè)控制 token
- 有效嵌入大小略大于詞匯表大?。ǔ鲇诜植际接?xùn)練考慮)
技術(shù)報(bào)告提供了 Qwen2 模型訓(xùn)練的整體框架和一些關(guān)鍵細(xì)節(jié),但對(duì)于預(yù)訓(xùn)練階段的具體超參數(shù)配置并沒有詳細(xì)說明。報(bào)告更多地關(guān)注了模型的架構(gòu)創(chuàng)新、數(shù)據(jù)處理策略、以及后訓(xùn)練階段的具體實(shí)施細(xì)節(jié)。
Qwen
1. 預(yù)訓(xùn)練階段
1.1 數(shù)據(jù)處理
- Qwen 使用了多樣化的數(shù)據(jù)集,包括公開網(wǎng)頁(yè)文檔、百科全書、書籍、代碼等
- 數(shù)據(jù)集是多語(yǔ)言的,主要包含英語(yǔ)和中文
- 對(duì)公開網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行了以下處理:
從 HTML 中提取文本
使用語(yǔ)言識(shí)別工具確定語(yǔ)言
進(jìn)行精確匹配和模糊匹配的去重
使用規(guī)則和機(jī)器學(xué)習(xí)方法過濾低質(zhì)量數(shù)據(jù)
使用多個(gè)模型對(duì)內(nèi)容進(jìn)行評(píng)分,包括語(yǔ)言模型、文本質(zhì)量評(píng)分模型和不當(dāng)內(nèi)容識(shí)別模型
人工抽樣審核確保質(zhì)量
有選擇地上采樣某些來源的數(shù)據(jù)
- 納入了高質(zhì)量的指令數(shù)據(jù)以提高零樣本和少樣本性能
- 移除了與測(cè)試集有 13-gram 重疊的指令樣本
- 最終構(gòu)建了一個(gè)包含多達(dá) 3 萬億 tokens 的數(shù)據(jù)集
1.2 分詞
- 使用字節(jié)對(duì)編碼(BPE)作為分詞方法
- 基于開源的 fast BPE tokenizer tiktoken,選擇 cl100k_base 詞表作為起點(diǎn)
- 增加了常用中文字符和詞,以及其他語(yǔ)言的詞匯
- 將數(shù)字分割成單個(gè)數(shù)字
- 最終詞表大小約為 152K
1.3 模型架構(gòu)
Qwen 采用修改版的 Transformer 架構(gòu):
- 嵌入層和輸出投影層:權(quán)重不共享
- 位置編碼:使用 RoPE(Rotary Positional Embedding)
- 偏置:在大多數(shù)層移除偏置,但在注意力的 QKV 層添加偏置以增強(qiáng)外推能力
- 歸一化:使用 pre-norm 和 RMSNorm 代替?zhèn)鹘y(tǒng)的 layer normalization
- 激活函數(shù):使用 SwiGLU,將前饋網(wǎng)絡(luò)的維度從 4 倍隱藏層大小減少到 8/3 倍
1.4 訓(xùn)練細(xì)節(jié)
- 使用自回歸語(yǔ)言建模作為訓(xùn)練目標(biāo)
- 訓(xùn)練上下文長(zhǎng)度為 2048
- 使用 Flash Attention 以提高計(jì)算效率和減少內(nèi)存使用
- 優(yōu)化器:AdamW
β1 = 0.9
β2 = 0.95
? = 10^-8
- 學(xué)習(xí)率:使用余弦衰減調(diào)度,衰減到峰值學(xué)習(xí)率的 10%
- 使用 BFloat16 混合精度訓(xùn)練以保證訓(xùn)練穩(wěn)定性
不同規(guī)模模型的具體參數(shù)如下:
參數(shù)數(shù)量 | 隱藏層大小 | 注意力頭數(shù) | 層數(shù) | 學(xué)習(xí)率 | 批次大小 | 訓(xùn)練 tokens |
1.8B | 2048 | 16 | 24 | 3.0e-4 | 4M | 2.2T |
7B | 4096 | 32 | 32 | 3.0e-4 | 4M | 2.4T |
14B | 5120 | 40 | 40 | 3.0e-4 | 4M | 3.0T |
1.5 上下文長(zhǎng)度擴(kuò)展
為了在推理時(shí)擴(kuò)展模型的上下文長(zhǎng)度,Qwen 采用了以下技術(shù):
- NTK-aware interpolation:通過調(diào)整 RoPE 的基礎(chǔ)來防止高頻信息丟失
- Dynamic NTK-aware interpolation:動(dòng)態(tài)地按塊改變尺度,避免性能嚴(yán)重下降
- LogN-Scaling:根據(jù)上下文長(zhǎng)度與訓(xùn)練長(zhǎng)度的比例重新縮放查詢和鍵的點(diǎn)積
- Window attention:限制注意力范圍,防止模型關(guān)注過遠(yuǎn)的 tokens
2. 監(jiān)督微調(diào)(SFT)階段
2.1 數(shù)據(jù)處理
- 注釋了多種風(fēng)格的對(duì)話數(shù)據(jù)
- 關(guān)注自然語(yǔ)言生成以提高模型的有用性
- 避免使用可能限制模型能力的提示模板
- 注釋了與安全相關(guān)的數(shù)據(jù),如暴力、偏見和色情等
- 使用 ChatML 格式描述元數(shù)據(jù)(如角色)和內(nèi)容
2.2 訓(xùn)練細(xì)節(jié)
- 訓(xùn)練目標(biāo):下一個(gè) token 預(yù)測(cè)
- 對(duì)系統(tǒng)和用戶輸入應(yīng)用損失掩碼
- 優(yōu)化器:AdamW
β1 = 0.9
β2 = 0.95
? = 10^-8
- 序列長(zhǎng)度:2048
- 批次大小:128
- 總訓(xùn)練步數(shù):4000
- 學(xué)習(xí)率:
- 在前 1430 步逐漸增加
- 峰值為 2e-6
- 權(quán)重衰減:0.1
- Dropout:0.1
- 梯度裁剪:1.0
3. 強(qiáng)化學(xué)習(xí)(RLHF)階段
3.1 偏好模型預(yù)訓(xùn)練(PMP)
- 構(gòu)建了包含約 6600 個(gè)詳細(xì)標(biāo)簽的分類系統(tǒng)
- 實(shí)現(xiàn)了考慮多樣性和復(fù)雜性的平衡采樣算法
- 使用不同大小的 Qwen 模型和不同的采樣策略生成多樣化的響應(yīng)
- 根據(jù)標(biāo)注指南評(píng)估響應(yīng),并根據(jù)分?jǐn)?shù)形成比較對(duì)
3.2 獎(jiǎng)勵(lì)模型訓(xùn)練
- 使用相同大小的預(yù)訓(xùn)練語(yǔ)言模型 Qwen 初始化
- 在原始 Qwen 模型基礎(chǔ)上添加了一個(gè)池化層,用于基于特定結(jié)束 token 提取句子獎(jiǎng)勵(lì)
- 學(xué)習(xí)率:固定為 3e-6
- 批次大?。?4
- 序列長(zhǎng)度:2048
- 訓(xùn)練輪數(shù):1 輪
3.3 PPO 訓(xùn)練
- 使用四個(gè)模型:策略模型、價(jià)值模型、參考模型和獎(jiǎng)勵(lì)模型
- 在開始 PPO 之前,先更新價(jià)值模型 50 步
- 對(duì)每個(gè)查詢同時(shí)采樣兩個(gè)響應(yīng)
- KL 散度系數(shù):0.04
- 基于運(yùn)行平均值歸一化獎(jiǎng)勵(lì)
- 策略模型學(xué)習(xí)率:1e-6
- 價(jià)值模型學(xué)習(xí)率:5e-6
- 價(jià)值損失裁剪:0.15
- 推理時(shí)策略 top-p:0.9
- 使用預(yù)訓(xùn)練梯度緩解對(duì)齊稅
4. 代碼專用模型訓(xùn)練(CODE-QWEN)
4.1 代碼預(yù)訓(xùn)練
- 基于 QWEN 基礎(chǔ)模型繼續(xù)預(yù)訓(xùn)練
- 在約 900 億 tokens 的代碼數(shù)據(jù)上訓(xùn)練
- 上下文長(zhǎng)度擴(kuò)展到 8192
- 優(yōu)化器:AdamW
β1 = 0.9
β2 = 0.95
? = 10^-8
- 學(xué)習(xí)率:
- CODE-QWEN-14B: 6.0e-5
- CODE-QWEN-7B: 3.0e-5
- 3% 預(yù)熱迭代,無學(xué)習(xí)率衰減
4.2 代碼監(jiān)督微調(diào)
- 采用多階段 SFT 策略
- 優(yōu)化器:AdamW
β1 = 0.9
β2 = 0.95
? = 10^-8
- 學(xué)習(xí)率:
- 14B 模型: 2.0e-6
- 7B 模型: 1.0e-5
- 使用余弦學(xué)習(xí)率調(diào)度(3% 預(yù)熱步數(shù)),然后保持恒定
5. 數(shù)學(xué)專用模型訓(xùn)練(MATH-QWEN-CHAT)
- 在增強(qiáng)的數(shù)學(xué)指令數(shù)據(jù)集上進(jìn)行數(shù)學(xué) SFT
- 序列長(zhǎng)度:1024
- 掩蔽系統(tǒng)和用戶輸入以加速收斂
- 優(yōu)化器:AdamW
與 SFT 相同的超參數(shù)
- 峰值學(xué)習(xí)率:2e-5
- 訓(xùn)練步數(shù):50,000
Baichuan2
1. 預(yù)訓(xùn)練階段
1.1 數(shù)據(jù)處理
- 數(shù)據(jù)來源:網(wǎng)頁(yè)、書籍、研究論文、代碼庫(kù)等多樣化來源
- 數(shù)據(jù)量:總計(jì)2.6萬億tokens
- 數(shù)據(jù)處理:
使用大規(guī)模去重和聚類系統(tǒng),支持LSH和密集嵌入特征
對(duì)文檔、段落和句子進(jìn)行去重和評(píng)分
評(píng)分用于預(yù)訓(xùn)練中的數(shù)據(jù)采樣
1.2 模型架構(gòu)
- 基于Transformer架構(gòu),但做了一些修改:
7B模型使用RoPE位置編碼,13B模型使用ALiBi位置編碼
使用SwiGLU激活函數(shù)
使用xFormers實(shí)現(xiàn)的內(nèi)存高效注意力機(jī)制
輸入前使用Layer Normalization
使用RMSNorm實(shí)現(xiàn)
1.3 訓(xùn)練超參數(shù)
- 優(yōu)化器:AdamW
β1 = 0.9, β2 = 0.95
權(quán)重衰減:0.1
梯度裁剪:0.5
- 學(xué)習(xí)率:
- 7B模型:2e-4
- 13B模型:1.5e-4
- 2000步線性預(yù)熱,然后余弦衰減
- 批量大?。何疵鞔_說明
- 訓(xùn)練步數(shù):未明確說明,但提到訓(xùn)練了2.6萬億tokens
1.4 其他訓(xùn)練細(xì)節(jié)
- 使用BFloat16混合精度訓(xùn)練
- 使用NormHead穩(wěn)定訓(xùn)練:歸一化輸出嵌入
- 使用max-z loss限制logits大?。?/li>
L_max-z = 2e-4 * z^2
其中z是最大logit值
2. 對(duì)齊階段
2.1 監(jiān)督微調(diào)(SFT)
- 數(shù)據(jù):超過10萬個(gè)人類標(biāo)注的提示樣本
- 標(biāo)注原則:類似Claude的有幫助性和無害性原則
- 質(zhì)量控制:使用交叉驗(yàn)證
2.2 強(qiáng)化學(xué)習(xí)(RLHF)
2.2.1 獎(jiǎng)勵(lì)模型訓(xùn)練
- 數(shù)據(jù):按6個(gè)主類別、30個(gè)次級(jí)類別和200多個(gè)三級(jí)類別對(duì)提示進(jìn)行分類
- 損失函數(shù):與InstructGPT相同
- 評(píng)估:不同響應(yīng)分?jǐn)?shù)差異越大,獎(jiǎng)勵(lì)模型區(qū)分準(zhǔn)確率越高
2.2.2 PPO訓(xùn)練
- 使用4個(gè)模型:
- Actor模型:生成響應(yīng)
- Reference模型:計(jì)算KL懲罰(參數(shù)固定)
- Reward模型:提供整體獎(jiǎng)勵(lì)(參數(shù)固定)
- Critic模型:學(xué)習(xí)每個(gè)token的價(jià)值
- 訓(xùn)練細(xì)節(jié):
- Critic模型預(yù)熱20步
- 梯度裁剪:0.5
- 學(xué)習(xí)率:5e-6(恒定)
- PPO clip閾值ε = 0.1
- KL懲罰系數(shù)β = 0.2,衰減到0.005
- 訓(xùn)練350輪迭代
3. 安全性增強(qiáng)
- 預(yù)訓(xùn)練階段:
數(shù)據(jù)過濾去除有害內(nèi)容
增加正面價(jià)值領(lǐng)域數(shù)據(jù)的采樣概率
- 對(duì)齊階段:
- 構(gòu)建紅隊(duì)測(cè)試程序
- 使用多值監(jiān)督采樣方法生成不同安全級(jí)別的響應(yīng)
- 使用DPO方法高效利用有限標(biāo)注數(shù)據(jù)
- 使用整合Helpful和Harmless目標(biāo)的Reward Model進(jìn)行PPO訓(xùn)練
Baichuan 2模型的訓(xùn)練過程涵蓋了預(yù)訓(xùn)練、監(jiān)督微調(diào)和強(qiáng)化學(xué)習(xí)等多個(gè)階段,每個(gè)階段都有其特定的數(shù)據(jù)處理、模型架構(gòu)和訓(xùn)練策略。論文還特別強(qiáng)調(diào)了在整個(gè)訓(xùn)練過程中對(duì)模型安全性的關(guān)注和改進(jìn)。
本文轉(zhuǎn)載自 ??芝士AI吃魚??,作者: 芝士AI吃魚
