扩散模型的优化过程,主要的公式推导,主要是熟悉一下整体的理论框架

核心思想与定义

扩散模型的核心思想是:学习一个去噪过程,以逆转一个固定的加噪过程

  1. 前向过程(固定): 定义一个马尔可夫链,逐步向数据 x0∼q(x0)\mathbf{x}_0 \sim q(\mathbf{x}_0)x0q(x0) 添加高斯噪声,产生一系列噪声逐渐增大的隐变量 x1,...,xT\mathbf{x}_1, ..., \mathbf{x}_Tx1,...,xT。最终 xT\mathbf{x}_TxT 近似为一个标准高斯分布。
    q(x1:T∣x0)=∏t=1Tq(xt∣xt−1),其中q(xt∣xt−1)=N(xt;1−βtxt−1,βtI) q(\mathbf{x}_{1:T} | \mathbf{x}_0) = \prod_{t=1}^T q(\mathbf{x}_t | \mathbf{x}_{t-1}), \quad \text{其中} \quad q(\mathbf{x}_t | \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t \mathbf{I}) q(x1:Tx0)=t=1Tq(xtxt1),其中q(xtxt1)=N(xt;1βtxt1,βtI)
    这里 {βt}t=1T\{\beta_t\}_{t=1}^T{βt}t=1T 是预先定义好的方差调度表。

  2. 反向过程(可学习): 我们想要学习一个参数化的反向马尔可夫链 pθp_\thetapθ,从噪声 xT∼N(0,I)\mathbf{x}_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I})xTN(0,I) 开始,逐步去噪以生成数据。
    pθ(x0:T)=p(xT)∏t=1Tpθ(xt−1∣xt),其中pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t)) p_\theta(\mathbf{x}_{0:T}) = p(\mathbf{x}_T) \prod_{t=1}^T p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t), \quad \text{其中} \quad p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mathbf{\mu}_\theta(\mathbf{x}_t, t), \mathbf{\Sigma}_\theta(\mathbf{x}_t, t)) pθ(x0:T)=p(xT)t=1Tpθ(xt1xt),其中pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))
    我们的目标是让 pθ(x0)p_\theta(\mathbf{x}_0)pθ(x0) 尽可能接近真实数据分布 q(x0)q(\mathbf{x}_0)q(x0)

  3. 前向过程的闭式解: 得益于高斯分布的可加性,我们可以直接从 x0\mathbf{x}_0x0 采样任意时刻 tttxt\mathbf{x}_txt
    q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I) q(\mathbf{x}_t | \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1 - \bar{\alpha}_t)\mathbf{I}) q(xtx0)=N(xt;αˉtx0,(1αˉt)I)
    其中 αt=1−βt\alpha_t = 1 - \beta_tαt=1βt, αˉt=∏i=1tαi\bar{\alpha}_t = \prod_{i=1}^t \alpha_iαˉt=i=1tαi。使用重参数化技巧,可以写为:
    xt=αˉtx0+1−αˉtϵ,其中ϵ∼N(0,I) \mathbf{x}_t = \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \mathbf{\epsilon}, \quad \text{其中} \quad \mathbf{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xt=αˉtx0+1αˉtϵ,其中ϵN(0,I)
    这个公式至关重要,它允许我们随机采样时间步 ttt 并高效地计算训练损失。


优化目标:变分下界 (VLB/ELBO)

我们的目标是最大化模型生成真实数据的对数似然 log⁡pθ(x0)\log p_\theta(\mathbf{x}_0)logpθ(x0)。由于其难以直接计算,我们转而最大化其变分下界(VLB),也称为证据下界(ELBO)。

log⁡pθ(x0)≥Eq(x1:T∣x0)[log⁡pθ(x0:T)q(x1:T∣x0)]=Eq[log⁡p(xT)∏t=1Tpθ(xt−1∣xt)∏t=1Tq(xt∣xt−1)]≜−LVLB \begin{aligned} \log p_\theta(\mathbf{x}_0) &\geq \mathbb{E}_{q(\mathbf{x}_{1:T} | \mathbf{x}_0)} \left[ \log \frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T} | \mathbf{x}_0)} \right] \\ &= \mathbb{E}_{q} \left[ \log \frac{ p(\mathbf{x}_T) \prod_{t=1}^T p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) }{ \prod_{t=1}^T q(\mathbf{x}_t | \mathbf{x}_{t-1}) } \right] \\ &\triangleq -L_{\text{VLB}} \end{aligned} logpθ(x0)Eq(x1:Tx0)[logq(x1:Tx0)pθ(x0:T)]=Eq[logt=1Tq(xtxt1)p(xT)t=1Tpθ(xt1xt)]LVLB
因此,我们最小化 LVLBL_{\text{VLB}}LVLB

