本文正在参与 人工智能创作者扶持计划

作者简介:秃头小苏,致力于用最浅显的语言描绘问题

专栏推荐:深度学习网络原理与实战

近期目标:写好专栏的每一篇文章

支撑小苏:点赞、收藏⭐、留言

Diffusion Model原理详解及源码解析

写在前面

Hello,咱们好,我是小苏

  今日来为咱们介绍Diffusion Model(分散模型 ),在具体介绍之前呢,先来谈谈Diffusion Model主要是用来干什么的。其实啊,它对标的是生成对抗网络(GAN),只需GAN能干的事它根本都能干。在之前我现已做过许多期有关GAN网络的教育,还不清楚的能够点击☞☞☞进入专栏检查详情。在我一番体验Diffusion Model后,它给我的感觉是十分冷艳的。我之前用GAN网络来完成一些图片生成使命其实效果并不是很抱负,并且往往练习很不安稳。可是换成Diffusion Model后生成的图片则十分传神,也显着感觉到每一轮练习的成果相比之前都愈加优异,也即练习愈加安稳。

  说了这么多,我便是想告诉咱们Diffusion Model值得一学。可是说实话,这部分的公式了解起来是有必定困难的,我想这也成为了想学这个技术的同学的拦路虎。那么本文将用浅显的语言和公式为咱们介绍Diffusion Model,并且结合公式为咱们梳理Diffusion Model的代码,探究其是怎样经过代码完成的。假如你想弄懂这部分,请耐性读下去,信任你会有所收获。

假如你预备好了的话,就让咱们开端吧!!!

Diffusion Model原理详解✨✨✨

全体思路

Diffusion Model的全体思路如下图所示:

Diffusion Model原理详解及源码解析

其主要分为正向进程和逆向进程,正向进程类似于编码,逆向进程类似于解码。

  • 正向进程

    首要,关于一张原始图片x0x_0,咱们给x0x_0加一个高斯噪声,图片由x0x_0变成x1x_1【留意:这儿必需求加高斯噪声喔,由于高斯噪声遵守高斯散布,后面的一些运算需求用到高斯散布的一些特性】接着咱们会在x1x_1的基础上再增加高斯噪声得到x2x_2。重复上述增加高斯噪声进程,直到图片变成xnx_n,由于增加了足够多的高斯噪声,现在的xnx_n近似遵守高斯散布(又称正态散布)。

    现在有一个问题需求咱们考虑一下,咱们每一步增加高斯噪声的量一向是不变的吗?滴,开端回答。答案是每步增加高斯噪声的量是改变的,且后一步比前一步增加的高斯噪声更多。我想这一点你经过上图也十分容易了解,一开端原图比较洁净,咱们增加少量高斯噪声就能对原图发生搅扰;但越往后高斯噪声量越多,假如还增加一开端少量的高斯噪声,那么这时对上一步成果根本不会发生任何影响。【注:后文所述的每个时间图画和这儿的每一步图画都是一个意思,如x1x_1时间图画表明的便是x1x_1这个图画】

  • 逆向进程

    首要,咱们会随机生成一个遵守高斯散布的噪声图片,然后一步一步的减少噪声直到生成预期图片。逆向进程咱们先有这样的一个知道就好,具体细节稍后介绍。

怎样样,咱们现在的感觉怎样?是不是知道了Diffusion Model大概是怎样样的进程了呢,可是又对里面的细节感到很迷惑,搞不懂这样是怎样复原出图片的。不必担心,后面我会渐渐为咱们细细介绍。

实施细节

  这一部分为咱们介绍一下Diffusion Model正向进程和逆向进程的细节,主要经过推导一些公式来表明加噪前后图画间的联系,谈到公式,咱们可能头都大了,信任我,你能够看懂!!!

