欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 从扩散模型开始的生成模型范式演变--DDPM

从扩散模型开始的生成模型范式演变--DDPM

2024/10/25 8:23:19 来源:https://blog.csdn.net/zzfive/article/details/141875146  浏览:    关键词:从扩散模型开始的生成模型范式演变--DDPM

文章目录

  • 引言
  • 前置知识
  • DDPM是在学什么?
  • 加噪过程的慢与快
  • 无中生有的目标分布
  • 看似巧合的损失函数

引言

在讨论DDPM之前,我们要先对生成模型有一个认识,何为生成模型?从“生成”二字出发,生成模型肯定要能生成样本,并且要有多样性、创新性。模型只有从训练数据中学习到数据分布,生成时才能采样出样本。所以,生成模型是对训练数据分布建模的模型。既然说到分布,必然和概率挂钩,故DDPM全称是去噪扩散概率模型

往往谈到深度学习,都会将其视为一个黑盒子,缺乏可解释性;但有时也确实不用深究其到底是如何学习到知识的,一种很淳朴的思想就是:哪个环节确实,就通过深度学习把它学习出来,最终实现目的。比如,缺一个分类器,就搜集数据训练一个;想要有一个模型生成图片,还是搜集数据训练一个;当然,这是一种极简的抽象,但至少在生成模型训练过程中很适用。当然,损失函数设计则是保证训练过程有效的重点。

前置知识

本系列文档是对生成模型范式演变进行分析,必然会涉及到大量的公式推导和演算,很多知识我们基本都已遗忘,主要是关于概率论,在此进行一个简单的汇总阐述:

  • 马尔可夫过程:只用记住当前状态只依赖于前一状态,只与前一状态有关
  • 高斯分布/正太分布:一种连续概率分布,记为 X ∼ N ( μ , σ 2 I ) X \sim N(\mu, \sigma^2I) XN(μ,σ2I)
    • 均值 μ \mu μ::分布的中心点,决定了分布的对称中心
    • 标准差 σ \sigma σ:决定了分布的宽度,标准差越大,数据的分散程度越高,曲线越平缓
    • 概率密度函数: f ( x ∣ μ , σ 2 ) = 1 2 π σ 2 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x|\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) f(xμ,σ2)=2πσ2 1exp(2σ2(xμ)2)
  • 标准正太分布:均值 μ \mu μ为0,标准差 σ \sigma σ为1的正太分布
  • 概率密度函数/PDF:描述连续随机变量的概率分布,表征随机变量在不同值上出现的相对可能性;积分可以计算出随机变量落在某个区间内的概率
    • ∫ f ( x ) d x = 1 \int f(x)dx = 1 f(x)dx=1
    • P ( a ≤ X ≤ b ) = ∫ a b f ( x ) d x P(a \le X \le b) = \int^b_a f(x)dx P(aXb)=abf(x)dx:表示随机变量 X X X落在 [ a , b ] [a,b] [a,b]之间的概率
  • 联合概率:描述两个或多个随机变量同时发生的概率;对于两个随机变量 X X X Y Y Y,它们的联合概率分布被记作 P ( X , Y ) P(X,Y) P(X,Y)
    • P ( X , Y ) = P ( X ∣ Y ) P ( Y ) = P ( Y ∣ X ) P ( X ) P(X,Y) = P(X|Y)P(Y) = P(Y|X)P(X) P(X,Y)=P(XY)P(Y)=P(YX)P(X)
    • P ( X , Y , Z ) = P ( X ∣ Y , Z ) P ( Y , Z ) = P ( X ∣ Y , Z ) P ( Y ∣ Z ) P ( Z ) P(X,Y,Z) = P(X|Y,Z)P(Y,Z) = P(X|Y,Z)P(Y|Z)P(Z) P(X,Y,Z)=P(XY,Z)P(Y,Z)=P(XY,Z)P(YZ)P(Z)
  • 边缘概率:当一个概率分布涉及两个或多个随机变量时,对某一个(或几个)随机变量进行"边缘化"处理,得到该(些)随机变量本身的概率分布
    • 假设有两个随机变量 X X X Y Y Y,它们的联合概率分布为 P ( X , Y ) P(X,Y) P(X,Y),那么 X X X的边缘概率分布就是 P ( X ) = Σ P ( X , Y ) P(X) = Σ P(X,Y) P(X)=ΣP(X,Y),也就是将 Y Y Y从联合概率分布中"边缘化"或"积出"而得到的 X X X自身的概率分布
  • 期望:表示随机变量的加权平均值:连续随机变量 E ( X ) = ∫ x f ( x ) d x E(X) = \int x f(x) dx E(X)=xf(x)dx E ( X , Y ) = E ( X ) ∗ E ( Y ) E(X,Y)=E(X)*E(Y) E(X,Y)=E(X)E(Y)
  • KL散度:表征两个概率分布差异的一种方式,描述一个概率分布相对于另一个概率分布的“信息损失”或“距离”,也可以简单理解为相似性
    • 对于两个连续概率分布 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x)(在相同的定义域上), 从分布 Q Q Q到分布 Q Q Q的KL散度 D_KL(P||Q) 定义为: D K L ( P ∣ ∣ Q ) = ∫ p ( x ) log ⁡ ( p ( x ) / q ( x ) ) d x D_{KL}(P||Q) = ∫ p(x) \log(p(x) / q(x)) dx DKL(P∣∣Q)=p(x)log(p(x)/q(x))dx
      • 积分是在 P ( x ) P(x) P(x)的定义域上进行的
      • P ( x ) P(x) P(x)是真实的概率分布
      • Q ( x ) Q(x) Q(x)是近似或模型概率分布
    • KL散度是非负的,且当且仅当 P ( x ) = Q ( x ) P(x)=Q(x) P(x)=Q(x)时等于0
    • KL散度是非对称的,即 D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P||Q) ≠ D_{KL}(Q||P) DKL(P∣∣Q)=DKL(Q∣∣P)
    • KL散度在机器学习中用于判断模型的拟合程度,如最大似然估计;最小化KL散度等同于最大化似然函数
    • 对于两个单一变量的高斯分布 P P P Q Q Q D K L ( P ∣ ∣ Q ) = log ⁡ σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 D_{KL}(P||Q) = \log\frac{\sigma_2}{\sigma_1}+\frac{\sigma_1^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}-\frac{1}{2} DKL(P∣∣Q)=logσ1σ2+2σ22σ12+(μ1μ2)221
  • 重参数化:若需要从 N ( μ , σ 2 I ) N(\mu, \sigma^2I) N(μ,σ2I)中采样,可以先从标注正太分布 N ( 0 , 1 ) N(0, 1) N(0,1)中采样一个值,记为 z z z,在通过 x = σ ∗ z + μ x = \sigma * z + \mu x=σz+μ得到 N ( μ , σ 2 I ) N(\mu, \sigma^2I) N(μ,σ2I)分布中的样本。这样做,可以使得模型训练过程在遇到分布时是连续的,通过对 σ \sigma σ μ \mu μ预测,实现对分布的学习。