通过对 LVLBL_{\text{VLB}}LVLB 进行推导(利用马尔可夫性和贝叶斯定理),可以将其分解为以下几项:

LVLB=Eq[DKL(q(xT∣x0)∥p(xT))⏟LT−log⁡pθ(x0∣x1)⏟L0+∑t=2TDKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))⏟Lt−1] L_{\text{VLB}} = \mathbb{E}_q [\underbrace{D_{\text{KL}}(q(\mathbf{x}_T | \mathbf{x}_0) \parallel p(\mathbf{x}_T))}_{L_T} - \underbrace{\log p_\theta(\mathbf{x}_0 | \mathbf{x}_1)}_{L_0} + \sum_{t=2}^T \underbrace{D_{\text{KL}}(q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) \parallel p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t))}_{L_{t-1}} ] LVLB=Eq[LTDKL(q(xTx0)p(xT))L0logpθ(x0x1)+t=2TLt1DKL(q(xt1xt,x0)pθ(xt1xt))]

  • LTL_TLT: 衡量最终噪声分布与先验分布 N(0,I)\mathcal{N}(\mathbf{0}, \mathbf{I})N(0,I) 的差异。此项没有可学习参数,接近于0,可以忽略。
  • L0L_0L0: 重建项,衡量最后一步生成图像与真实图像的差异。此项在原始DDPM中通过一个离散化decoder处理,实践中发现其影响较小。
  • Lt−1L_{t-1}Lt1 (1≤t≤T1 \le t \le T1tT): 这是最关键的一项。它衡量的是对于每一个去噪步,真实的去噪分布 q(xt−1∣xt,x0)q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0)q(xt1xt,x0)学习的去噪分布 pθ(xt−1∣xt)p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t)pθ(xt1xt) 之间的KL散度。

核心推导:真实的后验分布 q(xt−1∣xt,x0)q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0)q(xt1xt,x0)

根据贝叶斯定理和马尔可夫性,我们可以推导出这个真实的后验分布。它也是一个高斯分布,这意味着我们可以用另一个高斯分布 pθp_\thetapθ 去匹配它。

q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)∝N(xt;αtxt−1,(1−αt)I)⋅N(xt−1;αˉt−1x0,(1−αˉt−1)I) \begin{aligned} q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) &= \frac{q(\mathbf{x}_t | \mathbf{x}_{t-1}, \mathbf{x}_0) q(\mathbf{x}_{t-1} | \mathbf{x}_0)}{q(\mathbf{x}_t | \mathbf{x}_0)} \\ &\propto \mathcal{N}(\mathbf{x}_t; \sqrt{\alpha_t} \mathbf{x}_{t-1}, (1 - \alpha_t)\mathbf{I}) \cdot \mathcal{N}(\mathbf{x}_{t-1}; \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0, (1 - \bar{\alpha}_{t-1})\mathbf{I}) \end{aligned} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)N(xt;αtxt1,(1αt)I)N(xt1;αˉt1x0,(1αˉt1)I)

经过一系列高斯分布密度函数的乘积和配方,可以得出其均值和方差为:

q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \mathbf{\tilde{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)

其中μ~t(xt,x0)=1αt(xt−βt1−αˉtϵ),β~t=1−αˉt−11−αˉtβt \text{其中} \quad \mathbf{\tilde{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}} \mathbf{\epsilon} \right), \quad \tilde{\beta}_t = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t 其中μ~t(xt,x0)=αt1(xt1αˉtβtϵ),β~t=1αˉt1αˉt1βt

