Denoising Diffusion Probabilistic Models

news2025/7/11 17:40:09

目录

  • 概要
    • 前向过程
      • nice property
    • 逆向过程
  • 参数推导
    • 简化
  • 参考资料

概要

Denoising Diffusion Probabilistic Model(DDPM)是一个生成模型,给定一个目标分布,学习模型以便可以从目标分布中采样。
使用马尔科夫链建模。输入是噪声,通过神经网络逐步去噪,最终产生的输出符合目标分布。
生成的数据可以是任意的,可以是图像也可以语音。目前diffusion model主要用于图像生成,所以后面将以图像生成为例介绍。
在这里插入图片描述
diffusion model分为两个过程:

  1. 预定义前向过程(forward diffusion process):一步步往图像中加入噪声,直到图像变成纯噪声。该过程的形式和参数都是人为定义的。
  2. 需要学习逆向过程(reverse denoising diffusion process):一步步从纯噪声中去噪,直到得到图像。该过程用一个可学习的神经网络表示。

前向过程和逆向过程都分为 T T T步。图像的生成使用逆向过程。

diffusion model是隐变量模型 p θ ( x 0 ) : = ∫ p θ ( x 0 : T ) d x 1 : T p_\theta(\mathbf{x}_0):=\int p_\theta(\mathbf{x}_{0:T})d\mathbf{x}_{1:T} pθ(x0):=pθ(x0:T)dx1:T,其中 x 0 ∼ q ( x 0 ) \mathbf{x}_0\sim q(\mathbf{x}_0) x0q(x0)是可观测变量, x 1 ​ , x 2 , . . . , x T \mathbf{x}_1​,\mathbf{x}_2,...,\mathbf{x}_T x1,x2,...,xT是隐标量并且和可观测变量 x 0 \mathbf{x}_0 x0有相同的维度。

前向过程

真实数据的分布为 q ( x 0 ) q(\mathbf{x}_0) q(x0),前向过程是一个预定义的马尔科夫链,其中 q ( x t ∣ x t − 1 ) q(\mathbf{x}_t | \mathbf{x}_{t-1}) q(xtxt1)加入高斯噪声:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) 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(xtxt1)=N(xt;1βt xt1,βtI)其中 0 < β 1 ​ < β 2 < . . . < β T < 1 0<\beta_1​<\beta_2<...<\beta_T<1 0<β1<β2<...<βT<1是预定义的数值,可以用不同的variance schedule定义。
q ( x 0 ) q(\mathbf{x}_0) q(x0)开始,逐步加入高斯噪声,生成 x 1 ​ , x 2 , . . . , x T \mathbf{x}_1​,\mathbf{x}_2,...,\mathbf{x}_T x1,x2,...,xT。如果variance schedule的选择合适, x T \mathbf{x}_T xT将是纯高斯噪声。

nice property

根据我们定义的前向过程,一个好的性质是 x t \mathbf{x}_t xt可以直接采样从 x 0 \mathbf{x}_0 x0采样得到(高斯的和已经是高斯),而不需要一步一步地采样:
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 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;αˉt x0,(1αˉt)I)其中 α t : = 1 − β t , α ˉ t : = Π s = 1 t α s \alpha_t :=1−\beta_t, \bar{\alpha}_t := \Pi_{s=1}^{t} \alpha_s αt:=1βt,αˉt:=Πs=1tαs
因为 β t \beta_t βt是variance schedule定义的,所以 α t \alpha_t αt也都是已知的。

逆向过程