DDPM是在学什么?

在这里插入图片描述

看过DDPM论文或了解过扩散模型的读者应该对上图都不陌生,该图是DDPM论文中对扩散模型过程的直观描述。在DDPM中, X 0 X_0 X0为目标分布, X T X_T XT是通过对 X 0 X_0 X0中数据进行T步加噪后的分布,可成为先验分布。从右到左,是加噪过程,或称为前向过程/正向过程,每一步对上一步随机增加一点噪声,经过T步后,原始图片完全变成一个噪声分布,一般假设是一个标准正太分布,这一过程可由条件概率 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)表征,是一个马尔可夫过程, x t x_t xt只与 x t − 1 x_{t-1} xt1有关。

生成过程,是去噪过程,或称为逆向过程,是从随机噪声出发,一步步减少噪声,即从 X T X_T XT X 0 X_0 X0的过程,即上图中从左至右。如果我们现在只有一批图片数据,从认知上来讲,从随机噪声生成图片是不可能的,此时就用到了引言中提到的,缺什么,就用深度学习去训练。生成模型的建模目标就是“如何基于 x t x_t xt预测出 x t − 1 x_{t-1} xt1”,即一个条件概率分布,记为 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_t) pθ(xt1xt),在深度学习公式推导中 θ \theta θ一般表征与训练模型相关的项。

现在我们知道了,DDPM的学习目标就是通过模型训练过程对分布 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_t) pθ(xt1xt)进行建模。

加噪过程的慢与快

