当前位置: 首页 > news >正文

从扩散模型开始的生成模型范式演变--SDE

SDE是在分数生成模型的基础上,将加噪过程扩展时连续、无限状态,使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后,本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型理论与完整PyTorch代码详细解读,在其讲解的英文文稿上做了翻译和适当的个人理解调整,感兴趣读者可以将本文作为该视频的参考读物结合学习。

文章目录

  • 分数匹配网络
    • 何为分数
    • 基于朗之万动力学采样
    • 分数匹配
      • 去噪分数匹配
  • Noise Conditonal Score Networks
    • NCSN定义
    • 通过分数匹配学习NCSN
    • 基于退火朗之万动力学进行NCSN推理
  • Stochastic Differential Equations--SDEs
    • SDE下的扰动数据
    • 用于采样的逆SDE过程
    • 去噪分数匹配估计逆SDE过程所需分数
    • 分数网络设计建议

分数匹配网络

何为分数

假设我们的数据集由来自一个未知数据分布 p d a t a ( x ) p_{data}(x) pdata(x) N N N个独立同分布样本 { x i ∈ R D } i = 1 N \{x_i \in R^D\}^N_{i=1} {xiRD}i=1N组成。定义概率密度 p ( x ) p(x) p(x) s c o r e score score ∇ x log ⁡ p ( x ) \nabla_x \log p(x) xlogp(x),即一个概率密度的对数似然关于变量 x x x的梯度就是该概率密度的分数。分数网络 s θ : R D → R D s_{\theta}: R^D \to R^D sθ:RDRD是一个用 θ \theta θ表示参数的神经网络,其被训练用于去近似 p d a t a ( x ) p_{data}(x) pdata(x)的分数。生成建模的目标是基于数据集训练可以生成符合真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x)新样本的模型。分数生成建模框架有两个核心要素:分数匹配和朗之万动力学;分数匹配的作用就是训练一个分数网络可以预测出真实数据分布的分数,而朗之万动力学则可以基于分数采样出新样本。

基于朗之万动力学采样

朗之万动力学能仅使用概率密度 p ( x ) p(x) p(x)的分数函数 ∇ x log ⁡ p ( x ) \nabla_x \log p(x) xlogp(x)生成符合 p ( x ) p(x) p(x)的样本。给定一个固定步长 ϵ > 0 \epsilon > 0 ϵ>0,一个初始值 x ~ 0 ∼ π ( x ) \tilde{x}_0 \sim \pi(x) x~0π(x) π \pi π是一个先验分布,朗之万动力学基于以下公式递归采样:
x ~ t = x ~ t − 1 + ϵ 2 ∇ x log ⁡ p ( x ~ t − 1 ) + ϵ z t , (1) \tilde{x}_t = \tilde{x}_{t-1} + \frac{\epsilon}{2}\nabla_x \log p(\tilde{x}_{t-1})+\sqrt{\epsilon}z_t,\tag1 x~t=x~t1+2ϵxlogp(x~t1)+ϵ zt,(1)
其中 z t ∼ N ( 0 , I ) z_t \sim N(0,I) ztN(0,I)。当 ϵ → 0 \epsilon \to 0 ϵ0 T → ∞ T \to \infty T x ~ \tilde{x} x~的分布等价于 p ( x ) p(x) p(x),在一些正则条件下 x ~ T \tilde{x}_T x~T成为 p ( x ) p(x) p(x)的一个样本。当 ϵ > 0 \epsilon > 0 ϵ>0 T < ∞ T < \infty T<,需要通过Metropolis-Hastings更新去纠正公式(1)中的错误,但实际上该过程进本被忽略。在SDE工作中,当 ϵ \epsilon ϵ很小, T T T很大时,也假设公式(1)存在的问题可以被忽略,即基于公式(1)采样出的样本时符合 p ( x ) p(x) p(x)

公式(1)仅需要 ∇ x log ⁡ p ( x ) \nabla_x \log p(x) xlogp(x)就能采样,因此为了获得 p d a t a ( x ) p_{data}(x) pdata(x)的样本,首先要训练一个分数网络 s θ ≈ ∇ x log ⁡ p ( x ) s_{\theta} \approx \nabla_x \log p(x) sθxlogp(x),然后基于朗之万动力学使用公式(1)生成新样本。这是分数生成建模框架的关键。

分数匹配

分数匹配初始被设计用于从一个未知数据分布的独立同分布样本中学习非归一化统计模型,在SDE中将其重新应用于分数估计。使用分数匹配,能直接训练一个分数网络 s θ s_{\theta} sθ去估计 ∇ x log ⁡ p d a t a ( x ) \nabla_x \log p_{data}(x) xlogpdata(x),而不需要训练一个模型去估计 p d a t a ( x ) p_{data}(x) pdata(x)。与电影的分数匹配使用方法不同,SDE中不使用一个能量模型的梯度作为分数网络,可以避免由于高阶梯度导致额外计算。优化目标是 1 2 E p d a t a [ ∣ ∣ s θ − ∇ x log ⁡ p d a t a ( x ) ∣ ∣ 2 2 ] \frac{1}{2}E_{p_{data}}[||s_{\theta}-\nabla_x \log p_{data}(x)||^2_2] 21Epdata[∣∣sθxlogpdata(x)22],其与以下公式等价
E p d a t a [ t r ( ∇ x s θ ( x ) ) + 1 2 ∣ ∣ s θ ( x ) ∣ ∣ 2 2 ] (2) E_{p_{data}}[tr(\nabla_x s_{\theta}(x))+\frac{1}{2}||s_{\theta}(x)||^2_2]\tag2 Epdata[tr(xsθ(x))+21∣∣sθ(x)22](2)
其中 ∇ x s θ ( x ) \nabla_x s_{\theta}(x) xsθ(x)表示 s θ ( x ) s_{\theta}(x) sθ(x)的雅可比行列式,但深度模型和高i为数据时会导致此雅可比行列式计算困难,在大范围分数匹配场景下的有两种绕过雅可比行列式计算的方法,常用的一种就是去噪分数匹配。

