Understanding Diffusion Model[上]

Understanding Diffusion Model

1. Introduction: Generative Models

给定真实样本 x x xgenerative model的目标是建模出其真实数据分布 p ( x ) p(x) p(x)

生成对抗网络 (GAN) 对复杂分布的采样过程进行建模,该过程以对抗方式学习。 另一类生成模型,称为“likelihood-based”,旨在学习一个模型,该模型将高可能性分配给观察到的数据样本。 这包括autoregressive
models, normalizing flows, and Variational Autoencoders (VAEs)

2. Background: ELBO, VAE, and Hierarchical VAE

对于大多数的modalities,我们可以将我们观察到的数据认为是由相关的隐变量 z z z表示或者生成的。

在生成建模中,我们通常寻求学习低维潜在表示而不是高维表示。一方面,如果没有强大的先验信息,学习比观察更高维的表示是徒劳的;另一方面,学习低维的潜在表示也可以被视为一种压缩形式,可以潜在的揭示描述观察的语义上更有意义的结构。

Evidence Lower Bound

我们可以将隐变量 z z z和我们观察到的数据 x x x认为是由联合分布 p ( x , z ) p(x,z) p(x,z)建模的。

回想一下一种"likelihood-based"的生成建模方法,是学习一个模型以最大化所有观察到的 x x x的似然概率 p ( x ) p(x) p(x)。有两种方法可以从联合分布 p ( x , z ) p(x,z) p(x,z)中获取我们的似然概率 p ( x ) p(x) p(x)。方法一是对隐变量 z z z进行积分,得到 x x x的边缘概率分布:
p ( x ) = ∫ z p ( x , z )    d z ( 1 ) p(x) = \int_z p(x,z) \; dz \qquad (1) p(x)=zp(x,z)dz(1)
或者使用链式法则:
p ( x ) = p ( x , z ) p ( z ∣ x ) ( 2 ) p(x) = \frac{p(x,z)}{p(z \mid x)} \qquad (2) p(x)=p(zx)p(x,z)(2)
直接计算和最大化似然概率 p ( x ) p(x) p(x)是非常困难的,因为它要么涉及公式1中的所有隐变量 z z z,这对复杂模型来说是难以处理的;要么涉及访问ground truth latent encoder p ( z ∣ x ) p(z \mid x) p(zx)。( p ( z ∣ x ) p(z \mid x) p(zx)是我们要建模的编码器)。但是我们可以利用上面两个公式推导出生成模型的置信下界,即Evidence Lower Bound (ELBO)

在这种情况下,evidence被量化为观测数据的对数似然;然后最大化ELBO成为优化潜变量模型的代理目标;在最好的情况下,当ELBO被很好的参数化和完美优化的时候,它变得和evidence等价。从数学形式上看,ELBO的公式如下:
E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) q ϕ ( z ∣ x ) ] ( 3 ) \mathbf E_{q_\phi(z \mid x)}\left[log \; \frac{p(x,z)}{q_\phi(z \mid x)}\right] \qquad (3) Eqϕ(zx)[logqϕ(zx)p(x,z)](3)
ELBO与似然概率 p ( x ) p(x) p(x)之间的关系可以写成下面的公式:
l o g    p ( x ) ≥ E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) q ϕ ( z ∣ x ) ] ( 4 ) \begin{aligned} log \; p(x) \ge \mathbf E_{q_\phi(z \mid x)}\left[log \; \frac{p(x,z)}{q_\phi(z \mid x)}\right] && (4) \end{aligned} logp(x)Eqϕ(zx)[logqϕ(zx)p(x,z)](4)
其中, q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(zx)是一种近似变分分布,其中参数 ϕ \phi ϕ是我们待优化的参数。直观来说,可以认为它是一种参数化的模型,用来学习给定观测 x x x来估计潜变量 z z z的真实分布,也就是说用来寻求近似真实的后验概率 p ( z ∣ x ) p(z \mid x) p(zx)