从真实数据分布采样的数据点 x 0 ∼ q ( x 0 ) x_0 \sim q(x_0) x0q(x0),以T步向样本中逐步添加少量噪声,产生一系列的噪声样本 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT。每一步加噪过程其实就是随机从一个高斯分布中采样噪声,然后与上一步数据相加,每一步噪声添加的分布方差由 β 1 , β 2 , . . . , β T \beta_1,\beta_2,...,\beta_T β1,β2,...,βT控制,在DDPM中 β i \beta_i βi是超参数。前面提到,加噪过程符合马尔可夫过程,且因为每一步实在上一步数据中增加少量噪声,故任务每一步数据都符合高斯分布,即有以下公式:
q ( x t ∣ x t − 1 ) = N ( x t ∣ 1 − β t , β t I ) (1) q(x_t|x_{t-1}) = N(x_t|\sqrt{1-\beta_t},\beta_t I) \tag1 q(xtxt1)=N(xt1βt ,βtI)(1)
其中 { β i ∈ ( 0 , 1 ) } 1 T \{\beta_i \in (0,1)\}_1^T {βi(0,1)}1T,且 β 1 < β 2 < , . . . , < β T \beta_1<\beta_2<,...,<\beta_T β1<β2<,...,<βT

上述公式其实可以直接理解,即如果每步只是增加少量噪声,就相当于当前步 x t x_t xt是由前一步 x t − 1 x_{t-1} xt1和少量噪声组成,即 x t = α t x t − 1 + β t ϵ x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon xt=αt xt1+βt ϵ,其中 ϵ ∼ N ( 0 , I ) \epsilon \sim N(0,I) ϵN(0,I)。随着步数t增加,数据 x t x_t xt逐渐丢失其可区分的特征,最终当T足够大时, x T x_T xT等价于各项同性的高斯分布。DDPM中T为1000,一步一步计算是慢的,但基于马尔可夫过程,使用重参数化技巧,能实现一步到位,即给定 x 0 x_0 x0和步数 t t t,能直接计算出 x t x_t xt

基于公式(1),记 α t = 1 − β t , α ˉ t = ∏ 1 t α i \alpha_t = 1 - \beta_t, \bar{\alpha}_t=\prod_1^t \alpha_i αt=1βt,αˉt=1tαi,有:
x t = 1 − β t x t − 1 + β t ϵ t − 1 = α t x t − 1 + 1 − α t ϵ t − 1 = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 \begin{align*} x_t & = \sqrt{1-\beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \\ & = \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} \epsilon_{t-1} \\ & = \sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}} \epsilon_{t-2})+ \sqrt{1-\alpha_t} \epsilon_{t-1} \\ & = \sqrt{\alpha_t \alpha_{t-1}}x_{t-2} + \sqrt{\alpha_t (1-\alpha_{t-1})}\epsilon_{t-2}+\sqrt{1-\alpha_t} \epsilon_{t-1} \tag2 \end{align*} xt=1βt xt1+βt ϵt1=αt xt1+1αt ϵt1=αt (αt1 xt2+1αt1 ϵt2)+1αt ϵt1=αtαt1 xt2+αt(1αt1) ϵt2+1αt ϵt1(2)

有两个高斯分布, X ∼ N ( μ 1 , σ 1 2 I ) X \sim N(\mu_1, \sigma_1^2I) XN(μ1,σ12I) Y ∼ N ( μ 2 , σ 2 2 I ) Y \sim N(\mu_2, \sigma_2^2I) YN(μ2,σ22I),则
a X + b Y ∼ N ( a μ 1 + b μ 2 , ( a 2 σ 1 2 + b 2 σ 2 2 ) I ) aX + bY \sim N(a\mu_1+b\mu_2, (a^2\sigma_1^2+b^2\sigma_2^2)I) aX+bYN(aμ1+bμ2,(a2σ12+b2σ22)I)
即,两个高斯分布之和也符合一个高斯分布。