去噪分数匹配

去噪分数匹配是一种完全规避求解 t r ( ∇ x s θ ( x ) ) tr(\nabla_x s_{\theta}(x)) tr(xsθ(x))的分数匹配变体。去噪分数匹配先用一个预定义的噪声扰动数据点 x x x,得到扰动后的数据分数 q σ ( x ~ ∣ x ) q_{\sigma}(\tilde{x}|x) qσ(x~x);然后使用分数匹配去估计扰动后数据分布 q σ ( x ~ ) = Δ ∫ q σ ( x ~ ∣ x ) p d a t a ( x ) d x q_{\sigma}(\tilde{x}) \overset{\Delta}{=} \int q_{\sigma}(\tilde{x}|x) p_{data}(x) dx qσ(x~)=Δqσ(x~x)pdata(x)dx的分数。优化目标等价于以下公式:
1 2 E q σ ( x ~ ∣ x ) p d a t a ( x ) [ ∣ ∣ s θ ( x ~ ) − ∇ x ~ log ⁡ q σ ( x ~ ∣ x ) ∣ ∣ 2 2 ] , (3) \frac{1}{2}E_{q_{\sigma}(\tilde{x}|x)p_{data}(x)}[||s_{\theta}(\tilde{x})-\nabla_{\tilde{x}} \log q_{\sigma}(\tilde{x}|x)||^2_2],\tag3 21Eqσ(x~x)pdata(x)[∣∣sθ(x~)x~logqσ(x~x)22],(3)
有理由相信基于上述优化目标训练后的最优模型 s θ ∗ ( x ) = ∇ x log ⁡ p σ ( x ) s_{\theta^*}(x) = \nabla_x \log p_{\sigma}(x) sθ(x)=xlogpσ(x)。那么当噪声非常小,即 q σ ( x ) ≈ p d a t a ( x ) q_{\sigma}(x) \approx p_{data}(x) qσ(x)pdata(x)时,有 s θ ∗ ( x ) = ∇ x log ⁡ p σ ( x ) ≈ ∇ x log ⁡ p d a t a ( x ) s_{\theta^*}(x)=\nabla_x \log p_{\sigma}(x) \approx \nabla_x \log p_{data}(x) sθ(x)=xlogpσ(x)xlogpdata(x)

此处去噪分数匹配给数据加噪与下文中的NCSN中的添加噪声不同,其不是条件,而是为了规避计算雅可比行列式的一种手段。

Noise Conditonal Score Networks

去噪分数匹配存在一个问题,即在数据密度较低的区域分数估计不准确(如下图所示),进而后续的采样结果也不会准确。为了解决低密度分数估计不准的问题,引入了噪声条件分数网络,即NSCN。
在这里插入图片描述
NSCN是带条件的分数网络,条件就是噪声。在上图数据基础上加噪后(下图所示),整体数据密度变大,低密度区域变得很少,就不再存在分数估计不准的问题。
在这里插入图片描述
那么应该如何加噪呢?在上述去噪分数匹配中提到,当加入的噪声很小时,才能基于公式(3)训练得到目标分数网络,但是当噪声很小时,加噪后的数据密度增幅不大,就会存在分数估计不准的问题;当加入的噪声很大时,虽然分数估计变准,但是加噪后的数据与原始数据分布区别就会很大,就违背了去噪分数匹配中的假设。为了兼顾两边,应该使用不同量级的噪声进行加噪,然后使用同一个分数网络去估计不同噪声量级下的分数。当分数网络训练完毕后,首先生成噪声量级大下分布的样本,然后逐渐降低噪声量级,最终基于朗之万采样平滑地生成符合目标分数地样本。

NCSN定义

假设有一组正等比数列 { σ i } i = 1 L \{\sigma_i\}^L_{i=1} {σi}i=1L,满足 σ 1 σ 2 = ⋯ = σ L − 1 σ L > 1 \frac{\sigma_1}{\sigma_2}= \cdots = \frac{\sigma_{L-1}}{\sigma_L} > 1 σ2σ1==σLσL1>1 q σ ( x ) = Δ ∫ p d a r a ( t ) N ( x ∣ t , σ 2 I ) d t q_{\sigma}(x) \overset{\Delta}{=} \int p_{dara}(t) N(x|t,\sigma^2I)dt qσ(x)=Δpdara(t)N(xt,σ2I)dt表示扰动后的数据分布。 σ i \sigma_i σi就表征不同的噪声等级, σ 1 \sigma_1 σ1足够大,使其能修复数据密度低导致的分数估计不准的问题; σ L \sigma_L σL足够小,可认为扰动后的数据分布等价于原始数据分布。目标是使用一个条件分数网络去同时估计所有不同噪声等级扰动分布的分数,即 ∀ σ ∈ { σ i } i = 1 L , s θ ( x , σ ) ≈ ∇ x q σ ( x ) \forall \sigma \in \{\sigma_i\}^L_{i=1},s_{\theta}(x,\sigma) \approx \nabla_xq_{\sigma}(x) σ{σi}i=1L,sθ(x,σ)xqσ(x)。注意,当 x ∈ R D , s θ ( x , σ ) ∈ R D x\in R^D,s_{\theta}(x,\sigma) \in R^D xRD,sθ(x,σ)RD s θ ( x , σ ) s_{\theta}(x,\sigma) sθ(x,σ)即为噪声条件分数网络,NCSN。