正向进程

  在全体思路部分咱们现已知道了正向进程其实便是一个不断加噪的进程,于是咱们考虑能不能用一些公式表明出加噪前后图画的联系呢。我想让咱们先考虑一下后一时间的图画受哪些因素影响呢,更具体的说,比方x2x_2由哪些量所决议呢?我想这个问题很简略,即x2x_2是由x1x_1和所加的噪声一起决议的,也便是说后一时间的图画主要由两个量决议,其一是上一时间图画,其二是所加噪声量。【这个很好了解,咱们应该都能了解吧】了解了这点,咱们就能够用一个公式来表明xtx_t时间和xt−1x_{t-1}时间两个图画的联系,如下:

              Xt=atXt−1+1−atZ1{X_t} = \sqrt {{a_t}} {X_{t – 1}} + \sqrt {1 – {a_t}} {Z_1}     ——公式1

  其间,XtX_t表明tt时间的图画,Xt−1X_{t-1}表明t−1t-1时间图画,Z1Z_1表明增加的高斯噪声,其遵守N(0,1)散布。【注:N(0,1)表明规范高斯散布,其方差为1,均值为0】目前你能够看出XtX_tXt−1X_{t-1}Z1Z_1都有联系,这和咱们前文所述后一时间的图画由前一时间图画和噪声决议相符合,这时你可能要问了,那么这个公式前面的at\sqrt {a_t}1−at\sqrt {1-a_t}是什么呢,其实这个表明这两个量的权重大小,它们的平方和为1。

  enmmm,我想你现已了解了公式1,可是你可能对at\sqrt {a_t}1−at\sqrt {1-a_t}的了解还存在一些疑问,如为什么要设置这样的权重?这个权重的设置是咱们预先设定的吗?其实呢,ata_t还和另外一个量t\beta_{t}有关,联系式如下:

​              at=1−ta_t=1- \beta_t      ——公式2

  其间,t\beta_t是预先给定的值,它是一个随时间不断增大的值,论文中它的规模为[0.0001,0.02]。已然t\beta_t越来越大,则ata_t越来越小,at\sqrt {a_t}越来越小,1−at\sqrt {1-a_t}越来越大。现在咱们在来考虑公式1,Z1Z_1的权重1−at\sqrt {1-a_t}跟着时间增加越来越大,表明咱们所加的高斯噪声越来越多,这和咱们全体思路部分所述是共同的,即越往后所加的噪声越多。


  现在,咱们现已得到了xtx_t时间和xt−1x_{t-1}时间两个图画的联系,可是xt−1x_{t-1}时间的图画是不知道的。【注:只需x0x_0阶段图画是已知的,即原图】咱们需求再由xt−2x_{t-2}时间推导出xt−1x_{t-1}时间图画,然后再由xt−3x_{t-3}时间推导出xt−2x_{t-2}时间图画,依此类推,直到由x0x_{0}时间推导出x1x_{1}时间图画即可。已然这样咱们不妨先试试xt−2x_{t-2}时间图画和xt−1x_{t-1}时间图画的联系,如下:

​             Xt−1=at−1Xt−2+1−at−1Z2{X_{t-1}} = \sqrt {{{{a}}_{t-1}}} {X_{t – 2}} + \sqrt {1 – {{{a}}_{t-1}}} {Z_2}      ——公式3

这个公式很简略吧,便是公式1的一个类推公式,此刻咱们将公式3代入公式1中得:

​        Xt=at(at−1Xt−2+1−at−1Z2)+1−atZ1=atat−1Xt−2+at(1−at−1)Z2+1−atZ1=atat−1Xt−2+1−atat−1Z2\begin{array}{l} {X_t} = \sqrt {{a_t}} (\sqrt {{a_{t – 1}}} {X_{t – 2}} + \sqrt {1 – {a_{t – 1}}} {Z_2}) + \sqrt {1 – {a_t}} {Z_1}\\ \quad \ {\rm{}} = \sqrt {{a_t}{a_{t – 1}}} {X_{t – 2}} + \sqrt {{a_t}(1 – {a_{t – 1}})} {Z_2} + \sqrt {1 – {a_t}} {Z_1}\\ \quad \ \ {\rm{ = }}\sqrt {{a_t}{a_{t – 1}}} {X_{t – 2}} + \sqrt {1 – {a_t}{a_{t – 1}}} {{\hat Z}_2} \end{array}      ——公式4

这个公式4咱们能了解吗?我觉得咱们应该对终究一个等式存在疑问,也即at(1−at−1)Z2+1−atZ1\sqrt {{a_t}(1 – {a_{t – 1}})} {Z_2} + \sqrt {1 – {a_t}} {Z_1}怎样等于1−atat−1Z2\sqrt {1 – {a_t}{a_{t – 1}}} {{\hat Z}_2} ?其实呢,这个用到了高斯散布的一些知识,这部分见附录部分,我做相关介绍。看了附录中高斯散布的相关性质,我想这儿你应该能够了解了,我在帮咱们整理一下,如下图所示:

Diffusion Model原理详解及源码解析

