Initial commit: feasibility report and experiment design for

graph-enhanced 32B LLM reasoning
This commit is contained in:
2026-07-03 09:20:43 +08:00
commit aa8ba6a6d7
8 changed files with 554 additions and 0 deletions
+383
View File
@@ -0,0 +1,383 @@
# 实验设计方案
> 验证"图论方法可以让 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/