D3PM:离散状态空间结构化去噪扩散模型的官方代码实践指南(图像 / 文本 / 插入删除三大实验)
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本指南以d3pm/README.md为骨架系统梳理 Google Research 开源的D3PMStructured Denoising Diffusion Models in Discrete State-Spaces代码库。该代码库对应 Austin 等人发表于 NeurIPS 2021 的同名论文覆盖图像Section 6与文本Section 5两类实验并额外包含后续工作「Beyond In-Place Corruption」中带插入insert与删除delete操作的扩展版 D3PM。读完本文你将掌握 D3PM 的前向加噪 / 反向去噪原理、三种离散转移矩阵与噪声调度beta schedule的实现差异、图像与文本实验的配置结构与训练入口以及插入删除版前向过程的代码组织方式。D3PM 是什么在离散状态空间里做去噪扩散经典的 DDPM 在连续空间高斯噪声上定义扩散过程。D3PM 的核心思想是把它推广到离散状态空间数据中的每个 token图像像素值或文本符号不再是叠加高斯噪声而是按照一个马尔可夫转移矩阵(Q_t) 在有限离散状态之间随机游走逐步腐蚀成噪声反向模型则学习从噪声分布一步步还原原始数据。仓库中的核心实现类CategoricalDiffusion位于 d3pm/images/diffusion_categorical.py完整实现了这一套机制其关键设计包括时间约定代码中噪声数据记为 (x_0, \dots, x_{T-1})原始干净数据记为x_start即论文中的 (x_{-1})与论文中 (x_1,\dots,x_T) 的写法相反阅读代码时需要注意这一差异见该类 docstring转移矩阵预计算构造单步矩阵 (Q_t q(x_t|x_{t-1}))再通过累乘得到任意时刻的边际转移矩阵 (\bar{Q}t Q_1 Q_2 \cdots Q_t q(x_t|x{start}))并以float64精度保存以保证数值稳定性采样q_sample通过 Gumbel 技巧对log(q_probs) gumbel_noise取 argmax从 (q(x_t|x_{start})) 采样与代码中q_probs的实现相对应。仓库总体结构三大实验模块根目录 d3pm/README.md 将代码库划分为三个相互独立的子目录分别对应两篇论文的不同实验子目录对应论文/章节实验领域核心职责d3pm/imagesStructured D3PM 论文 Section 6图像生成CIFAR-10评估 bits-per-dimensionBPD等指标d3pm/textStructured D3PM 论文 Section 5文本生成LM1B、text8D3PM 在文本离散空间上的训练与评估d3pm/insertdeleteBeyond In-Place Corruption 论文带插入/删除操作的序列扩散在就地腐蚀之外引入序列长度变化的扩散过程需要特别说明的一点图像模块目前仅包含 bits-per-dimension 指标的评估代码FIDFréchet Inception Distance与 ISInception Score的评估代码暂未开放复现 Section 6 完整指标时需要自行补充这两项评估工具。图像实验images/CIFAR-10 上的离散扩散模块组成与职责d3pm/images/README.md 给出了清晰的代码地图扩散过程实现diffusion_categorical.py——D3PM 前向/后向过程的全部逻辑包括转移矩阵构造、加噪、后验 logits 与训练损失训练循环与实验框架main.py 为主执行文件实例化所有组件其中Cifar10DiffusionModel继承自gm.TrainableModelentry_point.py 负责搭建训练任务、解析命令行参数如--experiment_dir、--work_unit_dirgm.py 实现通用的可训练模型基类与训练循环模型与数据config.py 构造实验配置对象model.py 用 Flax 实现unet0模型UNetdatasets.py 提供 CIFAR-10 数据集访问支持CIFAR10与MockCIFAR10两种名称工具utils.py 提供各类辅助函数。前向过程的核心选择三种转移矩阵类型CategoricalDiffusion.__init__通过transition_mat_type参数决定前向腐蚀方式diffusion_categorical.pyuniform均匀转移_get_transition_mat构造行和为 1 的矩阵对角线保留概率其余概率均匀分配给其他状态配合transition_bands参数可实现带状转移band-diagonal即只允许向像素值相差transition_bands以内的状态转移diffusion_categorical.pygaussian类高斯转移_get_gaussian_transition_mat用softmax(-val^2/beta_t)生成随距离衰减的转移权重模拟连续高斯扩散在离散空间中的对应物并归一化为近似双随机矩阵以获得均匀平稳分布diffusion_categorical.pyabsorbing吸收态转移_get_absorbing_transition_mat将概率质量逐步注入一个固定吸收态像素值num_pixel_vals//2对应 mask 式的扩散配合 jsd 调度可保证最终时刻以概率 1 到达吸收态diffusion_categorical.py。噪声调度beta schedule的三种类型get_diffusion_betas按spec.type返回三套噪声系数序列diffusion_categorical.pylinearnp.linspace(start, stop, num_timesteps)即 Ho 等人在 DDPM 中使用的线性调度官方注释建议配合transition_mat_typegaussian使用cosineHoogeboom 等人提出的余弦调度官方注释建议配合transition_mat_typeuniform使用jsd取1/T, 1/(T-1), ..., 1由 Sohl-Dickstein 等人提出可保证向吸收态衰变的概率随时间线性增长、并在最终时刻达到 1官方注释建议配合transition_mat_typeabsorbing使用。CategoricalDiffusion构造时还会校验betas必须为 NumPy 数组且每个元素落在开区间(0, 1]否则抛出ValueError。配置模板解读一张表看全关键参数d3pm/images/config.py 中的get_config()返回ml_collections.ConfigDict是图像实验的默认配置也是理解 D3PM 超参数语义的最佳入口分组参数默认值说明datasetnameCIFAR10数据集名称也支持MockCIFAR10dataset.argsclass_conditional/randflipFalse/True是否类别条件生成 / 是否随机翻转增强modelnameunet0架构名main.py中映射到model.UNetmodel.argsch/out_ch/ch_mult128/3/[1,2,2,2]UNet 基础通道数、输出通道数、每层通道倍数model.argsnum_res_blocks/attn_resolutions/num_heads2/[16]/1残差块数、注意力分辨率、注意力头数model.argsdropout/model_output0.1/logistic_pars丢弃率模型输出形式可选logits或logistic_parsmodel.diffusion_betastype/start/stop/num_timestepslinear/1e-4/0.02/1000调度类型与区间端点、扩散总步数注释提示 1e-4/0.02 对应 gaussian0.02/1. 对应 uniformmodelmodel_predictionx_start模型预测目标可选x_start或xprevmodeltransition_mat_typegaussian转移矩阵类型gaussian/uniform/absorbingmodeltransition_bandsNone带状转移带宽None表示全连接转移modelloss_typehybrid损失类型kl/cross_entropy_x_start/hybridmodelhybrid_coeff0.001仅hybrid损失使用trainbatch_size/optimizer/learning_rate128/adam/2e-4优化器与学习率trainema_decay/grad_clip/weight_decay0.9999/1.0/0.0EMA 衰减、梯度裁剪、权重衰减trainsubsteps/num_train_steps10/1500000梯度累积子步数总训练步数须为substeps的倍数trainlog_loss_every_steps/eval_every_steps1000/50000日志与评估频率traincheckpoint_every_secs/retain_checkpoint_every_steps900/100000检查点保存间隔秒与长期保留频率main.py的Cifar10DiffusionModel在初始化时还会做几项一致性断言num_train_steps必须为substeps的倍数retain_checkpoint_every_steps同样必须整除substeps同时把max_time模型的时间嵌入维度与diffusion_betas.num_timesteps对齐并把num_pixel_vals设为2^num_bits 256。损失与评估KL / 交叉熵 / 混合损失loss_fnmain.py把输入图像转为int32后调用make_diffusion得到扩散对象再通过dif.training_losses(...)计算训练损失。loss_type支持三种模式纯 KL 散度kl、对x_start的交叉熵cross_entropy_x_start、以及两者加权混合hybrid权重由hybrid_coeff控制。评估阶段trainFalse会额外通过calc_bpd_loop计算逐时间步的 bits-per-dimension 分解total_bpd、prior_bpd、vbtermsprior_bpd即先验项 BPD这是论文 Section 6 的核心评估指标。采样入口为samples_fnmain.py通过p_sample_loop执行完整的反向去噪采样最终输出形状为samples_shape、取值在[0, 255]的整数图像并转回float32。文本实验text/LM1B 与 text8 上的 D3PMd3pm/text/README.md 说明该模块默认支持LM1B与text8两个数据集LM1B 由 TFDS 直接提供text8 需自行下载原始来源为 mattmahoney.net 的 text8.zip既可以手动解压到data/目录也可以让数据加载器自动下载。模块结构与图像模块一一对应扩散过程diffusion.py——文本空间扩散实现。该文件体量远大于图像版3300 行采用抽象基类DiscreteDiffusionBasegin 可配置modulejump统一各种矩阵噪声调度并定义了DiffusionSchedule与MutualInformationSchedule等调度封装还通过gin.external_configurable暴露了Precision.HIGHEST等数值精度选项diffusion.py训练框架main.py 为主执行文件trainers.py 实现通用可训练模型与训练循环模型与数据configs.py 用gin以编程方式生成配置与超参扫描gin_load支持按空格分隔传入多个 config 函数并合并models.py 实现核心 Transformer 模型datasets.py 提供 text8 与 LM1B 访问preprocessors.py 负责 tokenization 等预处理辅助模块types.py定义常用类型与数据结构utils.py提供工具函数另有losses.py、metrics.py、tasks.py分别承担损失、指标与任务定义并配套losses_test.py、diffusion_test.py、model_utils_test.py、utils_test.py等测试。文本模块与图像模块共享同一套 D3PM 思想但实现更工程化以 gin config 驱动、基于DiscreteDiffusionBase的抽象接口可以自由替换调度与转移矩阵便于论文 Section 5 中针对文本符号的多种腐蚀策略做系统对比。插入与删除扩展insertdelete/超越就地腐蚀d3pm/insertdelete/README.md 对应 ICML 2021 INNF workshop 论文「Beyond In-Place Corruption: Insertion and Deletion In Denoising Probabilistic Models」。与前面两个模块最大的不同是前向过程不再仅仅对已有 token 做就地替换腐蚀而是允许插入新 token、删除已有 token使序列长度在扩散过程中动态变化。该模块的代码组织如下主逻辑forward_process.py 基于**概率有限状态转录机Probabilistic Finite State Transducers, PFST**构建、采样前向过程并执行推理。其关键技巧是引入sentinels哨兵标记通过在任意相邻序列对之间强制建立唯一对齐使得插入/删除概率的计算大幅简化文件中给出了 t1 到 t4 逐步插入DEL/INS哨兵的示例transition_operator.py 定义处理内层马尔可夫转移矩阵的各类算子schedules.py 提供构建扩散调度的辅助类与函数决定前向过程的混合速度training_setup.py 是训练损失与调度构建的顶层代码。需要特别说明由于对非开源库存在依赖该文件以黑盒模型预测函数的形式发布暂不包含模型本身的构建与训练逻辑工具模块distributions.py 实现前向过程涉及的多种概率分布dynamic_programs.py 包含用 JAX 实现的动态规划计算可支撑更昂贵的推理步骤训练阶段未使用math_util.py 与 util.py 提供数学与通用工具函数。交互式教程 Notebook该模块附带一个交互式引导 NotebookInsertion_and_Deletion_Forward_Process_Guide.ipynb用于可视化和探索插入-删除前向过程是理解哨兵对齐机制与 PFST 思想的最佳上手材料。环境安装与运行验证依赖清单d3pm/requirements.txt 固定了完整依赖版本核心包括jax0.3.14、jaxlib0.3.14、flax0.5.1、ml_collections0.1.1、clu0.0.9、gin-config0.5.0、tensorflow2.8.0、tensorflow-datasets4.9.2、chex0.1.6、seqio0.0.16、scipy1.10.1、numpy1.23.5以及通过 git 安装的flaxformer固定 commit与aqtp0.0.7等。建议在全新虚拟环境中按此清单安装以保证与代码的兼容性。一键验证脚本仓库提供了 d3pm/run.sh 作为冒烟测试脚本它依次完成创建 Python 3 虚拟环境并激活.venv_d3pm安装d3pm/requirements.txt中的全部依赖运行图像模块测试python -m d3pm.images.main_test运行文本模块测试python -m d3pm.text.main_test。脚本头部注释明确说明其目的是确保模型可以无错误地完成训练Make sure that the model can be trained without errors可作为环境就绪性的快速验证。图像模块还附带 main_test.py 与 main_test_config.py 作为配置与训练流程的测试样例。训练入口图像实验的训练入口为python -m d3pm.images.main其__main__调用entry_point.run(trainrun_train)配合--experiment_dir、--work_unit_dir等参数运行文本实验入口为python -m d3pm.text.main。两者均基于 Flax JAX 训练框架图像侧由ml_collections.config_flags注入配置文本侧由 gin config 驱动。引用与延伸阅读若在你的工作中使用本代码库请按仓库提供的 BibTeX 引用对应论文D3PM 主论文NeurIPS 2021austin2021structured作者 Jacob Austin、Daniel D. Johnson、Jonathan Ho、Daniel Tarlow、Rianne van den Berg插入删除扩展ICML 2021 INNF Workshopjohnson2021beyond作者 Daniel D. Johnson、Jacob Austin、Rianne van den Berg、Daniel Tarlow。两条引用条目均可在 d3pm/README.md 中直接复制使用。整体而言本仓库是三套可独立运行的 D3PM 参考实现图像版侧重经典的离散状态转移与 BPD 评估文本版提供更工程化的 gin 配置与 Transformer 骨架插入删除版则展示了如何用 PFST 与哨兵对齐把扩散过程推广到序列长度可变的场景——三者共同构成研究离散状态空间扩散模型的完整起点。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐深入解析IOPaint扩散模型从去噪扩散原理到图像修复实战深入解析IOPaint扩散模型从去噪扩散原理到图像修复实战 IOPaint是一个基于先进AI模型的免费开源图像修复工具它利用去噪扩散概率模型DDPM技术人工智能AI 应用计算机视觉图像处理媒体生成后端Diffusers VQDiffusionScheduler 深入解析向量量化扩散模型的离散 token 去噪调度器Diffusers VQDiffusionScheduler 深入解析向量量化扩散模型的离散 token 去噪调度器 导读 VQDiffusionSchedu人工智能深度学习媒体生成计算机视觉音频多模态预训练微调终极指南Stability AI扩散模型如何通过Sigma离散化将噪声转化为惊艳图像终极指南Stability AI扩散模型如何通过Sigma离散化将噪声转化为惊艳图像 Stability AI的generative models项目是AI图人工智能大模型深度学习媒体生成计算机视觉预训练上一篇macOS终极Windows启动盘制作神器WinDiskWriter完整指南下一篇gsocket快速入门5分钟学会搭建安全远程连接创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

