[读书笔记] 从问题和公式角度理解 Diffusion Model

news/2024/3/29 23:13:32/文章来源:https://blog.csdn.net/FatMigo/article/details/130307772

[小全读书笔记] 从问题和公式角度理解 Diffusion Model

此读书笔记本意是想理解文章 Denoising Diffusion Probabilistic Models (DDPM),但确实因为里边提到的公式对于跨领域读者有点晦涩难懂,但写者又希望能稍微从公式角度去理解其背后原理,写者进一步借助文章Understanding Diffusion Models: A Unified Perspective进行理解,因此本文主要记录了在阅读和理解后一篇文章的心路历程。

本文会省略掉一些关于模型背景等方面的介绍,而主要集中于理解背后公式的出发点和直观解释。

1. Diffusion Model的结构

图源自于DDPM
Diffusion Model的目标是学习一套模型,能将噪声 x T x_T xT还原成原始图片 x 0 x_0 x0的一套模型,而整个模型的结构包含了两部分:

  • 前向过程:加噪,模型由原始图片逐步变化变成完全的噪声
  • 后向过程:去噪,模型由噪声还原成原始图片

为了方便理解,“前向过程”都会表达成“加噪过程”,“后向过程”都会表达成“去噪过程”

1.1 定义与限制

同时,对模型加之以下定义和限制:

  1. 前向和后向过程均建模成马尔可夫链
    马尔科夫链背后的含义是:任何 t + 1 t+1 t+1时刻的状态只与 t t t时刻的状态有关,而与其他时刻无关,这蕴含着形如这的联合概率可展开成 P ( x t + 2 , x t + 1 ∣ x t ) = P ( x t + 2 ∣ x t + 1 ) P ( x t + 1 ∣ x t ) P(x_{t+2},x_{t+1}|x_t) = P(x_{t+2}|x_{t+1}) P(x_{t+1}|x_t) P(xt+2,xt+1xt)=P(xt+2xt+1)P(xt+1xt) 。这里的推导可以通过联合概率公式展开 P ( y , x ) = P ( y ∣ x ) ∗ P ( x ) P(y,x) = P(y|x) * P(x) P(y,x)=P(yx)P(x)
  2. 加噪过程是无参数的,而去噪过程是有参数的
    在Diffusion Model里,加噪过程的encoder被认为是已知的无需参数优化的,是一个以前一时刻的隐变量为中心的高斯模型,记为 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1),而去噪过程的decoder则是需要学习的模型,记为 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)
  3. 最终时刻隐变量 x T ∼ N ( 0 , 1 ) x_T\sim N(0,1) xTN(0,1)
  4. 模型所有时刻的隐变量维度与原始图片相同

这些定义与限制对于理解后续的公式非常重要,本人最开始并没有去真正理解这些,导致了最开始理解DDPM以及相关博客地公式都非常困难。当后来我以这些定义和限制为始,并对原文进行阅读时,公式的理解就顺畅许多。Understanding Diffusion Models: A Unified Perspective非常值得阅读。

1.2 定义与限制的数学体现

p ( x 0 : T ) = p ( x 0 , x 1 , . . . , x T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) (1) p(x_{0:T}) = p(x_0, x_1, ..., x_T) = p(x_T) \prod_{t=1}^Tp_\theta(x_{t-1}|x_t) \tag{1} p(x0:T)=p(x0,x1,...,xT)=p(xT)t=1Tpθ(xt1xt)(1)
q ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) (2) q(x_t|x_{t-1}) = N(x_t;\sqrt{\alpha_t}x_{t-1}, (1-\alpha_t)\Iota)\tag{2} q(xtxt1)=N(xt;αt xt1,(1αt)I)(2)
p ( x T ) = N ( x T ; 0 , I ) (3) p(x_T) = N(x_T;0, \Iota) \tag{3} p(xT)=N(xT;0,I)(3)
公式1 是用了马尔可夫链的性质,其中提到的 p ( x 0 : T ) {p(x_{0:T})} p(x0:T)将会用于后续的求目标函数,公式二则是一个模型选择的问题(为什么模型的均值和方差要采取这种形式?)。

