)
人工智能深度学习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),仅供参考