diffusion model的概率学原理

本篇文章是学习大白话AI | 图像生成模型DDPM | 扩散模型 | 生成模型 | 概率扩散去噪生成模型的笔记。

一、正态分布

正态分布又称高斯分布,是生活中最常见的一种概率分布。

1.正态分布曲线

正态分布的概率密度曲线近似一个钟,所以被称为钟形曲线。

 2.正态分布概率密度函数

正态分布的概率密度函数为

f(x) = \frac{1}{\sqrt{2\pi}} e^{ -\frac{(x-\mu)^2}{2\sigma^2}}

特别的,当\mu=0,\sigma=1的时候,

f(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}} 

这个分布也被称为标准正态分布,记为N(0,1^2) 

二、高斯噪声

从一个均值为0,方差为1的正态分布中随机抽取样本,生成一组符合该分布的随机变量,这组变量就被称为“标准正态分布随机变量”。

可以看到它们大部分都接近均值0,只有小部分超过了\pm一个标准差的范围。这样的随机变量叫做高斯噪声。 

三、扩散模型

1.扩散现象

扩散现象是指粒子从高浓度区域向低浓度区域移动的过程,例如,向一杯水中滴入一滴墨水后,可以观察到以下的现象。

扩散模型是受其启发,通过逐步向图像中加入高斯噪声来模拟这种现象。

并通过逆过程从(随机)噪声中生成图片。

2.前向加噪

在向图片添加噪声之前,我们首先要将三通道图片的像素进行归一化,使其范围变为[-1, 1]之间,便于我们后续添加噪声。

归一化执行完之后,我们需要随机采样一张同样大小的噪声图片,噪声图片中所有像素通道数值遵从正态分布。接下来,再使用以下公式将高斯噪声与同尺寸需要加噪的图片进行混合。

\sqrt \beta *\epsilon +\sqrt{1-\beta}*x

在以上的公式中,\epsilon代表高斯噪声,x代表原图片,\beta为[0, 1]之间的超参数。 

对于每一时刻的图片,我们都有它与上一时刻图片的递推关系:

 \sqrt \beta_t *\epsilon_t +\sqrt{1-\beta_t}*x_{t-1}

通过上述公式,我们可以从x_0依次递推得到x_T

在上述式子中,每一步的\epsilon_t都是重新采样的正态分布随机变量,而且每一步的\beta_t也不同。

0<\beta_1<\beta_2<...<\beta_{t}<...<\beta_T<1 

\beta_t从最初接近0的某个数开始递增,到最后接近于1,这是因为扩散的速度是越来越快的。

为了简化后续的推导,我们引入一个新的变量\alpha_t=1-\beta_t,所以以上的公式又可以写成如下形式:

x_t=\sqrt{1-\alpha_t}*\epsilon_t+\alpha_t*x_{t-1} 

使用上述公式,我们就可以从x_0开始迭代t次得到x_t

那么,我们有没有一种简便的方法,无须迭代,直接从x_0x_t呢?

我们已经知道x_{t-1}x_{t}以及x_{t-2}x_{t-1}的递推式

如果将下面的式子替换掉上面的x_{t-1} ,就得到了从x_{t-2}x_t的关系式:

其中的\epsilon_{t-1}\epsilon_t表示两个独立的随机变量。

对于正态分布来说,两个随机变量的叠加满足以下关系:

而正态分布乘以一个常数依然满足正态分布,因此:

就等于:

x_t=\sqrt{1-\alpha_t\alpha_{t-1}}\epsilon+\sqrt{\alpha_t\alpha_{t-1}}*x_{t-2}

根据以上的方法,我们又可以得到x_{t-3}x_t的关系式:

x_t=\sqrt{1-\alpha_t\alpha_{t-1}\alpha_{t-2}}*\epsilon+\sqrt{\alpha_t\alpha_{t-1}\alpha_{t-2}}*x_{t-3} 

根据数学归纳法我们有:

x_t=\sqrt{1-\prod \limits_{i=t-k-1}^t\alpha_i}*\epsilon+\sqrt{\prod \limits_{t-k-1}^t\alpha_i}*x_{t-k} 

如果我们用:

\bar\alpha_t=\alpha_0\alpha_1...\alpha_t 

那么x_0x_t的关系就可以表示为:

x_t=\sqrt{1-\bar\alpha_t}*\epsilon+\sqrt{\bar\alpha_t}*x_0 

3.反向去噪 

反向去噪的目的是在已知x_t的情况下得到x_{t-1}的图片。

因为x_{t-1}x_t是一个随机过程,因此 x_tx_{t-1}应该也是一个随机过程。

我们可以用p(x_{t-1}|x_t)表示在给定x_{t}的情况下,前一时刻x_{t-1}的概率。

根据贝叶斯定理,

p(x_{t-1}|x_t)=\frac{p(x_t|x_{t-1})*p(x_{t-1})}{p(x_t)}

p(x_{t-1})p(x_t)实际上是p(x_{t-1}|x_0)p(x_t|x_0),也就是在给定原图x_0的条件下的概率。

根据x_{t-1}x_t的递推式: 

x_t=\sqrt{1-\alpha_t}*\epsilon_t+\alpha_t*x_{t-1}

可知,p(x_t|x_{t-1})满足N(\sqrt\alpha_tx_t,1-\alpha_t)

同理,根据x_0x_t的递推式可知,p(x_{t}|x_0)满足N(\sqrt{\bar\alpha_t}x_{t-1},1-\bar\alpha_t)

当确定了正态分布的均值和方差之后,我们就可以写出他们的概率密度函数。

将上面的概率密度函数带入贝叶斯公式之后可得:

 

根据公式可知,p(x_{t-1}|x_t)也满足正态分布,我们可以将上式变换成如下的形式:

 

至此,我们就可以确定p(x_{t-1}|x_t)的分布形式:

 

在之前的推导中,我们已经得到了从x_0x_t的递推式:

 x_t=\sqrt{1-\bar\alpha_t}*\epsilon+\sqrt{\bar\alpha_t}*x_0

将其稍加变化可得:

x_0=\frac{x_t-\sqrt{1-\bar\alpha_t}*\epsilon}{\sqrt{\bar\alpha_t}} 

再用其替换上面式子中的x_0

 

从上述的式子中我们可以看到,只要知晓了从x_0x_t加的噪声,我们就可以得到它前一时刻x_{t-1}的分布。

我们可以训练一个神经网络来预测\epsilon,从而由x_t得到x_{t-1}的分布。

 

除了x_t外,神经网络同时还接收t作为神经网络的输入,这是为了更好地学习到该图像在整个加噪过程中的位置。

而加噪过程的最后一张图片x_T其实是随机的高斯噪声。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值