到这里,我们是对diffusion model只是进行了一个定义和限制,以及这种定义之下隐含的数学体现。非常明确的一点是,我们需要对模型的参数部分,也就是后向过程进行参数求解,后续章节则为了参数求解涉及了一套美妙的数学解释。

因为这套数学解释非常复杂,写者在阅读时有两个非常naive的问题:

  1. 既然加噪过程 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)时已知的,去噪过程本质就是加噪过程的逆分布,不能从数学公式直接推导吗,非得参数化求解?
    答案是No,加噪过程的逆运算 q ( x t − 1 ∣ x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) q(x_{t-1}|x_t) = \frac{q(x_t|x_{t-1}) q(x_{t-1})}{q(x_t)} q(xt1xt)=q(xt)q(xtxt1)q(xt1),确实有一部分已知,但公式中的 q ( x t − 1 ) , q ( x t ) q(x_{t-1}), q(x_t) q(xt1),q(xt)的分布是完全未知且难以建模的,他们也不能先入为主的认为是 N ( 0 , 1 ) N(0, 1) N(0,1),设想 x 1 x_1 x1,这是原始图片加噪一次的结果,其不可能是正态分布,也不可能被简单的建模,其建模的难度等同于 p ( x 0 ) p(x_0) p(x0)
  2. 既然公式推导不了,为啥不考虑一些简单的损失函数,如对输入图片 x 0 ′ x'_0 x0和groundtruth图片 x 0 x_0 x0做MSE?
    我们可以把diffusion model简化来思考这个问题。假设T=1,这个模型本质就是一个variational auto encoder。若只做MSE,不对中间隐变量 x 1 x_1 x1做任何的regularization,则这个模型进一步退化成auto encoder,模型生成的效果必然很差。auto encoder为什么差,可参照这篇文章的分析。

问题1的思考也给我带来了一些新的insight。加噪过程的逆分布是我们无法得到或者intractable的,diffusion model的目标其实就是利用参数化的去噪过程去学习和逼近我们设想中的加噪过程的逆分布,即 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)的理想目标就是 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)的逆分布。

2. Diffusion Model的模型训练

我们已经有了模型的定义,并且对模型已经参数化了,下一步则是需要进行模型训练,这便需要我们提供一个目标函数,也就是所有隐变量的联合密度函数的对数(取对数只是为了方便计算,应该分布往往都是以指数形式存在,如正态分布)。
l o g ( p ( X ) ) = l o g ( p ( x 0 : T ) ) log(p(X)) = log(p(x_{0:T})) log(p(X))=log(p(x0:T))

Diffusion Model希望最大化概率该密度函数。

在经典的深度学习领域,如分类、检测、分割等,模型的训练往往是需要一个groundtruth的,而目标函数的定义往往衡量的是模型输出与ground truth的差距(如CE、MSE),从而让模型参数朝着减少差距的方向进行参数优化。Diffusion Model的目标函数则无须ground truth,其从统计学的角度建模了随机变量的似然函数,并从最大化似然函数为目标进行求解,3.1小节对最大似然函数进行了补充。

由于 l o g p ( X ) logp(X) logp(X)形式并不能用于求解,需要进行进一步推导,得到易于求解的形式。推导过程我将其分成了几步。

2.1 似然函数转换成ELBO

ELBO貌似是变分推断中常用的一种求解方式,但读者并未完全理解其background以及意义,后续将补充这一相关读书笔记。先留个坑。

图来源于原论文
最后一步用到了Jensen不等式。

对数函数与期望的转换是信息论里常用的应用Jensen不等式的例子。另外,一元函数是否为凸函数可以判断其二阶导是否恒>0,因此 l o g ( x ) log(x) log(x)是满足这一性质的。

2.2 拆解ELBO

