DDIM学习笔记

        DDIM(Denoising Diffusion Implicit Models)是一种改进的扩散模型,旨在提高生成样本的效率和质量。扩散模型通过逐步添加噪声将数据分布转化为简单分布(如高斯分布),再通过逆向过程从噪声中生成数据。传统扩散模型(如DDPM)需要大量时间步长,导致生成速度较慢。

        DDIM通过引入非马尔可夫过程,减少生成所需的时间步长,同时保持生成质量。其特点一是非马尔可夫过程,允许跳过某些中间步骤,加速生成。第二点是确定性生成,即通过固定噪声,使生成过程可重复。

DDPM回顾

        可以参考前篇的笔记:DDPM学习笔记

        前向过程:ddpm的前向过程是一个马尔科夫过程,我们将噪声逐渐加入数据,使得数据逐渐变成噪声。

\mathbf{x}_t = \sqrt{\alpha_t} \mathbf{x}_{t-1} + \sqrt{1-\alpha_t} \epsilon_t

        反向过程:通过逐步去噪来恢复原始数据的。假设我们有 p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t),DDPM通过学习这个条件概率来逐步去噪。

p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) = \mathcal{N} \left( \mathbf{x}_{t-1}; \tilde{\mu}_t (\mathbf{x}_t), \sigma_t^2 \mathbf{I} \right)

        其中 \tilde{\mu}_t (\mathbf{x}_t) 是通过学习得到的去噪均值,\sigma_t^2 是噪声的方差。

        ddpm 存在的问题:采样速度慢

  • 在对p_\theta(x_{t-1}|x_t)的推导中,DDPM用到了马尔科夫假设。因此我们的采样必须要严格遵照马尔科夫性质,也就是必须从x到x-1一步一步来,不能“跳步”。重建的步长非常长,导致速度慢。
  • \mathrm{p}(x_{t-1}|x_{t},x_{0})=\frac{\mathrm{p}(x_{t}|x_{t-1})\mathrm{p}(x_{t-1}|x_{0})}{\mathrm{p}(x_{t}|x_{0})}
  • 同时,不能通过减小T来加快采样速度,否则会降低图像质量。

DDIM

        DDPM 的优化目标 Lγ​ 只依赖于边际分布 q(xt∣x0),而不直接依赖于联合分布 q(x1:T∣x0)。由于存在许多具有相同边际分布的联合分布,DDIM 探索了非马尔可夫的推理过程(inference process),从而引出了新的生成过程。

        因此,即使我们改变推断路径(从x0到xT的具体步骤)使其不再是马尔科夫链,只要每一步的边缘概率q(x|xo)保持不变,就不会影响最终目标,即可以沿用DDPM的预测噪音的目标函数Lγ​ 来训练模型。

前向过程

DDIM的前向过程与DDPM基本相同,逐步向数据中加入噪声,直到数据完全变成噪声(马尔科夫链)。(尽管在两个论文中,对于参数的表述并非完相同)

q_\sigma(x_T|x_0)=\mathcal{N}(\sqrt{\alpha_Tx_0},(1-\alpha_T)I)

反向过程

DDIM的关键在于,它在反向扩散过程时不再严格遵循马尔科夫链假设,而是采用了隐式的去噪方式,使得每一步的噪声变化不再依赖于前一步的噪声。DDIM通过改变每一步的噪声采样方式来减少生成步骤。

  DDIM推理分布

  • 假设条件分布 q_\sigma(x_{t-1}|x_t,x_0)是一个高斯分布,形式为
  • q_{\sigma}(x_{t-1}|x_t,x_0) \sim \mathcal{N}(kx_0 + mx_t, \sigma_t^2 I)
  • 即:
  •  x_{t-1} = kx_0 + mx_t + \sigma_t \epsilon 

                   k 和 m 是待定系数。

                   ϵ∼N(0,I)是标准高斯噪声。

为什么假设成  x_{t-1} = kx_0 + mx_t + \sigma_t \epsilon  的形式?

前向过程的公式为:x_t=\sqrt{\alpha_t}x_0+\sqrt{1-\alpha_t}\epsilon^{\prime}这个公式表明,xt​ 是 x0​ 和高斯噪声的线性组合。因此,反向过程也假设为类似的线性组合形式是自然的。