正如我们在探寻VAE中所看到的,当我们通过调整参数以最大化ELBO来增加下限的时候,我们获得可用于建模真实数据分布的components并可以从中采样,从而学习了生成模型。下面将推导为什么ELBO是我们希望最大化的目标。
log ⁡ p ( x ) = log ⁡ ∫ p ( x , z ) d z  (Apply Equation 1)  (5) = log ⁡ ∫ p ( x , z ) q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) d z  (Multiply by  1 = q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) ) (6) = log ⁡ E q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ]  (Definition of Expectation)  (7) ≥ E q ϕ ( z ∣ x ) [ log ⁡ p ( x , z ) q ϕ ( z ∣ x ) ]  (Apply Jensen’s Inequality)  ( 8 ) \begin{aligned} \log p(\boldsymbol{x}) &=\log \int p(\boldsymbol{x}, \boldsymbol{z}) d \boldsymbol{z} & & \text { (Apply Equation 1) } && \text{(5)}\\ &=\log \int \frac{p(\boldsymbol{x}, \boldsymbol{z}) q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})} d \boldsymbol{z} & &\text { (Multiply by } \left.1=\frac{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right) && \text{(6)}\\ &=\log \mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\frac{p(\boldsymbol{x}, \boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right] & & \text { (Definition of Expectation) } && \text{(7)}\\ & \geq \mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p(\boldsymbol{x}, \boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right] & & \text { (Apply Jensen's Inequality) } && \text(8) \end{aligned} logp(x)=logp(x,z)dz=logqϕ(zx)p(x,z)qϕ(zx)dz=logEqϕ(zx)[qϕ(zx)p(x,z)]Eqϕ(zx)[logqϕ(zx)p(x,z)] (Apply Equation 1)  (Multiply by 1=qϕ(zx)qϕ(zx)) (Definition of Expectation)  (Apply Jensen’s Inequality) (5)(6)(7)(8)
在上面的公式推导中,我们使用Jensen不等式直接得到了置信下界,但是这个证明没有给出明确的说明,为什么ELBO实际上是evidence的下界(Jensen不等式将一部分丢弃了),并且仅仅知道ELBO是evidence的下界并不能真正告诉我们为什么要将ELBO作为最大化的目标。于是我们需要再进行一次推导,如下所示:
l o g    p ( x ) = l o g    p ( x ) ∫ q ϕ ( z ∣ x ) d z ( 1 = ∫ q ϕ ( z ∣ x ) d z ) ( 9 ) = ∫ q ϕ ( z ∣ x ) ( l o g    p ( x ) ) d z 将p(x)放到积分号里面 ( 10 ) = E q ϕ ( z ∣ x ) [ l o g    p ( x ) ] 数学期望的定义 ( 11 ) = E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) p ( z ∣ x ) ] 公式2链式法则 ( 12 ) = E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) q ϕ ( z ∣ x ) p ( z ∣ x ) q ϕ ( z ∣ x ) ] 上下同乘以 q ϕ ( z ∣ x ) ( 13 ) = E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) q ϕ ( z ∣ x ) ] + E q ϕ ( z ∣ x ) [ l o g    q ϕ ( z ∣ x ) p ( z ∣ x ) ] log乘法拆成加法 ( 14 ) = E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) q ϕ ( z ∣ x ) ] + D K L ( q ϕ ( z ∣ x )    ∣ ∣    p ( z ∣ x ) ) KL散度定义 ( 15 ) ≥ E q ϕ ( z ∣ x ) [ l o g    p ( x , z ) q ϕ ( z ∣ x ) ] KL散度 ≥ 0 ( 16 ) \begin{aligned} log \; p(x) &= log \; p(x) \int q_\phi(z \mid x)dz &&(1 = \int q_\phi(z \mid x)dz) && (9) \\ & = \int q_\phi(z \mid x)(log \; p(x))dz && \text{将p(x)放到积分号里面} && (10) \\ & = \mathbf E_{q_\phi(z \mid x)}[log \; p(x)] && \text{数学期望的定义} && (11) \\ & = \mathbf E_{q_\phi(z \mid x)} \left[log \; \frac{p(x,z)}{p(z \mid x)}\right] && \text{公式2链式法则} && (12) \\ & = \mathbf E_{q_\phi(z \mid x)}\left[log \; \frac{p(x,z)q_\phi(z \mid x)}{p(z \mid x)q_\phi(z \mid x)}\right] && \text{上下同乘以} q_\phi(z \mid x) && (13) \\ & = \mathbf E_{q_\phi(z \mid x)} \left[log \; \frac{p(x,z)}{q_\phi(z \mid x)}\right] + \mathbf E_{q_\phi(z \mid x)} \left[log \; \frac{q_\phi(z \mid x)}{p(z \mid x)}\right] && \text{log乘法拆成加法} && (14) \\ & = \mathbf E_{q_\phi(z \mid x)} \left[log \; \frac{p(x,z)}{q_\phi(z \mid x)}\right] + D_{KL}(q_\phi(z \mid x) \; || \; p(z \mid x)) && \text{KL散度定义} &&(15) \\ & \ge \mathbf E_{q_\phi(z \mid x)} \left[log \; \frac{p(x,z)}{q_\phi(z \mid x)}\right] && \text{KL散度} \ge 0 && (16) \end{aligned} logp(x)=logp(x)qϕ(zx)dz=qϕ(zx)(logp(x))dz=Eqϕ(zx)[logp(x)]=Eqϕ(zx)[logp(zx)p(x,z)]=Eqϕ(zx)[logp(zx)qϕ(zx)p(x,z)qϕ(zx)]=Eqϕ(zx)[logqϕ(zx)p(x,z)]+Eqϕ(zx)[logp(zx)qϕ(zx)]=Eqϕ(zx)[logqϕ(zx)p(x,z)]+DKL(qϕ(zx)p(zx))Eqϕ(zx)[logqϕ(zx)p(x,z)](1=qϕ(zx)dz)p(x)放到积分号里面数学期望的定义公式2链式法则上下同乘以qϕ(zx)log乘法拆成加法KL散度定义KL散度0(9)(10)(11)(12)(13)(14)(15)(16)
从公式(15)我们可以看出,evidence项等于ELBO加上一个KL散度项,这个KL散度项在第一次推导的时候被Jensen不等式去掉了。