图来自原论文图来自原论文
到这里,优化ELBO需要优化三项:

  • E q ( x 1 ∣ x 0 ) [ l o g p θ ( x 0 ∣ x 1 ) ] E_{q(x_1|x_0)}[logp_\theta(x_0|x_1)] Eq(x1x0)[logpθ(x0x1)]: 最大化这一项表示去噪过程的最后一步需要最大成都还原原始图片
  • D K L ( q ( x T ∣ x 0 ) ∣ ∣ p ( x T ) ) D_{KL}(q(x_T|x_0)||p(x_T)) DKL(q(xTx0)∣∣p(xT)): 这一项对参数 θ \theta θ而言是恒定值,可以忽略
  • ∑ t = 2 T E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ) ] \sum_{t=2}^{T}E_{q(x_t|x_0)}[D_{KL}(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t)))] t=2TEq(xtx0)[DKL(q(xt1xt,x0)∣∣pθ(xt1xt)))]: 这一项是表示去噪过程的每一步的分布 p θ ( x t − 1 ∣ x t ) ) p_\theta(x_{t-1}|x_t)) pθ(xt1xt))需要最大化地拟合分布 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)

到这里,一系列推导给出了一个比较直观地理解:我们原本希望 p θ ( x t − 1 ∣ x t ) ) p_\theta(x_{t-1}|x_t)) pθ(xt1xt))希望逼近 q ( x t ∣ x t − 1 ) q(x_{t}|x_{t-1}) q(xtxt1)的逆分布 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt),而逆分布是intractable的(如1.2小节提到)。通过ELBO以及一些列推导,我们转换成了 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0),而该分布是有可能tractable的,也就是其形式是可知的。一旦知道其形式,就能得到参数优化的求解公式

2.3 求解关键: q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的显示表达

首先,应用贝叶斯公式:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) ∗ q ( x t − 1 ∣ , x 0 ) q ( x t ∣ x 0 ) = q ( x t ∣ x t − 1 ) ∗ q ( x t − 1 ∣ , x 0 ) q ( x t ∣ x 0 ) q(x_{t-1}|x_t,x_0) = \frac{q(x_{t}|x_{t-1},x_0) * q(x_{t-1}|,x_0)}{q(x_{t}|x_0)}= \frac{q(x_{t}|x_{t-1}) * q(x_{t-1}|,x_0)}{q(x_{t}|x_0)} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1,x0)=q(xtx0)q(xtxt1)q(xt1,x0)

q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)的分布密度函数是已知的,上述问题的关键就转换成了求 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)的显示表达。这里需要用到一个重参技巧(reparameterization trick:

x t ∼ q ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) x_t \sim q(x_t|x_{t-1}) = N(x_t;\sqrt{\alpha_t}x_{t-1}, (1-\alpha_t)\Iota) xtq(xtxt1)=N(xt;αt xt1,(1αt)I),转换为
x t = α t x t − 1 + 1 − α t ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}\epsilon, \epsilon \sim N(0, \Iota) xt=αt xt1+1αt ϵ,ϵN(0,I)
以此类推,就比较容易得到下列事实:
x t ∼ q ( x t ∣ x 0 ) = N ( α ˉ t x 0 , ( 1 − α ˉ t ) I ) x_t \sim q(x_t|x_0) = N(\sqrt{\bar{\alpha}_t}x_0,(1-\bar\alpha_t)\Iota) xtq(xtx0)=N(αˉt x0,(1αˉt)I)

图来自于原论文
因此, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的形式也比较容易得到,这里也不展开了。

综上,Diffusion Model的最大似然函数的优化目标可以显示地表达出来,结合我们训练数据即可得到我们的最优参数。

一个非常有趣的感悟是:也许一开始有人会想到 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)是intractable,而 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)可以借助贝叶斯公式变成tractable。直接用 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)近似 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)求解,即可免去了上述一系列的ELBO及其后续的推导。这种近似虽然直觉上很好理解并觉得合理,但却缺乏数学支持而显得非常无力并难以信服。数学推导尽管痛苦,但却从理论上保证了可行性,这回答了一个非常本质的问题:以这个目标函数训练为什么能work。人们常说,人是无法赚到认知以外的钱的。而数学原理的保障给我们提供了认知,让我们能赚到这里面的钱:那就是确保模型训练的有效性,这莫不是是数学之美的一个体现。

