CPO
NeurIPS 2024 论文实现:通过 ToT 树搜索偏好信号蒸馏,让普通 CoT 推理达到思维树
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
NeurIPS 2024 论文实现:通过 ToT 树搜索偏好信号蒸馏,让普通 CoT 推理达到思维树
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
大型语言模型(LLM)在解决复杂问题时,往往会生成一条"推理链"(Chain-of-Thought, CoT),逐步推导出答案。这种显式的推理路径比直接给出答案更易于人类理解和调试。然而,研究表明,LLM 自动生成的 CoT 推理路径并非总是最优的——模型有时会"走捷径"、跳过关键推理步骤,或者在多条推理路径中选错方向。
为了解决这个问题,Tree-of-Thought(ToT)思维树方法被提出:让模型同时探索多条推理路径,通过树搜索找到最优路径。但 ToT 的代价是推理成本暴增——每一步都要生成和评估多个分支,计算量呈指数级增长。这就好比下棋时,"多想几步"固然更准,但思考时间也成倍增加。
CPO(Chain of Preference Optimization,链式偏好优化) 的核心创新在于:不需要在推理时付出高昂的搜索代价。它先利用 ToT 搜索找出高质量的推理路径,然后用这些路径数据对 LLM 进行微调,让模型在普通 CoT 推理模式下就能达到接近 ToT 的效果——相当于把 ToT 的"推理智慧"蒸馏到了普通的单链推理中。

图1:CPO 核心思想——将 ToT 树搜索中的偏好信息蒸馏到 CoT 推理模型
CPO 的训练数据来源于 ToT 树搜索过程。在树中,每个节点代表一个推理步骤,边代表推理方向。ToT 通过价值评估(value evaluation)选出每一步的最优分支,这个"被选中的路径"相对于"被淘汰的路径"就形成了天然的偏好对(preference pair)。
这些偏好对是 CPO 训练的核心:它让模型学习"在同样的问题上,ToT 选择这条路而不是那条路的内在原因"。通过 Direct Preference Optimization(DPO)损失函数,模型学会在普通推理时也倾向于选择这些高质量的推理方向。
CPO 基于以下主流框架实现:
| 组件 | 技术 | 说明 |
|---|---|---|
| 基座模型 | Llama-2-7B / Llama-2-13B | 也支持其他 HuggingFace 因果语言模型 |
| 偏好优化 | DPO (Direct Preference Optimization) | 来自 TRL 库,基于人类偏好信号的策略优化 |
| 参数高效微调 | LoRA (Low-Rank Adaptation) | lora_r=8,大幅降低微调显存需求 |
| 加速框架 | Accelerate (HuggingFace) | 支持多卡分布式训练 |
| 树搜索模块 | 自研 ToT (tot/ 目录) | 复用 Princeton-NLP 的 tree-of-thought-llm |
代码结构方面,项目主要包含以下模块:
CPO 的依赖较为明确,但存在版本锁定:
torch==2.1.2+cu121 # CUDA 12.1 特定版本
transformers==4.38.2
accelerate==0.27.1
trl==0.7.11 # 关键:含 DPOTrainer
datasets==2.18.0
训练阶段必须使用 GPU。以 7B 参数模型为例,FP16 精度下至少需要 24GB 显存(如 A100 或 3090),LoRA 模式可降低到单卡 24GB 以内。磁盘空间需求约 10GB(包含模型权重和数据集)。
根据论文描述,CPO 在以下三类复杂推理任务上进行了验证:
实验结果显示,CPO 微调后的 Llama-2 模型在上述任务上显著优于原始 CoT 基线,同时推理速度接近普通 CoT(因为推理时不再需要 ToT 树搜索),实现了"又快又准"的效果。
使用 ToT 树搜索收集推理路径,需要配置 Llama-2 模型路径和数据集 JSON 文件,通过 accelerate launch 启动分布式训练脚本。
将 ToT 生成的多路径数据清洗为 DPO 偏好对格式,clean_dataset.py 脚本从 JSON 中提取正确推理路径,构造 preference 数据。
使用 DPO 微调基座模型,支持 wandb 日志、LoRA 配置和自定义超参数(beta、learning_rate、warmup_steps 等)。
在普通 CoT 模式下测试微调后的模型,与原始 CoT 基线进行对比,验证推理质量提升。
1. 依赖版本锁定严格:requirement.txt 中硬编码了 torch 2.1.2+cu121 和 transformers 4.38.2,与新版本框架可能不兼容。在配置环境时,建议创建独立的 conda/pip 环境,避免污染其他项目的依赖。
2. 模型下载需手动处理:代码依赖本地路径的 Llama-2 模型权重,需要自行从 HuggingFace 下载并放置到指定目录。
3. 无 Web 界面:这是一个纯研究代码库,仅支持命令行调用。没有图形界面或 API 服务,对非技术用户有一定门槛。
4. 缺乏自动化脚本:三个阶段(数据收集→清洗→训练)需要分别手动执行,没有一键启动脚本。用户需要理解每一步的参数含义才能正确配置。
CPO 的核心贡献在于证明了 ToT 的"推理智慧"可以被有效蒸馏到轻量级的 CoT 模型中。这一思路对 LLM 推理优化领域具有重要启发:
整体而言,CPO 代表了"推理时计算"向"训练时计算"迁移的趋势——将复杂的推理能力内化到模型参数中,而不是在每次推理时实时搜索。这与当前主流的 test-time scaling 策略形成鲜明对比,为资源受限场景提供了另一条技术路径。