可以通过待定系数法求解 k 和 m,使得条件分布的边际分布与前向过程的边际分布一致。这种假设使得推导过程更加简洁和直观。

  • 将 x_t​ 代入 x_{t-1}​ 代入前向公式(x_t=\sqrt{\alpha_t}x_0+\sqrt{1-\alpha_t}\epsilon^{\prime}
  •    x_{t-1} = kx_0 + m(\sqrt{\alpha_t}x_0 + \sqrt{1 - \alpha_t}\epsilon') + \sigma_t \epsilon
  • 合并同类项,得:
  •    x_{t-1} = (k + m\sqrt{\alpha_t})x_0 + m\sqrt{1 - \alpha_t}\epsilon' + \sigma_t \epsilon
  • 由于 \epsilon' 和 \epsilon 都服从标准正态分布(它们的线性组合仍然是高斯噪声),因此二者可合并为同一个正态分布,即:
  •    x_{t-1} = (k + m\sqrt{\alpha_t})x_0 + \sqrt{m^2(1 - \alpha_t) + \sigma_t^2}\epsilon
  • 联立求解可得:
  • k = \sqrt{\alpha_{t-1}} - \sqrt{1 - \alpha_{t-1} - \sigma_t^2} \cdot \frac{\alpha_t}{1 - \alpha_t}, \quad m = \sqrt{\frac{1 - \alpha_{t-1} - \sigma_t^2}{1 - \alpha_t}}
  • 至此,得到了我们新的推理分布:
  •    q_{\sigma}(x_{t-1}|x_t,x_0) \sim \mathcal{N}\left(\sqrt{\alpha_{t-1}}x_0 + \sqrt{1 - \alpha_{t-1} - \sigma_t^2} \cdot \frac{x_t - \sqrt{\alpha_t}x_0}{\sqrt{1 - \alpha_t}}, \sigma_t^2 I\right)

  生成过程

①目标
  • x_T \sim \mathcal{N}(0, I) 生成数据 逐步去噪,最终生成一个清晰的样本 x_0
  • 为了做到这一点,我们需要定义一个 可训练的生成过程
  • p_{\theta}(x_{0:T}) = p_{\theta}(x_T) \prod_{t=1}^{T} p_{\theta}^{(t)}(x_{t-1}|x_t)p
  •  其中,每个 反向过程 p_{\theta}^{(t)}(x_{t-1}|x_t)需要从 q_{\alpha}(x_{t-1}|x_t, x_0) 进行近似学习。
  • 换句话说,我们希望找到一个方式,在每个时间步 t 预测 x_{t-1}​,最终获得 x_0
②预测

              \epsilon_\theta^{(t)}(x_t)是模型预测的噪声。

              \alpha _t 是噪声调度参数。

               这个公式的作用是从噪声数据 xt​ 中估计原始数据 x0​。

  • 为了采样 x_{t-1}​,我们需要知道 x_0。但我们只观察到x_ t​,所以要预测 x_0
  • 扩散模型中,x_ t是由 x_0 加上某个噪声 ϵ 形成的:x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon
  • 因此,我们可以反过来用去噪模型 e_{\theta}^{(t)}(x_t) 预测 x_0
  • f_\theta^{(t)}(x_t):=\frac{x_t-\sqrt{1-\alpha_t}\cdot\epsilon_\theta^{(t)}(x_t)}{\sqrt{\alpha_t}}
③定义采样方式
  • 进而用固定的先验 p_{\theta}(x_T) = \mathcal{N}(0,1) 对生成过程做出如下定义:
  • p_{\theta}^{(t)}(x_{t-1}|x_t) = \begin{cases} \mathcal{N}\left(e_{\theta}^{(1)}(x_1), \sigma_1^2 I\right) & \text{if } t = 1 \\ q_{\alpha}(x_{t-1}|x_t, e_{\theta}^{(t)}(x_t)) & \text{otherwise} \end{cases}
  • 当 t=1 时,最终一步的采样直接来自预测的 x0(并加上微小噪声 \sigma_1^2 I)。
  • 其他情况下,我们按照 非马尔可夫反向过程 计算 x_{t-1}​。
④优化目标

J_\sigma(\epsilon_\theta):=\mathbb{E}_{\boldsymbol{x}_{0:T}\sim q_\sigma(\boldsymbol{x}_{0:T})}[\log q_\sigma(\boldsymbol{x}_{1:T}|\boldsymbol{x}_0)-\log p_\theta(\boldsymbol{x}_{0:T})]

=\mathbb{E}_{\boldsymbol{x}_{0:T}\sim q_{\sigma}(\boldsymbol{x}_{0:T})}\left[\log q_{\sigma}(\boldsymbol{x}_{T}|\boldsymbol{x}_{0})+\sum_{t=2}^{T}\log q_{\sigma}(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t},\boldsymbol{x}_{0})-\sum_{t=1}^{T}\log p_{\theta}^{(t)}(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t})-\log p_{\theta}(\boldsymbol{x}_{T})\right]