3. 附录

3.1 最大化似然函数

这里举个最大化似然函数求解的例子。假设已知随机变量 x ∼ N ( θ , σ 2 ) x \sim N(\theta, \sigma^2) xN(θ,σ2),现在有俩抽样样本,值分别1,2。则似然函数刻画的是出现这俩样本的概率
P ( x 1 = 1 , x 2 = 2 ) = P ( x 1 = 1 ) ∗ P ( x 2 = 2 ) = 1 2 π σ e x p ( − ( 1 − μ ) 2 2 σ 2 ) ∗ 1 2 π σ e x p ( − ( 2 − μ ) 2 2 σ 2 ) \begin{aligned} P(x_1 = 1, x_2 = 2) & = P(x_1 = 1) * P(x_2 = 2) \\ & = \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(1-\mu)^2}{2\sigma^2}) * \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(2-\mu)^2}{2\sigma^2}) \\ \end{aligned} P(x1=1,x2=2)=P(x1=1)P(x2=2)=2π σ1exp(2σ2(1μ)2)2π σ1exp(2σ2(2μ)2)
取对数后则为
l o g ( P ( x 1 = 1 , x 2 = 2 ) ) = − l o g ( 2 π ) − 2 l o g ( σ ) − 1 2 σ 2 ( ( 1 − μ ) 2 + ( 2 − μ ) 2 ) \begin{aligned} log(P(x_1 = 1, x_2 = 2)) & = -log(2\pi) - 2log(\sigma) - \frac{1}{2\sigma^2}((1-\mu)^2 + (2-\mu)^2) \end{aligned} log(P(x1=1,x2=2))=log(2π)2log(σ)2σ21((1μ)2+(2μ)2)

然后通过求导求最大值的方式得到 μ = μ ∗ , σ = σ ∗ \mu=\mu^*,\sigma = \sigma* μ=μ,σ=σ

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

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

相关文章

CompletableFuture的基本使用和原理

CompletableFuture CompletableFuture是对Future的扩展和增强。CompletableFuture实现了Future接口,并在此基础上进行了丰富的扩展,完美弥补了Future的局限性,同时CompletableFuture实现了对任务编排的能力。借助这项能力,可以轻…

web事件循环

事件循环的应用:计时器 promise ajax node 单线程是异步产生的原因,事件循环时异步的实现方式 1.浏览器进程模型 进程:程序运行需要自己专属的内存空间,可以把这块内存空间简单的理解为进程。 每个应用至少又一个进程&#xff…

模板方法设计模式解读

目录 豆浆制作问题 模板方法模式基本介绍 基本介绍 模板方法模式的原理类图 模板方法模式解决豆浆制作问题 应用实例要求 思路分析和图解(类图) 模板方法模式的钩子方法 模板方法模式的注意事项和细节 豆浆制作问题 编写制作豆浆的程序,说明如下: 1) 制作豆…

【LeetCode】剑指 Offer 67. 把字符串转换成整数 p318 -- Java Version

题目链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/ 1. 题目介绍(67. 把字符串转换成整数) 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 …

研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案

研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案 目录 研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案 一、简单介绍 二、计算机网络第七版(谢希仁) 第一章 课后答案 1、 计算机网络向用户可以提供哪些服务? 2、 试简述分组交换的要点。 3…

Kali下部署-Nessus漏扫工具

Nessus 是全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件。 特点: 1、提供完整的电脑漏洞扫描服务,并随时更新漏洞库。 2、可以在本机或者是远端上进行遥控,进行系统的漏洞扫…

常见的四种排名函数的用法(sql)

四个排名函数: 1.row_number 2.rank 3.dense_rank 4.ntile 1. ROW_NUMBER(排名场景推荐) 1.1 介绍 在 SQL 中,ROW_NUMBER() 是一个窗口函数,它为结果集中的每一行分配一个唯一的序号。该函数的语法如下: …

JavaSE-part1

文章目录 Day01 面向对象特性1.java继承注意点2.多态2.1多态概述2.2多态中成员的特点:star::star:2.3多态的转型:star::star: 3.Super4.方法重写:star::star:5.Object类:star::star: Day02 面向对象特性1.代码块:star:(主要是初始化变量,先于构造器)2.单例设计模式:…