注意:这里 ϵ\mathbf{\epsilon}ϵ 是前向过程中添加到 x0\mathbf{x}_0x0 上生成 xt\mathbf{x}_txt 的噪声。这个 μ~t\mathbf{\tilde{\mu}}_tμ~t 的表达式非常关键!


简化损失函数:从均值预测到噪声预测

现在我们来看要最小化的 Lt−1L_{t-1}Lt1,它是两个高斯分布的KL散度。高斯分布的KL散度主要由其均值的差异主导(假设方差固定)。

Lt−1=Eq[DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))]=Eq[12σt2∥μ~t(xt,x0)−μθ(xt,t)∥2]+C \begin{aligned} L_{t-1} &= \mathbb{E}_q \left[ D_{\text{KL}}(q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) \parallel p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t)) \right] \\ &= \mathbb{E}_q \left[ \frac{1}{2\sigma_t^2} \| \mathbf{\tilde{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) - \mathbf{\mu}_\theta(\mathbf{x}_t, t) \|^2 \right] + C \end{aligned} Lt1=Eq[DKL(q(xt1xt,x0)pθ(xt1xt))]=Eq[2σt21μ~t(xt,x0)μθ(xt,t)2]+C

现在我们有两个选择:

  1. 让网络 μθ\mathbf{\mu}_\thetaμθ 直接预测均值 μ~t\mathbf{\tilde{\mu}}_tμ~t
  2. 根据 μ~t\mathbf{\tilde{\mu}}_tμ~t 的表达式,重新参数化模型。

DDPM选择了第二种方式,因为它效果更好。我们将 μ~t\mathbf{\tilde{\mu}}_tμ~t 的表达式代入:

μθ(xt,t)=1αt(xt−βt1−αˉtϵθ(xt,t)) \mathbf{\mu}_\theta(\mathbf{x}_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}} \mathbf{\epsilon}_\theta(\mathbf{x}_t, t) \right) μθ(xt,t)=αt1(xt1αˉtβtϵθ(xt,t))

这里,我们不再让网络预测均值,而是让它预测噪声 ϵ\mathbf{\epsilon}ϵ,即 ϵθ(xt,t)\mathbf{\epsilon}_\theta(\mathbf{x}_t, t)ϵθ(xt,t)。将这个表达式代入上面的损失函数,经过简化(忽略权重系数),我们得到最终极其简洁的损失函数

Lsimple=Ex0,t,ϵ∼N(0,I)[∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2] L_{\text{simple}} = \mathbb{E}_{\mathbf{x}_0, t, \mathbf{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})} \left[ \| \mathbf{\epsilon} - \mathbf{\epsilon}_\theta( \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \mathbf{\epsilon}, t ) \|^2 \right] Lsimple=Ex0,t,ϵN(0,I)[ϵϵθ(αˉtx0+1αˉtϵ,t)2]

这个损失函数的直观解释是:对于一张真实图像 x0\mathbf{x}_0x0,随机选择一个时间步 ttt,随机采样一个噪声 ϵ\mathbf{\epsilon}ϵ,构造出噪声图像 xt\mathbf{x}_txt。然后,我们训练一个网络 ϵθ\mathbf{\epsilon}_\thetaϵθ,让它根据 xt\mathbf{x}_txtttt 来预测出我们添加的噪声 ϵ\mathbf{\epsilon}ϵ。损失就是预测噪声和真实噪声之间的均方误差。


总结:优化流程

  1. 输入:从训练集中采样一张真实图像 x0\mathbf{x}_0x0
  2. 加噪
    • 均匀采样一个时间步 t∼Uniform(1,...,T)t \sim \text{Uniform}(1, ..., T)tUniform(1,...,T)
    • 从标准高斯分布采样噪声 ϵ∼N(0,I)\mathbf{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})ϵN(0,I)
    • 计算 xt=αˉtx0+1−αˉtϵ\mathbf{x}_t = \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \mathbf{\epsilon}xt=αˉtx0+1αˉtϵ
  3. 预测:将 xt\mathbf{x}_txtttt 输入神经网络 ϵθ\mathbf{\epsilon}_\thetaϵθ,得到其对噪声的预测 ϵθ(xt,t)\mathbf{\epsilon}_\theta(\mathbf{x}_t, t)ϵθ(xt,t)
  4. 优化:计算损失 L=∥ϵ−ϵθ∥2L = \| \mathbf{\epsilon} - \mathbf{\epsilon}_\theta \|^2L=ϵϵθ2,并通过梯度下降更新网络参数 θ\thetaθ
  5. 重复:重复步骤1-4直至收敛。

