【论文阅读】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

RTX 4090 加速国产 AIGC 视频生成:腾讯混元与阿里千问开源模型

RTX 4090 加速国产 AIGC 视频生成:腾讯混元与阿里千问开源模型

国产AIGC视频大模型正加速落地,RTX 4090凭借强大算力与大显存,成为本地部署腾讯混元、阿里通义万相等前沿视频生成模型的最佳选择,开启桌面级AI创作新时代。 目录 * 一、引言:国产AIGC视频大模型,桌面算力的新疆域 * 二、解锁潜能:RTX 4090与国产视频大模型的协同优势 * 三、项目解析:国产AIGC视频模型的创新之路 * 四、部署与环境搭建:国产模型的本地化实践 * 4.1 基础环境准备 * 4.2 模型部署流程:腾讯混元与阿里通义万相的本地化实战 * 4.3 ComfyUI 集成与优化 * 五、性能测试与对比:RTX 4090 的硬核实力 * 5.1 生成速度实测 (fps / s/frame) * 5.2 显存消耗与优化策略 * 六、实际应用场景:国产模型赋能创意工作流 * 七、

超越代码生成器:深度解析Triton-Copilot的人机协同设计哲学

超越代码生成器:深度解析Triton-Copilot的人机协同设计哲学 最近和几位负责底层性能优化的同事聊天,大家普遍有个共鸣:现在做高性能算子开发,感觉像是在走钢丝。一边是模型复杂度指数级增长带来的性能压力,另一边是手写CUDA或Triton代码那令人望而生畏的学习曲线和调试成本。资深专家忙得脚不沾地,而应用层开发者面对性能瓶颈往往束手无策,只能干等着排期。这种“专家依赖症”已经成为AI工程化落地的一个典型瓶颈。 正是在这种背景下,我第一次接触到Triton-Copilot。起初我以为它不过是又一个“智能代码补全”工具,但深入使用和剖析其架构后,我发现它的野心远不止于此。它不像ChatGPT那样,你问一句“写个矩阵乘法的Triton代码”,它给你一段可能能跑、但性能和正确性都无法保证的文本。Triton-Copilot构建的,是一套完整的、以验证和协作为核心的软件开发新范式。它试图回答一个根本性问题:如何将人类专家的领域知识(比如对硬件内存层次的理解、对数值稳定性的把握)与AI的代码生成和探索能力系统性地结合起来,而不仅仅是让AI“模仿”人类写代码? 这篇文章,我想从一个系统设

LLaMA-Factory全流程训练模型

LLaMA-Factory全流程训练模型

🤗本文主要讲述在docker下使用LLaMA-Factory训练推理模型。 🫡拉取镜像 首先需要启动docker,然后在终端中输入: docker run -tid --gpus all -p 8000:8000 --name LLM -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --privileged=true ubuntu:20.04 * 这个命令启动了一个 Ubuntu 20.04 容器,使用所有可用的 GPU * 主机的 8000 端口映射到容器的 8000 端口 * 容器命名为 LLM,以特权模式运行容器 进入容器  docker exec -it LLM

【30天从零玩转AI应用开发】第2篇:大模型API注册+调用实战

【30天从零玩转AI应用开发】第2篇:大模型API注册+调用实战

文章目录 * 前言 * 【30天从零玩转AI应用开发】第2篇:大模型API注册+调用实战(OpenAI/文心一言/通义千问) * 专栏副标题 * 专栏简介 * 摘要 * 关键词 * 前言 * 一、3大主流大模型API对比(新手必看) * 新手选择建议(避坑指南): * 二、API注册+密钥获取(文字版超详细指南) * 2.1 OpenAI注册+密钥获取(含避坑技巧) * 准备工具: * 注册步骤(每一步都标清按钮位置): * 避坑技巧: * 2.2 百度文心一言注册+密钥获取(10分钟搞定) * 准备工具: * 注册步骤: * 关键提醒: * 2.3 阿里通义千问注册+密钥获取 * 准备工具: * 注册步骤: * 三、API调用实战(Python代码可直接复制) * 3.