通过分数匹配学习NCSN

假设噪声扰动后的数据分布为 q σ ( x ~ ∣ x ) = N ( x ~ ∣ x , σ 2 I ) q_{\sigma}(\tilde{x}|x)=N(\tilde{x}|x,\sigma^2I) qσ(x~x)=N(x~x,σ2I),则该分布的分数函数为 ∇ x ~ log ⁡ q σ ( x ~ ∣ x ) = − x ~ − x σ 2 \nabla_{\tilde{x}}\log q_{\sigma}(\tilde{x}|x)=-\frac{\tilde{x}-x}{\sigma^2} x~logqσ(x~x)=σ2x~x。对于给定 σ \sigma σ,去噪分数匹配优化目标如下:
l ( θ ; σ ) = Δ 1 2 E p d a t a E x ~ ∼ N ( x , σ 2 I ) [ ∣ ∣ s θ ( x , σ ) + x ~ − x σ 2 ∣ ∣ 2 2 ] , (4) l(\theta;\sigma) \overset{\Delta}{=} \frac{1}{2}E_{p_{data}}E_{\tilde{x} \sim N(x,\sigma^2I)}[||s_{\theta}(x,\sigma)+\frac{\tilde{x}-x}{\sigma^2}||^2_2],\tag4 l(θ;σ)=Δ21EpdataEx~N(x,σ2I)[∣∣sθ(x,σ)+σ2x~x22],(4)
利用公式(4)对多有噪声等级计算后取平均值得到最终目标
L ( θ ; { σ i } i = 1 L ) = Δ 1 L ∑ i = 1 L λ ( σ i ) l ( θ ; σ i ) , (5) L(\theta;\{\sigma_i\}^L_{i=1}) \overset{\Delta}{=} \frac{1}{L}\sum_{i=1}^L \lambda(\sigma_i)l(\theta;\sigma_i),\tag5 L(θ;{σi}i=1L)=ΔL1i=1Lλ(σi)l(θ;σi),(5)
其中 λ ( σ i ) > 0 \lambda(\sigma_i)>0 λ(σi)>0是一个基于 σ i \sigma_i σi的系数函数。假设 s θ ( x , σ ) s_{\theta}(x,\sigma) sθ(x,σ)有足够的能力,训练完成之后得到的最后分数网络对于所有噪声等级都有, s θ ∗ ( x , σ i ) = ∇ x log ⁡ q σ i ( x ) s_{\theta^*}(x,\sigma_i)=\nabla_x \log q_{\sigma_i}(x) sθ(x,σi)=xlogqσi(x),因为公式(5)是 L L L个去噪分数匹配目标的组合。

公式(5)中不同噪声等级的 λ ( ⋅ ) \lambda(\cdot) λ()设置有很多方法。理想情况下,希望对于所有噪声等级的 λ ( σ i ) l ( θ ; σ i ) \lambda(\sigma_i)l(\theta;\sigma_i) λ(σi)l(θ;σi)能大致在相同的数量等级。从经验上观察得到当分数网络训练到最优时, ∣ ∣ s θ ( x , σ ) ∣ ∣ 2 ∝ 1 σ ||s_{\theta}(x,\sigma)||_2 \varpropto \frac{1}{\sigma} ∣∣sθ(x,σ)2σ1(分数网络的二阶范数正比于噪声的倒数),这促使将 λ \lambda λ设置为 λ ( σ ) = σ 2 \lambda(\sigma)=\sigma^2 λ(σ)=σ2。因为在这个设置下,有 λ ( σ ) l ( θ ; σ ) = σ 2 l ( θ ; σ ) = 1 2 E p d a t a E x ~ ∼ N ( x , σ 2 I ) [ ∣ ∣ σ s θ ( x , σ ) + x ~ − x σ ∣ ∣ 2 2 ] \lambda(\sigma)l(\theta;\sigma)=\sigma^2l(\theta;\sigma)=\frac{1}{2}E_{p_{data}}E_{\tilde{x} \sim N(x,\sigma^2I)}[||\sigma s_{\theta}(x,\sigma)+\frac{\tilde{x}-x}{\sigma}||^2_2] λ(σ)l(θ;σ)=σ2l(θ;σ)=21EpdataEx~N(x,σ2I)[∣∣σsθ(x,σ)+σx~x22],因为 x ~ − x σ ∼ N ( 0 , I ) \frac{\tilde{x}-x}{\sigma} \sim N(0,I) σx~xN(0,I)并且 ∣ ∣ σ s θ ( x , σ ) ∣ ∣ 2 ∝ 1 ||\sigma s_{\theta}(x,\sigma)||_2 \varpropto 1 ∣∣σsθ(x,σ)21,可以看到 λ ( σ ) l ( θ ; σ ) \lambda(\sigma)l(\theta;\sigma) λ(σ)l(θ;σ)的量级与 σ \sigma σ无关,即所有噪声等级的数量级一致。