上述公式(2)中后面两项是两个噪声项之和,再结合上段阐述的两个高斯分布之和也符合一个高斯分布,自然而然就可以会联想到将两个噪声项合并。即,有两个高斯分布, ϵ t − 1 ∼ N ( 0 , I ) \epsilon_{t-1} \sim N(0,I) ϵt1N(0,I) ϵ t − 2 ∼ N ( 0 , I ) \epsilon_{t-2} \sim N(0,I) ϵt2N(0,I),则
α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 ∼ N ( 0 , ( α t ( 1 − α t − 1 ) + 1 − α t ) I ) ∼ N ( 0 , ( α t − α t α t − 1 + 1 − α t ) I ) ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) \begin{align*} \sqrt{\alpha_t (1-\alpha_{t-1})}\epsilon_{t-2}+\sqrt{1-\alpha_t} \epsilon_{t-1} & \sim N(0,(\alpha_t (1-\alpha_{t-1})+1-\alpha_t)I) \\ & \sim N(0,(\alpha_t-\alpha_t\alpha_{t-1}+1-\alpha_t)I) \\ & \sim N(0,(1-\alpha_t\alpha_{t-1})I) \end{align*} αt(1αt1) ϵt2+1αt ϵt1N(0,(αt(1αt1)+1αt)I)N(0,(αtαtαt1+1αt)I)N(0,(1αtαt1)I)
故公式(2)中后面两项可以用一个噪声项表示,即
α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 = 1 − α t α t − 1 ϵ ˉ t − 2 \sqrt{\alpha_t (1-\alpha_{t-1})}\epsilon_{t-2}+\sqrt{1-\alpha_t} \epsilon_{t-1} = \sqrt{1-\alpha_t\alpha_{t-1}} \bar{\epsilon}_{t-2} αt(1αt1) ϵt2+1αt ϵt1=1αtαt1 ϵˉt2
将上式带入公式(2)有
x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ˉ t − 2 (3) x_t = \sqrt{\alpha_t \alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} \bar{\epsilon}_{t-2} \tag3 xt=αtαt1 xt2+1αtαt1 ϵˉt2(3)
通过上述公式推导, x t x_t xt从基于 x t − 1 x_{t-1} xt1和噪声计算转换为可基于 x t − 2 x_{t-2} xt2和噪声计算,继续按照上述推导步骤,将公式(3)中的 x t − 2 x_{t-2} xt2 x t − 3 x_{t-3} xt3和噪声表示,会将公式(3)转换为以下形式
x t = α t α t − 1 α t − 2 x t − 3 + 1 − α t α t − 1 α t − 2 ϵ ˉ t − 3 x_t = \sqrt{\alpha_t \alpha_{t-1} \alpha_{t-2}}x_{t-3} + \sqrt{1-\alpha_t\alpha_{t-1}\alpha_{t-2}} \bar{\epsilon}_{t-3} xt=αtαt1αt2 xt3+1αtαt1αt2 ϵˉt3
最终会得到
x t = α t α t − 1 . . . α 1 x 0 + 1 − α t α t − 1 . . . α 1 ϵ ˉ 0 = α ˉ t x 0 + 1 − α ˉ t ϵ ˉ 0 \begin{align*} x_t & = \sqrt{\alpha_t \alpha_{t-1}... \alpha_1}x_0 + \sqrt{1-\alpha_t\alpha_{t-1}...\alpha_1} \bar{\epsilon}_0 \\ & = \sqrt{ \bar{\alpha}_t} x_0 + \sqrt{1- \bar{\alpha}_t} \bar{\epsilon}_0 \tag4 \end{align*} xt=αtαt1...α1 x0+1αtαt1...α1 ϵˉ0=αˉt x0+1αˉt ϵˉ0(4)
经过一系列推导,我们得到了公式(4),可以基于 x 0 x_0 x0和噪声,直接一步到位生成 x t x_t xt,因为 ϵ ˉ 0 ∼ N ( 0 , I ) \bar{\epsilon}_0 \sim N(0,I) ϵˉ0N(0,I),公式(4)与以下概率分布等价,
q ( x t ∣ x 0 ) ∼ N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t|x_0) \sim N(x_t;\sqrt{ \bar{\alpha}_t} x_0, (1- \bar{\alpha}_t)I) q(xtx0)N(xt;αˉt x0,(1αˉt)I)

如果直接使用公式(1)从 x 0 x_0 x0开始一步一步计算 x t x_t xt,这个过程又慢又麻烦;当通过一系列推导,我们得到了公式(4),可以基于步数 x 0 x_0 x0 t t t直接计算出 x t x_t xt,使得计算过程又快又简洁。

无中生有的目标分布

如果我们有过模型训练的经验,那就一定知道,需要有一个目标值或GT值与模型的预测值计算损失才能实现训练闭环。在前文中我们说到,DDMP就是对“能基于 x t x_t xt计算出 x t − 1 x_{t-1} xt1”的逆向分布过程建模,模型训练预测出的分布用 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_t) pθ(xt1xt)表示,那与预测分布进行比较的目标分布应该如何表示呢?

假设目标分布用 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)表示,请问想要计算出 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)这个分布可能吗?理论上,是可能的,需要遍历整个数据集,然后通过大量计算,才能实现。如果我们真的大费周章计算出了 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt),那也没必要训练模型了,反正已经知道了目标分布,直接采样就可以了。现在就遇到了一个进退两难的地步,模型训练需要一个目标分布,但目标分布难以获得,并且获得之后就没有训练的必要了。那么到底应该如何训练呢?

尽快后续补充

看似巧合的损失函数

尽快后续补充

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com