aa8ba6a6d7
graph-enhanced 32B LLM reasoning
12 KiB
12 KiB
实验设计方案
验证"图论方法可以让 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 论文方法:
- 在模型推理过程中,从最后一个隐藏层提取隐藏状态
- 使用 K-means (k=200) 聚类得到节点
- 按推理步骤的顺序连接节点形成推理图
- 计算图属性:
- 循环检测率: 含至少一个环的样本比例
- 循环数: 每样本的最大循环次数
- 图直径: 任意两点间最短路径的最大值
- 小世界指数: S = (C/C_rand) / (L/L_rand)
硬件需求
- GPU: 1× RTX 4090 (24GB) 或 A100 (80GB)
- 推理框架: vLLM (推荐) 或 llama.cpp (INT4量化)
- 内存: 32GB+
- 存储: 100GB+
运行命令示例
# 使用 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 | 节点/最终答案评估 | 评估节点对回答问题的贡献 |
| Φ | 从图合成最终答案 | 聚合所有有效节点的信息 |
关键参数
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: 多路径推理轨迹
数据格式:
{
"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": "最终答案"
}
}
构造方法:
- 使用 GPT-4o / DeepSeek-R1 生成多路径推理轨迹
- 在轨迹中插入交叉验证点 ("Wait, let me check...")
- 添加显式的子结论聚合步骤
- 确保图中的循环结构自然出现(不是人为强行添加)
策略 C: 从 GoT/AGoT 输出蒸馏
- 用 AGoT 在验证集上生成推理轨迹
- 只保留 AGoT 回答正确的高质量轨迹
- 将这些图结构轨迹转化为线性文本用于 SFT
训练配置
# 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 服务器上从零开始:
- 立即运行:
src/baseline/*— 基线评估,产出立刻可用 - 核心开发:
src/agot/agot.py— AGoT 算法,最关键的实验 - 机制理解:
src/graph_analysis/*— 推理图可视化与属性分析 - 深度优化:
src/sft/*— 图感知 SFT 训练
参考文献
- Besta et al. (AAAI 2024). Graph of Thoughts: Solving Elaborate Problems with Large Language Models
- Pandey et al. (2025). Adaptive Graph of Thoughts: Test-Time Adaptive Reasoning
- Minegishi et al. (NeurIPS 2025). Topology of Reasoning
- Bai et al. (ACL 2025). Self-attention-based Graph-of-Thought for Math Problem Solving
- Yao et al. (NAACL 2024). GoT: Effective Graph-of-Thought Reasoning in Language Models