扩散模型笔记(pytorch实现)
逆扩散过程就是从噪声中恢复图像,当模型学会从噪声中恢复图像后,给定噪声数据,模型也能够由噪声生成图像。因此,推理时只包括逆扩散过程。扩散过程就是向样本图像中逐步添加噪声,学习如何将图像扩散为噪声。:从真实数据分布中采样得到的数据,可以粗略得理解成样本图像。:均值为0,方差为1的正态分布噪声,经过变换后可以表示第。扩散模型可以分为扩散/前向过程和逆扩散/反向过程。次扩散时向样本数据中添加高斯噪声后得
论文:Denoising Diffusion Probabilistic Models
讲解视频:Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读
视频笔记:Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读
示例代码:
符号和公式
x 0 x_0 x0:从真实数据分布中采样得到的数据,可以粗略得理解成样本图像。
x i , i = 1 , 2 , . . . , T x_i,i =1,2,...,T xi,i=1,2,...,T:第 i i i次扩散时向样本数据中添加高斯噪声后得到的样本。
q ( x ) q(x) q(x):扩散过程中,数据 x x x的分布,模型中统一为高斯分布。
q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1):给定 x t − 1 x_{t-1} xt−1的前提下, x t x_{t} xt的数据分布。
p ( x ) p(x) p(x):逆扩散过程中,数据 x x x的分布。
z t z_t zt:均值为0,方差为1的正态分布噪声,经过变换后可以表示第 i i i次扩散时向样本数据中添加的高斯噪声。
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1})=N(x_t;\sqrt{1-\beta_t }x_{t-1},\beta_tI) q(xt∣xt−1)=N(xt;1−βtxt−1,βtI): x t x_t xt是以 1 − β t x t − 1 \sqrt{1-\beta_t }x_{t-1} 1−βtxt−1为均值, β t I \beta_t I βtI为方差的正态分布。令 α t = 1 − β t , α ‾ t = ∏ i = 1 T α i \alpha_t=1-\beta_t,\overline{\alpha}_t=\prod^T_{i=1}\alpha_i αt=1−βt,αt=∏i=1Tαi,则 x t x_t xt可以写成下式:
x t = α t x t − 1 + 1 − α t z t − 1 x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z_{t-1} xt=αtxt−1+1−αtzt−1
将 x t − 1 x_{t-1} xt−1进行替换,基于正态分布叠加的规律,可以得到如下计算:
整体思路
扩散模型可以分为扩散/前向过程和逆扩散/反向过程。
扩散过程就是向样本图像中逐步添加噪声,学习如何将图像扩散为噪声。
逆扩散过程就是从噪声中恢复图像,当模型学会从噪声中恢复图像后,给定噪声数据,模型也能够由噪声生成图像。因此,推理时只包括逆扩散过程。
扩散过程
扩散模型和其它类型的潜空间模型的区别在于近似后验分布 q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:T∣x0),
扩散模型的前向过程固定在马尔科夫链上,所以具有下式:
前向过程根据方差表 β 1 , . . . , β T \beta_1,...,\beta_T β1,...,βT向数据中逐步添加高斯噪声,使 x t x_t xt成为以 1 − β t x t − 1 \sqrt{1-\beta_t }x_{t-1} 1−βtxt−1为均值, β t I \beta_t I βtI为方差的正态分布。即:
基于上面两个式子,可以推出 x T x_T xT和 x 0 x_0 x0的关系,如下:
反向过程
反向过程被定义为马尔科夫链,初始样本为标准正态分布 p ( x T ) = N ( x T ; 0 , I ) p(x_T)=N(x_T;0,I) p(xT)=N(xT;0,I)。
更多推荐
所有评论(0)