基于退火朗之万动力学进行NCSN推理

当NCSN s θ ( x , σ ) s_{\theta}(x,\sigma) sθ(x,σ)被训练后可使用退火朗之万进行采样,如下表所示。采样从一些固定先验分布初始化实例开始,如从均匀分布中初始化 x ~ 0 \tilde{x}_0 x~0;然后使用步长 α i \alpha_i αi进行朗之万动力学从分布 q σ 1 ( x ) q_{\sigma_1}(x) qσ1(x)中采样。在每个噪声等级下均采样 T T T次,当进入到下一个噪声等级时,用上一个噪声等级的最后一个采样样本作为作为当前噪声等级的起始样本,按此规律迭代采样下去。最后,使用朗之万动力学从 q σ L ( x ) q_{\sigma_L(x)} qσL(x)中采样,即当 σ L ≈ 0 \sigma_L \approx 0 σL0时, q σ L ( x ) q_{\sigma_L}(x) qσL(x)近似于 p d a t a ( x ) p_{data}(x) pdata(x)
在这里插入图片描述
σ i \sigma_i σi设置为正比于 σ i 2 \sigma_i^2 σi2,动机是固定朗之万动力学中信噪比 α i s θ ( x , σ i ) 2 α i z \frac{\alpha_is_{\theta}(x,\sigma_i)}{2\sqrt{\alpha_i}z} 2αi zαisθ(x,σi)的数量级。

为了证明退火朗之万动力学的有效性,通过一个小型实验进行验证,实验设置 { σ i } i = 1 L \{\sigma_i\}^L_{i=1} {σi}i=1L为等比数列, L = 10 , σ 1 = 10 , σ 10 = 0.1 L=10, \sigma_1=10,\sigma_{10}=0.1 L=10,σ1=10,σ10=0.1,训练时使用EMA更新参数更稳定。

Stochastic Differential Equations–SDEs

上述NCSN虽然在多个噪声等级下进行了训练,但本质还是有限步骤加噪,如果将噪声等级推过到有限步骤,或者连续情况,就能使用随机微分方程/SDE对分数生成模型建模进行统一表征。

SDE下的扰动数据

为了基于分数模型生成样本,需要使用一个扩散过程逐渐缓慢加噪将原始数据转换为一个随机噪声,然在逆扩散过程通过估计分布的分数进行样本采样。一个扩散过程是与布朗运行相似的随机过程。假设 { x ( t ) ∈ R d } t = 0 T \{x(t) \in R^d\}^T_{t=0} {x(t)Rd}t=0T是一个扩散过程,有连续的时间变量 t ∈ [ 0 , T ] t \in [0,T] t[0,T]引导,该扩散过程可以用一个SDE表达,用以下公式表示
d x = f ( x , t ) d t + g ( t ) d w , (6) dx=f(x,t)dt+g(t)dw,\tag6 dx=f(x,t)dt+g(t)dw,(6)
随机微分方程是指含有随机参数或随机过程或随机初始值或随机边界值的微分方程;公式(6)中的 w w w表示标准布朗运动,使得SDE成立;布朗运动具有增量独立性、增量服从高斯分布、轨迹连续。公式(6)中 f ( ⋅ , t ) : R d → R d f(\cdot,t):R^d \to R^d f(,t):RdRd称为SDE的漂移系数, g ( t ) ∈ R g(t) \in R g(t)R成为扩散系数。可以将 SDE 理解为常微分方程 (ODE) 的随机推广。后续使用 p t ( x ) p_t(x) pt(x)表示 x ( t ) x(t) x(t)的分布。

基于分数的生成建模中一般有两个边界,即 x ( 0 ) ∼ p 0 x(0) \sim p_0 x(0)p0是已有数据集中独立同分布样本组成的原始数据分布, x ( T ) ∼ p T x(T) \sim p_T x(T)pT是一个有解析解且易采样的先验分布。整个扩散过程应该足够大,使得在噪声扰动后, p T p_T pT不再依赖 p 0 p_0 p0

用于采样的逆SDE过程

从一个先验分布 p T p_T pT中样本开始,将SDE过程逆向进行,能逐渐获得一个符合原始数据分布 p 0 p_0 p0的样本,此过程就是逆SDE采样。至关重要的是,逆过程是时间倒流的扩散过程。它由以下逆SDE 公式表达
d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p t ( x ) ] d t + g ( t ) d w ˉ , (7) dx=[f(x,t)-g^2(t)\nabla_x \log p_t(x)]dt+g(t)d\bar{w},\tag7 dx=[f(x,t)g2(t)xlogpt(x)]dt+g(t)dwˉ,(7)
其中 w ˉ \bar{w} wˉ是布朗运动的逆向过程, d t dt dt就表示逆时方向上的时间微分。一旦知道了正向SDE过程中漂移系数、扩散系数和时间区间 t ∈ [ 0 , T ] t \in [0,T] t[0,T]内数据分布 p t ( x ) p_t(x) pt(x)的分数,该逆向SDE过程就能计算。

基于SDE的正向过程和逆向过程如下图所示,其实与DDPM中加噪过程是一致的,只是加噪过程变成了连续过程,数据变化开始用微分 d x dx dx表示。
在这里插入图片描述

去噪分数匹配估计逆SDE过程所需分数

