扩散模型(Diffusion Model)简介

参考:Diffusion model—扩散模型 - 优快云博客由浅入深了解Diffusion Model - 知乎https://arxiv.org/abs/2308.09388

1. 概述

  扩散模型是一种生成模型。可用在视觉生成任务上,如图像超分辨率、去模糊、JPEG伪影移除、阴影移除、去雾/霾/雨等等。
  扩散模型分为前向(扩散)过程和逆过程。前向过程逐步为图像增加逐像素噪声,直到图像满足高斯噪声;逆过程通过去噪来重建图像。
  扩散模型有很多种,常见的为去噪扩散概率模型(DDPM)。

2. 前向过程

  前向过程是逐步添加噪声的过程,因此其每个时刻仅与前一时刻有关。故前向过程可参数化为马尔科夫链: q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t ⋅ x t − 1 , β t I ) q(x_t|x_{t-1})=\mathcal{N}(x_t;\sqrt{1-\beta_t}\cdot x_{t-1},\beta_tI) q(xtxt1)=N(xt;1βt xt1,βtI)其中 x 0 ∼ p data ( x ) x_0\sim p_\text{data}(x) x0pdata(x)为训练数据点, x 1 , ⋯   , x T x_1,\cdots,x_T x1,,xT为逐步添加噪声后的数据, β t \beta_t βt为预定义参数。
  利用重参数技巧,由第一式可得 x t = 1 − β t x t − 1 + β t z t x_t=\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}z_t xt=1βt xt1+βt zt。递推,并将独立的、服从标准正态分布的随机变量 z 1 , z 2 , ⋯   , z t z_1,z_2,\cdots,z_t z1,z2,,zt合并为服从标准正态分布的随机变量 ϵ \epsilon ϵ,可得 x t = α ^ t x 0 + 1 − α ^ t ϵ x_t=\sqrt{\hat{\alpha}_t}x_0+\sqrt{1-\hat{\alpha}_t}\epsilon xt=α^t x0+1α^t ϵ。从而可根据 x 0 x_0 x0计算 x t x_t xt的概率分布: q ( x t ∣ x 0 ) = N ( x t ; α ^ t ⋅ x 0 , ( 1 − α ^ t ) ⋅ I ) q(x_t|x_0)=\mathcal{N}(x_t;\sqrt{\hat{\alpha}_t}\cdot x_0,(1-\hat{\alpha}_t)\cdot I) q(xtx0)=N(xt;α^t x0,(1α^t)I)其中 α t = 1 − β t , α ^ t = ∏ i = 1 t α i \alpha_t=1-\beta_t,\hat{\alpha}_t=\prod_{i=1}^t\alpha_i αt=1βt,α^t=i=1tαi。当 T T T足够大时, α ^ t \hat{\alpha}_t α^t趋于0, x T x_T xT的分布就近似标准正态分布 π ( x T ) ∼ N ( 0 , I ) \pi(x_T)\sim\mathcal{N}(0,I) π(xT)N(0,I)

3. 逆过程

  逆过程通过近似后验分布来从高斯噪声中恢复数据分布: q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) q(x_{t-1}|x_t,x_0)=\mathcal{N}(x_{t-1};\tilde{\mu}_t(x_t,x_0),\tilde{\beta}_tI) q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)其中 μ ~ t ( x t , x 0 ) = α ^ t − 1 β t 1 − α ^ t x 0 + α ^ t ( 1 − α ^ t − 1 ) 1 − α ^ t x t = 1 α t ( x t − β t 1 − α ^ t ϵ ) , ϵ ∼ N ( 0 , I ) \tilde{\mu}_t(x_t,x_0)=\frac{\sqrt{\hat{\alpha}_{t-1}}\beta_t}{1-\hat{\alpha}_t}x_0+\frac{\sqrt{\hat{\alpha}_t}(1-\hat{\alpha}_{t-1})}{1-\hat{\alpha}_t}x_t=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\hat{\alpha}_t}}\epsilon),\epsilon\sim\mathcal{N}(0,I) μ~t(xt,x0)=1α^tα^t1 βtx0+1α^tα^t (1α^t1)xt=αt 1(xt1α^t βtϵ),ϵN(0,I) β ~ t = 1 − α ^ t − 1 1 − α ^ t β t \tilde{\beta}_t=\frac{1-\hat{\alpha}_{t-1}}{1-\hat{\alpha}_t}\beta_t β~t=1α^t1α^t1βt  由于 β t \beta_t βt是预定义的,我们只需要使用去噪网络 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)估计 ϵ \epsilon ϵ,从而得到均值 μ θ ( x t , t ) = μ ~ t ( x t , x 0 ) \mu_\theta(x_t,t)=\tilde{\mu}_t(x_t,x_0) μθ(xt,t)=μ~t(xt,x0)

4. 训练

  扩散模型的优化目标为 L simple = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ^ t ⋅ x 0 + ϵ 1 − α ^ t , t ) ∥ 2 2 ] \mathcal{L}_\text{simple}=\mathbb{E}_{t,x_0,\epsilon}[\|\epsilon-\epsilon_\theta(\sqrt{\hat{\alpha}_t}\cdot x_0+\epsilon\sqrt{1-\hat{\alpha}_t},t)\|_2^2] Lsimple=Et,x0,ϵ[ϵϵθ(α^t x0+ϵ1α^t ,t)22]  上式期望是针对数据、噪声和时间求得的,因此实际计算损失时,需要对数据、噪声和时间进行采样。