逆向过程被定义为一个从 p ( x T ) = N ( x T ; 0 , I ) p(\mathbf{x}_T)=\mathcal{N}(\mathbf{x}_T;\mathbf{0},\mathbf{I}) p(xT)=N(xT;0,I)出发的马尔科夫链。
前向过程的形式和参数都是预定义的,但后向过程 p ( x t − 1 ∣ x t ) p(\mathbf{x}_{t-1} | \mathbf{x}_t) p(xt1xt)的形式和参数未知的,因为要计算这个条件概率需要知道所有可观测变量的分布。
我们使用一个神经网络来近似这个条件概率,近似概率用 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) pθ(xt1xt)表示,其中 θ \theta θ是神经网络的参数,使用梯度下降法优化。
我们并不知道 p ( x t − 1 ∣ x t ) p(\mathbf{x}_{t-1} | \mathbf{x}_t) p(xt1xt)的形式和参数,这里我们假设它是高斯的。高斯分布有两个参数,分别是均值 μ θ \mu_\theta μθ和方差 Σ θ \Sigma_\theta Σθ,所以逆向过程可以表示为:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_{t})=\mathcal{N}(\mathbf{x}_{t-1} ; \mu_\theta(\mathbf{x}_{t},t),\Sigma_\theta(\mathbf{x}_{t},t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))使用神经网络学习均值和方差。特别地,DDPM的作者将方差固定为常数,只学习均值。

参数推导

参数推导推导的是逆向过程中的参数。
diffusion model是隐变量模型 p θ ( x 0 ) : = ∫ p θ ( x 0 : T ) d x 1 : T p_\theta(\mathbf{x}_0):=\int p_\theta(\mathbf{x}_{0:T})d\mathbf{x}_{1:T} pθ(x0):=pθ(x0:T)dx1:T
考虑最大化log likelihood来学习参数,但因为隐变量模型的likelihood没法直接表示,一般都是采用优化log likelihood的下界variational lower bound (ELBO)。

在diffusion model中,为了方便神经网络优化,我们将最大化问题转换为最小化问题,优化的目标是:
E [ − log ⁡ p θ ( x 0 ) ] ≤ E q [ − log ⁡ p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = E q [ − log ⁡ p ( x T ) − ∑ t ≥ 1 log ⁡ p θ ( x t − 1 ∣ x t ) q ( x t ∣ x t − 1 ) ] : = L \mathbb{E}[-\log p_\theta(\mathbf{x}_0)]\leq \mathbb{E}_q[-\log \frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}_{0})}]= \mathbb{E}_q[-\log p_(\mathbf{x}_T)-\sum_{t\geq1}\log \frac{p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_{t})}{q(\mathbf{x}_{t}|\mathbf{x}_{t-1})}]:=L E[logpθ(x0)]Eq[logq(x1:Tx0)pθ(x0:T)]=Eq[logp(xT)t1logq(xtxt1)pθ(xt1xt)]:=L L L L可以重写为
在这里插入图片描述
其中 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0) q(xt1xt,x0)是高斯分布:
在这里插入图片描述
因为 L L L中都是高斯函数的KL散度,有闭合(closed form)的表达式。优化时将分别考虑各个 L t L_t Lt

  1. 其中因为 β t \beta_t βt是预定义的, L T L_T LT是一个常数可以忽略。
  2. L 0 L_0 L0是使用一个单独的离散解码器。
  3. L t − 1 L_{t-1} Lt1可以写为:
    L t − 1 = E x 0 , ϵ [ 1 2 σ 2 ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 ] + C L_{t-1}=\mathbb{E}_{\mathbf{x}_0,\epsilon}[\frac{1}{2\sigma^2}\|\tilde\mu_t(\mathbf{x}_t,\mathbf{x}_0)-\mu_\theta(\mathbf{x}_t,t)\|^2]+C Lt1=Ex0,ϵ[2σ21μ~t(xt,x0)μθ(xt,t)2]+C L t − 1 L_{t-1} Lt1经过带入公式以及参数化的技巧,优化目标变为
    E x 0 , ϵ [ β t 2 2 σ t 2 α t ( 1 − α ˉ t ) ∥ ϵ − ϵ θ ( α ˉ t x 0 + ( 1 − α ˉ t ) ϵ , t ) ∥ 2 ] \mathbb{E}_{\mathbf{x}_0,\epsilon}[\frac{\beta^2_t}{2\sigma_t^2\alpha_t(1-\bar\alpha_t)}\|\epsilon-\epsilon_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{(1-\bar{\alpha}_t)}\epsilon,t)\|^2] Ex0,ϵ[2σt2αt(1αˉt)βt2ϵϵθ(αˉt x0+(1αˉt) ϵ,t)2]网络学习的是添加的噪声, μ θ ( x t , t ) \mu_\theta(\mathbf{x}_{t},t) μθ(xt,t)可以由下面的公式计算得到 μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) \mu_\theta(\mathbf{x}_{t},t)=\frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_{t}-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(\mathbf{x_t,t})) μθ(xt,t)=αt 1(xt1αˉt βtϵθ(xt,t))