基于公式(7),需要使用依赖时间分数函数 ∇ x log ⁡ p t ( x ) \nabla_x \log p_t(x) xlogpt(x)去执行逆向SDE过程,然后可使用数值解法从先验分布 p T p_T pT样本迭代计算得到符合 p 0 p_0 p0的样本。故需要训练一个时间相关的分数模型 s θ ( x , t ) s_{\theta}(x,t) sθ(x,t)去近似分数函数 ∇ x log ⁡ p t ( x ) \nabla_x \log p_t(x) xlogpt(x)。基于去噪分数匹配中公式(3),可以推导出时间相关分数模型的优化目标,如下所示
m i n θ E t ∼ U ( 0 , T ) [ λ ( t ) E x ( 0 ) ∼ p 0 E x ( t ) ∼ p 0 t ( x ( t ) ∣ x ( 0 ) ) [ ∣ ∣ s θ ( x ( t ) , t ) − ∇ x ( t ) log ⁡ p 0 t ( x ( t ) ∣ x ( 0 ) ) ∣ ∣ 2 2 ] ] , (8) \underset{\theta}{min}E_{t \sim \mathcal{U}(0,T)}[\lambda(t)E_{x(0) \sim p_0}E_{x(t) \sim p_{0t}(x(t)|x(0))}[||s_{\theta}(x(t),t)-\nabla_{x(t)} \log p_{0t}(x(t)|x(0))||^2_2]],\tag8 θminEtU(0,T)[λ(t)Ex(0)p0Ex(t)p0t(x(t)x(0))[∣∣sθ(x(t),t)x(t)logp0t(x(t)x(0))22]],(8)
其中 U ( 0 , T ) \mathcal{U}(0,T) U(0,T)是在区间 [ 0 , T ] [0,T] [0,T]上的均匀分布,实际使用时会进行归一化,即是区间 [ 0 , 1 ] [0,1] [0,1]上的均匀分布,分布中的数值是一个连续量; p 0 t ( x ( t ) ∣ x ( 0 ) ) p_{0t}(x(t)|x(0)) p0t(x(t)x(0))表示从 x ( 0 ) x(0) x(0) x ( t ) x(t) x(t)的转移概率, λ ( t ) \lambda(t) λ(t)表示一个正数权重。

在上述目标中, x ( 0 ) x(0) x(0)的期望可以通过 p 0 p0 p0的数据样本的经验平均值来估计。当SDE中的漂移系数 f ( x , t ) f(x,t) f(x,t)是一个仿射变换,即可通过重参数采样就能从 x ( 0 ) x(0) x(0)和时间 t t t采样出样本 x ( 0 ) x(0) x(0),即 x ( t ) x(t) x(t)的期望可通过从 p 0 t ( x ( t ) ∣ x ( 0 ) ) p_{0t}(x(t)|x(0)) p0t(x(t)x(0))采样来估计。为了匹配不同时间点上的分数匹配损失的数量级,权重函数 λ ( t ) \lambda(t) λ(t)一般设置为 1 E [ ∣ ∣ ∇ x ( t ) log ⁡ p 0 t ( x ( t ) ∣ x ( 0 ) ) ∣ ∣ 2 2 ] \frac{1}{E[||\nabla_{x(t)} \log p_{0t}(x(t)|x(0))||^2_2]} E[∣∣x(t)logp0t(x(t)x(0))22]1,与上述NCSN中一致,如果噪声符合高斯分布, 1 E [ ∣ ∣ ∇ x ( t ) log ⁡ p 0 t ( x ( t ) ∣ x ( 0 ) ) ∣ ∣ 2 2 ] \frac{1}{E[||\nabla_{x(t)} \log p_{0t}(x(t)|x(0))||^2_2]} E[∣∣x(t)logp0t(x(t)x(0))22]1就等于方差 σ t 2 \sigma^2_t σt2

分数网络设计建议

时间相关的分数模型的网络架构没有任何限制,除了它们的输出应该与输入具有相同的维度,并且它们应该以时间为条件。以下实在结构设计上的几条有用建议

  • 使用Unet作为分数网络 s θ ( x , t ) s_{\theta}(x,t) sθ(x,t)的主干通常效果更好
  • 对于时间信息可以不只是使用简单的embedding隐射到分数网络中,而是使用高斯随机特征。具体做法是先从分布 N ( 0 , s 2 I ) N(0,s^2I) N(0,s2I)中采样一个 ω \omega ω,该分数是固定的,即 s s s是固定的,训练过程中不用学习。对于一个时间步 t t t,对应的高斯随机特征定义为 [ sin ⁡ ( 2 π ω t ) ; cos ⁡ ( 2 π ω t ) ] [\sin(2\pi \omega t);\cos(2\pi \omega t)] [sin(2πωt);cos(2πωt)] [ a ⃗ ; b ⃗ ] [\vec{a} ; \vec{b}] [a ;b ]表示 a ⃗ \vec{a} a b ⃗ \vec{b} b 的拼接。该高斯随机特征可以用作时间步长 t 的编码,以便分数网络可以通过合并该编码来以 t 为条件。
  • 可以对Unet的输出用一个系数 1 E [ ∣ ∣ ∇ x ( t ) log ⁡ p 0 t ( x ( t ) ∣ x ( 0 ) ) ∣ ∣ 2 2 ] \frac{1}{\sqrt{E[||\nabla_{x(t)} \log p_{0t}(x(t)|x(0))||^2_2]}} E[∣∣x(t)logp0t(x(t)x(0))22] 1进行缩放。这是为了使最优的分数网络 s θ ( x , t ) s_{\theta}(x,t) sθ(x,t)的二阶范数近似于 E [ ∣ ∣ ∇ x ( t ) log ⁡ p 0 t ( x ( t ) ∣ x ( 0 ) ) ∣ ∣ 2 ] E[||\nabla_{x(t)} \log p_{0t}(x(t)|x(0))||_2] E[∣∣x(t)logp0t(x(t)x(0))2],此缩放过程有助于捕捉真实分数的范数。
  • 训练时使用EMA更新模型权重,采用时使用EMA权重,此方法采样的样本质量更高。

