Files
s-LLM-project/docs/experiment_design.md
T
2026-07-03 09:20:43 +08:00

384 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实验设计方案
> 验证"图论方法可以让 32B 模型实现极大的智能提升"
---
## 实验总览
本实验分为 5 个阶段,按先易后难的顺序推进:
```
Phase 1: 基线建立 (~2天)
Phase 2: AGoT 测试时推理增强 (~3天) ← 首选启动项
Phase 3: 图感知 SFT 训练 (~3天)
Phase 4: 消融实验与机制分析 (~2天)
Phase 5: 跨任务泛化测试 (~1天)
```
---
## Phase 1: 基线建立
### 目的
建立 32B 模型在多种推理任务上的性能基线,同时提取内部推理图特征。
### 模型选择
| 模型 | 参数量 | 用途 |
|------|--------|------|
| Qwen2.5-32B-Instruct | 32B | 基础对照模型 |
| DeepSeek-R1-Distill-Qwen-32B | 32B | 强推理参照模型 |
| Qwen2.5-7B-Instruct | 7B | 规模对照(可选) |
### 推理任务
| 任务 | 数据集 | 指标 | 难度 |
|------|--------|------|------|
| 数学应用题 | GSM8K (8000 samples) | Accuracy | 低 |
| 竞赛数学 | MATH500 | Accuracy | 中 |
| 高难度数学 | AIME 2024 (30 questions) | Accuracy | 高 |
| 多跳问答 | HotpotQA (distractor, 1000) | EM / F1 | 中 |
| 科学推理 | GPQA Diamond (198 questions) | Accuracy | 高 |
### 基线方法
| 方法 | 描述 | 预期成本 |
|------|------|---------|
| IO (Input-Output) | 直接输出答案 | 低 (1次调用/问题) |
| CoT (Chain-of-Thought) | 标准思维链提示 | 低 (1次调用/问题) |
| CoT-SC (Self-Consistency) | 5条链投票 | 中 (5次调用/问题) |
| ToT (Tree-of-Thought) | 束搜索 b=3, 深度3 | 高 (~30次调用/问题) |
### 推理图属性提取
使用 Topology of Reasoning 论文方法:
1. 在模型推理过程中,从最后一个隐藏层提取隐藏状态
2. 使用 K-means (k=200) 聚类得到节点
3. 按推理步骤的顺序连接节点形成推理图
4. 计算图属性:
- **循环检测率**: 含至少一个环的样本比例
- **循环数**: 每样本的最大循环次数
- **图直径**: 任意两点间最短路径的最大值
- **小世界指数**: S = (C/C_rand) / (L/L_rand)
### 硬件需求
- GPU: 1× RTX 4090 (24GB) 或 A100 (80GB)
- 推理框架: vLLM (推荐) 或 llama.cpp (INT4量化)
- 内存: 32GB+
- 存储: 100GB+
### 运行命令示例
```bash
# 使用 vLLM 加载 32B 模型
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-32B-Instruct \
--tensor-parallel-size 1 \
--max-model-len 4096
# 运行 GSM8K 评估
lm_eval --model local-completions \
--tasks gsm8k \
--model_args model=Qwen/Qwen2.5-32B-Instruct \
--num_fewshot 8
```
---
## Phase 2: AGoT 测试时推理增强
### 目的
在不修改模型参数的情况下,通过 AGoT 图结构推理框架提升 32B 模型的推理能力。
### 实现方案
**AGoT 算法实现**(参照 Pandey et al., 2025
```
Algorithm: AGoT(q, h, G_h^p)
Input: Query q, position index h, parent graph G_h^p
1. V_h ← ∅, E_h ← ∅, F_h ← ∅
2. G_h ← (V_h, E_h, F_h) // 初始化嵌套图
3. d ← |h| // 当前深度
4. for l = 0, 1, ..., l_max-1 do // 逐层循环
5. if l = 0 and d = 0 then
6. thoughts ← T_∅(q) // 生成初始想法
7. else if l = 0 then
8. thoughts ← T_0(q, G_h) // 为嵌套图生成初始想法
9. else
10. thoughts, edges ← T_e(q, G_h) // 生成想法+边+策略
11. if thought is final then
12. return Eval(thought, G_h) // 提前终止
13. for thought in thoughts do
14. if is_complex(thought) and d < d_max then
15. AGoT(thought, h', G_h) // 递归调用
16. else
17. Eval(thought, G_h) // 直接评估
18. return final_answer
```
### LLM Agent 接口设计
AGoT 需要定义 6 类 LLM Agent
| Agent | 功能 | Prompt 设计要点 |
|-------|------|---------------|
| T_∅ | 从空图生成初始想法 | 分解问题的第一层子问题 |
| T_0 | 从父图生成子图初始想法 | 在父问题的上下文下生成 |
| T_e | 在已有图上生成新想法+边 | 评估已有节点,决定扩展方向 |
| C | 复杂度分类器 | 判断当前节点是否需要递归分解 |
| Eval | 节点/最终答案评估 | 评估节点对回答问题的贡献 |
| Φ | 从图合成最终答案 | 聚合所有有效节点的信息 |
### 关键参数
```python
AGOT_CONFIG = {
"model": "Qwen/Qwen2.5-32B-Instruct",
"max_depth": 2, # d_max: 递归最大深度
"max_layers": 3, # l_max: 每层最大层数
"max_nodes_per_layer": 3, # n_max: 每层最大节点数
"temperature": 0.3,
"self_terminate": True, # 自终止机制
}
```
### 评估协议
```
实验组1: IO (直接输出) → 对照基线
实验组2: CoT (思维链) → 链式对照
实验组3: ToT (思维树, b=3) → 树状对照
实验组4: AGoT (自适应图推理) → 主要实验组
```
比较维度:
- 准确率
- Token 消耗量 (成本)
- 推理步数
- 推理图属性(循环率、直径、小世界指数)
### 预期提升
| 任务 | 预期 vs IO | 预期 vs CoT |
|------|-----------|-------------|
| GSM8K | +5%~15% | +3%~10% |
| MATH500 | +10%~25% | +5%~15% |
| AIME 2024 | +20%~46% | +15%~30% |
| GPQA Diamond | +20%~46% | +10%~25% |
| Game of 24 | +100%~400% | +50%~150% |
---
## Phase 3: 图感知 SFT 训练
### 目的
主动训练 32B 模型具备图结构推理能力,而非仅靠测试时提示。
### 数据构造策略
#### 策略 A: 优质推理图扩展 (参考 Topology 论文)
使用 s1-v1.1 数据集(已验证能扩展推理图直径)。
从 s1 数据集中筛选能产生大直径推理图的样本。
#### 策略 B: 多路径推理轨迹
```python
数据格式:
{
"question": "问题文本",
"graph_trajectory": {
"nodes": [
{"id": 0, "content": "初始分析...", "type": "analysis"},
{"id": 1, "content": "子问题:...", "type": "decomposition"},
{"id": 2, "content": "计算步骤...", "type": "computation"},
{"id": 3, "content": "Wait, 让我重新检查...", "type": "verification"},
{"id": 4, "content": "子结果聚合...", "type": "aggregation"},
{"id": 5, "content": "最终答案", "type": "answer"}
],
"edges": [[0,1], [0,2], [1,3], [2,3], [3,4], [4,5]],
"answer": "最终答案"
}
}
```
构造方法:
1. 使用 GPT-4o / DeepSeek-R1 生成多路径推理轨迹
2. 在轨迹中插入交叉验证点 ("Wait, let me check...")
3. 添加显式的子结论聚合步骤
4. 确保图中的循环结构自然出现(不是人为强行添加)
#### 策略 C: 从 GoT/AGoT 输出蒸馏
1. 用 AGoT 在验证集上生成推理轨迹
2. 只保留 AGoT 回答正确的高质量轨迹
3. 将这些图结构轨迹转化为线性文本用于 SFT
### 训练配置
```bash
# LoRA 微调
accelerate launch \
--num_processes 1 \
train_lora.py \
--model_name Qwen/Qwen2.5-32B-Instruct \
--dataset_path ./data/graph_sft_data.json \
--output_dir ./output/graph_sft_32b \
--lora_r 64 \
--lora_alpha 128 \
--lora_dropout 0.05 \
--learning_rate 2e-4 \
--num_train_epochs 3 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--logging_steps 10 \
--save_steps 500 \
--eval_steps 500
```
### 评估方案
| 评估点 | 评估内容 | 预期 |
|--------|---------|------|
| Step 0 (基线) | GSM8K + MATH500 准确率 + 推理图属性 | 标准基线 |
| Step 500 | 同上 | 开始提升 |
| Step 1000 | 同上 | 显著提升 |
| Step 1500 | 同上 | 饱和? |
| Step 2000 | 全套评估(含 AIME | 最终结果 |
### 推理图属性变化预期
```
微调前 → 微调后:
循环检测率: ~18% → ~50%+
图直径: ~500 → ~2000+
小世界指数: ~0.05 → ~0.20+
准确率: ~73% → ~80%+ (GSM8K)
参考:Topology 论文 s1-v1.1 微调后直径从 ~500 扩展到 ~2500
```
---
## Phase 4: 消融实验与机制分析
### 消融实验
| 实验 | 操作 | 目的 | 预期结果 |
|------|------|------|---------|
| **消融1: 去除循环** | 强制截断回环推理(设置 max_loops=0) | 循环是否必要 | 准确率下降 >10% |
| **消融2: 限制直径** | 限制推理步数上限(max_steps=10/20/50 | 宽广探索是否必要 | 欠限时准确率下降 |
| **消融3: 图 vs 树** | AGoT vs ToT 相同节点预算(同 token 数) | 图是否优于树 | AGoT 优于 ToT |
| **消融4: 聚合操作** | 禁用聚合变换 | 聚合是否关键 | 准确性下降 |
| **消融5: 自终止** | 禁用自终止,强制固定深度 | 自适应是否必要 | 成本增加但准确率不变或略升 |
### 规模对比
| 模型 | 参数量 | 图属性期望 | 准确率期望 |
|------|--------|-----------|-----------|
| Qwen2.5-1.5B | 1.5B | 低循环、小直径 | 低 |
| Qwen2.5-7B | 7B | 中循环、中直径 | 中 |
| Qwen2.5-14B | 14B | 高循环(峰值)、大直径 | 中高 |
| Qwen2.5-32B | 32B | 高循环、最大直径 | **最高** |
### 量化影响测试
| 量化方案 | 显存占用 | 推理速度 | 预期准确率变化 |
|---------|---------|---------|-------------|
| FP16 (全精度) | ~64GB | 1x | 基线 |
| INT8 | ~34GB | ~1.1x | <1% 下降 |
| INT4 (GPTQ/AWQ) | ~18GB | ~1.3x | 1%-3% 下降 |
| INT4 (llama.cpp) | ~18GB | ~1.5x | 1%-3% 下降 |
---
## Phase 5: 跨任务泛化测试
### 测试任务矩阵
| 类别 | 任务 | AGoT 预期提升 | SFT 预期提升 |
|------|------|--------------|-------------|
| **数学推理** | GSM8K | +5%~15% | +5%~10% |
| | MATH500 | +10%~25% | +5%~15% |
| | AIME 2024 | +20%~46% | +10%~20% |
| **多跳问答** | HotpotQA | +10%~15% | +3%~10% |
| | 2WikiMultihop | +10%~20% | +5%~10% |
| **科学推理** | GPQA Diamond | +20%~46% | +10%~20% |
| | MMLU-Pro | +5%~15% | +3%~8% |
| **规划** | Game of 24 | +50%~400% | +20%~100% |
| | Blocksworld | +50%~200% | +20%~50% |
| **代码** | HumanEval | +3%~10% | +2%~5% |
| | MBPP | +3%~8% | +2%~5% |
### 去偏测试
- **提示敏感性测试**: 同一问题用 5 种不同措辞重复测试
- **答案格式测试**: 验证无论答案格式如何,推理质量一致
- **领域迁移测试**: 训练集使用数学数据,测试在规划任务上的零样本迁移
---
## 实验脚本结构
```
s-LLM-project/
├── README.md
├── docs/
│ ├── feasibility_report.md # 可行性报告
│ └── experiment_design.md # 实验设计(本文件)
├── papers/ # 下载论文
├── src/
│ ├── baseline/
│ │ ├── run_gsm8k.sh
│ │ ├── run_math500.sh
│ │ ├── run_aime.py
│ │ └── run_hotpotqa.sh
│ ├── agot/
│ │ ├── agot.py # AGoT 核心算法
│ │ ├── agents.py # 6 类 LLM Agent 定义
│ │ ├── graph_utils.py # 图操作工具
│ │ └── prompts/ # Prompt 模板
│ ├── graph_analysis/
│ │ ├── reasoning_graph.py # 推理图提取
│ │ ├── graph_properties.py # 图属性计算
│ │ └── visualize.py # 可视化
│ └── sft/
│ ├── prepare_data.py # 图感知数据构造
│ └── train_lora.py # LoRA 微调
├── data/
│ ├── graph_sft_data.json # SFT 训练数据
│ └── results/ # 实验结果保存
└── requirements.txt
```
---
## 运行优先级
如果在 GPU 服务器上从零开始:
1. **立即运行**: `src/baseline/*` — 基线评估,产出立刻可用
2. **核心开发**: `src/agot/agot.py` — AGoT 算法,最关键的实验
3. **机制理解**: `src/graph_analysis/*` — 推理图可视化与属性分析
4. **深度优化**: `src/sft/*` — 图感知 SFT 训练
---
## 参考文献
- Besta et al. (AAAI 2024). *Graph of Thoughts: Solving Elaborate Problems with Large Language Models*
- https://arxiv.org/abs/2308.09687 | GitHub: https://github.com/spcl/graph-of-thoughts
- Pandey et al. (2025). *Adaptive Graph of Thoughts: Test-Time Adaptive Reasoning*
- https://arxiv.org/abs/2502.05078
- Minegishi et al. (NeurIPS 2025). *Topology of Reasoning*
- https://arxiv.org/abs/2506.05744 | GitHub: https://github.com/gouki510/Topology_of_Reasoning
- Bai et al. (ACL 2025). *Self-attention-based Graph-of-Thought for Math Problem Solving*
- https://aclanthology.org/2025.findings-acl.317/
- Yao et al. (NAACL 2024). *GoT: Effective Graph-of-Thought Reasoning in Language Models*
- https://aclanthology.org/2024.findings-naacl.183/