【论文阅读】Denoising Diffusion Probabilistic Models (DDPM)详细解析及公式推导

摘要

使用扩散概率模型(一类受非平衡热力学启发的潜变量模型)展示了高质量的图像合成结果。作者最佳的结果是通过在加权变分界上进行训练获得的,该界是根据扩散概率模型与带朗之万动力学的去噪分数匹配之间的新型联系设计的,并且作者的模型自然地支持一种渐进式有损解压方案,这可以被解释为自回归解码的推广。在无条件 CIFAR10 数据集上,作者获得了 9.46 的 Inception 分数和 3.17 的最先进 FID 分数。在 256x256 的 LSUN 数据集上,作者获得了与 ProgressiveGAN 相似的样本质量。我们的实现可在 https://github.com/hojonathanho/diffusion 获取。

核心思想解析

Denoising Diffusion Probabilistic Models (DDPM) 是一种基于扩散过程的生成模型,通过逐步添加和去除噪声实现数据生成。其核心分为前向扩散(加噪)和反向扩散(去噪)两个过程,最终学习从噪声中重构数据。

在这里插入图片描述

重参数化

在这里插入图片描述

前向扩散过程

前向过程将数据逐渐转化为高斯噪声,每一步根据预设的噪声调度参数 βt\beta_tβt​ 添加噪声。给定数据 x0x_0x0​,第 ttt 步的加噪结果 xtx_txt​ 服从以下分布:
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI) q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) q(xt​∣xt−1​)=N(xt​;1−βt​​xt−1​,βt​I)
通过重参数化技巧,可直接从 x0x_0x0​ 计算任意 ttt 步的噪声数据:
xt=αˉtx0+1−αˉtϵ x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon xt​=αˉt​​x0​+1−αˉt​​ϵ
其中 αt=1−βt\alpha_t = 1-\beta_tαt​=1−βt​,αˉt=∏s=1tαs\bar{\alpha}_t = \prod_{s=1}^t \alpha_sαˉt​=∏s=1t​αs​,ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, \mathbf{I})ϵ∼N(0,I)。

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

反向扩散过程

反向过程通过神经网络学习逐步去噪。模型预测噪声 ϵθ\epsilon_\thetaϵθ​ 以重构数据,目标是最小化以下损失函数:
L=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2] \mathcal{L} = \mathbb{E}_{t,x_0,\epsilon}\left[\|\epsilon - \epsilon_\theta(x_t,t)\|^2\right] L=Et,x0​,ϵ​[∥ϵ−ϵθ​(xt​,t)∥2]
去噪每一步的均值和方差通过以下公式计算:
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t)) p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t,t), \Sigma_\theta(x_t,t)) pθ​(xt−1​∣xt​)=N(xt−1​;μθ​(xt​,t),Σθ​(xt​,t))
其中 μθ\mu_\thetaμθ​ 通常由预测噪声 ϵθ\epsilon_\thetaϵθ​ 推导得出。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

训练与生成步骤

训练阶段

  1. 从数据集中采样 x0x_0x0​,随机选择时间步 ttt。
  2. 生成噪声 ϵ\epsilonϵ 并计算 xtx_txt​。
  3. 训练神经网络 ϵθ\epsilon_\thetaϵθ​ 预测噪声,优化均方误差损失。

生成阶段

  1. 从高斯噪声 xTx_TxT​ 开始,逐步去噪至 x0x_0x0​。
  2. 每一步使用 ϵθ\epsilon_\thetaϵθ​ 预测噪声,并通过采样得到 xt−1x_{t-1}xt−1​。

关键改进与扩展

  • 噪声调度:线性或余弦调度的 βt\beta_tβt​ 影响训练稳定性和生成质量。
  • 加速采样:DDIM(Denoising Diffusion Implicit Models)通过非马尔可夫链加速生成。
  • 条件生成:通过分类器引导或嵌入条件信息实现可控生成。

代码实现要点

# 噪声预测网络结构(U-Net为例)classUNet(nn.Module):def__init__(self):super().__init__() self.time_embed = nn.Sequential( nn.Linear(embed_dim, time_emb_dim), nn.SiLU(), nn.Linear(time_emb_dim, time_emb_dim)) self.down_blocks = nn.ModuleList([DownsampleBlock(...)for _ inrange(num_layers)]) self.up_blocks = nn.ModuleList([UpsampleBlock(...)for _ inrange(num_layers)])# 训练循环核心步骤deftrain_step(x0, t): noise = torch.randn_like(x0) xt = sqrt_alphas_cumprod[t]* x0 + sqrt_one_minus_alphas_cumprod[t]* noise predicted_noise = model(xt, t) loss = F.mse_loss(predicted_noise, noise)return loss 

数学推导补充