首先由于evidence项(即log p(x))跟ELBO之间差了一个严格非负的KL散度项,因此ELBO确实是evidence的一个下限。

其次,我们要探寻为什么要去优化ELBO项。在引入了我们想要建模的隐变量 z z z之后,我们的目标是学习描述我们观察到的数据 x x x的潜在结构。换句话说,我们希望去优化variational posterior(变分后验) q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(zx)的参数去精确的匹配**true posterior(真实后验)**分布 p ( z ∣ x ) p(z \mid x) p(zx),这是通过最小化这两者之间的KL散度来实现的(详见附录[最小化KL散度])。然而,直接优化KL散度项是很困难的,因为我们没有办法得到ground truth p ( z ∣ x ) p(z \mid x) p(zx)的分布。不过,在公式15的左侧,观测数据(and therefore our evidence term log p(x)这句话不知道怎么翻译)的likelihood始终是相对于 ϕ \phi ϕ的常数,因为 p ( x ) p(x) p(x)是通过从联合分布 p ( x , z ) p(x,z) p(x,z)边缘积分 z z z来得到的,并不依赖任何的参数 ϕ \phi ϕ(这句话可以简单理解为,自然世界的真实图像分布是不受任何后验参数影响的,它本身就在那儿)。由于ELBO和KL项的总和为常数,因此最大化ELBO项就相当于最小化KL项。因此,我们越优化ELBO,我们的变分后验就越接近真实后验。并且,一旦进行训练,ELBO也可以用于估计观测或者生成data的likelihood,因为ELBO被训练建模成为 l o g    p ( x ) log \; p(x) logp(x)的近似

Variational Autoencoders

在这里插入图片描述

图1:图形表示VAE。其中,encoder q ( z ∣ x ) q(z \mid x) q(zx)定义了已知观察值 x x x潜变量 z z z的分布,decoder从已知的潜变量 z z z中解码出 x x x

在变分自动编码器(VAE)的默认公式中,我们直接最大化ELBO。这种方法是variational(应该翻译成可变分的),因为我们优化了由 ϕ \phi ϕ参数化的一系列潜在后验分布得到最优的 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(zx)。这被称为autoencoder,其中input data在经历中间bottlenecking表示步骤之后用于预测自身。下面清晰的展示出ELBO项:
E q ϕ ( z ∣ x ) [ log ⁡ p ( x , z ) q ϕ ( z ∣ x ) ] = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) p ( z ) q ϕ ( z ∣ x ) ]  (Chain Rule of Probability)  ( 17 ) = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) ] + E q ϕ ( z ∣ x ) [ log ⁡ p ( z ) q ϕ ( z ∣ x ) ]  (Split the Expectation)  ( 18 ) = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) ] ⏟ reconstruction term  − D K L ( q ϕ ( z ∣ x ) ∥ p ( z ) ) ⏟ prior matching term   (Definition of KL Divergence)  ( 19 ) \begin{array}{rll} \mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p(\boldsymbol{x}, \boldsymbol{z})}{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\right] & =\mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p_{\boldsymbol{\theta}}(\boldsymbol{x} \mid \boldsymbol{z}) p(\boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right] & \text { (Chain Rule of Probability) } & (17)\\ & =\mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log p_{\boldsymbol{\theta}}(\boldsymbol{x} \mid \boldsymbol{z})\right]+\mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p(\boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right] & \text { (Split the Expectation) } & (18) \\ & =\underbrace{\mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log p_{\boldsymbol{\theta}}(\boldsymbol{x} \mid \boldsymbol{z})\right]}_{\text {reconstruction term }}-\underbrace{D_{\mathrm{KL}}\left(q_\phi(\boldsymbol{z} \mid x) \| p(\boldsymbol{z})\right)}_{\text {prior matching term }} & \text { (Definition of KL Divergence) } & (19) \end{array} Eqϕ(zx)[logqϕ(zx)p(x,z)]=Eqϕ(zx)[logqϕ(zx)pθ(xz)p(z)]=Eqϕ(zx)[logpθ(xz)]+Eqϕ(zx)[logqϕ(zx)p(z)]=reconstruction term  Eqϕ(zx)[logpθ(xz)]prior matching term  DKL(qϕ(zx)p(z)) (Chain Rule of Probability)  (Split the Expectation)  (Definition of KL Divergence) (17)(18)(19)
上面是将ELBO项做展开,不同于公式(9)是将evidence l o g    p ( x ) log \; p(x) logp(x)展开

