扩散模型(2015年)

1 简介

本文根据2015年5月的《deep unsupervised learning using nonequilibrium thermodynamics》翻译总结的。

本文应该是最早提出扩散模型的文章,然后2020年DDPM对其进行了改进,使得扩散模型大火。时间跨度了5年啊。

概率模型一般要在两个冲突的目标间权衡:可追溯(tractability)和灵活性(flexibility)。当模型是可追溯时,其可以被分析评估并容易匹配到数据;但是这些模型不能恰当的描述丰富的数据结构。另一方面,当模型是灵活的时候,其可以适配任意的数据结构。

我们提出了一个新颖的方式,同时满足可追溯(tractability、可计算的)和灵活性(flexibility):

  1. 在模型结构上非常灵活;
  2. 准确采样;
  3. 容易和其他分布相乘,例如为了计算后验;
  4. 模型对数似然( log likelihood)和独立状态的概率容易评估。

我们的方法使用马尔科夫链来逐步将一个分布转成另一个,其思想在非均衡统计物理学和sequential Monte Carlo 中有使用。

我们的方法可以捕捉任何形式的数据分布。

我们的工作也是利用变分界(variational bound ),但我们有如下不同:

  1. 我们使用了物理学准静态的过程、退火重要性采样,而不是变分贝叶斯方法。
  2. 我们显示了很容易用另一个概率分布和学到的分布相乘。
  3. 我们解决了在预测(训练预测(inference) 模型)和生成方法间的不对称性。我们限制前向过程为一个简单的函数形式,如此逆向过程(生成)有相同的函数形式。
  4. 我们训练模型用上千层(或者时间步),而不仅仅少数层。
  5. 在每一层(或时间步),我们提供熵增的上下界。

2 算法

2.1 前向过程(扩散)

2.2 逆向过程

生成分布将被训练为描述相同的过程,只是逆向的。

2.3 模型概率

生成模型分配给数据的概率如下:

上面这个积分是不可溯源的(intractable)、不可计算的。但可以通过下式计算(参考退火重要性采样和 the Jarz ynski等式):

2.4 训练

预备知识--交叉熵:

 交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性

模型目标函数:

训练就是最大化下面的对数似然( log likelihood)。下面函数类似交叉熵函数,衡量p与q的关系。

经过一系列推导上面的熵和KL散度是可以计算的。

训练包括找到逆向马尔可夫转换,其最大化下面log likelihood的下界:

所以,评估一个概率分布的任务简便为求高斯序列的均值和方差。

2.4.1 扩散率

3 实验

如下图,a是树皮原图,b是中间一块被高斯噪声替换掉,c是将中间那块通过扩散模型还原的。

下表显示扩散模型相比其他算法也有竞争优势。

4 附录

训练目标(高斯均值和方差)的网络。

### 扩散模型的历史演变 扩散模型起源于一种潜在变量模型的设计理念,最早由 Sohl-Dickstein 等人在 2015 提出[^2]。最初的扩散模型旨在通过对连续数据域中的样本逐步加入随机噪声来构建一个概率分布模型。这种技术的核心在于模拟物理世界中分子的随机运动过程,并将其应用于数据建模。 随后,在 2020 ,Ho, Jain 和 Abbeel 进一步发展了这一理论框架,提出了更高效的训练方法以及改进版的扩散模型架构。他们将整个流程分为两部分:正向噪声添加过程和反向去噪过程。前者负责逐渐破坏原始数据结构,而后者则专注于恢复这些被损坏的数据特征。 ### 当前应用与发展状态 当前,扩散模型已经成为图像生成领域的重要工具之一[^3]。它不仅限于简单的图片合成任务,还广泛应用于其他复杂的计算机视觉场景,比如超分辨率重建、风格迁移等。其工作机制基于这样一个假设——任何自然信号都可以看作是从纯高斯白噪音演化而来的一个特定实例;因此只要能学会如何逆转这个退化路径,则可以实现高质量的新颖内容创造能力提升。 此外,为了进一步优化性能表现并减少计算资源消耗,研究者们探索出了多种变体形式及其应用场景下的最佳实践方案。例如,“潜伏空间内的感知压缩”就是其中一项关键技术进步成果,该方法通过先对输入信息进行降维处理后再执行后续操作从而有效降低了整体运算成本同时保持甚至提高了输出质量水平[^4]。 ```python import torch from diffusers import DiffusionPipeline pipeline = DiffusionPipeline.from_pretrained('model_name') image = pipeline(prompt="a photograph of an astronaut riding a horse").images[0] image.save("astronaut_rides_horse.png") ``` 上述代码片段展示了一个典型的利用预训练好的扩散模型来进行文本到图像转换的例子。这里我们加载了一个名为`model_name` 的管道对象,并指定希望生成什么样的画面描述作为提示词传入函数内部完成创作最后保存结果文件至本地磁盘上供查看使用。 ### 总结 综上所述,从早期的基础概念确立到现在多样化实际用途展现出来强大潜力之间经历了漫长而又充满挑战性的道路。未来随着更多创新想法和技术手段不断涌现出来必将推动此方向取得更加辉煌成就值得期待!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值