建设网站如何优化关键词,辽宁建设工程招标信息网官网,物理组简介 网站建设,上海网站建设域名1. 学习内容复盘
本文基于Hugging Face#xff1a;The Annotated Diffusion Model一文翻译迁移而来#xff0c;同时参考了由浅入深了解Diffusion Model一文。
本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件#xff0c;执行Python文件时#xff0c;请确…1. 学习内容复盘
本文基于Hugging FaceThe Annotated Diffusion Model一文翻译迁移而来同时参考了由浅入深了解Diffusion Model一文。
本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件执行Python文件时请确保执行环境安装了GUI界面。
关于扩散模型Diffusion Models有很多种理解本文的介绍是基于denoising diffusion probabilistic model DDPMDDPM已经在无条件图像/音频/视频生成领域取得了较多显著的成果现有的比较受欢迎的的例子包括由OpenAI主导的GLIDE和DALL-E 2、由海德堡大学主导的潜在扩散和由Google Brain主导的图像生成。
实际上生成模型的扩散概念已经在Sohl-Dickstein et al., 2015中介绍过。然而直到Song et al., 2019斯坦福大学和Ho et al., 2020在Google Brain才各自独立地改进了这种方法。
本文是在Phil Wang基于PyTorch框架的复现的基础上而它本身又是基于TensorFlow实现迁移到MindSpore AI框架上实现的。 实验中我们采用离散时间潜在变量模型的观点另外读者也可以查看有关于扩散模型的其他几个观点
实验开始之前请确保安装并导入所需的库假设您已经安装了MindSpore、download、dataset、matplotlib以及tqdm。
模型简介
什么是Diffusion Model
如果将Diffusion与其他生成模型如Normalizing Flows、GAN或VAE进行比较它并没有那么复杂它们都将噪声从一些简单分布转换为数据样本Diffusion也是从纯噪声开始通过一个神经网络学习逐步去噪最终得到一个实际图像。 Diffusion对于图像的处理包括以下两个过程
我们选择的固定或预定义正向扩散过程 q 它逐渐将高斯噪声添加到图像中直到最终得到纯噪声一个学习的反向去噪的扩散过程 pθ 通过训练神经网络从纯噪声开始逐渐对图像去噪直到最终得到一个实际的图像 由 t 索引的正向和反向过程都发生在某些有限时间步长 TDDPM作者使用 T10001000内。从t00开始在数据分布中采样真实图像 x00本文使用一张来自ImageNet的猫图像形象的展示了diffusion正向添加噪声的过程正向过程在每个时间步长 t 都从高斯分布中采样一些噪声再添加到上一个时刻的图像中。假定给定一个足够大的 T 和一个在每个时间步长添加噪声的良好时间表您最终会在 tT 通过渐进的过程得到所谓的各向同性的高斯分布。
扩散模型实现原理
Diffusion 前向过程
所谓前向过程即向图片上加噪声的过程。虽然这个步骤无法做到图片生成但这是理解diffusion model以及构建训练样本至关重要的一步。 首先我们需要一个可控的损失函数并运用神经网络对其进行优化。
设 (0) 是真实数据分布由于0∼(0) 所以我们可以从这个分布中采样以获得图像 0 。接下来我们定义前向扩散过程(|−1) 在前向过程中我们会根据已知的方差 0β1β2...βT1在每个时间步长 t 添加高斯噪声由于前向过程的每个时刻 t 只与时刻 t-1 有关所以也可以看做马尔科夫过程 q(xt|xt−1)N(xt;√1−βtxt−1,βtI)
回想一下正态分布也称为高斯分布由两个参数定义平均值 和方差 2≥0 。基本上在每个时间步长 处的产生的每个新的轻微噪声图像都是从条件高斯分布中绘制的其中
q(μt)√1−βtxt−1
我们可以通过采样 ∼(0,) 然后设置
q(xt)√1−βtxt−1√βtϵ
请注意 在每个时间步长 因此是下标不是恒定的事实上我们定义了一个所谓的“动态方差”的方法使得每个时间步长的 可以是线性的、二次的、余弦的等有点像动态学习率方法。
因此如果我们适当设置时间表从 0 开始我们最终得到 1,...,,...,即随着 的增大 会越来越接近纯噪声而 就是纯高斯噪声。
那么如果我们知道条件概率分布(−1|) 我们就可以反向运行这个过程通过采样一些随机高斯噪声 然后逐渐去噪它最终得到真实分布0 中的样本。但是我们不知道条件概率分布(−1|) 。这很棘手因为需要知道所有可能图像的分布才能计算这个条件概率。
Diffusion 逆向过程
为了解决上述问题我们将利用神经网络来近似学习这个条件概率分布 (−1|) , 其中 是神经网络的参数。如果说前向过程(forward)是加噪的过程那么逆向过程(reverse)就是diffusion的去噪推断过程而通过神经网络学习并表示 (−1|) 的过程就是Diffusion 逆向去噪的核心。
现在我们知道了需要一个神经网络来学习逆向过程的条件概率分布。我们假设这个反向过程也是高斯的任何高斯分布都由2个参数定义
由 参数化的平均值由 参数化的方差
综上我们可以将逆向过程公式化为
(−1|)(−1;(,),Σ(,))
其中平均值和方差也取决于噪声水平 神经网络需要通过学习来表示这些均值和方差。
注意DDPM的作者决定保持方差固定让神经网络只学习表示这个条件概率分布的平均值 。本文我们同样假设神经网络只需要学习表示这个条件概率分布的平均值 。
为了导出一个目标函数来学习反向过程的平均值作者观察到 和 的组合可以被视为变分自动编码器(VAE)。因此变分下界也称为ELBO可用于最小化真值数据样本 0 的似然负对数有关ELBO的详细信息请参阅VAE论文Kingma等人2013年该过程的ELBO是每个时间步长的损失之和 LL0L1...LT 其中每项的损失 Lt 除了 L0 实际上是2个高斯分布之间的KL发散可以明确地写为相对于均值的L2-loss! 如Sohl-Dickstein等人所示构建Diffusion正向过程的直接结果是我们可以在条件是 0 因为高斯和也是高斯的情况下在任意噪声水平上采样 而不需要重复应用 去采样 这非常方便。使用
αt:1−βt
¯αt:Πts1αs
我们就有
q(xt|x0)N(xt;√¯αtx0,(1−¯αt)I)
这意味着我们可以采样高斯噪声并适当地缩放它然后将其添加到 0 中直接获得 xt 。 请注意¯αt 是已知 βt方差计划的函数因此也是已知的可以预先计算。这允许我们在训练期间优化损失函数 L的随机项。或者换句话说在训练期间随机采样 t并优化 Lt。 正如Ho等人所展示的那样这种性质的另一个优点是可以重新参数化平均值使神经网络学习预测构成损失的KL项中噪声的附加噪声。这意味着我们的神经网络变成了噪声预测器而不是直接均值预测器。其中平均值可以按如下方式计算
μθ(xt,t)1√αt(xt−βt√1−¯αtϵθ(xt,t))
最终的目标函数 Lt如下 随机步长 t 由 (ϵ∼N(0,I))给定 ∥ϵ−ϵθ(xt,t)∥2∥ϵ−ϵθ(√¯αtx0√(1−¯αt)ϵ,t)∥2
在这里 x0是初始真实未损坏图像 ϵ 是在时间步长 t采样的纯噪声ϵθ(xt,t)是我们的神经网络。神经网络是基于真实噪声和预测高斯噪声之间的简单均方误差MSE进行优化的。 训练算法现在如下所示 换句话说
我们从真实未知和可能复杂的数据分布中随机抽取一个样本 q(x0) 请注意此列表仅包括在撰写本文即2022年6月7日之前的重要作品。
目前扩散模型的主要也许唯一缺点是它们需要多次正向传递来生成图像对于像GAN这样的生成模型来说情况并非如此。然而有正在进行中的研究表明只需要10个去噪步骤就能实现高保真生成。 我们均匀地采样1和T之间的噪声水平t即随机时间步长 我们从高斯分布中采样一些噪声并使用上面定义的属性在 t 时间步上破坏输入 神经网络被训练以基于损坏的图像 xt 来预测这种噪声即基于已知的时间表 xt 上施加的噪声 实际上所有这些都是在批数据上使用随机梯度下降来优化神经网络完成的。 U-Net神经网络预测噪声 神经网络需要在特定时间步长接收带噪声的图像并返回预测的噪声。请注意预测噪声是与输入图像具有相同大小/分辨率的张量。因此从技术上讲网络接受并输出相同形状的张量。那么我们可以用什么类型的神经网络来实现呢 这里通常使用的是非常相似的自动编码器您可能还记得典型的深度学习入门教程。自动编码器在编码器和解码器之间有一个所谓的bottleneck层。编码器首先将图像编码为一个称为bottleneck的较小的隐藏表示然后解码器将该隐藏表示解码回实际图像。这迫使网络只保留bottleneck层中最重要的信息。 在模型结构方面DDPM的作者选择了U-Net出自Ronneberger et al.2015当时它在医学图像分割方面取得了最先进的结果。这个网络就像任何自动编码器一样在中间由一个bottleneck组成确保网络只学习最重要的信息。重要的是它在编码器和解码器之间引入了残差连接极大地改善了梯度流灵感来自于He et al., 2015。 可以看出U-Net模型首先对输入进行下采样即在空间分辨率方面使输入更小之后执行上采样。 构建Diffusion模型 下面我们逐步构建Diffusion模型。 首先我们定义了一些帮助函数和类这些函数和类将在实现神经网络时使用。 位置向量 由于神经网络的参数在时间噪声水平上共享作者使用正弦位置嵌入来编码t灵感来自TransformerVaswani et al., 2017。对于批处理中的每一张图像神经网络知道它在哪个特定时间步长噪声水平上运行。 SinusoidalPositionEmbeddings模块采用(batch_size, 1)形状的张量作为输入即批处理中几个有噪声图像的噪声水平并将其转换为(batch_size, dim)形状的张量其中dim是位置嵌入的尺寸。然后我们将其添加到每个剩余块中。 ResNet/ConvNeXT块 接下来我们定义U-Net模型的核心构建块。DDPM作者使用了一个Wide ResNet块Zagoruyko et al., 2016但Phil Wang决定添加ConvNeXTLiu et al., 2022替换ResNet因为后者在图像领域取得了巨大成功。 在最终的U-Net架构中可以选择其中一个或另一个本文选择ConvNeXT块构建U-Net模型。 Attention模块 接下来我们定义Attention模块DDPM作者将其添加到卷积块之间。Attention是著名的Transformer架构(Vaswani et al., 2017)在人工智能的各个领域都取得了巨大的成功从NLP到蛋白质折叠。Phil Wang使用了两种注意力变体一种是常规的multi-head self-attention如Transformer中使用的另一种是LinearAttention(Shen et al., 2018)其时间和内存要求在序列长度上线性缩放而不是在常规注意力中缩放。 要想对Attention机制进行深入的了解请参照Jay Allamar的精彩的博文。 组归一化 DDPM作者将U-Net的卷积/注意层与群归一化Wu et al., 2018。下面我们定义一个PreNorm类将用于在注意层之前应用groupnorm。 条件U-Net 我们已经定义了所有的构建块位置嵌入、ResNet/ConvNeXT块、Attention和组归一化现在需要定义整个神经网络了。请记住网络 ϵθ(xt,t)(,) 的工作是接收一批噪声图像噪声水平并输出添加到输入中的噪声。 更具体的 网络获取了一批(batch_size, num_channels, height, width)形状的噪声图像和一批(batch_size, 1)形状的噪音水平作为输入并返回(batch_size, num_channels, height, width)形状的张量。 网络构建过程如下 首先将卷积层应用于噪声图像批上并计算噪声水平的位置接下来应用一系列下采样级。每个下采样阶段由2个ResNet/ConvNeXT块 groupnorm attention 残差连接 一个下采样操作组成在网络的中间再次应用ResNet或ConvNeXT块并与attention交织接下来应用一系列上采样级。每个上采样级由2个ResNet/ConvNeXT块 groupnorm attention 残差连接 一个上采样操作组成最后应用ResNet/ConvNeXT块然后应用卷积层最终神经网络将层堆叠起来就像它们是乐高积木一样但重要的是了解它们是如何工作的。 正向扩散 我们已经知道正向扩散过程在多个时间步长T中从实际分布逐渐向图像添加噪声根据差异计划进行正向扩散。最初的DDPM作者采用了线性时间表 我们将正向过程方差设置为常数从β110−4线性增加到βT0.02。 但是它在Nichol et al., 2021中表明当使用余弦调度时可以获得更好的结果。数据准备与处理 在这里我们定义一个正则数据集。数据集可以来自简单的真实数据集的图像组成如Fashion-MNIST、CIFAR-10或ImageNet其中线性缩放为 [−1,1]。 每个图像的大小都会调整为相同的大小。有趣的是图像也是随机水平翻转的。根据论文内容我们在CIFAR10的训练中使用了随机水平翻转我们尝试了有翻转和没有翻转的训练并发现翻转可以稍微提高样本质量。 本实验我们选用Fashion_MNIST数据集我们使用download下载并解压Fashion_MNIST数据集到指定路径。此数据集由已经具有相同分辨率的图像组成即28x28。 采样 由于我们将在训练期间从模型中采样以便跟踪进度我们定义了下面的代码。采样在本文中总结为算法2 从扩散模型生成新图像是通过反转扩散过程来实现的我们从T开始我们从高斯分布中采样纯噪声然后使用我们的神经网络逐渐去噪使用它所学习的条件概率直到我们最终在时间步t0结束。如上图所示我们可以通过使用我们的噪声预测器插入平均值的重新参数化导出一个降噪程度较低的图像 xt−1。请注意方差是提前知道的。 理想情况下我们最终会得到一个看起来像是来自真实数据分布的图像。 训练过程 下面我们开始训练吧详见平台实验结果。 推理过程从模型中采样 要从模型中采样我们可以只使用上面定义的采样函数详见平台实验结果。 总结 请注意DDPM论文表明扩散模型是非条件图像有希望生成的方向。自那以后diffusion得到了极大的改进最明显的是文本条件图像生成。下面我们列出了一些重要的但远非详尽无遗的后续工作 改进的去噪扩散概率模型(Nichol et al., 2021)发现学习条件分布的方差除平均值外有助于提高性能用于高保真图像生成的级联扩散模型([Ho et al., 2021)引入级联扩散它包括多个扩散模型的流水线这些模型生成分辨率提高的图像用于高保真图像合成扩散模型在图像合成上击败了GANs(Dhariwal et al., 2021)表明扩散模型通过改进U-Net体系结构以及引入分类器指导可以获得优于当前最先进的生成模型的图像样本质量无分类器扩散指南([Ho et al., 2021)表明通过使用单个神经网络联合训练条件和无条件扩散模型不需要分类器来指导扩散模型具有CLIP Latents (DALL-E 2) 的分层文本条件图像生成 (Ramesh et al., 2022)在将文本标题转换为CLIP图像嵌入之前使用然后扩散模型将其解码为图像具有深度语言理解的真实文本到图像扩散模型ImageGen(Saharia et al., 2022)表明将大型预训练语言模型例如T5与级联扩散结合起来对于文本到图像的合成很有效
参考
The Annotated Diffusion Model由浅入深了解Diffusion Model 2.平台实验结果