这个框架的巧妙之处在于,它将一个复杂的生成问题,分解为了 TTT 个相对简单的去噪问题。网络 ϵθ\mathbf{\epsilon}_\thetaϵθ 不需要一步生成完美图像,只需要在每一步完成一个更简单的任务:预测噪声。这使得训练非常稳定,也是扩散模型成功的核心原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95618.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字签名、数字证书、数字信封的概念与区别

要理解数字签名、数字证书、数字信封,核心是抓住它们各自的核心目标 —— 分别解决 “身份真实性与内容完整性”“公钥可信度”“数据机密性” 问题,且三者都基于 “非对称加密”(一对公钥、私钥,公钥公开、私钥保密,用…

Day35 网络协议与数据封装

day35 网络协议与数据封装 数据封装与协议结构 以太网MAC帧格式数据封装与传输流程 数据在传输过程中,从上层逐层封装到底层,最终通过物理介质发送。封装与传输的具体流程如下: 封装过程(从IP层到物理层) IP层&#xf…

Deeplizard深度学习课程(七)—— 神经网络实验

前言我们正在利用pytorch实现CNN。主要分为四个小部分:数据预处理、神经网络pytorch设计、训练神经网络 和 神经网络实验。在之前的章节中,我们已经完成了整个CNN框架的设计、训练与简单分析,本节将更进一步讨论神经网络处理过程中的细节问题…

STM32实践项目(激光炮台)

刚开始设想做一个上半部分可以上下180移动,下半部分底座360移动的激光炮台。于是便开始了实践。 所需材料清单: 序号 名称 数量 备注说明 1 面包板(Breadboard) 2 用于电路搭建和模块连接 2 杜邦线(公对公、公对母等) 若干 建议准备 30~50 根,方便连接 3 MB-102 电源模块…

不止是夹住,更是“感知”:Contactile GAL2触觉型夹爪实现自适应抓取

近日,专注于触觉传感与智能抓取技术的Contactile推出全新Contactile 触觉型夹爪 GAL2,这款集成先进传感技术的双指夹爪,凭借实时触觉反馈能力,为多行业智能抓取场景带来突破性解决方案。 Contactile 触觉型夹爪GAL2是一款多功能即…

Grafana - 监控磁盘使用率Variables使用

1 查询prometheus2 编辑grafana dashboard 2.1 配置变量2.2 配置多选2.3 配置legend2.4 优化显示 1 查询prometheus 指标名称描述node_filesystem_size_bytes文件系统总容量node_filesystem_avail_bytes用户可用空间node_filesystem_files_free剩余inode数量比如我们想看/目…

WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析10

上一篇:WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析9 如果有错误欢迎指正批评,在此只作为科普和参考。 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\iphlpapi.h 文章目录GetNetworkParams&#xff1a…

算法 --- 分治(归并)

分治(归并) 分治(特别是归并)算法适用于解决“整体求解依赖于子问题合并”且子问题相互独立的题目,其典型特征是能将大规模数据分解、递归求解,然后通过合并操作(这正是归并排序中‘归并’的精…

【程序人生】有梦想就能了不起,就怕你没梦想

梦想不是遥不可及的星辰,而是需要我们用脚步丈量的路途两年前的一个夏日,我在日记本上郑重地写下:"我要掌握Web开发,能够独立构建一个完整的Web应用。"那天是2023年6月8日,当时的我连Java和JavaScript都分不…

前端基础(四十二):非固定高度的容器实现折叠面板效果

效果展示源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…

发票、收据合并 PDF 小程序,报销上传 3 秒搞定

每到报销、报税、财务整理时&#xff0c;手里是不是总有一堆格式不一的票据&#xff1a; 聊天记录里的电子发票邮件附件中的 PDF 发票手机相册里的报销收据甚至还有零散的纸质票据扫描件 要上传或交给财务前&#xff0c;还得一个个整理、转换、排版&#xff0c;既耗时又容易出…

GitHub每日最火火火项目(9.4)

1. bytebot-ai / bytebot 项目名称&#xff1a;bytebot项目介绍&#xff1a;基于 TypeScript 开发&#xff0c;是一款自托管的 AI 桌面智能体&#xff0c;能通过自然语言命令自动化执行计算机任务&#xff0c;运行在容器化的 Linux 桌面环境中。它借助自然语言处理和 AI 技术&a…

MMORPG 游戏战斗系统架构

&#x1f30c; MMORPG 游戏战斗系统架构 引用&#xff1a; 游戏服务器同步技术解析&#xff08;C&#xff09;MMORPG移动同步与反外挂 虽然我已离开游戏行业&#xff0c;转而与几位成功的商人共同创业&#xff0c;投身于商用机器人领域&#xff0c;但坦诚地说&#xff0c;游戏…

【数学建模学习笔记】启发式算法:蒙特卡洛算法

蒙特卡洛模拟入门笔记&#xff1a;从原理到代码实践一、什么是蒙特卡洛模拟&#xff1f;蒙特卡洛模拟是一种通过大量随机实验来解决复杂问题的方法。简单说&#xff0c;就是用电脑模拟成千上万次随机事件&#xff0c;然后统计结果&#xff0c;以此估算一个问题的答案。举个生活…

20250904的学习笔记

一、封包与拆包1. 封包&#xff08;Packet Encapsulation&#xff09;封包 是指在发送数据时&#xff0c;将数据从高层协议封装到低层协议的过程。每经过一层协议&#xff0c;数据都会被加上相应的协议头&#xff08;有时也会加上协议尾&#xff09;&#xff0c;形成一个新的数…

STM32F4 + RT-Thread 实战指南:TIM10 硬件定时器驱动开发与 1 秒定时功能实现

目录前言一、STM32定时器10是个什么定时器&#xff1f;二、工程创建、环境配置三、程序代码四、运行前言 在rtthread中&#xff0c;STM32F4的定时器10有些驱动并不完整&#xff0c;对比与其它定时器在使用时需要手动的添加一些代码&#xff0c;我在使用上拆踩了一些坑&#xf…

echarts图库

环形图// 指定图表的配置项和数据this.option {// tooltip: {// trigger: item// },color: [#FFB32F, #FF5757, #57D5FF, #2FA8FF, #95FFF1], // 扇形区域以及列表颜色legend: {orient:vertical,//文字横向排itemGap:20,left: left,textStyle:{color: #F3F9FF,// fontSi…

进程(Process)全面概述

进程&#xff08;Process&#xff09;全面概述 本文档扩展了进程的定义、属性、生命周期、管理机制及示例&#xff0c;涵盖 task_struct 结构、进程链表、状态与优先级、fork 函数及其写时复制示例。 一、进程基本概念 进程&#xff1a;系统进行资源分配和调度的基本单位&#…

Java并发编程:sleep()与wait()核心区别详解

今天完成了实验室纳新网站的工作&#xff0c;大体功能都已经完善&#xff0c;也和前端测试过了&#xff0c;费了点时间&#xff0c;而且今天大部分时间在看langchain4j的东西&#xff0c;就简单复习一下八股&#xff0c;等会再复习一下算法题吧在Java并发编程中&#xff0c;sle…

AR眼镜在智能制造的应用方向和场景用例|阿法龙XR云平台

AR巡检在制造业的应用已形成覆盖设备维护、质量检测、安全监控和远程协作四大类别的成熟场景&#xff0c;不同制造领域的实践各具特色&#xff0c;为行业提供了宝贵参考。在汽车制造领域&#xff0c;AR 巡检主要应用于生产线设备维护和焊接质量检测。在汽车厂总装车间部署 AR 系…