训练与数据优化策略
分析提升LLM长上下文能力的数据与训练策略,包括长文本预训练、课程学习、数据合成、强化学习优化等方法。
长文本预训练:基础能力的根本保障
数据分布的重要性
研究表明,模型能够稳定处理的最大上下文长度与训练数据中长文本的占比和多样性密切相关。标准预训练数据(如Common Crawl、Books)的平均长度仅1-2K tokens。
关键数据:
- LLaMA-2在4K长度上训练,95%的样本长度<8K
- GPT-4 reportedly使用32K以上的长文本进行预训练
- 长文本(>16K)占比每增加10%,模型长上下文能力提升约15%
长文本数据源
| 数据源 | 平均长度 | 特点 | 适用性 |
|---|---|---|---|
| Books3 | 80K | 叙事连贯、结构完整 | 优秀 |
| ArXiv论文 | 15K | 学术严谨、专业术语 | 良好 |
| GitHub代码 | 5K | 结构化、逻辑性强 | 中等 |
| 法律文档 | 30K | 精确引用、长程依赖 | 优秀 |
| 对话数据 | 2K | 上下文相关、口语化 | 有限 |
混合比例优化
渐进式数据混合策略:
xychart-beta
title "训练不同阶段的长文本占比"
x-axis "训练阶段" 0 --> 100
y-axis "长文本(>8K)占比 %" 0 --> 50
line [5, 5, 5, 5, 5, 8, 12, 18, 25, 35]
line [5, 8, 15, 22, 28, 32, 35, 38, 40, 42]
line [10, 15, 20, 25, 30, 35, 40, 45, 48, 50]
三个阶段:
- 基础阶段(0-50%):短文本为主(95%),建立基础语言建模能力
- 过渡阶段(50-80%):逐步增加长文本至30%,培养初步的长程依赖
- 专攻阶段(80-100%):长文本占比提升至40-50%,强化长上下文能力
实验验证: 在固定计算预算下,渐进式混合比固定比例(全程30%长文本)获得:
- 困惑度降低8%
- 长文档QA准确率提升12%
- 训练稳定性显著提高(梯度爆炸次数减少70%)
课程学习:渐进式长度扩展
核心思想
课程学习(Curriculum Learning)从短序列开始训练,逐步增加长度。这种渐进式难度提升有助于模型稳定学习长程依赖。
长度调度策略
指数增长调度:
Epoch 1-2: 最大长度 2K
Epoch 3-4: 最大长度 4K
Epoch 5-6: 最大长度 8K
Epoch 7-8: 最大长度 16K
Epoch 9-10: 最大长度 32K
自适应调度: 根据验证集困惑度自动调整长度:
- 困惑度<阈值:增加长度
- 困惑度>阈值:保持或降低长度
- 训练不稳定:回退到更短长度
热身与稳定化
每个新长度阶段需要热身期:
- 使用较低学习率(主学习率的30-50%)
- 增加梯度裁剪阈值
- 减少batch size以防止内存溢出
实验数据: 在LLaMA-2-7B上对比不同策略:
| 策略 | 32K长度困惑度 | 训练时间 | 稳定性 |
|---|---|---|---|
| 直接训练32K | 6.85 | 100% | 差(多次崩溃) |
| 线性增长 | 6.12 | 120% | 良好 |
| 指数增长 | 5.98 | 115% | 优秀 |
| 自适应调度 | 5.92 | 110% | 优秀 |
数据合成:扩充长文本训练数据
合成策略
由于自然长文本数据有限,合成数据成为重要补充:
1. 文档拼接:
- 将多个相关短文档按主题拼接
- 插入分隔符和主题标记
- 模拟长文档的连贯性
2. 递归摘要:
- 使用GPT-4为短文档生成多层级摘要
- 组合原文和摘要保持信息密度
- 生成长度可控的训练样本
3. 结构化生成:
- 生成问答对链:问题1→答案1→问题2(基于答案1)→…
- 代码执行轨迹:多步骤代码执行记录
- 对话历史:多轮对话累积
合成数据质量
xychart-beta
title "合成数据占比对模型性能的影响"
x-axis "合成数据占比 %" 0 --> 50
y-axis "长文档QA准确率 %" 60 --> 85
line [72, 73, 75, 78, 80, 81, 81.5, 81, 80, 79]
最佳实践:
- 合成数据占比20-30%时性能最佳
- 超过40%会导致模型生成模式化、缺乏多样性
- 合成数据需要与自然数据混合使用
指令微调数据
针对长上下文的指令微调数据构建:
| 任务类型 | 数据示例 | 占比 |
|---|---|---|
| 多文档摘要 | ”总结这5篇论文的共同观点” | 25% |
| 长文档QA | ”根据第3章回答…“ | 30% |
| 跨文档推理 | ”对比文档A和B的结论” | 20% |
| 长程指代消解 | ”找出文中’该方法’指什么” | 15% |
| 时序推理 | ”按时间顺序排列事件” | 10% |
强化学习优化:对齐长上下文行为
长上下文RLHF
标准RLHF主要关注短文本(<2K)的指令遵循和安全性。针对长上下文的RLHF需要:
1. 长文本偏好数据:
- 人类标注者对长文档回答的偏好
- 重点关注:完整性、准确性、引用精确性
- 避免:忽略中间信息、错误引用位置
2. 位置感知奖励:
- 检查回答是否正确引用了指定位置的信息
- 惩罚”幻觉”(生成文中不存在的内容)
- 奖励精确引用(如”根据第3段…”)
课程式RLHF
与预训练类似,RLHF也采用课程学习:
Phase 1: 短文本对齐(<4K)- 建立基础对齐
Phase 2: 中等长度(4K-16K)- 培养长程一致性
Phase 3: 长文本专精(>16K)- 优化长上下文行为
实验效果: 在Claude-2的训练中,课程式RLHF相比直接长文本RLHF:
- 有用性评分提升18%
- 幻觉率降低35%
- 长文档引用准确率从62%提升至81%
DPO与长上下文
直接偏好优化(DPO)在长上下文场景的挑战:
- 长序列导致显存占用激增
- 偏好对之间的差异更难学习
解决方案:
- 分段DPO:将长文本分段,每段独立优化
- 重要性采样:优先学习差异显著的偏好对
- LoRA适配:使用LoRA减少显存占用
多阶段训练流程
完整训练管线
flowchart TD
A[预训练<br/>持续预训练] --> B[长文本适应<br/>课程学习]
B --> C[监督微调<br/>长文本指令]
C --> D[RLHF/DPO<br/>长文本对齐]
D --> E[评估与迭代]
E --> F[部署]
E -.->|性能不足| B
E -.->|对齐问题| D
各阶段配置
阶段1:长文本持续预训练
- 数据:40%长文本(>16K)+ 60%常规文本
- 长度:从4K逐步扩展到32K/64K
- 学习率:2e-5(原预训练学习率的1/10)
- 步数:5K-20K(取决于基础模型质量)
阶段2:长文本指令微调
- 数据:合成的长文本指令对
- 长度:与预训练保持一致
- 学习率:1e-5
- 技术:LoRA或QLoRA以减少显存
阶段3:长文本RLHF
- 偏好数据:长文本QA的偏好对
- 训练:分段DPO或课程PPO
- 约束:保持短文本能力不下降
关键超参数
学习率调度
长文本训练对学习率更敏感:
| 阶段 | 初始LR | 最小LR | warmup | 衰减策略 |
|---|---|---|---|---|
| 短文本预训练 | 3e-4 | 3e-5 | 1% | cosine |
| 长文本适应 | 2e-5 | 2e-6 | 5% | linear |
| 指令微调 | 1e-5 | 1e-6 | 3% | cosine |
梯度相关
- 梯度裁剪:长文本需更保守(max_norm=0.5-1.0)
- 梯度累积:增大batch size的替代方案
- 混合精度:FP16训练时需注意梯度下溢
评估与迭代
长上下文评估基准
1. LongChat基准:
- 多轮对话中的上下文保持
- 长文档信息检索
- 跨段落推理
2. SCROLLS:
- 摘要、问答、自然语言推理
- 平均文档长度18K tokens
3. Needle in a Haystack:
- 在长文本中插入特定信息
- 测试精确检索能力
迭代优化
基于评估结果的迭代方向:
flowchart TD
A[Needle测试失败<br/>位置感知差] --> B[增加位置编码训练<br/>使用YaRN/NTK-aware]
C[摘要质量低<br/>信息遗漏] --> D[增加长文档摘要数据<br/>强化全局理解]
E[跨文档推理弱] --> F[增加多文档数据<br/>显式引用训练]
G[推理速度慢] --> H[KV Cache优化<br/>架构改进]
参考资料
-
Continual Pre-Training of Large Language Models: How to (re)warm your model? (Jin et al., 2023)
- 持续预训练的最佳实践
-
Efficient Training of Language Models to Fill in the Middle (Bavarian et al., 2022)
- 代码模型的课程学习
-
- DPO原理与实现
-
The Pile: An 800GB Dataset of Diverse Text for Language Modeling (Gao et al., 2020)
- 长文本数据集构建
-
Training Language Models to Follow Instructions with Human Feedback (Ouyang et al., 2022)
- InstructGPT与RLHF
-
A General-Purpose Document Representation Learning Model for Long Documents (Gupta et al., 2023)
- 长文档表示学习