diffusion-of-thoughts
首个将思维链推理引入扩散语言模型的研究框架,支持自纠正与多步推理,在NeurIPS 2024发表
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
首个将思维链推理引入扩散语言模型的研究框架,支持自纠正与多步推理,在NeurIPS 2024发表
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:DoT 推理流程示意——噪声逐步去噪,思维链步骤随时间步扩散演化
想象你在解一道数学难题。传统的方式是:从左到右逐字写出答案——但如果你允许自己在草稿纸上涂涂改改、反复推敲,最终答案的准确率往往会更高。Diffusion of Thoughts(DoT) 正是将这种"先想后答"的人类解题习惯,引入了扩散语言模型的世界。
2024年2月,来自上海交通大学的 HKUNLP 实验室发表了论文 Diffusion of Thoughts: Chain-of-Thought Reasoning in Diffusion Language Models,同年12月登上 NeurIPS 2024。213颗GitHub星标、78次学术引用,DoT 开创性地将思维链推理(Chain-of-Thought, CoT) 这一在自回归语言模型中已被验证有效的技术,移植到了扩散语言模型架构上——这是两条看似平行、实则互补的AI技术路线的首次深度交汇。
背景科普:扩散模型 vs 自回归模型
当前大语言模型主要有两条生成范式。一条是自回归(Autoregressive, AR) 模型,如 GPT 系列,从左到右逐 token 生成,每一步的输出都依赖前面所有 token,生成过程是严格有序的。思维链 prompting(CoT)最初就是为这类模型设计的,通过让模型先输出中间推理步骤再给出答案,显著提升推理准确率。
另一条是扩散(Diffusion) 模型,如 Stable Diffusion(图像领域)和 DiffuSeq(文本领域)。这类模型从随机噪声开始,逐步去噪生成目标内容。生成过程不是有序的,而是一次次"从混沌走向秩序"——这带来了一个独特优势:生成顺序不受限制,可以同时探索多种推理路径。
痛点:扩散语言模型在文本生成任务中展现了巨大潜力(训练效率高、支持非自回归并行解码),但在复杂推理任务(数学题、多步逻辑推导)上一直表现不佳。原因在于:它缺乏像CoT那样显式建模中间推理步骤的机制。
DoT的核心理念:让推理思维在扩散过程的多个时间步上逐步扩散(diffuse)开来。思维不再是一次性生成的最终输出,而是随时间步逐渐收敛的"思维轨迹"。
图2:DoT 项目标识
DoT 的核心思想可以这样理解:传统扩散语言模型在每个时间步 t 做"去噪预测",DoT 将其改造为"推理步骤预测"。具体来说:
DoT 实现基于两个重要前作:
DoT 在 Plaid 架构基础上进行微调,主要改动集中于:
# lib/models.py 核心 Transformer Block
class TransformerBlock(nn.Module):
def __init__(self, dim, n_heads, causal, residual_scale):
# 使用 Apex FusedRMSNorm 替代标准 LayerNorm,提升训练效率
self.rmsnorm1 = apex.normalization.FusedRMSNorm(dim)
self.attn_qkv = nn.Linear(dim, 3*dim, bias=False)
self.attn_out = nn.Linear(dim, dim, bias=False)
# Rotary Position Embedding(旋转位置编码)替代绝对位置编码
# 支持更长上下文的注意力计算
self.mlp = MLP(dim, 4*dim, dim, bias1=False, bias2=False)
代码中还集成了 xformers 的高效注意力算子(在 Flash Attention 不可用时降级)和 Apex 的融合 CUDA 算子,确保大规模训练的 GPU 利用率。
DoT 的训练流程基于 PyTorch 2.0.1 + CUDA 11.7,核心依赖包括:
| 依赖 | 版本 | 用途 |
|---|---|---|
torch | 2.0.1+cu117 | 深度学习框架 |
transformers | 4.29.2 | 预训练模型加载 |
xformers | 0.0.23 | 高效注意力算子 |
apex | (自定义编译) | Fused RMSNorm / CUDA 融合算子 |
mup | 1.0.0 | MuReadout + MuParam 缩放规则 |
einops | 0.6.1 | 张量维度重排列 |
datasets | 2.15.0 | 数据集加载 |
训练采用分布式数据并行(DDP,lib/ddp.py)、混合精度训练(AMP)和 EMA(指数移动平均,lib/ema.py)策略。推理阶段支持 DPM-Solver(lib/dpm_solver_pytorch.py)加速采样,可将采样步数从默认的64步降至8步,同时保持相近的生成质量。
DoT 展现出两个重要的涌现能力:
这是一个纯研究导向的代码库,没有 Web 界面,所有操作通过命令行完成。
适用用户:
不适用的用户:
代码仓库提供了两种环境配置方式:
方式一:Conda 手动安装(推荐用于理解)
conda create -n dot python=3.10
conda activate dot
pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html
然后需要从源码编译安装 NVIDIA Apex(自定义融合 CUDA 算子),这需要 CUDA 工具链,对新手有门槛。
方式二:Docker 镜像(推荐用于快速启动)
docker pull simonlemaqwq/sedd:v2.0
docker run --gpus all -v <PROJECT_DIR>:/workspace -it simonlemaqwq/sedd:v2.0 /bin/bash
cd /workspace && git checkout dot-sedd
Docker 镜像解决了 Apex 编译和 CUDA 版本兼容问题,但需要 Docker 基础知识和 GPU 支持。
仓库提供了完整的训练脚本 train.py 和评估脚本 evaluation_batch.py:
# 训练 DoT(在 GSM8k 数据集上,12万步)
python train.py --digit --fix_src --dataset gsm8k --steps 120000 --weights_path plaid1b_weights
# 训练 DoT-MP(多遍版本,31000步)
python train.py --digit --fix_src --cot --dataset gsm8k --steps 31000 --weights_path plaid1b_weights
# 推理评估(默认 T=64 采样步)
python3 evaluation_batch.py --weights_path outputs/gsm8k-bs128-fix_src-digit-steps120000 \\
--fix_src --digit --dataset gsm8k --score_temp 0.5
所有配置通过命令行参数传入,无独立配置文件——这对调试和复现来说有一定门槛。
图3:DoT 推理过程可视化——噪声逐步收敛,推理步骤在多时间步上扩散演化
1. 没有预训练权重开源
截至目前(2026年7月),作者声明预训练检查点仍在"policy checking"阶段,尚未公开发布。用户需要自行从 Plaid 1B 权重微调,增加了复现难度——无法直接体验训练好的 DoT 效果,只能从论文数据和 demo GIF 中窥见一斑。
2. 依赖商业许可组件
Apex 库使用 Apache License,但部分 CUDA 融合算子有专利覆盖(NVIDIA Fused Kernel Patents)。在商业产品中使用时需注意专利风险。
3. 无 License = 灰色地带
项目本身没有任何开源许可证,根据 GitHub 默认条款,仅有"查看和fork"权限,不得直接用于二次开发或商业产品。
4. 硬件门槛高
训练需要多块高端GPU(Plaid 1B 模型约10亿参数),推理至少需要一块16GB+显存的GPU,限制了个人研究者的使用。
5. 相比自回归模型的真实收益存疑
扩散推理虽然在并行性上有优势,但 DoT 的推理时间步 T=64(甚至 DPM-Solver 优化后T=8)是否真的比自回归模型的逐 token 生成更高效,取决于具体硬件平台和实现优化程度。
DoT 标志着扩散模型推理能力的重大突破。它证明了一条此前不被看好的路径:扩散模型不仅可以生成高质量文本,还可以通过类思维链机制进行复杂推理。这一成果催生了后续研究:
从更宏观的视角看,DoT 处于当前AI领域的一个关键交汇点:自回归模型(GPT系列)和扩散模型(Diffusion LM)正在互相借鉴彼此的优势。思维链、自我纠正、多步推理这些最初在自回归模型中发现的"涌现能力",正在被系统性地迁移到扩散框架中。两条技术路线的融合,将决定下一代推理型AI系统的架构走向。
附录:项目信息
| 项目 | HKUNLP/diffusion-of-thoughts |
|---|---|
| 论文 | NeurIPS 2024 · arXiv:2402.07754 |
| 机构 | 上海交通大学 HKUNLP 实验室 |
| 核心贡献 | 首次将思维链推理引入扩散语言模型 |
| 引用量 | 78次(Google Scholar) |
| 模型规模 | 基于 Plaid 1B(10亿参数)微调 |
| 关键特性 | 自纠正能力、DPM-Solver加速、自洽性解码 |
图4:DoT 更多推理过程可视化示例