管路消毒雾化装置设计:微米级粒径与压差闭环控制

管路消毒雾化装置设计:微米级粒径与压差闭环控制

简介:本资源是一份面向医疗器械研发人员、临床工程技术人员及医院消毒管理岗位人员的实用技术文档,聚焦解决呼吸机等管路类器械传统水洗或臭氧消毒对新冠病毒等耐药病原体消杀效果不足的痛点。文档详细阐述了一种便携式消毒液雾化装置的完整制作方法&…

2026/9/21 13:46:51 阅读更多 →
基于STM32的图书馆环境监测系统:从传感器驱动到数据存储的完整实战

基于STM32的图书馆环境监测系统:从传感器驱动到数据存储的完整实战

1. 项目缘起与整体设计思路1.1 为什么选择图书馆环境监测作为STM32练手项目图书馆这个场景很有意思。它不像工业现场那样对可靠性要求极端苛刻,也不像消费电子那样追求极致成本,但它对环境的要求其实相当具体:温度要稳定在22到26摄氏度之间&a…

2026/9/21 13:47:36 阅读更多 →
DEep MOdel GENeralization dataset(DEMOGEN):用 756 个真实训练模型研究深度网络泛化差距

DEep MOdel GENeralization dataset(DEMOGEN):用 756 个真实训练模型研究深度网络泛化差距