相关文章:

从扩散模型开始的生成模型范式演变--SDE

SDE是在分数生成模型的基础上&#xff0c;将加噪过程扩展时连续、无限状态&#xff0c;使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后&#xff0c;本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型…...

基于Java Springboot 协同过滤算法音乐推荐系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue2、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#x…...

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势&#xff1f; 重要性&#xff1a;⭐⭐⭐ &#x1f4af; NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练…...

win10中使用ffmpeg的filter滤镜

1 给视频加文字水印 1.1 添加播放时间 ffmpeg -i input.mp4 -vf "drawtextfontfileC\\:/Windows/fonts/consola.ttf:fontsize30:fontcolorwhite:timecode00\:00\:00\:00:rate25:textTCR\::boxcolor0x000000AA:box1:x20:y20" -y output.mp4 在视频的x20:y20位置添加t…...

shell编程7,bash解释器的 for循环+while循环

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…...

Flutter 1.2:flutter配置gradle环境

1、在android的模块中进行gradle环境配置 ①在 gradle-wrapper.properties文件中将url配置为阿里云镜像&#xff0c;因为gradle的服务器在国外&#xff0c;国内下载非常慢&#xff0c;也可在官网进行下载 gradle版本下载 gradle版本匹配 阿里云镜像gradle下载 可以通过复制链…...

LVS 负载均衡面试题及参考答案

目录 什么是 LVS 负载均衡?它的主要作用是什么? 为什么要使用 LVS 进行负载均衡? LVS 有哪些组成部分? 简述 LVS 的架构。 LVS 中有哪两种典型的架构?请简要说明它们的特点。 LVS 的工作原理是怎样的?简述 LVS 的工作原理。 解释 LVS 中的虚拟服务器(VS)概念。 …...

GaussDB(类似PostgreSQL)常用命令和注意事项

文章目录 前言GaussDB&#xff08;类似PostgreSQL&#xff09;常用命令和注意事项1. 连接到GaussDB数据库2. 查看当前数据库中的所有Schema3. 进入指定的Schema4. 查看Schema下的表、序列、视图5. 查看Schema下所有的表6. 查看表结构7. 开始事务8. 查询表字段注释9. 注意事项&a…...

c语言编程1.17蓝桥杯历届试题-回文数字

题目描述 观察数字&#xff1a;12321&#xff0c;123321 都有一个共同的特征&#xff0c;无论从左到右读还是从右向左读&#xff0c;都是相同的。这样的数字叫做&#xff1a;回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求&#xff1a; 该数字的各个数位之…...

MVC core 传值session