【移动端网页布局】移动端网页布局基础概念 ⑦ ( 在 PhotoShop 中使用 Cutterman 切二倍图 | 使用二倍图作为背景图像 )

文章目录 一、在 PhotoShop 中使用 Cutterman 切二倍图二、使用二倍图作为背景图像 一、在 PhotoShop 中使用 Cutterman 切二倍图 参考 【CSS】PhotoShop 切图 ③ ( PhotoShop 切图插件 - Cutterman | 下载、安装、启动、注册、登录 Cutterman - 切图神奇 插件 | 使用插件进行切…

3自由度并联绘图机器人实现写字功能(一)

1. 功能说明 本文示例将实现R305样机3自由度并联绘图机器人写字的功能。 2. 电子硬件 在这个示例中,采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno) 扩展板Bigfish2.1扩展板电池7.4V锂电池 3. 功能…

远程访问及控制ssh

SSH远程管理 OpenSSH服务器 SSH(Secure Shell) 协议 是一种安全通道协议。主要用来实现字符界面的远程登录、远程复制等功能。对通信数据进行了加密处理,用于远程管理其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性------------(同样…

d2l Transformer

终于到变形金刚了,他的主要特征在于多头自注意力的使用,以及摒弃了rnn的操作。 目录 1.原理 2.多头注意力 3.逐位前馈网络FFN 4.层归一化 5.残差连接 6.Encoder 7.Decoder 8.训练 9.预测 1.原理 主要贡献:1.纯使用attention的Enco…

Android程序员向音视频进阶,有前景吗

随着移动互联网的普及和发展,Android开发成为了很多人的就业选择,希望在这个行业能获得自己的一席之地。然而,随着时间的推移,越来越多的人进入到了Android开发行业,就导致目前Android开发的工作越来越难找&#xff0c…

EFI Driver Model(下)-USB 驱动设计

1、USB简介 通用串行总线(英语:Universal Serial Bus,缩写:USB)是一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影…

我看谁没看过

vue在新窗口打开页面方法 const { href } this.$router.resolve({path: "/officePlatform/addPrompt"});window.open(href, "_blank"); 添加圆形标志 h3::before {content: "";display: inline-block;width: 13px;height: 13px;background: va…

NFT介绍及监管规则

什么是NFT NFT是Non-Fungible Token(非同质化代币)的缩写。 NFT是“Non-Fungible Token”的缩写,即非同质化代币。不同于FT(Fungible Token,同质化代币),每一个NFT都是独一无二且不可相互替代的…

第二章 Maven 核心程序解压和配置

第一节 Maven核心程序解压与配置 1、Maven 官网地址 首页: Maven – Welcome to Apache Maven(opens new window) 下载页面: Maven – Download Apache Maven(opens new window) 下载链接: 具体下载地址:https://dlcdn.apac…

【云原生】Java 应用程序在 Kubernetes 上棘手的内存管理

文章目录 引言JVM 内存模型简介非 Heap 内存Heap 堆内存Kubernetes 内存管理JVM 和 Kubernetes场景 1 — Java Out Of Memory 错误场景 2 — Pod 超出内存 limit 限制场景 3 — Pod 超出节点的可用内存场景 4 — 参数配置良好,应用程序运行良好 结语 引言 如何结合…

三月、四月总计面试碰壁15次,作为一个27岁的测试工程师.....

3年测试经验原来什么都不是,只是给你的简历上画了一笔,一直觉得经验多,无论在哪都能找到满意的工作,但是现实却是给我打了一个大巴掌!事后也不会给糖的那种... 先说一下自己的个人情况,普通二本计算机专业…

JVM调优最佳参数

项目背景 C端的项目,用户量比较多,请求比较多。 启动参数表 Xmx指定应用程序可用的最大堆大小。 Xms指定应用程序可用的最小堆大小。 (一般情况下,需要设置Xmx和Xms为相等的值,且为一个固定的值) 如果该值…