人工智能深度学习NLP计算机视觉强化学习 【免费下载链接】google-research Google Research 项目地址: https://gitcode.com/gh_mirrors/go/google-research 点击查看 免费下载 DEMOGEN(DEep MOdel GENeralization dataset)是 Google Resear…

2026/9/21 13:46:42 阅读更多 →

最新新闻

CANN ops-transformer FlashAttn 性能建模:D=256 下基本块 (M, N) 的选择与 Cube Bound 达成分析

CANN ops-transformer FlashAttn 性能建模:D=256 下基本块 (M, N) 的选择与 Cube Bound 达成分析

CANN ops-transformer FlashAttn 性能建模:D256 下基本块 (M, N) 的选择与 Cube Bound 达成分析 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-t…

2026/9/21 12:04:03 阅读更多 →
VSS横向扩展指南:如何把视频AI处理规模从单机扩展到生产级

VSS横向扩展指南:如何把视频AI处理规模从单机扩展到生产级

VSS横向扩展指南:如何把视频AI处理规模从单机扩展到生产级 【免费下载链接】video-search-and-summarization NVIDIA AI Blueprint for video search and summarization (VSS) is a GPU-accelerated reference architecture for building video analytics agents wi…

2026/9/21 12:02:56 阅读更多 →
MCP Python SDK 依赖注入实战:用 `Resolve` 让工具参数脱离模型幻觉