其与ddpm大体相似,但是也有不同之处:
 

  • 前向分布 qσ(xt−1∣xt,x0) 允许引入额外的参数 σ,从而使得生成过程更加灵活。

  • 生成分布 pθ(t)(xt−1∣xt)也是高斯分布,但其均值和方差的计算方式与 DDPM 不同。

同时还可以证明,DDIM和DDPM的目标函数的关系如下:J_{\sigma}=L_{\gamma}+C(虽然我不会证明,但是结论确实是这个)
 

为什么这样就可以采样时间变短?

  • DDIM 的生成过程是非马尔可夫的,允许跳过一些中间步骤,直接从 x_t 生成 x_{t-k}
  • 直接预测 x0:通过公式 f_\theta^{(t)}(x_t) 直接预测 x0​,而不是像 DDPM 那样逐步预测噪声 ϵt​。

总结

DDPM 和 DDIM 的训练过程是相似的,只有生成(采样)过程不同。

训练都是:L=\mathbb{E}_{t,\mathbf{x}_0,\epsilon} \begin{bmatrix} \|\epsilon-\epsilon_\theta(\mathbf{x}_t,t)\|^2 \end{bmatrix}

不同的生成:ddpm:        p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)=\mathcal{N}(\mathbf{x}_{t-1};\mu_\theta(\mathbf{x}_t,t),\Sigma_\theta(\mathbf{x}_t,t))

                       ddim:        \mathbf{x}_{t-1}=\sqrt{\alpha_{t-1}}\left(\frac{\mathbf{x}_t-\sqrt{1-\alpha_t}\epsilon_\theta(\mathbf{x}_t,t)}{\sqrt{\alpha_t}}\right)+\sqrt{1-\alpha_{t-1}}\epsilon_\theta(\mathbf{x}_t,t)

特性DDPMDDIM
采样方式随机采样(马尔可夫链)确定性采样
采样速度需要较多步数(通常1000步)需要较少步数(如50步)
生成多样性高(采样具有随机性)可控(可在确定性与随机性之间调整)
计算效率
逆扩散(可逆性)不是严格可逆可逆,可用于图像编辑
  • DDIM更适合高效推理,如图像生成、视频生成、风格转换等任务,特别是在时间和计算资源受限的情况下。
  • DDPM更适合训练高质量模型,在需要高多样性生成的任务(如无条件图像生成)中仍然占优。
### 关于 'Attention is All You Need' 论文中自注意力机制的概念解释 #### 自注意力机制定义 自注意力,即内部注意力,是一种特殊的注意力机制,它能够将单个序列中的不同位置相互关联来计算该序列的表示形式[^1]。这种机制允许模型在处理某个词时考虑整个输入序列的信息。 #### 应用领域 此技术已被广泛应用于多个自然语言处理任务之中,比如但不限于阅读理解、抽象摘要创建以及文本蕴含分析等场景中,在这些应用里展示了强大的性能提升效果[^2]。 #### 工作原理概述 具体来说,Attention的工作流程可以通过三个核心组件——Query(查询)、Key(键)和Value(值)来进行描述。输出是由所有的Values经过加权求和得到的结果;而权重则是基于Queries与Keys之间的匹配程度通过Softmax函数进行标准化后的得分决定的[^3]。 #### 实验设置详情 为了验证提出的架构的有效性,研究人员利用了一台配备有八个NVIDIA P100 GPU的强大硬件平台来进行实验性的训练工作。基础版本模型每一步骤耗时约为0.4秒完成一次迭代更新操作,并且总共经历了十万次这样的循环过程或者说持续约十二个小时的时间长度才能达到收敛状态。而对于更大规模配置下的变体,则需要更长时间——大约三十五万六千分钟也就是接近三天半才可结束全部的学习周期[^4]。 ```python import torch.nn.functional as F def scaled_dot_product_attention(q, k, v, mask=None): d_k = q.size()[-1] scores = torch.matmul(q, k.transpose(-2, -1)) / (d_k ** 0.5) if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) attention_weights = F.softmax(scores, dim=-1) output = torch.matmul(attention_weights, v) return output, attention_weights ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值