# 实验设计方案

> 验证"图论方法可以让 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/