在这种情况下,我们学习了一个中间bottlenecking分布 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(zx),可以将其视为一个encoder;它可以将输入转换成可能的潜在分布。同时我们还学习了一个决策函数(deterministic function) p θ ( x ∣ z ) p_\theta(x \mid z) pθ(xz)用于将给定的潜在变量 z z z转换成观测数据 x x x,可以将其视为一个decoder

公式(19)中的两个项都有一个直观的描述:第一项从我们的变分分布 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(zx)中测量了decoder的重建likelihood;这个保证了所学习的分布正在对可以从中重新生成原始数据的有效隐变量进行建模。第二项测量了学习的变分分布于隐变量的先验有多相似。最小化这一项会鼓励编码器实际学习一个分布,而不是塌陷为Dirac delta function.最大化ELBO等同于最大化第一项和最小化第二项。

VAE的一个定义上的特征就是如何在参数 ϕ , θ \phi,\theta ϕ,θ上联合优化ELBO。VAE的encoder通常被选择用来建模具有对角协方差的多元高斯,并且先验通常被选择为标准多元高斯

The encoderof the VAE is commonly chosen to model a multivariate Gaussian with diagonal covariance, and the prior is often selected to be a standard multivariate Gaussian:

q ϕ ( z ∣ x ) = N ( z ; μ ϕ ( x ) , σ ϕ 2 ( x ) I ) ( 20 ) p ( z ) = N ( z ; 0 , I ) ( 21 ) \begin{aligned} q_\phi(z \mid x) = \mathcal N(z;\mu_\phi(x),\sigma^2_\phi(x)I) && (20) \\ p(z) = \mathcal N(z;0,I) && (21) \end{aligned}

### Diffusion Vector in Computer Science and Technology In the context of computer science and technology, diffusion vectors play an important role particularly within machine learning models that deal with graph-based data or spatio-temporal dynamics. A diffusion vector represents how information propagates through a network over time, capturing both spatial and temporal dependencies. For instance, when applied to trajectory analysis as described in research related to Similar Trajectory Search with Spatio-Temporal Deep Representation Learning[^1], diffusion vectors can model transitions between different locations at various times. This allows for more accurate prediction and understanding of movement patterns by considering not just where entities have been but also how they move from one place to another over periods. Moreover, while quantum channels focus on transmitting unknown states securely using qubits sent via specific endpoints like sender and receiver[^2], classical computing approaches involving diffusion vectors emphasize modeling probabilistic flows across networks composed of nodes connected by edges representing relationships such as distances or interactions among objects/entities. Diffusion processes modeled by these vectors are widely used in applications ranging from social media trend forecasting to epidemiological studies predicting disease spread rates based upon contact graphs constructed out of population mobility datasets. ```python import numpy as np def calculate_diffusion_vector(adj_matrix, initial_state): """ Calculate the diffusion vector given adjacency matrix and initial state. Parameters: adj_matrix (np.array): Adjacency matrix describing connections between nodes. initial_state (list/np.array): Initial distribution of values over all nodes. Returns: list: Final diffusion vector after propagation has stabilized. """ diff_vec = np.array(initial_state).astype(float) prev_vec = None # Iterate until convergence is reached while True: next_vec = np.dot(adj_matrix, diff_vec) if np.allclose(next_vec, diff_vec) or np.allclose(prev_vec, next_vec): break prev_vec = diff_vec.copy() diff_vec = next_vec return diff_vec.tolist() # Example usage adj_matrix_example = [[0, 1, 0], [1, 0, 1], [0, 1, 0]] initial_distribution = [1, 0, 0] final_diffusion_vector = calculate_diffusion_vector(adj_matrix_example, initial_distribution) print(final_diffusion_vector) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值