扩散模型的训练过程如下:

  1. 从训练集中采样数据 x 0 x_0 x0
  2. { 1 , 2 , ⋯   , T } \{1,2,\cdots,T\} {1,2,,T}均匀随机采样 t t t
  3. 从标准正态分布采样噪声 ϵ \epsilon ϵ
  4. 计算 ∥ ϵ − ϵ θ ( α ^ t ⋅ x 0 + ϵ 1 − α ^ t , t ) ∥ 2 2 \|\epsilon-\epsilon_\theta(\sqrt{\hat{\alpha}_t}\cdot x_0+\epsilon\sqrt{1-\hat{\alpha}_t},t)\|_2^2 ϵϵθ(α^t x0+ϵ1α^t ,t)22作为损失函数,进行反向传播。

5. 推断(采样)

  扩散模型的推断即从高斯噪声 x T x_T xT,利用网络估计的噪声 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)根据3中的公式计算上一时刻的均值(对于方差,DDPM认为 σ t 2 = β ~ t = 1 − α ^ t − 1 1 − α ^ t β t ≈ β t \sigma^2_t=\tilde{\beta}_t=\frac{1-\hat{\alpha}_{t-1}}{1-\hat{\alpha}_t}\beta_t\approx\beta_t σt2=β~t=1α^t1α^t1βtβt),从而逆推原始数据 x 0 x_0 x0

扩散模型的推断过程如下:

  1. 从标准正态分布中采样 x T x_T xT
  2. t = T t=T t=T开始,进行下面的过程(即扩散模型的逆向过程)直到 t = 1 t=1 t=1
      从标准正态分布中采样 z z z
      计算 x t − 1 = 1 α t ( x t − β t 1 − α ^ t ϵ θ ( x t , t ) ) + σ t z x_{t-1}=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\hat{\alpha}_t}}\epsilon_\theta(x_t,t))+\sigma_tz xt1=αt 1(xt1α^t βtϵθ(xt,t))+σtz
  3. t = 1 t=1 t=1时,计算 x 0 = 1 α 1 ( x 1 − β 1 1 − α ^ 1 ϵ θ ( x 1 , 1 ) ) x_0=\frac{1}{\sqrt{\alpha_1}}(x_1-\frac{\beta_1}{\sqrt{1-\hat{\alpha}_1}}\epsilon_\theta(x_1,1)) x0=α1 1(x11α^1 β1ϵθ(x1,1))

6. 条件扩散模型

  由于上述模型推断过程无输入信号,因此生成的数据是无约束的,用户无法控制生成的结果。引入条件可以使生成的数据偏向用户期望的结果。
  引入条件的方法有很多。例如,对于图像生成任务而言,可以引入分类器指导扩散模型,利用其梯度指导图像生成偏向特定语义,使模型能在给定标签的情况下生成相应的图像。也可以输入图像或文本指导图像生成。
  条件扩散模型的优化目标为
min ⁡ θ E t , x 0 , c , ϵ [ ∥ ϵ − ϵ θ ( x t , t , c ) ∥ 2 2 ] \min_\theta{E}_{t,x_0,c,\epsilon}[\|\epsilon-\epsilon_\theta(x_t,t,c)\|_2^2] θminEt,x0,c,ϵ[ϵϵθ(xt,t,c)22]

其中条件 c c c为索引(离散有限条件如有限类别条件)或连续嵌入(如文本条件)。

### 扩散模型概述 扩散模型是一种强大的生成模型,在机器学习领域内获得了广泛关注。这类模型通过逐步向数据添加噪声来学习复杂分布,并能够逆过程去噪以生成新的样本[^1]。 #### 工作原理 在扩散模型中,前向过程涉及将高斯噪声逐渐加入到初始数据点上;而反向过程中,则试图从未知的纯噪声状态恢复原始模式特征。此机制允许模型捕捉输入空间内的细微结构变化并有效模拟多模态现象。 ```python import torch.nn as nn class DiffusionModel(nn.Module): def __init__(self, timesteps=1000): super(DiffusionModel, self).__init__() self.timesteps = timesteps def forward_process(self, x_0): """Add noise to input over time steps.""" pass def reverse_process(self, noisy_x_t, timestep): """Remove noise from input at given step.""" pass ``` #### 应用场景 扩散模型已被应用于图像合成、语音处理等多个方面。特别是在计算机视觉任务里表现突出,比如超分辨率重建以及风格迁移等操作均能取得优异效果。此外,在自然语言处理方向也有着潜在的应用价值,可用于文本摘要生成或是翻译系统的改进工作之中。 #### 实现细节 为了构建一个有效的扩散模型框架,通常会采用变分自编码器(VAE)或流形映射的思想来进行设计。具体来说就是定义一系列连续的时间步长下的转换函数q(x_{t}|x_{t−1})用于描述加噪流程,同时估计p_theta(x_{T},...,x_0),即从最终含最大量随机性的表示回到原样貌的概率密度函数。这一系列计算往往依赖于深度神经网络完成参数化表达。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值