MVC Entity Framework MVC Core session 》》 需要添加 Session 服务 和 Session中间件 builder.Services.AddSession(); app.UseSession(); 》》》控制器中 public IActionResult Privacy(){HttpContext.Session.SetString("key", "123");return View(…...

六:安装服务-compute node

一&#xff1a;工具、环境准备-controller node 二&#xff1a;OpenStack环境准备-controller node 三&#xff1a;安装服务-controller node 四&#xff1a;工具、环境准备-compute node 五&#xff1a;OpenStack环境准备-compute node 六&#xff1a;安装服务-compute node 七…...

【050】基于51单片机计步器【Keil程序+报告+原理图】

☆、设计硬件组成&#xff1a;51单片机最小系统ADXL345三轴加速度传感器LCD1602液晶显示AT24C02存储芯片按键控制。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片&#xff0c;LCD1602实时显示&#xff1b; 2、设计采用ADXL345三轴加速度传感器实现对行走步…...

qt QGraphicsPolygonItem详解

1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类&#xff0c;它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem&#xff0c;你可以定义和显示一个多边形&#xff0c;包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…...

OpenAI浅聊爬虫

前提 OpenAI越来越火&#xff0c;大有要干掉一片程序员的架势。在此&#xff0c;我们看看Sider&#xff08;本文使用的OpenAI工具&#xff09;对爬虫的看法。 爬虫的应用场景 爬虫技术&#xff08;Web Scraping&#xff09;有广泛的应用场景&#xff0c;以下是一些主要的应用…...

Java学习,ArrayList

ArrayList 是 Java 集合框架&#xff08;Collections Framework&#xff09;中的一个重要类&#xff0c;它实现了 List 接口。ArrayList 基于动态数组的数据结构&#xff0c;能够根据需要自动调整其大小。 关键特性 动态数组&#xff1a;ArrayList 底层使用数组来存储元素&…...

拓扑排序的两种实现

1 按节点结束时间进行排序 拓扑排序针对一张DAG&#xff0c;将所有节点按照结束时间从大到小依次排列。 算法描述为&#xff1a;初始化一个空链表 L L L&#xff0c;对DAG进行DFS&#xff0c;维护一个全局时钟 T T T&#xff0c;记录每个节点的开始时间&#xff08;从白色变成…...

洛谷 P10491 [USACO09NOV] The Chivalrous Cow B C语言 bfs

题目&#xff1a; https://www.luogu.com.cn/problem/P10491?contestId217365 题目背景 农民 John 有很多牛&#xff0c;他想交易其中一头被 Don 称为 The Knight 的牛。这头牛有一个独一无二的超能力&#xff0c;在农场里像 Knight 一样地跳&#xff08;就是我们熟悉的象棋…...

C语言——指针初阶(三)

目录 一.指针-指针 代码1&#xff1a; 运行结果&#xff1a; 代码2&#xff1a; 运行结果&#xff1a; 代码3&#xff1a; 运行结果&#xff1a; 二.指针数组 例&#xff1a; 往期回顾 一.指针-指针 指针减去指针的前提&#xff1a;两个指针指向同一块空间。 指针减去指针…...

【Spring】Spring IOCDI:架构旋律中的“依赖交响”与“控制华章”

前言 &#x1f31f;&#x1f31f;本期讲解关于Spring IOC&DI的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…...

安全基线检查

一、安全基线检测基础知识 安全基线的定义 安全基线检查的内容 安全基线检查的操作 二、MySQL的安全基线检查 版本加固 弱口令 不存在匿名账户 合理设置权限 合理设置文件权限 日志审核 运行账号 可信ip地址控制 连接数限制 更严格的基线要求 1、禁止远程连接数据库 2、修改…...

python 生成tts语音

之前一直使用微软、或者国内大厂的接口&#xff0c;网页操作比较麻烦&#xff0c;最近发现一个python库可以完美解决&#xff0c;在这里分享给大家 在这里 GitHub - rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsof…...

【链表】【删除节点】【刷题笔记】【灵神题单】

237.删除链表的节点 链表删除节点的本质是不用删除&#xff0c;只需要操作指针&#xff0c;跳过需要删除的节点&#xff0c;指向下下一个节点即可&#xff01; 删除某个节点&#xff0c;但是不知道这个节点的前一个节点&#xff0c;也不知道头节点&#xff01;摘自力扣评论区…...

Keil 5, Flash Timeout. Reset the Target and try it again.

stm32F303RBT6 Flash Timeout. Reset the Target and try it again. 需要pack DFP 1.4.0&#xff0c; FLASH 烧写算法需要包括1.4.0...

如何估算自然对流传热系数

介绍 一般来说&#xff0c;对流可以定义为通过加热流体&#xff08;例如空气或水&#xff09;的运动来传递热量的过程。 自然对流&#xff08;对流的一种特定类型&#xff09;可以定义为流体在重力作用下由于较热因此密度较小的物质上升&#xff0c;而较冷且密度较大的物质下…...

uniapp中scrollview配合swiper实现一个简单的tab标签页

<template><view class"tab-container"><!-- Tab 标签滚动容器 --><scroll-view scroll-x"true" class"tab-scroll" scroll-with-animation"true"><view class"tab-list"><viewv-for"…...

Redis3——线程模型与数据结构

Redis3——线程模型与数据结构 本文讲述了redis的单线程模型和IO多线程工作原理&#xff0c;以及几个主要数据结构的实现。 1. Redis的单线程模型 redis6.0之前&#xff0c;一个redis进程只有一个io线程&#xff0c;通过reactor模式可以连接大量客户端&#xff1b;redis6.0为了…...

JavaScript(JS)的对象

目录 1.array 数组对象 2.String 字符串对象 3.JSON 对象&#xff08;数据载体&#xff0c;进行数据传输&#xff09; 4.BOM 浏览器对象 5.DOM 文档对象&#xff08;了解&#xff09; 1.array 数组对象 定义方式1&#xff1a;var 变量名 new Array(元素列表); 定义方式…...

计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

二阶信息在机器学习中的优化;GPTQ算法利用近似二阶信息;为什么要求近似二阶(运算量大,ReLu0点不可微)

目录 二阶信息在机器学习中的优化 GPTQ算法利用近似二阶信息来找到合适的量化权重 详细解释 举例说明 近似二阶信息 定义与解释 举例说明 总结 为什么要求近似二阶(运算量大,ReLu0点不可微) 计算复杂性 精度需求 实际应用场景中的权衡 二阶信息在机器学习中的优…...

Spring事务管理学习记录

一、概念 事务&#xff08;Transaction&#xff09;是指一组操作的集合&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。事务的四大特性&#xff08;ACID&#xff09;确保了数据的完整性和一致性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a…...

Linux locate 命令详解

简介 locate 命令用于通过查询预构建的数据库来快速搜索文件和目录&#xff0c;该数据库包含来自文件系统的索引文件路径。它比 find 之类的命令要快得多&#xff0c;因为它不会实时搜索整个文件系统。 关键概念 locate 命令依赖于数据库&#xff0c;通常位于 /var/lib/mloca…...

uniapp手机端一些坑记录

关于 z-paging-x 组件&#xff0c;在ios上有时候通过弹窗去粗发它reload时会触发闪退&#xff0c;可能是弹框插入进去导致的DOM 元素已经被移除或者不可用&#xff0c;解决办法是加上他自带属性 :showRefresherWhenReload"true" 加上showRefresherWhe…...

快速排序算法

快速排序是一种非常高效的排序算法&#xff0c;采用分治策略来对一个数组进行排序。它由C. A. R. Hoare在1960年提出。快速排序的基本思想是通过一趟排序将待排记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比另一部分的关键字小&#xff0c;然后分别对这两部分…...

CSS定位

定位 其中&#xff0c;绝对定位和固定定位会脱离文档流 设置定位之后&#xff1a;可以使用四个方向值进行调整位置&#xff1a;left、top、right、bottom 相对定位 温馨提示 设置定位之后&#xff0c;相对定位和绝对定位他是相对于具有定位的父级元素进行位置调整&#xff0c…...

追加docker已运行容器添加或修改端口映射方法

docker run可以指定端口映射 【】docker run -d -p 80:80 --name name 但是容器一旦生成&#xff0c;就没有一个命令可以直接修改。通常间接的办法是&#xff0c;保存镜像&#xff0c;再创建一个新的容器&#xff0c;在创建时指定新的端口映射。 【】 docker stop A 【】 doc…...

53 基于单片机的8路抢答器加记分

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位&#xff0c;然后八个选手按键&#xff0c;开机显示四条杠&#xff0c;然后按一号选手按键&#xff0c;数码管显示&#xff13;&#xff10;&#xff0c;这…...

ubuntu多版本安装gcc

1.ubuntu安装gcc 9.3.1 $ sudo apt update $ sudo apt install gcc-9 g-9 二、配置GCC版本 安装完成后&#xff0c;需要使用update-alternatives命令来配置GCC版本。这个命令允许系统在多个安装的版本之间进行选择 1.添加GCC 9.3.1到update-alternatives管理 $ sudo update-a…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…...

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…...

计算机毕业设计SpringCloud+大模型微服务高考志愿填报推荐系统 高考大数据 SparkML机器学习 深度学习 人工智能 Python爬虫 知识图谱

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

AIGC训练效率与模型优化的深入探讨

文章目录 1.AIGC概述2.AIGC模型训练效率的重要性3.模型优化的概念与目标4.模型优化策略4.1 学习率调节4.2 模型架构选择4.3 数据预处理与增强4.4 正则化技术4.5 量化与剪枝 5.代码示例6.结论 人工智能领域的发展&#xff0c;人工智能生成内容&#xff08; AIGC&#xff09;越来…...

《深入浅出HTTPS》读书笔记(13):块密码算法之迭代模式(续)

CTR模式 每次迭代运算的时候要生成一个密钥流&#xff08;keystream&#xff09;。 各个密钥流之间是有关系的&#xff0c;最简单的方式就是密钥流不断递增&#xff0c;所以才叫作计数器模式。 ◎在处理迭代之前&#xff0c;先生成每个密钥流&#xff0c;有n个数据块&#xff0…...

定时任务删除MongoDB历史数据

前言 MongoDB数据过多&#xff0c;导致存储成本飙升&#xff0c;为了降低成本&#xff0c;需要将历史数据删除。 删除逻辑 添加配置文件控制删除逻辑 syncconfig:deleteMongoConfig:#同步状态&#xff0c;true同步&#xff0c;false不同步syncStatus: true#删除数据的时间&…...

Simulink的SIL软件在环测试

以基于模型的设计&#xff08;MBD&#xff09;的软件开发时&#xff0c;需要进行SIL&#xff08;软件在环测试&#xff09;。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中&#xff0c;用在需要将控制器生成移植到硬件前&#xff0c;把控制器的模块生成代码&…...

你能穿过迷雾看清一切吗

很多事情的真相有谁知道&#xff1f; 我和家里人被看不见的攻击攻击和操控&#xff0c;失控和无助状态被假鬼录制&#xff0c;然后安排某些不知道整个实际情况和真相的人去听&#xff0c;间接歪曲了整件事情。 各种高科技配合和各种脑功能操控伤害是一般人想都想不到的&#…...

8 设计模式之简单工厂模式

设计模式是软件开发中的一套通用解决方案&#xff0c;而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中&#xff0c;我将为大家详细介绍简单工厂模式的概念、优缺点&#xff0c;以及通过一个饮料制作的案例&#xff0c;帮助大家更好地理解和应用这种模式。 一、…...

一步一步写线程之十六线程的安全退出之一理论分析

一、多线程的开发 多线程的开发&#xff0c;在实际场景中几乎是无法避开的。即使是前端看似没有使用线程&#xff0c;其实在底层的框架中也使用了线程进行了支撑。至少到现在&#xff0c;不管是协程还是其它什么新的编程方式&#xff0c;仍然无法撼动线程的主流地位。 多线程的…...

《Learn Three.js》学习(4) 材质

前言&#xff1a; 材质为scene中物体的皮肤&#xff0c;有着不同的特性和视觉效果。 材质的共有属性&#xff1a; 基础属性&#xff1a; 融合属性&#xff1a; 融合决定了我们渲染的颜色如何与它们后面的颜色交互 高级属性&#xff1a; 与WebGL内部有关 简单材质&#xff1…...

【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析

【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析 一、QNX 侧触摸屏配置基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!! 本文禁止转载分享 !!! 汇总链接:《【QNX+Android虚拟化方案】00 - 系列文章链接汇总》 本文链接:《【…...

Oracle SCN与时间戳的映射关系

目录 一、基本概述 二、相关操作 三、参考文档 一、基本概述 Oracle 数据库中的 SYS.SMON_SCN_TIME 表是一个关键的内部表&#xff0c;主要用于记录过去时间段中SCN与具体的时间戳之间的映射关系。这种映射关系可以帮助用户将 SCN 值转换为可读性更强的时间戳&#xff0c;从而…...