概览:VAE, GAN, Flow Model 和 Diffusion 的关系
生成式模型的基本目的
以图片生成和处理任务为例,假设我们的研究对象是一个16 * 16 的RGB图片,抛开对图片内容的限制,假如我们完全随机地生成这样一个尺寸的图片,每个像素的可能取值有 256 * 256 * 256 个,整个图片的可能取值情况有$ N = ( 256 \cdot 256 \cdot 256 ) ^ {(16 \cdot 16 )} $个。
我们把可能随机生成的这样的一个图片设为(或者说,记为,表示为)一个随机变量 X,X的所有可能取值个数为 N,则我们可以将其样本空间表示为
S
X
=
{
X
1
,
X
2
,
.
.
.
,
X
N
}
S_{X} = \{X_1, X_2, ..., X_N\}
SX={X1,X2,...,XN}
X 这个随机变量必然是服从某个分布的,我们将其记为
X
∼
p
(
X
)
X \sim p(X)
X∼p(X)
(即我们随机生成的这样一个图片X,其取值为a的概率为 p(a) )
(即 P(X = a) = p(a) )
模型生成图片的过程,实际上就是对服从这个服从分布 p ( X ) p(X) p(X) 的随机变量X进行采样的过程,采样得到的 X ′ X' X′ 就是一个属于 S X S_X SX 的图片。
但我们在许多图片生成任务中肯定不希望得到一个在
S
X
S_X
SX 上完全均匀、没有特点、没有倾向的随机分布
p
(
X
)
p(X)
p(X) ,不然生成出的图像大概率是一堆难以理解的马赛克。比如说,如果我们希望这个模型能生成一些与猫相关的图片,那这个模型对应的分布
p
(
X
)
p(X)
p(X) 在与猫相关的图片对应的
X
X
X 值上的概率应该更高,而与猫无关的图片的概率应该更小,即:
p
(
X
与猫相关
)
较大
p
(
X
与猫无关
)
较小
p(X_{与猫相关}) 较大 \\ p(X_{与猫无关}) 较小
p(X与猫相关)较大p(X与猫无关)较小
也就是说,在许多任务中,我们对这个分布
p
(
X
)
p(X)
p(X) 是有特殊的要求和期望的,**我们的目的就是求出这个满足我们要求的分布
p
(
X
)
p(X)
p(X) **。只要我们能求出合适的分布
p
(
X
)
p(X)
p(X),我们就可以通过对这个分布进行采样得到我们期望的图片了。(实际上不能说是对分布采样,应该说是对一个服从该分布的随机变量进行采样)
当然,不只是图片任务,在其他任务里,这里的 X X X 也可以是视频音频或文本。
我们怎么求我们希望的分布 p ( X ) p(X) p(X) 呢?如果 N N N 比较小,我们大可以人为地对 p ( X ) p(X) p(X) 按我们的偏好进行调整,但实际任务中 N N N 往往极大,难以直接获取 p ( X ) p(X) p(X) ,我们只能用各种方式来逼近这个分布 p ( X ) p(X) p(X) 了。
下面是几种估计 p ( X ) p(X) p(X) 的方法。
估计分布的方法之一:极大似然估计
极大似然法的原理很直观易懂。在有一定先验知识的情况下,我们可以对 p(X) 的形式进行一定的假设,而其中的待求参数为 θ \theta θ,记分布为 p θ ( X ) p_θ(X) pθ(X) 我们的任务就转化成了如何求目标分布对应的参数 θ θ θ。
(举个例子,我们假设已知 p ( X ) p(X) p(X) 是一个高斯分布,那我们只需要求该高斯分布对应的均值和方差即可,记 θ = ( μ , σ 2 ) θ = (μ, σ^2) θ=(μ,σ2) ,这里的 θ θ θ 就是我们的待求参数,只要求出 θ θ θ 就可以确定分布了)
在图片生成任务的例子中,假设我们有
k
k
k 个我们希望这个模型生成的图片样例,那么我们显然是希望这个模型生成这些图片的概率能足够的大,即我们希望最大化如下概率:(我们记样例组成的集合为
T
x
T_x
Tx)
L
θ
(
T
X
)
=
∏
i
=
1
k
p
θ
(
X
i
)
(
X
i
∈
T
X
)
L_{\theta}(T_X) = \prod_{i=1}^{k}p_{\theta}(X_i)~~~(X_i \in T_X)
Lθ(TX)=i=1∏kpθ(Xi) (Xi∈TX)
那我们希望的参数
θ
θ
θ 应该为
θ
^
=
a
r
g
m
a
x
θ
L
θ
(
S
X
)
\hat{\theta} = \mathrm{argmax}_{\theta}L_{\theta}(S_X)
θ^=argmaxθLθ(SX)
这样我们就把分布
p
θ
p_θ
pθ 的估计问题转化成了一个最优化问题,这就是极大似然估计(即希望我们要求的分布能使当下我们期望发生的事发生的概率尽可能地大)。
但实际上,我们首先很难对 $ p(X)$ 的形式有一个合理的预先认识和假设(大多数时候我们对其一无所知)。并且,在很多情况下,参数 θ \theta θ 对应的参数空间维度极大(比如16 * 16 的图片生成任务中,我们假设每个像素位置的取值为一个高斯分布,那么整个图片服从一个 16 * 16 维的多元高斯分布,一共有 16 * 16 * 2 个待求参数,即 θ \theta θ 是一个长度为512的向量,其参数空间的维度为512维),对这样一个高维的参数进行优化,需要相当相当多的数据才能取得有效的估计,数据成本极高。
估计分布的方法之二:隐变量估计
直接求解或估计 $p(X) $ 还是有些困难,而直接用神经网络去拟合 $p(X) $ 效果也往往欠佳。故我们引入一个隐变量 z z z ,先生成一个随机变量 z z z ,再由 z z z 经过某种变换生成最终的随机变量 X X X 。
(关于为什么要引入隐变量,更加理论化的解释请见另一篇关于贝叶斯方法和变分推断的笔记,这里给出一些更形象的描述https://zhuanlan.zhihu.com/p/355019238)
(因为实际上,观测数据只是我们可以直接观测到的样本指标或特征,而在观测数据之下蕴含的还有一些我们不能直接观测到的、潜在的、未知的特征,并且这些特征可能对观测数据产生影响,我们称其为隐藏特征。观测特征所在的空间为观测空间,隐藏数据所在的空间为隐藏空间。举例说明,考虑一个电商平台的用户行为分析。观测空间是用户在平台上的实际行为数据,如购买记录、浏览历史、搜索关键词等。而隐藏空间可以是用户的潜在兴趣或偏好。例如,假设一个用户购买了几本关于健康和健身的书籍,但观测数据中并没有直接记录用户的兴趣。用户的兴趣偏好会在一定程度上影响其在平台上的行为活动,但不会直接记录在观测数据中。用户在平台上的行为数据在形式上往往是比较复杂的,难以直接找到其一般的规律,那我们可以人为地添加潜在的主题变量来表示“用户的兴趣”,然后想办法构建一个由“用户的兴趣”到“用户的行为数据”的映射,因为“用户的兴趣”这一隐藏特征在表示和含义上远比观测特征简洁直白,可以很方便地分析理解数据,提供更精确和深入的推断和预测。)
(再举个图像的例子,一个16 * 16 的手写数字图像(假设其写的是9),作为直接的观测数据,数据量是较大的,但是其隐藏特征实际上就是一个数字 9 ,我们可以把隐藏特征纳入考虑对观测数据进行分析)
引入隐变量
z
z
z 后,我们记其服从于分布
s
(
z
)
s(z)
s(z) , 我们可以从较为简单的分布
s
(
z
)
s(z)
s(z) 出发,用积分公式间接地求出相对复杂的分布
p
(
x
)
p(x)
p(x) :(对的,一般我们引入的这个隐变量就是相对简单的,不然不如不引)(这个公式的依据是 product rule)
p
(
x
)
=
∫
p
(
x
∣
z
)
s
(
z
)
d
z
p(x) = \int p(x|z)s(z)\mathrm{d}z
p(x)=∫p(x∣z)s(z)dz
这里需要注意:
- s ( z ) s(z) s(z) 分布的表达式形式一般比较简单,比如普通的多元高斯分布,并且往往是预先假设的一个没有未知量的确定分布。
- z z z 的自由度一般比较低,或者说其维度比较低,应该是一个相对简单的变量。
- 在实践中,因为“从隐变量 z z z 经过某种变换生成最终的随机变量 X X X ” 往往是个确定的变换过程,即 x = f θ ( z ) x = f_{\theta}(z) x=fθ(z) (很多时候我们会用神经网络来实现 f θ f_{\theta} fθ ),所以有如下表达式:(没错,给定 z z z 的情况下其实际上是个关于 x x x 的冲激函数)
p θ ( x ∣ z ) = { 0 if x ≠ f θ ( z ) ∞ if x = f θ ( z ) p_{\theta}(x|z) = \left\{ \begin{array}{ll} 0 & \text{if } x \neq f_{\theta}(z) \\ \infty & \text{if } x = f_\theta (z) \\ \end{array} \right. pθ(x∣z)={0∞if x=fθ(z)if x=fθ(z)
-
在实践中从简单分布 s ( z ) s(z) s(z) 生成任意分布 p ( x ) p(x) p(x) 过程如下:假如我们想求 p ( X ′ ) p(X') p(X′) , 则先解出 x = f ( z ) x = f(z) x=f(z) 的解集 $ {z_1, z_2, …, z_m} $ ,经过一定计算化简可以发现 p ( X ′ ) = ∑ i = 1 m s ( z i ) p(X') = \sum_{i=1}^m s(z_i) p(X′)=∑i=1ms(zi)
-
我们或许无法一开始就给出足够合理、正确的变换 f f f , 但是我们一般是用神经网络来实现 f f f,神经网络的反应能力是哈基米的七倍,它不舒服的时候会自己训练拟合到合适的函数(就是说我们可以通过训练来拟合到)(而且实际上,这里唯一的待求参数就是 f f f 这个函数的参数 θ \theta θ,所以隐变量模型实际上把一个概率分布的估计问题转化成了一个函数逼近的问题)。
隐变量模型背后的关键思想是:任何一个简单的概率分布经过一个足够复杂的函数后可以映射到任意概率分布。
但是,我们在训练这个模型(或者说,逼近求解 f f f )的时候,使用的还是极大似然的方法。
与前文类似,我们最大化的目标为:
L
θ
(
T
X
)
=
∏
i
=
1
k
p
θ
(
X
i
)
(
X
i
∈
T
X
)
L_{\theta}(T_X) = \prod_{i=1}^{k}p_{\theta}(X_i)~~~(X_i \in T_X)
Lθ(TX)=i=1∏kpθ(Xi) (Xi∈TX)
其负对数为:
l
θ
(
T
X
)
=
−
∑
i
=
1
n
ln
p
θ
(
x
i
)
=
−
∑
i
=
1
n
ln
∫
p
θ
(
x
i
∣
z
)
s
(
z
)
d
z
l_{\theta}(T_X) = -\sum_{i=1}^n\ln{p_{\theta}(x_i)} = -\sum_{i=1}^n\ln{\int p_{\theta}(x_i|z)s(z)\mathrm{d}z}
lθ(TX)=−i=1∑nlnpθ(xi)=−i=1∑nln∫pθ(xi∣z)s(z)dz
其关于
θ
\theta
θ 的梯度为
∇
θ
l
θ
(
T
X
)
=
−
∑
i
=
1
n
∇
θ
ln
∫
p
θ
(
x
i
∣
z
)
s
(
z
)
d
z
=
−
∑
i
=
1
n
∫
∇
θ
ln
∫
p
θ
(
x
i
∣
z
)
s
(
z
)
d
z
∫
p
θ
(
x
i
∣
z
)
s
(
z
)
d
z
\nabla_{\theta}~l_{\theta}(T_X) = -\sum_{i=1}^n \nabla_{\theta} \ln{\int p_{\theta}(x_i|z)s(z)\mathrm{d}z} = -\sum_{i=1}^n \frac {\int \nabla_{\theta} \ln{\int p_{\theta}(x_i|z)s(z)\mathrm{d}z}} {\int p_{\theta}(x_i|z)s(z)\mathrm{d}z}
∇θ lθ(TX)=−i=1∑n∇θln∫pθ(xi∣z)s(z)dz=−i=1∑n∫pθ(xi∣z)s(z)dz∫∇θln∫pθ(xi∣z)s(z)dz
我们可以用这个梯度对模型参数
θ
\theta
θ 进行更新。
但是这个方法可能存在如下问题:
- 4 中的解集一般很难求,因为 f f f 在某些情况下并不可逆且较为复杂,不好直接求解。
- 在实践中,为了能让 z z z 表示更多的信息,我们往往假设其为一个连续的随机变量(比如高斯随机变量),这导致我们必须要计算连续空间上的积分(如果其为离散的我们就可以把积分转化为求和了),往往难以计算准确结果。
可见,这种方法在计算梯度时存在积分难以计算的问题,故我们通常采用蒙特卡洛采样的方法来计算其近似解。
原本的积分可以表示成期望的形式 ∫ p θ ( x ∣ z ) s ( z ) d z = E z ∼ s ( z ) [ p θ ( x ∣ z ) ] \int p_\theta(x|z)s(z)\mathrm{d}z = \mathbb{E}_{z \sim s(z)} [p_\theta(x|z)] ∫pθ(x∣z)s(z)dz=Ez∼s(z)[pθ(x∣z)] ,我们可以通过采样估计期望来估计积分。步骤如下:
- 对 z ∼ s ( z ) z \sim s(z) z∼s(z) 进行 m m m 次采样得到 z 1 , z 2 , . . . , z m z_1, z_2,...,z_m z1,z2,...,zm
- 可以表示出 p θ ( x j ∣ z j ) p_\theta (x_j|z_j) pθ(xj∣zj)
并且不难证明 ∫ p θ ( x ∣ z ) s ( z ) d z = E z ∼ s ( z ) [ p θ ( x ∣ z ) ] ≈ 1 m ∑ j = 1 m p θ ( x j ∣ z j ) \int p_\theta(x|z)s(z)\mathrm{d}z = \mathbb{E}_{z \sim s(z)} [p_\theta(x|z)] \approx \frac{1} {m} \sum_{j=1}^m p_\theta(x_j|z_j) ∫pθ(x∣z)s(z)dz=Ez∼s(z)[pθ(x∣z)]≈m1∑j=1mpθ(xj∣zj)
蒙特卡洛方法虽然简单,但是还是有两个可改进方向:
- 提高采样效率。这里的 m m m 要非常大才能得到相对满意的结果 ,并且 z z z 的取值范围中有一些值很可能产生坏样本,故我们尝试优化,缩小 z z z 的取值空间,缩小 s ( z ) s(z) s(z) 的方差 σ 2 \sigma^2 σ2 ,这样 z z z 的采样范围也会缩小,采样次数也不需要很大,同时也可以排除一部分坏的 z z z值。(VAE方向)。
- 这里我们将得到的 X ′ X' X′ 和真实图片 X X X 做MSE,但很多真实情况表明MSE并不是很有效的度量,所以另外一种思路是用神经网络来学习一个更好的度量方式 D ( x , x ′ ) D(x, x') D(x,x′)。(GAN方向)
隐变量估计的改良之一:VAE
VAE 理论基础:变分推断
怎样缩小 z z z 的采样分布的方差呢,之前的采样方案是从 z z z 的先验概率分布 s ( z ) s(z) s(z) 中采样,现在可以考虑从 z z z 的后验概率分布 p ( z ∣ X ) p(z|X) p(z∣X) 中进行采样。
关于这点,可以这样理解:先验概率 p ( z ) p(z) p(z) 是没有限制的任意分布,而后验概率 p ( z ∣ X ) p(z|X) p(z∣X) 是给定 X X X 后的条件概率,所以更可能采样出能生成 X X X 的 z z z 。
但是我们一般无法直接求出后验分布,故我们在变分推断中选择使用另一个分布 q θ ( z ∣ X ) q_\theta (z|X) qθ(z∣X) 来近似地逼近、估计 p ( z ∣ X ) p(z|X) p(z∣X) ,拿从 q θ ( z ∣ X ) q_\theta (z|X) qθ(z∣X) 采样的结果近似地作为 p ( z ∣ X ) p(z|X) p(z∣X) 中得到的采样。
为什么这种方法叫变分推断呢,在这个问题中我们的优化对象是 q θ ( z ∣ X ) q_\theta (z|X) qθ(z∣X) (或者说是其参数 θ \theta θ ),而优化的目标是缩小 q θ ( z ∣ X ) q_\theta (z|X) qθ(z∣X) 与 p ( z ∣ X ) p(z|X) p(z∣X) 之间的“距离“,我们设其为 d i s t dist dist 。我们一般会表示出 d i s t = f ( θ ) dist = f(\theta) dist=f(θ) ,而我们的优化手段往往是求 f f f 关于 θ \theta θ 的导数然后使用梯度下降法,而在数学中,变分是一种函数的微小变化或泛函的微小变化的概念,与导数关系密切,故我们称其为变分推断。(说人话就是通过求导优化一个分布去逼近另一个分布)
在变分推断中,我们采用 KL散度 衡量两个概率分布的相似程度,作为两个分布之间的”距离“。
KaTeX parse error: No such environment: flalign at position 8: \begin{̲f̲l̲a̲l̲i̲g̲n̲}̲ &KL(q_\theta(z…
整理后得到
ln
p
(
x
)
−
K
L
(
q
θ
(
z
∣
x
)
∣
∣
p
(
z
∣
x
)
)
=
E
z
∼
q
θ
(
z
∣
x
)
[
ln
p
(
x
∣
z
)
]
−
K
L
(
q
θ
(
z
∣
x
)
∣
∣
p
(
z
)
)
\ln{p(x)} - KL(q_\theta(z|x)||p(z|x)) = \mathbb{E}_{z \sim q_\theta(z|x)}[\ln{p(x|z)}] - KL(q_\theta(z|x)||p(z))
lnp(x)−KL(qθ(z∣x)∣∣p(z∣x))=Ez∼qθ(z∣x)[lnp(x∣z)]−KL(qθ(z∣x)∣∣p(z))
这个式子是我们由纯粹推导得来的,但其中各部分又具有相当有实际意义的含义:
- 我们的整体目的其实是要最大化 ln p ( x ) − K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) \ln{p(x)} - KL(q_\theta(z|x)||p(z|x)) lnp(x)−KL(qθ(z∣x)∣∣p(z∣x)), 在训练过程中,我喂给模型的图像 x x x 都是希望其生成的模型,其中 ln p ( x ) \ln {p(x)} lnp(x) 自然是模型生成图像 x x x 的对数似然值,我们肯定希望其尽可能大。另一方面, K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) KL(q_\theta(z|x)||p(z|x)) KL(qθ(z∣x)∣∣p(z∣x)) 是我们人为设定的分布 q θ ( z ∣ x ) q_\theta(z|x) qθ(z∣x)和希望其逼近的目标分布(即 z z z 的后验分布)的KL散度,所以我们自然希望其尽可能的小,即其相反数尽可能的大。
- 等号右面的第一部分, E z ∼ q θ ( z ∣ x ) [ ln p ( x ∣ z ) ] \mathbb{E}_{z \sim q_\theta(z|x)}[\ln{p(x|z)}] Ez∼qθ(z∣x)[lnp(x∣z)], z ∼ q θ ( z ∣ x ) z \sim q_\theta(z|x) z∼qθ(z∣x) 表示我们先给定一个 x x x ,然后我们从给定这个 x x x 后的 z z z 的后验分布 q θ ( z ∣ x ) q_\theta(z|x) qθ(z∣x) 中采样得到一个隐变量 z z z,这个过程其实就是给定 x x x 输出 z z z ,相当于把 x x x 编码成了 z z z ,我们称这个过程encode, 而 p ( x ∣ z ) p(x|z) p(x∣z) 表示给定 z z z 又生成回 x x x 的概率,反映的是把 z z z 解码为 x x x 的过程,我们称其为decode。用这种方式可以把这个整体理解为对于给定 x x x ,将其按分布 q θ ( z ∣ x ) q_\theta(z|x) qθ(z∣x) 编码为某个 z z z 后能再成功解码(重构)回 x x x 的对数似然函数值的期望。如果这个期望足够大,说明得到的 z z z 是 x x x 的一个足够好足够有效的表示,是一个能有效反映 x x x 的隐变量。我们称其为重构误差,希望其能足够的大(这个名字好奇怪,明明越大越好却起名为误差)。
- 对于等号右面的第二项 K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ) ) KL(q_\theta(z|x)||p(z)) KL(qθ(z∣x)∣∣p(z)) ,其表示我们用来拟合后验分布的函数与实际的先验分布的函数之间的KL散度,即我们不希望我们得到的后验函数和原先验分布之间的差距过大。这可以视为一种正则化技巧(至于具体是怎么正则的,下面讲VAE结构时会详细说明)。
又因为
K
L
(
q
θ
(
z
∣
x
)
∣
∣
p
(
z
∣
x
)
)
≥
0
KL(q_\theta(z|x)||p(z|x)) \geq 0
KL(qθ(z∣x)∣∣p(z∣x))≥0,故
ln
p
(
x
)
≥
E
z
∼
q
θ
(
z
∣
x
)
[
ln
p
(
x
∣
z
)
]
−
K
L
(
q
θ
(
z
∣
x
)
∣
∣
p
(
z
)
)
=
E
L
B
O
\ln{p(x)} \geq \mathbb{E}_{z \sim q_\theta(z|x)}[\ln{p(x|z)}] - KL(q_\theta(z|x)||p(z)) = ELBO
lnp(x)≥Ez∼qθ(z∣x)[lnp(x∣z)]−KL(qθ(z∣x)∣∣p(z))=ELBO
ELBO(Evidence Lower Bound)称为对数似然的下界,此时可以把最大化对数似然转化为最大化ELBO(因为
p
(
x
)
p(x)
p(x) 毕竟是我们所不知道的嘛,没法直接最小化
K
L
(
q
θ
(
z
∣
x
)
∣
∣
p
(
z
∣
x
)
)
KL(q_\theta(z|x)||p(z|x))
KL(qθ(z∣x)∣∣p(z∣x)))(而且只要ELBO这个下界足够大,说明
ln
(
p
(
x
)
)
\ln{(p(x))}
ln(p(x)) 基本不会小)
VAE 的结构与原理
我们上面通过理论推导得出,我们可以把最小化 K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) KL(q_\theta(z|x)||p(z|x)) KL(qθ(z∣x)∣∣p(z∣x)) 的目标转化为最大化ELBO。接下来我们只要从工程角度实现 encode 和 decode 的过程即可。(在模型中其实就是构造 encoder 和 decoder)
-
encoder的实现:
如同前面所说,对于每一个输入给定的 x x x ,我们都会有(而且需要有)一个分布 q θ ( z ∣ x ) q_\theta(z|x) qθ(z∣x) 来(通过对分布采样)得出一个与之对应的隐变量(或者说隐编码) z z z。而这个分布如何设计呢?我们假设其为正态分布,那么我们只需要决定其均值和方差即可。而这个均值和方差即可由神经网络输入 x x x 后输出得到,这样这个神经网络就帮助实现了 encode 的过程,我们称这一部分为 encoder。
-
K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ) ) KL(q_\theta(z|x)||p(z)) KL(qθ(z∣x)∣∣p(z)) 的实现:
如果不对 q θ ( z ∣ x ) q_\theta(z|x) qθ(z∣x) 做约束,其方差很可能趋近于0,导致给定 x x x 后可能生成的 z z z 局限到某个常数附近,使 VAE 退化到 AE,这会大大削减模型生成新样本的能力和隐变量表达的丰富性。所以我们希望其方差适当地小但不等于0 。 我们可以通过使其与 N ( 0 , I ) N(0,I) N(0,I) 看齐来实现。我们可以直接假设 p ( z ) p(z) p(z) 为 N ( 0 , I ) N(0,I) N(0,I) ,计算 K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ) ) KL(q_\theta(z|x)||p(z)) KL(qθ(z∣x)∣∣p(z))。
( p ( z ) p(z) p(z)为 N ( 0 , I ) N(0,I) N(0,I)其实也可以从另一个角度理解,即我们理想中的 p ( z ∣ x ) p(z|x) p(z∣x) 是 N ( 0 , I ) N(0,I) N(0,I) ,那我们在此假设下可以计算出: p ( z ) = ∫ p ( z ∣ x ) p ( x ) d x = ∫ N ( 0 , I ) p ( x ) d x = N ( 0 , I ) ∫ p ( x ) d x = N ( 0 , I ) p(z) = \int p(z|x)p(x)\text{d}x = \int \mathcal{N}(0, I)p(x) \text{d}x = \mathcal{N}(0, I)\int p(x) \text{d}x = \mathcal{N}(0, I) p(z)=∫p(z∣x)p(x)dx=∫N(0,I)p(x)dx=N(0,I)∫p(x)dx=N(0,I),所以说,我们理想中的 p ( z ) p(z) p(z) 也应该是 N ( 0 , I ) N(0,I) N(0,I)。)
在此基础上,我们可以进行如下计算(以一维情况为例):
K
L
(
q
θ
(
z
∣
x
)
∣
∣
N
(
0
,
I
)
)
=
∫
1
2
π
σ
2
e
−
(
x
−
μ
)
2
2
σ
2
ln
1
2
π
σ
2
e
−
(
x
−
μ
)
2
2
σ
2
1
2
π
e
−
x
2
2
d
x
=
∫
1
2
π
σ
2
e
−
(
x
−
μ
)
2
2
σ
2
ln
1
σ
2
×
e
x
2
2
−
(
x
−
μ
)
2
2
σ
2
d
x
=
∫
1
2
π
σ
2
e
−
(
x
−
μ
)
2
2
σ
2
[
−
1
2
ln
σ
2
+
1
2
x
2
−
1
2
(
x
−
μ
)
2
σ
2
]
d
x
=
1
2
∫
1
2
π
σ
2
e
−
(
x
−
μ
)
2
2
σ
2
[
−
ln
σ
2
+
x
2
−
(
x
−
μ
)
2
σ
2
]
d
x
=
1
2
(
−
ln
σ
2
+
E
[
x
2
]
−
1
σ
2
E
[
(
x
−
u
)
2
]
)
=
1
2
(
−
ln
σ
2
+
σ
2
+
μ
2
−
1
)
\begin{equation*} \begin{split} &KL(q_{\theta}(z|x)||\mathcal{N}(0, I)) \\ =& \int \frac{1}{\sqrt{2 \pi {\sigma}^2}} e^{-\frac{(x-{\mu})^2}{2{\sigma}^2}} \ln \frac{\frac{1}{\sqrt{2 \pi {\sigma}^2}} e^{-\frac{(x-{\mu})^2}{2{\sigma}^2}}}{\frac{1}{\sqrt{2 \pi}} e^{-\frac{x^2}{2}}} \text{d}x \\ =& \int \frac{1}{\sqrt{2 \pi {\sigma}^2}} e^{-\frac{(x-{\mu})^2}{2{\sigma}^2}} \ln \frac{1}{\sqrt{\sigma^2}}\times e^{\frac{x^2}{2} - \frac{(x-\mu)^2}{2\sigma^2}}\text{d}x \\ =& \int \frac{1}{\sqrt{2 \pi {\sigma}^2}} e^{-\frac{(x-{\mu})^2}{2{\sigma}^2}} [-\frac{1}{2} \ln \sigma^2 + \frac{1}{2}x^2 - \frac{1}{2}\frac{(x-\mu)^2}{\sigma^2}]\text{d}x \\ =& \frac{1}{2} \int \frac{1}{\sqrt{2 \pi {\sigma}^2}} e^{-\frac{(x-{\mu})^2}{2{\sigma}^2}} [-\ln \sigma^2 + x^2 - \frac{(x-\mu)^2}{\sigma^2}]\text{d}x \\ =& \frac{1}{2}(-\ln \sigma^2 + \mathbb{E}[x^2] - \frac{1}{\sigma^2}\mathbb{E}[(x-u)^2]) \\ =& \frac{1}{2}(-\ln \sigma^2 + \sigma^2 + \mu^2 - 1) \end{split} \end{equation*}
======KL(qθ(z∣x)∣∣N(0,I))∫2πσ21e−2σ2(x−μ)2ln2π1e−2x22πσ21e−2σ2(x−μ)2dx∫2πσ21e−2σ2(x−μ)2lnσ21×e2x2−2σ2(x−μ)2dx∫2πσ21e−2σ2(x−μ)2[−21lnσ2+21x2−21σ2(x−μ)2]dx21∫2πσ21e−2σ2(x−μ)2[−lnσ2+x2−σ2(x−μ)2]dx21(−lnσ2+E[x2]−σ21E[(x−u)2])21(−lnσ2+σ2+μ2−1)
其中
E
[
x
2
]
\mathbb{E}[x^2]
E[x2] 的计算过程如下:
E
X
2
=
1
2
π
σ
∫
−
∞
+
∞
x
2
e
−
(
x
−
μ
)
2
2
σ
2
d
x
⏟
x
→
2
σ
x
+
μ
=
1
π
∫
−
∞
+
∞
(
2
σ
x
+
μ
)
2
e
−
x
2
d
x
=
2
σ
2
π
∫
−
∞
+
∞
x
2
e
−
x
2
d
x
+
2
2
μ
σ
π
∫
−
∞
+
∞
x
e
−
x
2
d
x
+
μ
2
π
∫
−
∞
+
∞
e
−
x
2
d
x
=
2
σ
2
π
⋅
π
2
+
2
2
μ
σ
π
⋅
0
+
μ
2
π
⋅
π
=
σ
2
+
μ
2
.
\begin{align} \mathbb{E}X^2&=\frac{1}{\sqrt{2\pi}\sigma}\underbrace{\int_{-\infty}^{+\infty}x^2\mathrm{e}^{-\frac{(x-\mu)^2}{2\sigma^2}}\mathrm{d}x}_{x\to \sqrt{2}\sigma x+\mu}\\ &=\frac{1}{\sqrt{\pi}}\int_{-\infty}^{+\infty}(\sqrt{2}\sigma x+\mu)^2\mathrm{e}^{-x^2}\mathrm{d}x\\ &=\frac{2\sigma^2}{\sqrt{\pi}}\int_{-\infty}^{+\infty}x^2\mathrm{e}^{-x^2}\mathrm{d}x\\ &\quad+\frac{2\sqrt{2}\mu\sigma}{\sqrt{\pi}}\int_{-\infty}^{+\infty}x\mathrm{e}^{-x^2}\mathrm{d}x\\ &\quad+\frac{\mu^2}{\sqrt{\pi}}\int_{-\infty}^{+\infty}\mathrm{e}^{-x^2}\mathrm{d}x\\ &=\frac{2\sigma^2}{\sqrt{\pi}}\cdot\frac{\sqrt{\pi}}{2}+\frac{2\sqrt{2}\mu\sigma}{\sqrt{\pi}}\cdot 0+\frac{\mu^2}{\sqrt{\pi}}\cdot\sqrt{\pi}\\ &=\sigma^2+\mu^2. \end{align}
EX2=2πσ1x→2σx+μ
∫−∞+∞x2e−2σ2(x−μ)2dx=π1∫−∞+∞(2σx+μ)2e−x2dx=π2σ2∫−∞+∞x2e−x2dx+π22μσ∫−∞+∞xe−x2dx+πμ2∫−∞+∞e−x2dx=π2σ2⋅2π+π22μσ⋅0+πμ2⋅π=σ2+μ2.
-
重参数化技巧:
由于采样过程本身不可导,这里我们使用重参数化技巧(reparametrize),将从 N ( μ , σ 2 ) N(μ, σ^2) N(μ,σ2)采样得到一个Z的过程视为为在 N ( 0 , 1 ) N(0,1) N(0,1)上采样得到一个 ϵ \epsilon ϵ然后计算 Z = μ + ε × σ Z = μ + ε × σ Z=μ+ε×σ 的过程,这样就可以计算 Z Z Z到 μ μ μ、 σ σ σ的导数了。(我有一点点疑惑这个概率是否会发生改变,待进一步证明)
-
多样本多维度情况下的目标函数:
上面介绍的重构误差是针对单个样本的,当样本数为 n n n 时,可以表示为 $\frac{1}{n}\sum_{i=1}^{n} \ln p(x_i|z_i) $,并且可以转化为要求 x i x_i xi 和 x ^ i \hat{x}_i x^i 的MSE尽可能地小。
(为什么可以互相转化呢?我是抱有一定疑问的)
,即最小化 ∑ i = 1 n ∣ ∣ x i − x ^ i ∣ ∣ 2 2 \sum_{i=1}^n ||x_i - \hat{x}_i||_2^2 ∑i=1n∣∣xi−x^i∣∣22上面介绍的KL散度表示也是针对1维的隐变量 z 。由于正态分布是各向同性的,当维度为 d 时,可以表示为 1 2 ∑ i = 1 d ( − ln σ 2 + σ 2 + μ 2 − 1 ) \frac{1}{2}\sum_{i=1}^{d} (-\ln \sigma^2 + \sigma^2 + \mu^2 - 1) 21∑i=1d(−lnσ2+σ2+μ2−1) 。
两个加起来为: L o s s = 1 n ∑ i = 1 n [ ∣ ∣ x i − x ^ i ∣ ∣ 2 2 + 1 2 ∑ i = 1 d ( − ln σ 2 + σ 2 + μ 2 − 1 ) ] Loss = \frac{1}{n}\sum_{i=1}^{n} [||x_i - \hat{x}_i||_2^2 + \frac{1}{2}\sum_{i=1}^{d} (-\ln \sigma^2 + \sigma^2 + \mu^2 - 1)] Loss=n1∑i=1n[∣∣xi−x^i∣∣22+21∑i=1d(−lnσ2+σ2+μ2−1)]
-
decoder
decoder本身是个确定的过程,只需要用一个神经网络来实现 x = f ( z ) x=f(z) x=f(z) 就行
隐变量模型的改良之二:GAN
GAN的工程实现思路看似简单,但其背后的数学内涵似乎是颇为精妙的,在此贴一篇博客,且待之后进一步研究。https://zhuanlan.zhihu.com/p/25071913
隐变量模型的改良之三:FLOW
在前面我们提到,传统的隐变量模型,如果不使用蒙特卡洛采样,对 x = f ( z ) x = f(z) x=f(z)这个方程进行求解是十分困难的(因为 f f f往往十分复杂且不可逆)。
但在FLOW中,我们希望设计一个方便进行求解的函数 f f f,这样一个函数需要满足如下性质:
-
f f f 可逆。
-
f f f 为一一映射(其实可以由1得到),并且定义域和值域维度相同。
-
因为 f f f 可逆,容易得到 z = f − 1 ( x ) ∼ N ( 0 , I ) z = f^{-1}(x) \sim N(0,I) z=f−1(x)∼N(0,I)
且
p ( x ) = 1 ( 2 π ) D / 2 exp ( − 1 2 ∣ ∣ f − 1 ( x ) ∣ ∣ 2 ) ∣ det [ ∂ f − 1 ∂ x ] ∣ p(x)=\frac{1}{(2\pi)^{D/2}}\exp(-\frac{1}{2}||f^{-1}(x)||^2)\bigg |\det[\frac{\partial {f^{-1}}}{\partial x}]\bigg| p(x)=(2π)D/21exp(−21∣∣f−1(x)∣∣2) det[∂x∂f−1]
故我们应该要求 f − 1 ( x ) f^{-1}(x) f−1(x)的行列式也要易于计算。
这就是FLOW的理念,在这个理念上的代表作是 RevNet (Reversible Network),其详细原理的学习待进一步完善:https://spaces.ac.cn/archives/5776
参考资料:
https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
https://sunlin-ai.github.io/2022/05/30/guided-diffusion.html
https://zhuanlan.zhihu.com/p/563661713
https://zhuanlan.zhihu.com/p/629334231