MCP Python SDK 依赖注入实战:用 `Resolve` 让工具参数脱离模型幻觉

MCP Python SDK 依赖注入实战:用 Resolve 让工具参数脱离模型幻觉 【免费下载链接】python-sdk The official Python SDK for Model Context Protocol servers and clients 项目地址: https://gitcode.com/gh_mirrors/pythonsd/python-sdk 在 MCP&#xff08…

2026/9/21 12:02:56 阅读更多 →
Foam for VS Code 深度指南:用 Markdown + Wikilinks 构建本地优先的个人知识库

Foam for VS Code 深度指南:用 Markdown + Wikilinks 构建本地优先的个人知识库

Foam for VS Code 深度指南:用 Markdown Wikilinks 构建本地优先的个人知识库 【免费下载链接】foam A personal knowledge management and sharing system for VSCode 项目地址: https://gitcode.com/gh_mirrors/fo/foam Foam 是一款运行在 VS Code 之内的…

2026/9/21 12:02:56 阅读更多 →
Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一

Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一

Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一 【免费下载链接】nix Nix, the purely functional package manager 项目地址: https://gitcode.com/gh_mirrors/ni/nix 导读 本文基于 Nix 官方发布说明 rl-1.11.md,系…

2026/9/21 12:01:54 阅读更多 →
Torchvision 内部代码同步脚本 fbcode_to_main_sync.sh 使用指南:将 fbsync 分支变更批量落地为开源 PR

Torchvision 内部代码同步脚本 fbcode_to_main_sync.sh 使用指南:将 fbsync 分支变更批量落地为开源 PR

计算机视觉深度学习图像处理数据集 【免费下载链接】vision Datasets, Transforms and Models specific to Computer Vision 项目地址: https://gitcode.com/gh_mirrors/vi/vision 点击查看 免费下载 本篇文章围绕 scripts/README.rst 所记载的唯一实用脚本 fbcode…

2026/9/21 12:01:54 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →