1. 前言
看了很多关于DDPM的博客,都对原文中以上公式的 L 0 L_0 L0没有涉及或者直接说将 L t − 1 L_{t-1} Lt−1和 L 0 L_0 L0合并起来讲,这样使得我对这段很困惑。所以,这篇博客我们主要来讲这个解码器 L 0 L_0 L0部分。
在此,之前我们应该理解什么是概率密度函数,我理解是一种衡量"概率的密度的分布"的函数,注意这里不是“概率的分布”,而是“概率密度”的分布,所以想得到概率就需要对此进行积分。
在解码器部分,从公式来看高斯分布 N ( x ; μ , σ 2 ) N(x;μ,σ^2) N(x;μ,σ2)就是对应的概率密度函数,所以,我们想要得到条件概率,需要对函数在区间上进行积分。
下面我们进行详细的解释。
2. 解码器( L 0 L_0 L0部分)的公式
在这个段落中,作者描述了用于深度学习模型中的数据解码器的数学公式。这是用于将通过神经网络的逆过程编码的数据转换回其原始形式的一部分。让我们详细解释这个公式:
首先,作者提到图像数据是从 {0, 1, …, 255} 范围的整数线性缩放到 [-1, 1] 范围内的数。这确保了神经网络的逆过程是在一致缩放的输入上操作的。
为了在逆过程中获得离散的对数似然值(即评估概率模型的好坏),作者设定了逆过程的最后一步是一个独立的离散解码器,它是基于高斯分布 N ( x 0 ; μ θ ( x 1 , 1 ) , σ 1 2 ) N(x_0; \mu_\theta(x_1, 1), \sigma_1^2) N(x0;μθ(x1,1),σ12)导出的。
公式 p θ ( x 0 ∣ x 1 ) p_\theta(x_0 | x_1) pθ(x0∣x1)表示在给定 x 1 x_1 x1的条件下, x 0 x_0 x0的条件概率。这个概率是对数据维度 D D D的每一个独立坐标 i i i进行的乘积,即公式中的 ∏ i = 1 D \prod_{i=1}^{D} ∏i=1D。
对于每个坐标 i i i,条件概率 p θ ( x 0 ∣ x 1 ) p_\theta(x_0 | x_1) pθ(x0∣x1)是通过在函数 δ + ( x 0 i ) \delta_+(x_0^i) δ+(x0i)和高斯分布 N N N之间积分获得的。函数 δ + \delta_+ δ+和 δ − \delta_- δ−是对 x x x的取值进行限制的函数,它们确保了在 x x x的取值是 1 或者 -1 时,解码器的输出会在合适的范围内。
特别地:
- 当 x = 1 x = 1 x=1时, δ + ( x ) \delta_+(x) δ+(x)等于从 x + 1 255 x + \frac{1}{255} x+2551到无穷大的积分范围。
- 当 x < 1 x < 1 x<1时, δ + ( x ) \delta_+(x) δ+(x)等于 x x x到 x + 1 255 x + \frac{1}{255} x+2551的积分范围。
- δ − ( x ) \delta_-(x) δ−(x)类似,但对 x = − 1 x = -1 x=−1和 x > − 1 x > -1 x>−1的情况进行了定义。
这种设计的目的是为了使得变分界限在离散数据上是无损的,这意味着它能在不添加噪声的情况下直接计算对数似然。通过这种方式,模型能够更精确地评估数据的重建质量,并且使得解码过程更加高效。
3. 什么是概率密度函数?
概率密度函数(Probability Density Function, PDF)是连续随机变量的概念,描述了该随机变量在不同值上取值的相对可能性。对于随机变量 X X X,其概率密度函数 f ( x ) f(x) f(x)满足以下条件:
1. f ( x ) ≥ 0 f(x) \geq 0 f(x)≥0对所有 x x x都成立,这意味着概率密度不可能是负值。
2. ∫ − ∞ ∞ f ( x ) d x = 1 \int_{-\infty}^{\infty} f(x) \, dx = 1 ∫−∞∞f(x)dx=1,这意味着随机变量取所有可能值的概率之和为1。
PDF的一个关键特性是它不直接给出随机变量在特定点的概率,因为在连续分布中,任何单点的概率都是0。取而代之的是,PDF提供了随机变量在给定区间内取值的概率,这通过对PDF在该区间上积分来计算:
P ( a ≤ X ≤ b ) = ∫ a b f ( x ) d x P(a \leq X \leq b) = \int_{a}^{b} f(x) \, dx P(a≤X≤b)=∫abf(x)dx
这里 P ( a ≤ X ≤ b ) P(a \leq X \leq b) P(a≤X≤b)是随机变量 X X X取值在区间 [ a , b ] [a, b] [a,b]内的概率。
在实际应用中,PDF帮助我们理解随机变量的分布特征,比如它的中心趋势(均值),变异度(方差),以及随机变量取值倾向的形状。举例来说,正态分布(高斯分布)的概率密度函数呈现钟形曲线,其中心位置由均值决定,宽度由标准差决定。
4. 解码器的公式中的哪部分是概率密度函数?哪部分是概率?
在论文里解码器的公式中,提到的高斯分布 N ( x ; μ , σ 2 ) N(x; \mu, \sigma^2) N(x;μ,σ2)是概率密度函数(PDF)。它描述了连续随机变量在不同取值上的概率密度,这里的 x x x是变量, μ \mu μ是均值, σ 2 \sigma^2 σ2是方差。
而 p θ ( x 0 ∣ x 1 ) p_\theta(x_0 | x_1) pθ(x0∣x1)是一个概率,表示在给定 x 1 x_1 x1的条件下, x 0 x_0 x0的取值概率。这个概率是通过积分 x 0 x_0 x0对应的概率密度函数 N N N在某个区间(由函数 δ \delta δ定义的区间)内得到的。由于原始图像数据是离散的,所以这里使用了积分来获得离散值的概率。换句话说, p θ p_\theta pθ是通过积分高斯PDF在一个很小区间(例如 [ x 0 − 1 255 , x 0 + 1 255 ] [x_0 - \frac{1}{255}, x_0 + \frac{1}{255}] [x0−2551,x0+2551])来近似离散数据点 x 0 x_0 x0的概率。
这样的处理方式在将连续概率密度函数用于离散数据时是很常见的,因为连续随机变量在任何具体值上的概率都是0,只有通过积分连续密度函数在某个区间内,我们才能得到随机变量落在这个区间内的概率。
5. 为什么概率密度函数是通过积分计算的?
概率密度函数(PDF)通过积分计算得到的概率,这是因为PDF本身并不直接给出概率,而是其积分在特定区间上给出了落在该区间内的概率。PDF在任意一个点上的值并不是概率,而是概率密度,即单位长度上的概率。要从概率密度得到概率,需要对感兴趣的区间进行积分。
在连续概率分布中,特定值的概率总是0,因为有无限多个可能的值。相反,对于连续随机变量的任何区间 [ a , b ] [a, b] [a,b],概率是通过计算该区间上PDF的积分来得到的:
P ( a ≤ X ≤ b ) = ∫ a b f ( x ) d x P(a \leq X \leq b) = \int_{a}^{b} f(x) \, dx P(a≤X≤b)=∫abf(x)dx
这里 f ( x ) f(x) f(x)是PDF,而 P ( a ≤ X ≤ b ) P(a \leq X \leq b) P(a≤X≤b)表示随机变量 X X X的值落在区间 [ a , b ] [a, b] [a,b]内的概率。
在你提供的段落中,因为原始图像数据是离散的整数值,所以用连续的高斯分布来建模重建图像会有一点误差。为了计算某个离散整数值的概率,作者定义了一个小的区间(比如 x x x到 x + 1 255 x + \frac{1}{255} x+2551),并在这个区间内对连续的高斯分布进行积分,来近似离散整数值的概率。
例如,如果我们想要计算解码后的像素值为0(在缩放后的 [-1, 1] 范围内)的概率,我们需要在高斯分布上积分从 -1/255 到 1/255 的区间。这个积分的结果给出了像素值在这个小区间内的概率,从而近似了像素值为0的概率。这个方法对所有可能的像素值重复,从而获得整个图像的概率。
6.对可能存在歧义部分的补充
在论文的这个部分,作者提到了图像数据,它从 {0, 1, …, 255} 的整数集被线性缩放到 [-1, 1]。在逆过程中,他们使用基于高斯PDF的解码器来处理这些连续缩放的值。 p θ ( x 0 ∣ x 1 ) p_\theta(x_0 | x_1) pθ(x0∣x1)是从高斯PDF中通过积分得出的,在给定 x 1 x_1 x1的条件下 x 0 x_0 x0的概率近似值。积分过程涉及将 δ \delta δ函数应用于高斯PDF,来计算 x 0 x_0 x0在每个小区间内的概率密度,并通过这个方法近似每个离散整数像素值的概率。
这里到底 δ \delta δ函数是个什么东西?怎么得到最终图像的像素值?
这里的 δ \delta δ函数被用来定义一个在特定像素值附近的小区间。在连续概率分布(如高斯分布)中,我们不能直接计算离散点的概率,因为在连续分布中任意一个点的概率都是0。因此,为了估计一个离散随机变量在某一特定值上的概率,我们可以在该值周围定义一个小区间,并计算连续分布在这个区间上的积分。
在这种情况下, δ + \delta_+ δ+和 δ − \delta_- δ−函数定义了像素值为整数时的积分区间。例如,对于一个特定的像素值 x 0 i x_0^i x0i,如果它是缩放后的图像数据中的一个正整数,我们可以使用 δ + ( x 0 i ) \delta_+(x_0^i) δ+(x0i)来得到 x 0 i x_0^i x0i附近的小区间。对于每一个维度 i i i,我们计算高斯PDF在这个小区间内的积分,这个积分给出了在 x 0 i x_0^i x0i值附近 x 0 x_0 x0的概率质量。
这个积分是如何计算的呢?对于高斯分布 N ( x ; μ , σ 2 ) N(x; \mu, \sigma^2) N(x;μ,σ2):
- 当 x 0 i x_0^i x0i是最大值(在这个缩放中是1), δ + \delta_+ δ+函数定义的区间是 [ x 0 i , x 0 i + 1 255 ] [x_0^i, x_0^i + \frac{1}{255}] [x0i,x0i+2551]。实际上,因为1是可能的最大值,这个区间将会是 [ 1 , ∞ ) [1, \infty) [1,∞),代表所有大于或等于1的值。
- 当 x 0 i x_0^i x0i小于最大值时, δ + \delta_+ δ+函数定义的区间是 [ x 0 i , x 0 i + 1 255 ] [x_0^i, x_0^i + \frac{1}{255}] [x0i,x0i+2551],这个区间将涵盖 x 0 i x_0^i x0i的邻近值。
在 D D D个独立的维度上进行连乘操作是因为这是一种高效的方法来计算多维随机变量的联合概率。在这种情况下,由于图像的每个像素点是相互独立的,所以我们可以将每个像素点的概率相乘来得到整个图像的概率。
最终,这个过程可以用来计算在给定 x 1 x_1 x1的条件下,重构出 x 0 x_0 x0的图像数据的概率。通过这种方法,我们可以评估解码器输出的图像与原始图像数据的匹配程度。概率越高,表示解码器的性能越好,重构的图像质量越接近原始图像。