赞
踩
原先,图像生成领域最常见生成模型有 GAN 和 VAE。
后来,Diffusion 扩散模型也是生成模型,且在图像生成上,优于 GAN 和 VAE。
VAE 的一个主要缺点是生成的样本常常会模糊、失真,这是因为它在生成样本时可能存在一些不完美的地方。
GAN 因为需要同时训练生成器和判别器,并且很难找到一个平衡点。生成器有时候会通过一些“捷径”欺骗判别器,导致生成的效果不佳。
此外,GAN生成的样本多样性有限,只适用于特定的判别器。
作者提出了一种改进的方法,即扩散模型(Diffusion Model)。
扩散模型在生成样本时采用了一种不同的方式,它通过在生成过程中逐渐扩散噪声来生成样本。
这种方法使得生成的样本更加清晰、真实,并且能够保持更好的多样性。
扩散模型的训练过程也更加稳定,不需要像GAN那样同时训练生成器和判别器。
相反,扩散模型只需要在生成过程中进行逐步的扩散操作,使生成的样本逐渐接近真实分布。
这种训练方式可以避免生成器通过“捷径”欺骗判别器的问题,提高了生成效果。
通过逐步扩散噪声的方式生成样本,提高了生成样本的质量和多样性,并且具有更稳定的训练过程。
GAN 生成对抗网络有一个内生缺陷。
由于程序互相对抗的标准是人类导师给定的样本,因此生成的内容实质上只是对现有内容无限地逼近模仿,而模仿则意味着无法实现真正的突破。
问题:GAN依赖于对真实数据的模仿。它们通过模仿人类提供的样本数据来生成新的图像,这可能限制创新性和多样性,因为生成的内容主要是对现有内容的逼近。
对抗过程,100% 地依赖人类这个庄家在背后的投喂能力。
而人类本质是个人和群体视角,不是全局视角,这便埋下了隐患。
再好的人类导师,也只能是扶着学生上马。
超越的境界,本质上还是要靠学生自身的领悟力与触类旁通的创新能力。
GAN 的 判别器D 和 生成器G,两个最终都没有超越人类导师的局限性的天花板。
Diffusion 是自己探索的过程。
如滴入一杯清水中的墨滴一样,慢慢散开最终变成一片浑浊。
如果这个过程可逆,就可以创造由一片浑浊去探寻最初墨滴状态的方法。
听起来将噪声添加到图像中,然后再去除这些噪声,看似是一个无意义的过程。
您有一幅精细的画作。如果您在这幅画上逐渐加入噪声(比如点、线、模糊等),画面将逐渐失去原有的形态,最终变成一片混乱。
在这个过程中,画的每一部分都以不同的方式逐渐变得不可识别。
这个逐步增加噪声的过程就是扩散模型中的“前向过程”。
重要的部分来了:当使用扩散模型时,AI不仅学习如何将噪声添加到图像中,更重要的是,它学习了如何从这片混乱中恢复出原始的图像。
这就是“逆向过程”。
在这个逆向过程中,AI必须理解图像中每个像素的原始状态,以及这些像素是如何相互关联的,从而能够准确地去除噪声,恢复图像。
通过这种方式,AI学习到的不仅仅是图像本身的特征,还包括图像中的内容如何随着噪声的增加而逐渐变化和消失。
这意味着,当AI需要生成新图像或重建图像时,它已经理解了图像的深层结构和像素间的复杂关系。
因此,尽管看起来像是给图像加噪声再去噪声的简单过程,实际上扩散模型学习到的不仅仅是简单的图像恢复。
更重要的是,它理解了图像各部分如何相互关联,以及这些部分如何随噪声增加或减少而变化。
这个过程超越了简单的图像复制或模仿,而是向AI提供了对图像深层结构的深入理解。
比如有一张详细的地图图像,这张地图上有各种元素:城市、河流、道路和山脉。
加噪声(熵增加):首先,我们逐渐向这张地图图像中添加噪声。
初始阶段,噪声较少,地图上的城市和河流等特征仍然可辨识。
但随着更多噪声的加入,地图上的元素开始变得模糊和混乱。
在噪声达到最大时,原始地图的所有细节都被噪声完全覆盖,图像变得完全随机和无序。
去噪声(熵减少):现在,扩散模型的任务是逆转这个过程,从高噪声的状态逐步恢复出清晰的地图图像。
在这个过程中,AI不仅要去除噪声,更重要的是要理解和重建地图上的各种元素之间的关系。
例如,AI学习到河流通常穿过城市,道路连接城市,山脉可能影响河流的流向。
它不是简单地记住每个像素应该是什么颜色,而是理解这些元素如何共同构成一个有意义的整体。
通过这种学习过程,AI学习到的不仅仅是地图上每个单独元素的外观,而是这些元素如何相互作用和组合以形成一个连贯、逻辑的地理布局。
这种理解远远超出了简单地复制地图上的特定城市或河流的形状。
当AI需要生成新的地图图像或进行相关的复杂图像处理任务时,它能够利用对这些元素之间关系的深入理解来创造出新的、
符合逻辑的地图布局,而不仅仅是复制已知的地图样式。
这使得扩散模型在图像生成和处理方面具有强大的能力,不仅仅局限于重现已有的图像内容。
GAN = 模仿对抗 —> 逼近训练的原始图像 —> 生成器陷入了特定的模式或模式,无法生成覆盖整个数据范围的多样化输出
扩散 = 迭代重建 —> 理解所有元素间的关系、深层结构 —> 不仅逼近原始图像,还能生成从未见过且合理的新图像
尽管 GAN 在多样性方面不如 Diffusion,但只能说 GAN 在创意创新略逊于 Diffusion 框架。
GAN 的核心思路在其他领域也有很大的价值。
AI 就是对这个世界的算法的模拟。
GAN 对抗思维,就是这个宇宙的运行规律的。
这个世界只有在二元对立的条件下才能发生有意义的演化,没有对立的世界就没有进步。
对立的存在是推动事物发展和变化的关键因素。
在很多情况下,对立的力量确实是创造变化和发展的重要动力。
扩散模型的目的是什么?
扩散模型是怎么做的?
前向过程在干啥?
反向过程在干啥?
扩散模型的创新点是什么?
前向过程:实现均匀的分布,直到稳定状态
假设真实图像 x 0 x_{0} x0 的分布是 q ( x 0 ) q(x_{0}) q(x0)。
前向传播过程,是把真实图像的分布,经过 T T T 次不断添加高斯噪声,变成纯噪声。
扩散过程公式: 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}x_{t-1},\beta_t\mathbf{I}) q(xt∣xt−1)=N(xt;1−βt xt−1,βtI)
上述公式是一步步迭代过来的,求 x t x_{t} xt 需要用 x 0 x_{0} x0 到 x t − 1 x_{t-1} xt−1,链条太长了。
这很容易导致梯度爆炸、消失。
而且有一个致命的缺陷,就是生成模型很慢。
因为每一次恢复都只能一步一步的向前恢复,而不像GAN,GAN只要训练好了这个模型,只要给他一个噪声,他就能恢复出图像,做一次的模型 forward 就够了。
可引入重参数化技巧解决这俩个问题。
重参数化:把随机变量变成,确定性的函数和独立性噪声项的和。
将 x t x_{t} xt 的分布转化为 μ μ μ 和 ε ε ε 的分布,变成线性组合: x t = μ + ε x_{t}=μ+ε xt=μ+ε。
这样一来,我们可以通过估计 μ 和 ε 的分布参数来间接地推断出 X t X_{t} Xt 的分布参数。
令 α t = 1 − β t \alpha_t=1-\beta_t αt=1−βt, a ‾ t = 1 t ∑ i = 1 t a i \overline{a}_{t}=\frac{1}{t}\sum_{i=1}^ta_{i} at=t1∑i=1tai:
因为每一步添加的噪声都独立,且服从正态分布,可得出:
复原过程:
复原公式:
p
θ
(
x
t
−
1
∣
x
t
)
=
N
(
x
t
−
1
;
μ
θ
(
x
t
,
t
)
,
Σ
θ
(
x
t
,
t
)
)
p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)=\mathcal{N}(\mathbf{x}_{t-1};\boldsymbol{\mu}_\theta(\mathbf{x}_t,t),\boldsymbol{\Sigma}_\theta(\mathbf{x}_t,t))
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
已知 x t x_{t} xt 推导 x t − 1 x_{t-1} xt−1 的过程中,需要得到在 t t t 时刻的噪声 μ θ 、 Σ θ \boldsymbol{\mu}_\theta、\boldsymbol{\Sigma}_\theta μθ、Σθ,但这些目前都不知道。
如果给定了某个训练集输入 x 0 x_{0} x0,多了一个限定条件后,该分布是可以用贝叶斯公式计算的。
而训练的时候已知真实图像 x 0 x_{0} x0,可先求一个后验扩散条件概率,把反向过程全部变回前向过程:
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
N
(
x
t
−
1
;
μ
~
(
x
~
t
,
x
0
)
,
β
~
t
I
)
只要定义好损失函数,就能学习这些均值、方差的参数了。
因为 β ~ t \tilde{\beta}_t β~t 是一个常数,和输入没有关系,训练去噪网络只需要拟合 T T T 个均值 μ ~ \tilde{\mu} μ~ 即可。
训练神经网络只差最后的问题了:该怎么设置训练的损失函数?
加噪声和去噪声操作都是正态分布,网络的训练目标应该是让每对正态分布更加接近。
那怎么用损失函数描述两个分布尽可能接近呢?
最直观的想法,肯定是让两个正态分布的均值尽可能接近,方差尽可能接近。
因为方差是常量,只用让均值尽可能接近就可以了。
损失函数: L = E q ( x 0 ) [ − log p θ ( x 0 ) ] \mathcal{L}=\mathbb{E}_{q(x_0)}[-\log p_\theta(x_0)] L=Eq(x0)[−logpθ(x0)]
原图分布 p θ ( x 0 ) p_\theta(x_0) pθ(x0) 是不知道的,可以用变分推断:
最小化上界,就可以等价替换 − log p θ ( x 0 ) -\log p_\theta(x_0) −logpθ(x0) 了:
使用贝叶斯公式,展开 KL 散度:
使用 log 运算,把乘法变成加法,把除法变成减法:
因为与 q(预测分布) 无关,所以 log p θ ( x 0 ) ⏟ 与 q 无关 \underbrace{\log p_\theta(x_0)}_{\text{与}q\text{无关}} 与q无关 logpθ(x0) 不受 E q \mathbb{E}_q Eq 影响,可以移项到括号外,和括号外的 − log p θ ( x 0 ) -\log p_\theta(x_0) −logpθ(x0) 抵消:
对不等式左右,求 E q ( x 0 ) \mathbb{E}_{q}(x_{0}) Eq(x0) 的期望:
假设条件概率分布 q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:T∣x0) 可以分解为 q ( x 1 ∣ x 0 ) q ( x 2 ∣ x 0 ) . . . q ( x T ∣ x 0 ) q(x_1|x_0)q(x_2|x_0)...q(x_T|x_0) q(x1∣x0)q(x2∣x0)...q(xT∣x0)。
将原始表达式展开:
根据条件独立性假设,可以将每个条件概率 q ( x i ∣ x 0 ) q(x_i|x_0) q(xi∣x0) 的期望移到外层,得到:
将这个表达式重新组织,将内层的期望写在外层的期望中,得到:
对 E q ( x 0 : T ) [ log q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] \mathbb{E}_{q(x_0:T)}\left[\log\frac{q(x_{1:T}|x_0)}{p_\theta(x_{0:T})}\right] Eq(x0:T)[logpθ(x0:T)q(x1:T∣x0)] 进行重命名,我们得到了最终的形式 L VLB L_{\text{VLB}} LVLB。
完整变形过程:
E
q
(
x
0
)
[
−
log
p
θ
(
x
0
)
]
≤
E
q
(
x
0
)
(
E
q
(
x
1
:
T
∣
x
0
)
[
log
q
(
x
1
:
T
∣
x
0
)
p
θ
(
x
0
:
T
)
]
)
E q ( x 0 ) [ − log p θ ( x 0 ) ] ≤ E q ( x 0 : T ) [ log q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] ( L VLB ) \mathbb{E}_{q(x_0)}[-\log p_\theta(x_0)]\leq\mathbb{E}_{q(x_0:T)}\left[\log\frac{q(x_{1:T}|x_0)}{p_\theta(x_{0:T})}\right]\quad (L_{\text{VLB}}) Eq(x0)[−logpθ(x0)]≤Eq(x0:T)[logpθ(x0:T)q(x1:T∣x0)](LVLB)
L VLB = E q ( x 0 : T ) [ log q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] L_{\text{VLB}} = \mathbb{E}_{q(x_0:T)}\left[\log\frac{q(x_{1:T}|x_0)}{p_\theta(x_{0:T})}\right] LVLB=Eq(x0:T)[logpθ(x0:T)q(x1:T∣x0)]
展开 L VLB L_{\text{VLB}} LVLB:
L
V
L
B
=
E
q
(
x
0
:
T
)
[
log
q
(
x
1
:
T
∣
x
0
)
p
θ
(
x
0
:
T
)
]
=
E
q
[
log
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
p
θ
(
x
T
)
∏
t
=
1
T
p
θ
(
x
t
−
1
∣
x
t
)
]
=
E
q
[
−
log
p
θ
(
x
T
)
+
∑
t
=
1
T
log
q
(
x
t
∣
x
t
−
1
)
p
θ
(
x
t
−
1
∣
x
t
)
]
=
E
q
[
−
log
p
θ
(
x
T
)
+
∑
t
=
2
T
log
q
(
x
t
∣
x
t
−
1
)
p
θ
(
x
t
−
1
∣
x
t
)
+
log
q
(
x
1
∣
x
0
)
p
θ
(
x
0
∣
x
1
)
]
=
E
q
[
−
log
p
θ
(
x
T
)
+
∑
t
=
2
T
log
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
p
θ
(
x
t
−
1
∣
x
t
)
⋅
q
(
x
t
∣
x
0
)
q
(
x
t
−
1
∣
x
0
)
)
+
log
q
(
x
1
∣
x
0
)
p
θ
(
x
0
∣
x
1
)
]
=
E
q
[
−
log
p
θ
(
x
T
)
+
∑
t
=
2
T
log
q
(
x
t
−
1
∣
x
t
,
x
0
)
p
θ
(
x
t
−
1
∣
x
t
)
+
∑
t
=
2
T
log
q
(
x
t
∣
x
0
)
q
(
x
t
−
1
∣
x
0
)
+
log
q
(
x
1
∣
x
0
)
p
θ
(
x
0
∣
x
1
)
]
=
E
q
[
−
log
p
θ
(
x
T
)
+
∑
t
=
2
T
log
q
(
x
t
−
1
∣
x
t
,
x
0
)
p
θ
(
x
t
−
1
∣
x
t
)
+
log
q
(
x
T
∣
x
0
)
q
(
x
1
∣
x
0
)
+
log
q
(
x
1
∣
x
0
)
p
θ
(
x
0
∣
x
1
)
]
=
E
q
[
log
q
(
x
T
∣
x
0
)
p
θ
(
x
T
)
+
∑
t
=
2
T
log
q
(
x
t
−
1
∣
x
t
,
x
0
)
p
θ
(
x
t
−
1
∣
x
t
)
−
log
p
θ
(
x
0
∣
x
1
)
]
=
E
q
[
D
K
L
(
q
(
x
T
∣
x
0
)
∣
p
θ
(
x
T
)
)
⏟
L
T
+
∑
t
=
2
T
D
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∥
p
θ
(
x
t
−
1
∣
x
t
)
)
⏟
L
t
−
1
−
log
p
θ
(
x
0
∣
x
1
)
]
⏟
L
0
第二行:利用马尔科夫性质,展开第一行,变成连乘的形式 ∏ \prod ∏。
第三行:利用 log 运算,把连乘变成求和 ∑ \sum ∑。
第四行:把 t = 1 t=1 t=1 时刻分出来
第五行:用条件概率的链式法则引入 x 0 x_{0} x0
第六行:log 展开
第七行:反向 log 展开,把求和移动 log 内变成乘积,约掉分子分母简化
第八行:整理
第九行:得到 3 个 KL 散度: L T L_{T} LT、 L t − 1 L_{t-1} Lt−1、 L 0 L_{0} L0
L T L_{T} LT:
L t − 1 L_{t-1} Lt−1:俩个高斯分布的 KL 散度
L 0 L_{0} L0:相当于 L t − 1 L_{t-1} Lt−1 中 t = 1 t=1 t=1 时刻的简化版
L
t
=
E
x
0
,
ϵ
[
1
2
∥
Σ
θ
(
x
t
,
t
)
∥
2
2
∥
μ
~
t
(
x
t
,
x
0
)
−
μ
θ
(
x
t
,
t
)
∥
2
]
=
E
x
0
,
ϵ
[
1
2
∥
Σ
θ
∥
2
2
∥
1
α
t
(
x
t
−
1
−
α
t
1
−
α
ˉ
t
ϵ
t
)
−
1
α
t
(
x
t
−
1
−
α
t
1
−
α
ˉ
t
ϵ
θ
(
x
t
,
t
)
)
∥
2
]
=
E
x
0
,
ϵ
[
(
1
−
α
t
)
2
2
α
t
(
1
−
α
ˉ
t
)
∥
Σ
θ
∥
2
2
∥
ϵ
t
−
ϵ
θ
(
x
t
,
t
)
∥
2
]
=
E
x
0
,
ϵ
[
(
1
−
α
t
)
2
2
α
t
(
1
−
α
ˉ
t
)
∥
Σ
θ
∥
2
2
∥
ϵ
t
−
ϵ
θ
(
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
t
,
t
)
∥
2
]
L
t
s
i
m
p
l
e
=
E
t
∼
[
1
,
T
]
,
x
0
,
ϵ
t
[
∥
ϵ
t
−
ϵ
θ
(
x
t
,
t
)
∥
2
]
=
E
t
∼
[
1
,
T
]
,
x
0
,
ϵ
t
[
∥
ϵ
t
−
ϵ
θ
(
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
t
,
t
)
∥
2
]
第一行:多元高斯分布的 KL 散度形式
第二行:
第三行:
第四行:
第五、六行:
发现第四行前面的权重项影响不大,直接求后面的 线性组合 形式即可
线性组合: [ ∣ ϵ t − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ t , t ) ] \left[|\boldsymbol{\epsilon}t - \boldsymbol{\epsilon}\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}_t, t)\right] [∣ϵt−ϵθ(αˉt x0+1−αˉt ϵt,t)]
ewricas:
补充:
每一轮的迭代,通过向后扩散噪声序列,将俩个时刻噪声之间的差异,作为当前梯度,更新模型参数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。