Denoising Diffusion Probabilistic Models简介

2023-11-15

概要

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(\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))使用神经网络学习均值 μ θ \mu_\theta μθ和方差 Σ θ \Sigma_\theta Σθ。特别地,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)是高斯分布:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) w h e r e     μ ~ t ( x t , x 0 ) : = α ‾ t − 1 β t 1 − α ‾ t x 0 + α t ( 1 − α ‾ t − 1 ) 1 − α ‾ t x t β ~ t : = 1 − α ‾ t − 1 1 − α ‾ t β t q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0)=\mathcal{N}(\mathbf{x}_{t-1}; \tilde\mu_t(\mathbf{x}_t,\mathbf{x}_0), \tilde\beta_t\mathbf{I}) \\ where~~~ \tilde\mu_t(\mathbf{x}_t,\mathbf{x}_0) := \frac{\sqrt{\overline\alpha_{t-1}}\beta_t}{1-\overline\alpha_{t}}\mathbf{x}_0 + \frac{\sqrt{\alpha_t}(1-\overline\alpha_{t-1})}{1-\overline\alpha_{t}}\mathbf{x}_t \\ \tilde\beta_t := \frac{1-\overline\alpha_{t-1}}{1-\overline\alpha_{t}}\beta_t q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)where   μ~t(xt,x0):=1αtαt1 βtx0+1αtαt (1αt1)xtβ~t:=1αt1αt1βt因为 L L L中都是高斯函数的KL散度,有闭合(closed form)的表达式。优化时将分别考虑各个 L t L_t Lt

  1. L T L_T LT是一个常数可以忽略,因为前向过程 q q q不包含可学习的参数。
  2. L 0 L_0 L0 p θ ( x 0 ∣ x 1 ) p_\theta(\mathbf{x}_0|\mathbf{x}_1) pθ(x0x1)使用一个单独的离散解码器建模。因为图像颜色是离散的,但模型中计算的是连续的。假设每个颜色被分为 256 个 bin,计算 p θ ( x 0 ∣ x 1 ) p_\theta(\mathbf{x}_0|\mathbf{x}_1) pθ(x0x1) 落在正确 bin 中的概率。在采样的最后直接展示 μ θ ( x 1 , 1 ) \mu_\theta(\mathbf{x}_1,1) μθ(x1,1)
  3. L t − 1 L_{t-1} Lt1可以写为:
    L t − 1 = E q [ 1 2 σ 2 ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 ] + C L_{t-1}=\mathbb{E}_{q}[\frac{1}{2\sigma^2}\|\tilde\mu_t(\mathbf{x}_t,\mathbf{x}_0)-\mu_\theta(\mathbf{x}_t,t)\|^2]+C Lt1=Eq[2σ21μ~t(xt,x0)μθ(xt,t)2]+C用重参数化(reparameterizing)的技巧 x t ( x 0 , ϵ ) = α ˉ t x 0 + ( 1 − α ˉ t ) ϵ , ϵ ∈ N ( 0 , I ) \mathbf{x_t}(\mathbf{x_0},\epsilon)=\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{(1-\bar{\alpha}_t)}\epsilon, \epsilon \in \mathcal{N}(\mathbf 0, \mathbf I) xt(x0,ϵ)=αˉt x0+(1αˉt) ϵ,ϵN(0,I)再通过参数化改写,优化目标变为
    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]即用网络 ϵ θ \epsilon_\theta ϵθ学习添加的噪声 ϵ \epsilon ϵ
    μ θ ( x t , t ) \mu_\theta(\mathbf{x}_{t},t) μθ(xt,t) ϵ θ ( x t , t ) \epsilon_\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)) p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_{t}) pθ(xt1xt)采样可以这样计算 x t − 1 = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z , z ∈ N ( 0 , I ) \mathbf{x}_{t-1}=\frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_{t}-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(\mathbf{x_t,t}))+\sigma_t \mathbf{z}, \mathbf{z} \in \mathcal{N}(\mathbf 0, \mathbf I) xt1=αt 1(xt1αˉt βtϵθ(xt,t))+σtz,zN(0,I)值得注意的是,可以用网络 μ θ \mu_\theta μθ学习 μ ~ t \tilde\mu_t μ~t,也可以用网络 ϵ θ \epsilon_\theta ϵθ学习添加的噪声 ϵ \epsilon ϵ,它们的区别只在于参数化的方式不同。用 ϵ \epsilon ϵ表示类似Langevin动力学,可以得到类似denoising score matching的优化目标。在作者的实验中,它们都可以得到较好的结果。

简化

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较小时的权重。实验显示简化版的优化目标效果更好。

渐进式编码(Progressive coding)

在作者的实验中,diffusion model生成图片的质量很好,但负log-likelihood(负log-likelihood也就是lossless codelength)不如其他的likelihood-based生成模型低。
在作者的实验中, L 0 L_0 L0占了所有 L ∗ L_* L的一半以上,说明一半以上的lossless codelength用于描述难以观察的失真。因此,作者认为diffusion model是一个优秀的有损压缩器。
考虑一个传输过程,该过程按照T至0的顺序传输图像。用均方误差计算distortion,在时刻t累计接收到的比特数量计算rate。下图可以看到,在低rate的区域distortion变化很剧烈,说明少量的rate就能表示图像大部分的信息。
在这里插入图片描述

参考资料

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Denoising Diffusion Probabilistic Models简介 的相关文章