这下关于公式4的内容都了解了叭。留意这儿的Z2\hat Z_2也是遵守N(0,1)N(0,1)高斯散布的,at(1−at−1)Z2+1−atZ1\sqrt {{a_t}(1 – {a_{t – 1}})} {Z_2} + \sqrt {1 – {a_t}} {Z_1}遵守N(0,1−atat−1)N(0,1-a_ta_{t-1})。咱们来看看公式4得到了什么——其得到了xtx_t时间图画和xt−2x_{t-2}时间图画的联系。按照咱们从前的了解,咱们再列出xt−3x_{t-3}时间图画和xt−2x_{t-2}时间图画的联系,如下:

​              Xt−2=at−2Xt−3+1−at−2Z3{X_{t-2}} = \sqrt {{{{a}}_{t-2}}} {X_{t – 3}} + \sqrt {1 – {{{a}}_{t-2}}} {Z_3}     ——公式5

同理,咱们将公式5代入到公式4中,得到xtx_t时间图画和xt−3x_{t-3}时间图画的联系,公式如下:

​            Xt=atat−1at−2Xt−3+1−atat−1at−2Z3X_t=\sqrt {a_ta_{t-1}{a_{t-2}}}X_{t-3}+\sqrt {1-a_ta_{t-1}a_{t-2}}\hat Z_{3}      ——公式6

  公式5我没有带咱们一步步的核算了,只写出了终究成果,咱们能够自己算一算,十分简略,也只用到了高斯散布的相关性质。留意上述的Z3\hat {Z_3}相同遵守N(0,1)N(0,1)的高斯散布。那么公式6就得到了xtx_t时间图画和xt−3x_{t-3}时间图画的联系,咱们假如这么一向核算下去,就会得到xtx_t时间图画和x0x_{0}时间图画的联系。可是这样的推导貌似很绵长,跟着向后推导你会发现这种推导是有规则的。咱们能够来比较一下公式4和公式6的成果,你会发现很显着的规则,这儿我就依据这个规则直接写出xtx_t时间图画和x0x_{0}时间图画的联系,你看看和你想的是否共同喔,公式如下:

​              Xt=atX0+1−atZtX_t=\sqrt {{{\bar a}_t}} X_0+\sqrt {1-\bar a_t}\hat Z_t      ——公式7

  其间at\bar a_t表明累乘操作,即at=at⋅at−1⋅at−2⋯a1{{\bar a}_t} = {a_t} \cdot {a_{t – 1}} \cdot {a_{t – 2}} \cdots {a_1}Zt\hat Z_t相同遵守N(0,1)N(0,1)的高斯散布。【这儿Zt\hat Z_t仅仅一个表明,只需ZZ遵守规范高斯散布即可,用什么表明都行】这个公式7便是整个正向进程的中心公式喔,其表明xtx_t时间的图画能够由x0x_0时间的图画和一个规范高斯噪声表明,咱们需求紧记这个公式哦,在后文以及代码中会用到。


逆向进程

  逆向进程是将高斯噪声复原为预期图片的进程。先来看看咱们已知条件有什么,其实就一个xtx_t时间的高斯噪声。咱们希望将xtx_t时间的高斯噪声变成x0x_0时间的图画,是很难一步到位的,因此咱们考虑能不能和正向进程相同,先考虑xtx_t时间图画和xt−1x_{t-1}时间的联系,然后一步步向前推导得出定论呢。好的,思路有了,那就先来想想怎样由已知的xtx_t时间图画得到xt−1x_{t-1}时间图画叭。

  有没有大佬想出怎样办呢?我就不卖关子了,要想由xtx_t时间图画得到xt−1x_{t-1}时间图画,咱们需求运用正向进程中的定论,咱们在正向进程中能够由xt−1x_{t-1}时间图画得到xtx_{t}时间图画,然后运用贝叶斯公式即可求解。

  !!!???什么,贝叶斯公式,不知道咱们是否了解。假如不知道的建议去学习一下概率的知识,假如实在也不想学,咱们就记住贝叶斯公式的表达式即可,如下:

Diffusion Model原理详解及源码解析

那么咱们将运用贝叶斯公式来求xt−1x_{t-1}时间图画,公式如下:

​              q(Xt−1∣Xt)=q(Xt∣Xt−1)q(Xt−1)q(Xt)q({X_{t – 1}}|{X_t}) = q({X_t}|{X_{t – 1}})\frac{{q({X_{t – 1}})}}{{q({X_t})}}     ——公式8

  公式8中q(Xt∣Xt−1)q({X_t}|{X_{t – 1}})咱们能够求得,便是刚刚正向进程求的嘛。但q(Xt−1)q(X_{t – 1})q(Xt)q(X_{t})是不知道的。又由公式7可知,可由X0X_0得到每一时间的图画,那当然能够得到XtX_tXt−1X_{t-1}时间的图画,故将公式8加一个X0X_0作为已知条件,将公式8变成公式9,如下:

​            q(Xt−1∣Xt,X0)=q(Xt∣Xt−1,X0)q(Xt−1∣X0)q(Xt∣X0)q({X_{t – 1}}|{X_t},{X_0}) = q({X_t}|{X_{t – 1}},{X_0})\frac{{q({X_{t – 1}}|{X_0})}}{{q({X_t}|{X_0})}}     ——公式9

  现在能够发现公式9右边3项都是能够算的啦,咱们列出它们的公式和对应的散布,如下图所示:

Diffusion Model原理详解及源码解析

  知道了公式9等式右边3项遵守的散布,咱们就能够核算出等式左面的q(Xt−1∣Xt,X0)q({X_{t – 1}}|{X_t},{X_0})。咱们知道怎样核算嘛,这个很简略啦,没有什么技巧,便是纯算。在附录->高斯散布性质部分咱们知道了高斯散布的表达式为:f(x)=12e−(x−u)222f(x) = \frac{1}{{\sqrt {2\pi \sigma } }}{e^{ – \frac{{{{(x – u)}^2}}}{{2{\sigma ^2}}}}}。那么咱们只需求求出公式9等式右边3个高斯散布表达式,然后进行乘除运算即可求得q(Xt−1∣Xt,X0)q({X_{t – 1}}|{X_t},{X_0})

Diffusion Model原理详解及源码解析

  上图为等式右边三个高斯散布表达式,这个成果怎样得的咱们应该都知道叭,便是把各自的均值和方差代入高斯散布表达式即可。现咱们只需对上述三个式子进行对应乘除运算即可,如下图所示:

Diffusion Model原理详解及源码解析

  好了,咱们上图中得到了式子M⋅e−12[(tt+11−at−1)Xt−12−(2attXt+2at−11−at−1X0)Xt−1+C(Xt,X0)]M \cdot {e^{ – \frac{1}{2}[(\frac{{{\alpha _t}}}{{{\beta _t}}} + \frac{1}{{1 – {{\bar a}_{t – 1}}}})X_{t – 1}^2 – (\frac{{2\sqrt {{{\bar a}_t}} }}{{{\beta _t}}}{X_t} + \frac{{2\sqrt {{{\bar a}_{t – 1}}} }}{{1 – {{\bar a}_{t – 1}}}}{X_0}){X_{t – 1}} + C({X_t},{X_0})]}}其实便是q(Xt−1∣Xt)q({X_{t – 1}}|{X_t})的表达式了。知道了这个表达式有什么用呢,主要是求出均值和方差。首要咱们应该知道对高斯散布进行乘除运算的成果仍然是高斯散布,也便是说q(Xt−1∣Xt)q({X_{t – 1}}|{X_t})遵守高斯散布,那么他的表达式就为 f(x)=12e−(x−u)222=12e−12[x22−2ux2+u22]f(x) = \frac{1}{{\sqrt {2\pi \sigma } }}{e^{ – \frac{{{{(x – u)}^2}}}{{2{\sigma ^2}}}}} = \frac{1}{{\sqrt {2\pi \sigma } }}{e^{ – \frac{1}{2}[\frac{{{x^2}}}{{{\sigma ^2}}} – \frac{{2ux}}{{{\sigma ^2}}} + \frac{{{u^2}}}{{{\sigma ^2}}}]}},咱们对比两个表达式,就能够核算出uu2\sigma^2,如下图所示:

Diffusion Model原理详解及源码解析

  现在咱们有了均值uu和方差2\sigma^2就能够求出q(Xt−1∣Xt)q({X_{t – 1}}|{X_t})了,也便是求得了xt−1x_{t-1}时间的图画。推导到这儿不知道咱们听懂了多少呢?其实你动动小手来算一算你会发现它仍是很简略的。可是不知道咱们有没有发现一个问题,咱们刚刚求得的终究成果uu2\sigma^2中含义一个X0X_0,这个X0X_0是什么啊,他是咱们终究想要的成果,现在怎样当成已知量了呢?这一块确实有点古怪,咱们先来看看咱们从哪里引入了X0X_0。往上翻翻你会发现运用贝叶斯公式时咱们运用了正向进程中推导的公式7来表明q(Xt−1)q(X_{t – 1})q(Xt)q(X_{t}),可是现在看来那个地方会引入一个新的不知道量X0X_0,该怎样办呢?这时咱们考虑用公式7来反向估计X0X_0,即反解公式7得出X0X_0的表达式,如下:

​              X0=1at(Xt−1−atZt){X_0} = \frac{1}{{\sqrt {{{\bar a}_t}} }}({X_t} – \sqrt {1 – {{\bar a}_t}} {{\hat Z}_t})      ——公式10

得到X0X_0的估计值,此刻将公式10代入到上图的uu中,核算后得到终究估计的 u~{\tilde u},表达式如下:

​              u~=1at(xt−t1−atZt)\tilde u = \frac{1}{{\sqrt {{a_t}} }}({x_t} – \frac{{{\beta _t}}}{{\sqrt {1 – {{\bar a}_t}} }}{{\hat Z}_t})      ——公式11

好了,现在在整理一下t−1t-1时间图画的均值uu和方差2\sigma^2,如下图所示:

Diffusion Model原理详解及源码解析

有了公式12咱们就能够估计出Xt−1X_{t-1}时间的图画了,接着就能够一步步求出Xt−2X_{t-2}Xt−3X_{t-3}X1X_1X0X_0的图画啦。


原理小结

  这一小节原理详解部分就为咱们介绍到这儿了,咱们听懂了多少呢。信任你阅读了此部分后,对Diffusion Model的原理其完成已有了哥大概的解了,可是肯定还有一些疑问的地方,不必担心,代码部分会进一步协助咱们。

Diffusion Model源码解析✨✨✨

代码下载及运用

  本次代码下载地址:Diffusion Model代码

  先来说说代码的运用吧,代码其实包含两个项目,一个的ddpm.py,另一个是ddpm_condition.py。咱们能够了解为ddpm.py是最简略的分散模型,ddpm_condition.pyddpm.py的优化。本节会以ddpm.py为咱们讲解。代码运用起来十分简略,首要在ddpm.py文件中指定数据集途径,即设置dataset_path的值,然后咱们就能够运行代码了。需求留意的是,假如你运用的是CPU的话,那么你可能还需求修改一下代码中的device参数,这个就很简略啦,咱们自己探索探索就能研究了解。


  这儿来简略说说ddpm的意思,英文全称为Denoising Diffusion Probabilistic Model,中文译为去噪分散概率模型


代码流程图

这儿咱们直接来看论文中给的流程图好了,如下:

Diffusion Model原理详解及源码解析

  看到这个图你大概率是懵逼的,我来稍稍为咱们解释一下。首要这个图表明整个算法的流程分为了练习阶段(Training)和采样阶段(Sampling)。

  • Training

    咱们先来看看练习阶段咱们做了什么?众所周知,练习咱们需求有实在值和猜测值,那么关于本例的实在值和猜测值是什么呢?实在值是咱们输入的图片,猜测值是咱们输出的图片吗?其实不是,这儿我就不好咱们卖关子了。关于本例来说,实在值和猜测值都是噪声,咱们相同拿下图为咱们做个演示。

    Diffusion Model原理详解及源码解析

    咱们在正向进程中参加的噪声其实都是已知的,是能够作为实在值的。而逆向进程相当于一个去噪进程,咱们用一个模型来猜测噪声,让正向进程每一步参加的噪声和逆向进程对应进程猜测的噪声尽可能共同,而逆向进程猜测噪声的方式便是丢入模型练习,其实便是Training中的第五步。

  • Sampling

    知道了练习进程,采样进程就很简略了,其实采样进程就对应咱们理论部分介绍的逆向进程,由一个高斯噪声一步步向前迭代,终究得到X0X_0时间图画。

代码解析

  首要,按照咱们理论部分应该有一个正向进程,其最重要的便是终究得出的公式7,如下:

Xt=atX0+1−atZtX_t=\sqrt {{{\bar a}_t}} X_0+\sqrt {1-\bar a_t}\hat Z_t

  那么咱们在代码中看一看是怎样运用这个公式7的,代码如下:

def noise_images(self, x, t):
    sqrt_alpha_hat = torch.sqrt(self.alpha_hat[t])[:, None, None, None]
    sqrt_one_minus_alpha_hat = torch.sqrt(1 - self.alpha_hat[t])[:, None, None, None]
     = torch.randn_like(x)
    return sqrt_alpha_hat * x + sqrt_one_minus_alpha_hat * , 

  为随机的规范高斯散布,其实也便是实在值。咱们能够看出,上式的返回值sqrt_alpha_hat * x + sqrt_one_minus_alpha_hat其实就表明公式7。【注:这个代码我省略了许多细节,我只把要害的代码展现给咱们看,要想完全了解,还需求咱们记住调试调试了】

  接着咱们就经过一个模型猜测噪声,如下:

predicted_noise = model(x_t, t)

  model的结构很简略,便是一个Unet结构,然后里面嵌套了几个Transformer机制,我就不带咱们跳进去渐渐看了。现在有了猜测值,也有了实在值【返回后用noise表明】,就能够核算他们的丢失并不断迭代了。

loss = mse(noise, predicted_noise)
optimizer.zero_grad()
loss.backward()
optimizer.step()

  上述其实便是练习进程的大体结构,我省略了许多,要是咱们有任何问题的话能够评论区留言评论。现在就来看看采样进程的代码吧!!!

def sample(self, model, n):
    logging.info(f"Sampling {n} new images....")
    model.eval()
    with torch.no_grad():
        x = torch.randn((n, 3, self.img_size, self.img_size)).to(self.device)
        # for i in tqdm(reversed(range(1, self.noise_steps)), position=0):
        for i in tqdm(reversed(range(1, 5)), position=0):
            t = (torch.ones(n) * i).long().to(self.device)
            predicted_noise = model(x, t)
            alpha = self.alpha[t][:, None, None, None]
            alpha_hat = self.alpha_hat[t][:, None, None, None]
            beta = self.beta[t][:, None, None, None]
            if i > 1:
                noise = torch.randn_like(x)
            else:
                noise = torch.zeros_like(x)
            x = 1 / torch.sqrt(alpha) * (x - ((1 - alpha) / (torch.sqrt(1 - alpha_hat))) * predicted_noise) + torch.sqrt(beta) * noise   
    model.train()
    x = (x.clamp(-1, 1) + 1) / 2
    x = (x * 255).type(torch.uint8)
    return x

  上述代码要害的便是 x = 1 / torch.sqrt(alpha) * (x - ((1 - alpha) / (torch.sqrt(1 - alpha_hat))) * predicted_noise) + torch.sqrt(beta) * noise这个公式,其对应着代码流程图中Sampling阶段中的第4步。需求留意一下这儿的跟方差t\sigma_t这个公式给的是\sqrt {\beta},但其实在咱们理论核算时为t(1−at−1)1−at\sqrt {\frac{{{\beta _t}(1 – {{\bar a}_{t – 1}})}}{{1 – {{\bar a}_t}}}},这儿做了近似处理核算,即at−1{\bar a}_{t – 1}at\bar a_t都是十分小且近似0的数,故把(1−at−1)1−at{\frac{{(1 – {{\bar a}_{t – 1}})}}{{1 – {{\bar a}_t}}}}当成1核算,这儿留意一下就好。

代码小结

  能够看出,这一部分我所用的篇幅很少,只列出了要害的部分,许多细节需求咱们自己感悟。比方代码中时间T的用法,其实是较难了解的,代码中将其作为正余弦方位编码处理。假如你对方位编码不熟悉,能够看一下我的这篇文章的附录部分,有具体的介绍方位编码,信任你读后会有所收获。

参阅链接

由浅入深了解Diffusion

附录

高斯散布性质

高斯散布又称正态散布,其表达式为:

f(x)=12e−(x−u)222f(x) = \frac{1}{{\sqrt {2\pi \sigma } }}{e^{ – \frac{{{{(x – u)}^2}}}{{2{\sigma ^2}}}}}

其间uu为均值,2\sigma^2为方差。若随机变量服X从正态均值为uu,方差为2\sigma^2的高斯散布,一般记为X∼N(u,2)X \sim N(u,{\sigma ^2})。此外,有一点咱们需求知道,假如咱们知道一个随机变量遵守高斯散布,且知道他们的均值和方差,那么咱们就能写出该随机变量的表达式。


高斯散布还有一些十分好的性质,现举一些例子协助咱们了解。

  • X∼N(u,2)X \sim N(u,\sigma^2),则aX∼N(au,(a)2)aX \sim N(au,(a \sigma)^2)
  • X∼N(u1,21)X \sim N(u_1,{\sigma ^2}_1)Y∼N(u2,22)Y \sim N(u_2,{\sigma ^2}_2),则X+Y∼N(u1+u2,21+22)X+Y \sim N(u_1+u_2,{\sigma ^2}_1+{\sigma ^2}_2)

如若文章对你有所协助,那就

Diffusion Model原理详解及源码解析

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。