简化

L t − 1 L_{t-1} Lt1可以进行简化,简化后的目标是:
E x 0 , ϵ ∥ ϵ − ϵ θ ( α ˉ t x 0 , ( 1 − α ˉ t ) ϵ , t ) ∥ 2 \mathbb{E}_{\mathbf{x}_0,\epsilon}\|\epsilon-\epsilon_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0,\sqrt{(1-\bar{\alpha}_t)}\epsilon,t)\|^2 Ex0,ϵϵϵθ(αˉt x0,(1αˉt) ϵ,t)2简化版删去了原有的权重,所以是一个加权的变分界,其减小了 t t t较小时的权重。实验显示简化版的优化目标效果更好。

参考资料

NIPS 2020《Denoising Diffusion Probabilistic Models》
Hugging Face blog《The Annotated Diffusion Model》
Lil’Log《What are Diffusion Models?》

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

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

相关文章

伟大的缝纫师—typedef

伟大的缝纫师—typedef一.历史的误会—也许应该是typerename二.typedef和#define的区别一.历史的误会—也许应该是typerename 为什么这样说呢&#xff1f;因为typedf其实就是一个重命名关键字&#xff0c;看示例 这里我觉得unsigned int太长了&#xff0c;我将它改名为u_int&am…

bat批处理文件的注释,和常用简单命令

参考&#xff1a;https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/windows-commands&#xff0c;https://blog.csdn.net/wuhenyouyuyouyu/article/details/120736519? 当前路径&#xff1a;%~dp0 这个参数只能在bat文件中在正常使用&…

Unity脚本(2) --- 脚本生命周期以及脚本的控制台调试

1.什么是脚本生命周期&#xff1f; 首先什么是脚本 --- 脚本的本质其实就是类&#xff0c;而脚本生命周期其实就是脚本对应的那个类从开始工作到最后销毁这么一个周期 &#xff08;或者说是Unity脚本从唤醒到销毁的过程&#xff09; &#xff08;消息&#xff0c;必然事件&am…

[附源码]Node.js计算机毕业设计儿童成长记录与分享系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【Vue实践】尚硅谷张天禹Vue学习笔记(更新至第86课)-20221126~20221212

004_尚硅谷Vue技术_搭建Vue开发环境 搭建Vue.js devtools 允许访问文件网址 https://blog.csdn.net/sunhl951/article/details/80185628 阻止 vue 在启动时生成生产提示。 Vue.config.productionTip false 目测没有用 https://blog.csdn.net/DIUDIUjiang/article/details/…

这些车企在企业微信里,装上高速的“组织引擎”

“这真是一场惊险之旅。” 今年7月&#xff0c;胡先生一家疾驶在若羌县罗布泊镇国道上&#xff0c;迎面突然冲出一辆大型货车……为了避让&#xff0c;胡太太驾驶的极氪001撞上了路边的石墩&#xff0c;两个轮胎直接报废。 在人迹罕至的无人区&#xff0c;保险公司鞭长莫及&a…