随机推荐

  • 【⑯MySQL

    前言 欢迎来到小K的MySQL专栏 本节将为大家带来MySQL存储过程与函数概述 创建 调用 查看 修改 删除 争议的分享 目录 前言 1 存储过程概述 2 创建存储过程 3 调用存储过程 4 存储函数的使用 5 存储过程和函数的查看 修改
  • a-descriptions-item描述列表点击按钮显示相应内容

    实现功能 点击查询按钮 显示相应数据 部分数据只读 部分数据可修改 实现思路 首先通过点击按钮事件从接口获取内容 然后通过 显示在界面上 查询按钮触发事件代码 searchQuery var that this getAction this
  • 【数据库1】win10系统下,MySQL数据库安装环境搭建

    一 MySQL下载 登录MySql网站 https www mysql com MySql官方网站 下拉页面至最末端 如图 选择downloads里面的 Mysql community server 链接 进入下载页面 如图 根据个人系统情
  • MATLAB 图像处理 灰度图 将图像中某一行或者某一列的灰度值 绘制成一条曲线

    将这些灰度值保存成一个矩阵A A imgdata 1 第一列的所有数据 若是仅仅画数据 直接用plot A 例子如下 filename I jpg imgData imread filename imshow imgData 该函数可以用来
  • Libev事件库源码阅读笔记

    Libev事件库源码阅读笔记 Intro Libev是一个基于Reactor模式的事件库 效率较高 Benchmark 并且代码精简 4 15版本8000多行 是学习事件驱动编程的很好的资源 本文不会介绍Reactor模式 也不会介绍Lib
  • Windows 下如何使用管理员的身份运行 DOS 窗口

    如图 有时候我们使用命令行会发现类似上面的错误 这是因为我们没有使用管理员的身份运行 DOS 窗口导致的 那么如何解决 解决办法 先关闭命令提示符 然后打开电脑的系统盘C盘 打开路径 C Windows System32 然后在右上角的搜索
  • 数据倾斜

    数据倾斜发生时的现象 1 绝大多数task执行得都非常快 但个别task执行的极慢 2 原本能正常执行的Spark作业 某天突然爆出OOM 内存溢出 异常 观察异常栈 是我们写的业务代码造成的 数据倾斜发生的原理 在进行shuffle的时候
  • Python 文件读取的4种方式

    对于Python程序员来说 读取文件是一项基本操作 Python提供了多种读取文件的方式 以下是其中的4种常用方式 1 使用 open 函数和 read 方法 使用 open 函数和 read 方法是最基本的文件读取方式 它可以读取整个文件
  • mysql中的/、div的区别

    运算符为实数除 其运算的结果为实型 div为整除 该运算符只取商的整数部分 而不会四舍五入 网上说要求除数和被除数均为整形 经我测试 网上的说法有误 mysql gt select 100 22 div 2 1 100 22 div 2 1
  • WinServer 2012 R2 AD 组策略 将域用户加入本地管理员组

    需求 域用户shihua ma添加入到本地管理员组 先查看本地管理员组 net localgroup administrators 通过以上得知 shihua ma这个域用户不在本地管理员组 下面介绍如何将域用户自动加入到本地管理员组 一
  • C语言_函数递归举例

    1 递归和非递归分别实现求第n个斐波那契数 求第 n 个斐波那契数 include
  • 使用vscode如何建立vue模板

    目标 我们希望每次新建 vue文件后 VSCODE能够根据配置 自动生成我们想要的内容 方法 打开VSCODE编辑器 依次选择 文件 gt 首选项 gt 用户代码片段 此时 会弹出一个搜索框 我们输入vue 如下 选择vue后 VSCODE
  • 十、Fiddler抓包工具详细教程 — AutoResponder应用场景

    文章内容有配套的 学习视频和笔记都放在了文章末尾 简单介绍几个应用场景 场景一 生产环境的请求重定向到本地文件 验证结果 例如 某网站或者系统修改了问题 但尚未更新到生产环境 可重定向到本地修改后的文件进行验证 这样能够避免更新到生产环境后
  • JAVASCRIPT使用参考

    JS参考手册 https www w3school com cn jsref index asp 几点注意 JavaScript是一门客户端轻量级脚本语言 它运行在客户端的浏览器中 每一个浏览器都有JavaScript的解析引擎 脚本语言
  • Flink---1、概述、快速上手

    1 Flink概述 1 1 Flink是什么 Flink的官网主页地址 https flink apache org Flink的核心目标是 数据流上有状态的计算 Stateful Computations over Data Stream
  • OpenHarmony之Ubuntu22.04执行hb set报错

    错误提示 最近在使用Ubuntu22 04搭建OpenHarmony编译环境 在执行hb set命令选择开发板时出现如下报错 详细log如下 fangye fangye virtual machine niobeu4 src hb set
  • 分了很多节的word文档,使用尾注插入的参考文献,最后怎么在参考文献之后加入致谢?

    转自 点击打开链接 需要设置一下 1 设置尾注的位置 引用 脚注 按这个功能区分组右下角的功能展开按钮 调出 脚注和尾注 设置对话框 在 位置 下 尾注 后选择 节的结尾 2 从第一节开始分别取消各节的 尾注 直到 参考文献 这节 页面布局
  • 在Docker容器中部署整套基于Spring Cloud的微服务架构,看这篇就对了!

    本文以mall swarm项目为例 主要介绍一个微服务架构的电商项目如何在Docker容器下部署 涉及到大量系统组件的部署及多个Spring Cloud 微服务应用的部署 基于CentOS7 6 环境搭建 基础环境部署 mall swarm
  • vue 写的登录页面

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 登录页面 二 使用步骤 1 引入库 前言 提示 以下是本篇文章正文内容 下面案例可供参考 一 登录页面 1 用element ui或者用iView组件都可
  • Denoising Diffusion Probabilistic Models简介

    目录 概要 前向过程 nice property 逆向过程 参数推导 简化 渐进式编码 Progressive coding 参考资料 概要 Denoising Diffusion Probabilistic Model DDPM 是一个生