反向过程的真实后验分布 q(xt−1∣xt,x0)q(x_{t-1}|x_t,x_0)q(xt−1​∣xt​,x0​) 可解析计算为:
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI) q(x_{t-1}|x_t,x_0) = \mathcal{N}(x_{t-1}; \tilde{\mu}_t(x_t,x_0), \tilde{\beta}_t\mathbf{I}) q(xt−1​∣xt​,x0​)=N(xt−1​;μ~​t​(xt​,x0​),β~​t​I)
其中:
μ~t=αˉt−1βt1−αˉtx0+αt(1−αˉt−1)1−αˉtxt \tilde{\mu}_t = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}x_0 + \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}x_t μ~​t​=1−αˉt​αˉt−1​​βt​​x0​+1−αˉt​αt​​(1−αˉt−1​)​xt​
β~t=1−αˉt−11−αˉtβt \tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t β~​t​=1−αˉt​1−αˉt−1​​βt​
模型通过拟合 μ~t\tilde{\mu}_tμ~​t​ 实现去噪。

Read more

积木报表快速入门指南:零基础轻松上手数据可视化【低代码报表设计器】

积木报表快速入门指南:零基础轻松上手数据可视化【低代码报表设计器】

文章目录 * 前言 * 一、积木报表简介 * 二、环境准备 * 1. 下载积木报表 * 2. 运行环境要求 * 3. 快速启动(以Docker方式为例) * 三、第一个报表创建实战 * 1. 登录系统 * 2. 选择数据源 * 3. 设计报表 * 四、进阶功能快速上手 * 1. 图表集成 * 2. 参数传递 * 3. 分组与汇总 * 4. 导出与打印 * 五、实用技巧与最佳实践 * 1. 性能优化: * 2. 模板复用: * 3. 移动端适配: * 4. 定时任务: * 六、常见问题解答 * Q1:积木报表支持哪些数据库? * Q2:如何实现复杂的中国式报表? * Q3:能否集成到自己的系统中? * Q4:

OpenClaw 接入飞书机器人保姆级教程

OpenClaw 接入飞书机器人保姆级教程

如果你的 OpenClaw 已完成初始部署、WebUI 可正常收发回复,现在想接入飞书机器人,这篇教程会带你从创建机器人到配置完成,一步到位。 相信你在部署 OpenClaw 时已经踩过不少坑,这篇文章会帮你尽量避开飞书对接中的常见问题,少走弯路。废话不多说,教程正式开始!原文地址 内置飞书插件 如果您使用的是最新版本的 OpenClaw那么已经内置了 Feishu 插件,通常不需要让我们单独进行安装。 如果您使用的是之前比较旧的版本,或者是没有内置的 Feishu 的插件,可以手动进行安装,执行下方命令: 创建飞书机器人 我们先来创建飞书的应用,我们可以复制下方地址进行一键直达 创建企业自建应用 打开后,我们点击【创建企业自建应用】,如果您还没有飞书账号的话,请先注册飞书的账号后再进行创建应用 我们创建企业自建应用然后输入应用名称和应用描述,还有应用图标,我们都可以自定义进行上传,或者选择其他照片当作应用图标。输入完之后我们点击创建 获取 AppID 和 AppSecret 我们点击凭证与基础信息一栏查看我们的App ID 和 App

Yolo11 基于DroneVehicle数据集的无人机视角下车辆目标检测

Yolo11 基于DroneVehicle数据集的无人机视角下车辆目标检测

1、关于DroneVehicle数据集介绍 DroneVenicle数据集是由天津大学收集、标注的大型无人机航拍车辆数据集。 DroneVehicle 数据集由无人机采集的共 56,878 幅图像组成,其中一半为 RGB 图像,其余为红外图像。我们对五个类别进行了带有方向性边界框的丰富标注。其中,汽车car 在 RGB 图像中有 389,779 个标注,在红外图像中有 428,086 个标注;卡车truck 在 RGB 图像中有 22,123 个标注,在红外图像中有 25,960 个标注;公交车bus 在 RGB 图像中有 15,333 个标注,在红外图像中有 16,590 个标注;面包车van 在

企业级工作流引擎低代码开发实战指南:RuoYi-Flowable-Plus全攻略

企业级工作流引擎低代码开发实战指南:RuoYi-Flowable-Plus全攻略 【免费下载链接】RuoYi-Flowable-Plus本项目基于 RuoYi-Vue-Plus 进行二次开发扩展Flowable工作流功能,支持在线表单设计和丰富的工作流程设计能力。如果觉得这个项目不错,麻烦点个star🌟。 项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-Flowable-Plus RuoYi-Flowable-Plus是基于RuoYi-Vue-Plus二次开发的开源工作流框架,融合Flowable引擎与可视化流程设计能力,为企业级应用提供低代码工作流解决方案。本文将从项目定位、核心能力到部署实践,全方位解析这款框架的技术架构与应用场景,帮助开发者快速构建企业级工作流系统。 1. 项目定位:企业级工作流解决方案的技术选型 在数字化转型浪潮中,企业对流程自动化的需求日益迫切。RuoYi-Flowable-Plus定位为"开箱即用的企业级工作流引擎",基于成熟的Spring Boot生态与Flowable BPMN 2.0引擎,提供从流