C++ 基础篇之如何进行数据封装

&#x1f4d2;博客主页&#xff1a; ​​开心档博客主页​​ &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由开心档原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2022年12月12日&#x1f334; ✉…

rocketmq源码-producer启动流程

前言 DefaultMQProducer producer new DefaultMQProducer("please_rename_unique_group_name"); producer.setNamesrvAddr("127.0.0.1:9876");producer.setNamesrvAddr("127.0.0.1:9876");producer.start();创建、启动producer的逻辑&#xff…

[附源码]Node.js计算机毕业设计电影推荐网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

对长尾识别任务中解耦方法的改进

来源&#xff1a;投稿 作者&#xff1a;TransforMe 编辑&#xff1a;学姐 贡献 在长尾识别任务上&#xff0c;解耦&#xff08;二阶段&#xff09;的方法取得了巨大的进步&#xff0c;详情参考https://blog.csdn.net/weixin_41246832/article/details/115718084。本文详细分析…

Android实现SSH Client

本文实现的是如何使用JSCH在Android上实现一个简易版本的ssh client&#xff0c;来远程执行ssh命令。 1、启动ssh服务&#xff0c;本文以mac为例。 打开设置-->共享-->选择远程登录 2、检验ssh server是否开启成功。 打开shell ssh dongxuliip 输入dongxuli账户的密码&…

P3884 [JLOI2009]二叉树问题——树化图Floyd+dfs

[JLOI2009]二叉树问题 题目描述 如下图所示的一棵二叉树的深度、宽度及结点间距离分别为&#xff1a; 深度&#xff1a;444宽度&#xff1a;444结点 8 和 6 之间的距离&#xff1a;888结点 7 和 6 之间的距离&#xff1a;333 其中宽度表示二叉树上同一层最多的结点个数&…

[附源码]Python计算机毕业设计Django高校体育场馆管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

web前端期末大作业——基于HTML+CSS+JavaScript蓝色的远程监控设备系统后台管理界面模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

6-1和6-2矩阵键盘

江科大自动化单片机学习记录使用到的设备以及软件今天的学习内容弱上拉和强下拉代码LCD1602.cMatrixKey.c生成.h文件调用主函数main总结记录学习单片机的过程学习内容的视频链接:江科大自化协:51单片机入门教程-2020版,程序全程纯手打 使用到的设备以及软件 普中科技的嵌入式…

DC-2靶机教程

masscan -p1-65535 192.168.250.180 --rate10000nmap -sC -sV -p- -A -T4 192.168.250.180扫描看到80需要添加解析 C:\Windows\System32\drivers\etc添加记录&#xff1a;192.168.250.180 dc-2 同时我们也可以用cmseek扫描到用户名和相关的漏洞 或者使用 wpscan --url htt…

【图像处理OpenCV(C++版)】——2.3 灰度/彩色图像数字化

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

基于无人机的移动边缘计算网络(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 空中无人机&#xff08;UAV&#xff09;长期以来一直被用作移动网络中的网络处理器&#xff0c;但它们现在被用作移动边缘计算…

29-Vue之ECharts-散点图

ECharts-散点图前言散点图特点散点图实现步骤散点图常见效果气泡效果涟漪动画效果完整代码前言 本篇来学习散点图的实现 散点图特点 散点图可以帮助我们推断出不同维度数据之间的相关性, 比如&#xff1a;看得出身高和体重是正相关, 身 高越高, 体重越重散点图也经常用在地图…

解决 AssertionError Torch not compiled with CUDA enabled

最近在矩池云的的Tesla K80机子上跑MMYOLO&#xff0c;跟着MMYOLO官方文档《自定义数据集 标注训练测试部署 全流程 》操作到 “2.1.1 软件或者算法辅助”时&#xff0c;利用预训练模型官方脚本去辅助标注时&#xff0c;一按下回车就报错&#xff1a; 报错信息 AssertionError…