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

扩散模型的数学原理(基于分数)

写在前面:

扩散模型有不同的描述视角和形式化方法:

概率扩散视角

  • 基于马尔可夫链
  • 逐步添加高斯噪声
  • 关注条件概率分布
  • 例如DDPM的形式化

Score-Based视角

  • 关注概率密度梯度

  • 基于朗之万动力学

  • 强调得分函数估计

  • 连续时间形式化

两者本质是相同的,一个是离散的形式,一个是积分连续的形式。

参考视频:Diffusion Models From Scratch 数学原理解释_哔哩哔哩_bilibili

基于分数的生成扩散模型。

  • Score

  • Score Matching

  • Noise Perturbation

  • Denoising Score Matching

  • Sampling

  • Multiple Noise Perturbations

  • Differential Equations

  • Link to diffusion models

学习一个数据集的概率分布,可以从中采样生成新的数据点,尝试估计数据的概率密度函数。
在这里插入图片描述

需要知道数据的PDF函数,但是他是未知的

下面的函数是正态分布的PDF,有两个未知参数。

N ( x ∣ μ , σ ) = 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2 \mathcal{N}(x|\mu,\sigma)=\frac1{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} N(xμ,σ)=2πσ2 1e2σ2(xμ)2

对于一个数据,我们可以先假设其PDF有多少参数,符合那种分布函数。

PDF有两个约束:

  1. 非负性
  2. 综合为1

p ( x ) p(x) p(x)-> p θ ( x ) = e − f θ ( x ) Z θ p_\theta(x)=\frac{e^{-f_\theta(x)}}{Z_\theta} pθ(x)=Zθefθ(x)

参数化,对于x的操作一般有非负性 f θ ( x ) f_\theta(x) fθ(x)和归一化 Z θ Z_\theta Zθ(使PDF积分为1)。

f θ ( x ) f_\theta(x) fθ(x)可以学习输出x周围的概率密度

在这里插入图片描述

高值意味着数据集的密集区域,低值意味着稀疏的区域。

计算 Z θ Z_\theta Zθ需要对整个空间进行积分。

我们需要遍历整个概率空间,维度高和计算成本会比较昂贵。

Score

我们需要不断的优化

f θ ( x ) f_\theta(x) fθ(x) Z θ Z_\theta Zθ的值。
∇ x log ⁡ p θ ( x ) = ∇ x log ⁡ e − f θ ( x ) Z θ \nabla_x\log p_\theta(x)=\nabla_x\log\frac{e^{-f_\theta(x)}}{Z_\theta} xlogpθ(x)=xlogZθefθ(x)

在这里插入图片描述

在这里插入图片描述

说明:因为我们不知道原始数据的概率分布的类型。我们只能获取一个估计值,所以我们要去替代原概率分数的估计。

得分匹配意味着近似原始分布的得分与来自 s θ ( x ) s_\theta(x) sθ(x)的预测得分一样。

最小化原始和预测得分之间的差异。

在这里插入图片描述

Score Matching

评分函数告诉应该向哪个方向移动数点来增加概率。

对数(单调的)概率意味着,数据向哪个方向移动接近实际数据点

在这里插入图片描述

在图像中的高斯采样分布中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

x是一个随机的高斯噪声图像。

s θ ( x ) s_\theta(x) sθ(x)会给出

在这里插入图片描述

用期望的积分形式
在这里插入图片描述

1 2 E p ( x ) [ ∥ ∇ x log ⁡ p ( x ) − s θ ( x ) ∥ 2 2 ] = 1 2 ∫ p ( x ) ( ∇ x log ⁡ p ( x ) − s θ ( x ) ) 2 d x \frac12\mathbb{E}_{p(x)}[\|\nabla_x\log p(x)-s_\theta(x)\|_2^2]\\=\frac12\int p(x)(\nabla_x\log p(x)-s_\theta(x))^2dx 21Ep(x)[xlogp(x)sθ(x)22]=21p(x)(xlogp(x)sθ(x))2dx
( a − b ) 2 = a 2 + b 2 − 2 a b \boxed{\begin{array}{c}(a-b)^2=a^2+b^2-2ab\\\hline\end{array}} (ab)2=a2+b22ab
= 1 2 ∫ p ( x ) ∇ x log ⁡ p ( x ) 2 + s θ ( x ) 2 − 2 ⋅ ∇ x log ⁡ p ( x ) ⋅ s θ ( x ) d x =\frac12\int p(x) \nabla_x\log p(x)^2+s_\theta(x)^2-2\cdot\nabla_x\log p(x)\cdot s_\theta(x) dx =21p(x)xlogp(x)2+sθ(x)22xlogp(x)sθ(x)dx

= 1 2 ∫ p ( x ) ⋅ ∇ x log ⁡ p ( x ) 2 d x + 1 2 ∫ p ( x ) ⋅ s θ ( x ) 2 d x − 1 2 ∫ p ( x ) ⋅ 2 ⋅ ∇ x log ⁡ p ( x ) ⋅ s θ ( x ) d x =\frac12\int p(x)\cdot\boxed{\nabla_x\log p(x)^2}dx+\frac12\int p(x)\cdot\boxed{s_\theta(x)^2}dx-\frac12\int p(x)\cdot\boxed{2\cdot\nabla_x\log p(x)\cdot s_\theta(x)}dx =21p(x)xlogp(x)2dx+21p(x)sθ(x)2dx21p(x)2xlogp(x)sθ(x)dx

对于最后一项,进行化简,对数求导。
∫ p ( x ) ⋅ ∇ x log ⁡ p ( x ) ⋅ s θ ( x ) d x ∇ x p ( x ) p ( x ) \int p(x)\cdot\boxed{\nabla_x\log p(x)}\cdot s_\theta(x)dx\\\frac{\nabla_xp(x)}{p(x)} p(x)xlogp(x)sθ(x)dxp(x)xp(x)

= ∫ p ( x ) ⋅ ∇ x p ( x ) p ( x ) ⋅ s θ ( x ) d x = ∫ ∇ x p ( x ) ⋅ s θ ( x ) d x =\int p(x)\cdot\frac{\nabla_{x}p(x)}{p(x)}\cdot s_{\theta}(x)dx =\int\nabla_{x}p(x)\cdot s_{\theta}(x)dx =p(x)p(x)xp(x)sθ(x)dx=xp(x)sθ(x)dx

使用分部积分法则
∫ d v u = u v ∣ a b − ∫ v d u \int dv u=uv|_a^b-\int v du dvu=uvabvdu
把p(x)的微分放在dx上。
∫ ∇ x p ( x ) ⋅ s θ ( x ) d x = p ( x ) ⋅ s θ ( x ) ∣ x = − inf ⁡ inf ⁡ + ∫ p ( x ) ⋅ ∇ x s θ ( x ) d x \int\nabla_xp(x)\cdot s_\theta(x)dx=p(x)\cdot s_\theta(x)|_{x=-\inf}^{\inf}+\int p(x)\cdot\nabla_xs_\theta(x)dx xp(x)sθ(x)dx=p(x)sθ(x)x=infinf+p(x)xsθ(x)dx

$ s_\theta(x)|_{x=-\inf}^{\inf}$该项区域0,因为在正无穷和负无穷处,概率密度密度函数趋向于0

所以结果为如下的
∫ ∇ x p ( x ) ⋅ s θ ( x ) d x = ∫ p ( x ) ⋅ ∇ x s θ ( x ) d x \int\nabla_xp(x)\cdot s_\theta(x)dx=\int p(x)\cdot\nabla_xs_\theta(x)dx xp(x)sθ(x)dx=p(x)xsθ(x)dx
对于第一个式子是没有待求参数 θ \theta θ的,所以可以视为常数。
= 1 2 ∫ p ( x ) ⋅ ∇ x log ⁡ p ( x ) 2 d x + 1 2 ∫ p ( x ) ⋅ s θ ( x ) 2 d x − ∫ p ( x ) ⋅ ∇ x s θ ( x ) d x n o s θ ( x ) \begin{aligned}&=\boxed{\frac12\int p(x)\cdot\nabla_x\log p(x)^2dx}+\frac12\int p(x)\cdot s_\theta(x)^2dx-\int p(x)\cdot\nabla_xs_\theta(x)dx\\&\mathbf{no}s_\theta(x)\end{aligned} =21p(x)xlogp(x)2dx+21p(x)sθ(x)2dxp(x)xsθ(x)dxnosθ(x)

将积分重新写回期望 的形式
= 1 2 ∫ p ( x ) ⋅ s θ ( x ) 2 d x − ∫ p ( x ) ⋅ ∇ x s θ ( x ) d x = 1 2 E p ( x ) [ s θ ( x ) 2 ] + E p ( x ) [ ∇ x s θ ( x ) ] \begin{gathered} \begin{aligned}= \frac{1}{2}\int p(x)\cdot s_\theta(x)^2dx -&\int p(x)\cdot\nabla_xs_\theta(x)dx\end{aligned} \\ = \frac{1}{2}\mathbb{E}_{p(x)}[s_\theta(x)^2]+\mathbb{E}_{p(x)}[\nabla_xs_\theta(x)] \end{gathered} =21p(x)sθ(x)2dxp(x)xsθ(x)dx=21Ep(x)[sθ(x)2]+Ep(x)[xsθ(x)]

比较化简的结果:

因为我们无法访问原始的 l o g p ( x ) log p(x) logp(x)通过等价,构造了不需要原始概率的期望优化。
1 2 E p ( x ) [ ∥ ∇ x log ⁡ p ( x ) − s θ ( x ) ∥ 2 2 ] = 1 2 E p ( x ) [ s θ ( x ) 2 ] + E p ( x ) [ ∇ x s θ ( x ) ] \begin{gathered} \frac12\mathbb{E}_{p(x)}[\|\nabla_x\log p(x)-s_\theta(x)\|_2^2] \\ =\frac12\mathbb{E}_{p(x)}[s_\theta(x)^2]+\mathbb{E}_{p(x)}[\nabla_xs_\theta(x)] \end{gathered} 21Ep(x)[xlogp(x)sθ(x)22]=21Ep(x)[sθ(x)2]+Ep(x)[xsθ(x)]
这个式子和常数C等价。

我们要最小化第一个式子。

我们希望达到梯度模型的最优点,即梯度计算为0的点。

数据点的得分模型的梯度为零 ∇ x s θ ( x ) \nabla_xs_\theta(x) xsθ(x) x应该是一个局部的极值。

第一个期望,希望得分模型的预测得分在数据点上为0

在这里插入图片描述

对于目标函数的最优解的计算代价很高。

因为 ∇ x s θ ( x ) \nabla_xs_\theta(x) xsθ(x) 是一个雅可比矩阵。需要对每个输入变量进行单独的后向传播。

当输入空间很大的时候,计算量非常大。图象有数百万像素。

在这里插入图片描述

这个论文提出了,克服的方法。

切片得分匹配。不在经典大规模生成AI领域中使用。

当模型在收敛的极值训练区域时,数据点将会很好的符合原图像的分布特征。

但是采样的时候,是从随机未知开始的。不知道数据密度的方向在哪里。

对于数据的这种采样,当选取到非密集区域时,数据会跌落优化到密度区域之间。

在这里插入图片描述

这就是两个问题

昂贵的训练成本

数据空间的低覆盖率。分数模型没有训练在空间的整个输入上。

在这里插入图片描述

Noise Perturbation

噪声扰动。

所以添加噪声。

给源数据添加噪声,使得数据的分布更加广

在这里插入图片描述

x ~ = x + ϵ ϵ ∼ N ( 0 , σ 2 I ) \tilde{x}=x+\epsilon \\ \epsilon\sim\mathcal{N}(0,\sigma^2I) x~=x+ϵϵN(0,σ2I)
对所有的数据点,添加高斯噪声。

对于新的添加噪声的数据分布模式
p ( x ) → n o i s e p σ ( x ~ ) p(x)\xrightarrow{\mathrm{noise}}p_\sigma(\tilde{x}) p(x)noise pσ(x~)

这个方式解决了第二个数据分布稀疏的问题。添加的噪声量取决于标记为 σ \sigma σ的变量。噪声调度

在这里插入图片描述

我们简单地只使用方差作为超参数。过大会影响原始的数据分布。过小

如何解决运算昂贵的问题,梯度求解

在这里插入图片描述

Denoising Score Matching

分数匹配和去噪自编码器的联系(pascal vinvent)。

在这里插入图片描述

去噪自编码器之前被用来学习数据点代表性特征。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在中间的瓶颈处添加噪声,并交给解码器。

解码器预测原始输入,分离噪声和数据来完成任务。

一段很长的推导,将会把分数匹配和噪声自编码结合起来。
1 2 E p σ ( x ~ ) [ ∥ ∇ x ~ log ⁡ p σ ( x ~ ) − s θ ( x ~ ) ∥ 2 2 ] Start 1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∣ ∣ s θ ( x ~ ) − ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∣ ∣ 2 2 ] Goal \begin{gathered} \boxed{\frac12\mathbb{E}_{p_\sigma(\tilde{x})}[\|\nabla_{\tilde{x}}\log p_\sigma(\tilde{x})-s_\theta(\tilde{x})\|_2^2]}_{\textbf{Start}} \\ \boxed{\frac12\mathbb{E}_{x\sim p(x)\mathrm{~,}\tilde{x}\sim p_\sigma(\tilde{x}|x)}[||s_\theta(\tilde{x})-\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x)||_2^2]}_{\textbf{Goal}} \end{gathered} 21Epσ(x~)[x~logpσ(x~)sθ(x~)22]Start21Exp(x) ,x~pσ(x~x)[∣∣sθ(x~)x~logpσ(x~x)22]Goal
∇ x ~ log ⁡ p σ ( x ~ ) \nabla_{\tilde{x}}\log p_\sigma(\tilde{x}) x~logpσ(x~)转变为下面的 ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) \nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x) x~logpσ(x~x)

我们可以直接评估这个分数.

推导过程

1 将目标重新写为积分,此处的对象是添加了噪声的原始数据
= 1 2 ∫ p σ ( x ~ ) ( ∇ x ~ log ⁡ p σ ( x ~ ) − s θ ( x ~ ) ) 2 d x ~ =\frac{1}{2}\int p_{\sigma}(\tilde{x})(\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x})-s_{\theta}(\tilde{x}))^{2}d\tilde{x} =21pσ(x~)(x~logpσ(x~)sθ(x~))2dx~
直接开平方
= 1 2 ∫ p σ ( x ~ ) ⋅ ( ∇ x ~ log ⁡ p σ ( x ~ ) ) 2 d x ~ + 1 2 ∫ p σ ( x ~ ) ⋅ s θ ( x ~ ) 2 d x ~ − 1 2 ∫ p σ ( x ~ ) ⋅ 2 ⋅ ∇ x ~ log ⁡ p σ ( x ~ ) ⋅ s θ ( x ~ ) d x ~ \begin{aligned} &=\frac{1}{2}\int p_{\sigma}(\tilde{x})\cdot(\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}))^{2}d\tilde{x} \\ &+\frac12\int p_\sigma(\tilde{x})\cdot s_\theta(\tilde{x})^2d\tilde{x} \\ &-\frac12\int p_\sigma(\tilde{x})\cdot2\cdot\nabla_{\tilde{x}}\log p_\sigma(\tilde{x})\cdot s_\theta(\tilde{x})d\tilde{x} \end{aligned} =21pσ(x~)(x~logpσ(x~))2dx~+21pσ(x~)sθ(x~)2dx~21pσ(x~)2x~logpσ(x~)sθ(x~)dx~
对最后一项进行化简
∇ x ~ log ⁡ p σ ( x ~ ) = ∇ x ~ p σ ( x ~ ) p σ ( x ~ ) ( log ⁡ a x ) ′ = 1 x ln ⁡ a \nabla_{\tilde{x}}\log p_\sigma(\tilde{x})=\frac{\nabla_{\tilde{x}}p_\sigma(\tilde{x})}{p_\sigma(\tilde{x})}\\ \begin{pmatrix}\log_ax\end{pmatrix}'=\frac{1}{x\ln a} x~logpσ(x~)=pσ(x~)x~pσ(x~)(logax)=xlna1

− ∫ p σ ( x ~ ) ⋅ ∇ x ~ p σ ( x ~ ) p σ ( x ~ ) ⋅ s θ ( x ~ ) d x ~ = − ∫ ∇ x ~ p σ ( x ~ ) ⋅ s θ ( x ~ ) d x ~ Marginalization p σ ( x ~ ) = ∫ p ( x ) p σ ( x ~ ∣ x ) d x -\int p_\sigma(\tilde{x})\cdot\frac{\nabla_{\tilde{x}}p_\sigma(\tilde{x})}{p_\sigma(\tilde{x})}\cdot s_\theta(\tilde{x}) d\tilde{x} \\ =-\int\nabla_{\tilde{x}}p_\sigma(\tilde{x})\cdot s_\theta(\tilde{x})d\tilde{x} \\ \text{Marginalization}\\p_\sigma(\tilde{x})=\int p(x) p_\sigma(\tilde{x}|x) dx pσ(x~)pσ(x~)x~pσ(x~)sθ(x~)dx~=x~pσ(x~)sθ(x~)dx~Marginalizationpσ(x~)=p(x)pσ(x~x)dx

边缘分布:因为关注的是不同时间步或不同噪声水平下的数据分布,而不仅是原始数据的分布。生成带噪声数据 $\tilde{x} $的条件下,该点来自于原始数据分布的概率。

  1. 生成带噪声的数据分布:通过边缘化可以得到在加入噪声后的数据分布 p σ ( x ~ ) p_\sigma(\tilde{x}) pσ(x~),这表明了加入噪声后的数据在不同状态下的概率分布。这一步生成的分布让模型能够估计在特定噪声强度下的样本分布。

  2. 平滑目标:边缘分布使模型更容易在训练过程中学习到平滑的分布,从而在逆扩散(生成样本)时更平稳地从带噪声的数据恢复出清晰的样本。

  3. 噪声对不同数据的平均影响:边缘分布通过对所有潜在的干净数据 $ x $ 进行积分,使模型能够了解在噪声影响下所有数据点的综合分布。这有助于在不同噪声水平上训练模型,让它更具泛化能力。

简单来说,边缘分布 $ p_\sigma(\tilde{x}) $帮助模型在不同噪声水平下生成符合真实分布的样本,并在逆过程时更好地恢复原始数据。

式子进行回代

莱布尼茨:因为梯度求解的变量不是积分变量,可以放在积分内部。
− ∫ ∇ x ~ ( ∫ p ( x ) p σ ( x ~ ∣ x ) d x ) ⋅ s θ ( x ~ ) d x ~ = − ∫ ( ∫ p ( x ) ∇ x ~ p σ ( x ~ ∣ x ) d x ) ⋅ s θ ( x ~ ) d x ~ 一个变式 : ∇ x ~ p σ ( x ~ ∣ x ) = p σ ( x ~ ∣ x ) ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) -\int\nabla_{\tilde{x}}(\int p(x) p_{\sigma}(\tilde{x}|x) dx)\cdot s_{\theta}(\tilde{x}) d\tilde{x}\\ =-\int(\int p(x) \nabla_{\tilde{x}}p_{\sigma}(\tilde{x}|x) dx)\cdot s_{\theta}(\tilde{x}) d\tilde{x} \\ 一个变式:\nabla_{\tilde{x}}p_\sigma(\tilde{x}|x)=p_\sigma(\tilde{x}|x)\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x) x~(p(x)pσ(x~x)dx)sθ(x~)dx~=(p(x)x~pσ(x~x)dx)sθ(x~)dx~一个变式:x~pσ(x~x)=pσ(x~x)x~logpσ(x~x)
导数公式的逆用和回代
∇ x f ( x ) = f ( x ) ⋅ ∇ x log ⁡ f ( x ) \nabla_xf(x)=f(x)\cdot\nabla_x\log f(x) xf(x)=f(x)xlogf(x)
因为积分的无关性,次序的调换

最终经过对数法则,边缘分布,莱布尼茨,积分的线性性质
− ∫ ∫ p ( x ) p σ ( x ~ ∣ x ) ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ⋅ s θ ( x ~ ) d x d x ~ -\int\int p(x) p_\sigma(\tilde{x}|x)\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x) \cdot s_\theta(\tilde{x}) dx d\tilde{x} ∫∫p(x)pσ(x~x)x~logpσ(x~x)sθ(x~)dxdx~
拆开的步骤,不如图像来的清晰。想看过程可以看上面的具体过程。
在这里插入图片描述

将积分重新写为期望:
= 1 2 ∫ p σ ( x ~ ) ⋅ ( ∇ x ~ log ⁡ p σ ( x ~ ) ) 2 d x ~ + 1 2 ∫ p σ ( x ~ ) ⋅ s b ( x ~ ) 2 d x ~ − ∫ ∫ p ( x ) p σ ( x ~ ∣ x ) ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ⋅ s b ( x ~ ) d x d x ~ = 1 2 E x ~ ∼ p σ ( x ~ ) ∣ ∣ [ ∇ x ~ log ⁡ p σ ( x ~ ) ∣ ∣ 2 2 ] + 1 2 E x ~ ∼ p σ ( x ~ ) [ ∣ ∣ s θ ( x ~ ) ∣ ∣ 2 2 ] − E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ⋅ s θ ( x ~ ) ] =\frac{1}{2}\int p_{\sigma}(\tilde{x})\cdot(\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}))^{2}d\tilde{x}+\frac{1}{2}\int p_{\sigma}(\tilde{x})\cdot s_{b}(\tilde{x})^{2}d\tilde{x}-\int\int p(x) p_{\sigma}(\tilde{x}|x)\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x) \cdot s_{b}(\tilde{x}) dx d\tilde{x}\\=\frac{1}{2}\mathbb{E}_{\tilde{x}\sim p_{\sigma}(\tilde{x})}||[\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x})||_{2}^{2}]+\frac{1}{2}\mathbb{E}_{\tilde{x}\sim p_{\sigma}(\tilde{x})}[||s_{\theta}(\tilde{x})||_{2}^{2}]-\mathbb{E}_{x\sim p(x)},\tilde{x}\sim p_{\sigma}(\tilde{x}|x)[\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x)\cdot s_{\theta}(\tilde{x})] =21pσ(x~)(x~logpσ(x~))2dx~+21pσ(x~)sb(x~)2dx~∫∫p(x)pσ(x~x)x~logpσ(x~x)sb(x~)dxdx~=21Ex~pσ(x~)∣∣[x~logpσ(x~)22]+21Ex~pσ(x~)[∣∣sθ(x~)22]Exp(x),x~pσ(x~x)[x~logpσ(x~x)sθ(x~)]
最后一项是两次积分

对第二项进行操作,为了进行合并操作,我们需要对前面的项扩展积分项。

边缘分布
1 2 E x ~ ∼ p σ ( x ~ ) [ ∣ ∣ s θ ( x ~ ) ∣ ∣ 2 2 ] 1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∣ ∣ s θ ( x ~ ) ∣ ∣ 2 2 ] \boxed{\frac{1}{2}\mathbb{E}_{\tilde{x}\sim p_{\sigma}(\tilde{x})}[||s_{\theta}(\tilde{x})||_{2}^{2}]} \\ \frac12\mathbb{E}_{x\sim p(x) ,\tilde{x}\sim p_\sigma(\tilde{x}|x)}[||s_\theta(\tilde{x})||_2^2] 21Ex~pσ(x~)[∣∣sθ(x~)22]21Exp(x),x~pσ(x~x)[∣∣sθ(x~)22]

在这里插入图片描述

怕不够清晰。
= 1 2 E x ~ ∼ p σ ( x ~ ) [ ∥ ∇ σ log ⁡ p σ ( x ~ ) ∥ 2 2 ] + 1 2 E ∥ x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ) ∥ 2 [ ∥ s θ ( x ~ ) ∥ 2 2 − 2 ⋅ ∇ x log ⁡ p σ ( x ~ ∣ x ) ⋅ s θ ( x ~ ) ] + ∥ ∇ x log ⁡ p σ ( x ~ ∣ x ) ∥ 2 2 − ∥ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∥ 2 2 ] =\frac12\mathbb{E}_{\tilde{x}\sim p_\sigma(\tilde{x})}[\|\nabla_\sigma\log p_\sigma(\tilde{x})\|_{2}^2]+\frac12\mathbb{E}_{\|x\sim p(x),\tilde{x}\sim p_\sigma(\tilde{x})\|_2}[\|s_\theta(\tilde{x})\|_2^2-2\cdot\nabla_x\log p_\sigma(\tilde{x}|x)\cdot s_\theta(\tilde{x})]+\|\nabla_x\log p_\sigma(\tilde{x}|x)\|_2^2-\|\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x)\|_2^2] =21Ex~pσ(x~)[σlogpσ(x~)22]+21Exp(x),x~pσ(x~)2[sθ(x~)222xlogpσ(x~x)sθ(x~)]+xlogpσ(x~x)22x~logpσ(x~x)22]
合并了后两项,又添加了一个0的变式:
∣ ∣ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∣ ∣ 2 2 − ∣ ∣ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∣ ∣ 2 2 ] ||\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x)||_{2}^{2}-||\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x)||_{2}^{2}] ∣∣x~logpσ(x~x)22∣∣x~logpσ(x~x)22]
在这里插入图片描述

对平方公式进行逆用.
= 1 2 E x ~ ∼ p σ ( x ~ ) ∣ ∣ ∇ x ~ log ⁡ p σ ( x ~ ) ∣ ∣ 2 2 + 1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∣ ∣ s θ ( x ~ ) − ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∣ ∣ 2 2 − ∣ ∣ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∣ ∣ 2 2 ] =\frac{1}{2}\mathbb{E}_{\tilde{x}\sim p_{\sigma}(\tilde{x})}||\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x})||_{2}^{2}+\frac{1}{2}\mathbb{E}_{x\sim p(x),\tilde{x}\sim p_{\sigma}(\tilde{x}|x)}[||s_{\theta}(\tilde{x})-\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x)||_{2}^{2}-||\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x)||_{2}^{2}] =21Ex~pσ(x~)∣∣x~logpσ(x~)22+21Exp(x),x~pσ(x~x)[∣∣sθ(x~)x~logpσ(x~x)22∣∣x~logpσ(x~x)22]
对最后一项,从积分中分离。
= 1 2 E x ~ ∼ p σ ( x ~ ) ∥ ∇ x log ⁡ p σ ( x ~ ) ∥ 2 2 + 1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∥ s θ ( x ~ ) − ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∥ 2 2 − 1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∥ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∥ 2 2 ] =\frac12\mathbb{E}_{\tilde{x}\sim p_\sigma(\tilde{x})}\|\nabla_x\log p_\sigma(\tilde{x})\|_2^2+\frac12\mathbb{E}_{x\sim p(x),\tilde{x}\sim p_\sigma(\tilde{x}|x)}[\|s_\theta(\tilde{x})-\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x)\|_2^2-\frac12\mathbb{E}_{x\sim p(x),\tilde{x}\sim p_\sigma(\tilde{x}|x)}[\|\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x)\|_2^2] =21Ex~pσ(x~)xlogpσ(x~)22+21Exp(x),x~pσ(x~x)[sθ(x~)x~logpσ(x~x)2221Exp(x),x~pσ(x~x)[x~logpσ(x~x)22]
这三个式子,可以用来进行(以参数( θ \theta θ))最小化优化得分模型

因为第一项和第三项,不包含参数,所以视为常数。得到之前的目标的函数。
= 1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∣ ∣ s θ ( x ~ ) − ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) ∣ ∣ 2 2 \boxed{= \frac{1}{2}\mathbb{E}_{x\thicksim p(x) ,\tilde{x}\thicksim p_\sigma(\tilde{x}|x)}[||s_\theta(\tilde{x})-\nabla_{\tilde{x}}\log p_\sigma(\tilde{x}|x)||_2^2} =21Exp(x),x~pσ(x~x)[∣∣sθ(x~)x~logpσ(x~x)22
该式子的优势,如何计算 x ~ \tilde{x} x~的梯度,给定 x x x x ~ \tilde{x} x~,的 p σ p_\sigma pσ.连接到去噪自编码器上。

请添加图片描述
p σ ( x ~ ∣ x ) = 1 ( 2 π ) d / 2 σ 2 e − 1 2 σ 2 ∣ ∣ x ~ − x ∣ ∣ 2 p_\sigma(\tilde{x}|x)=\frac1{(2\pi)^{d/2}\sigma^2}e^{-\frac1{2\sigma^2}||\tilde{x}-x||^2} pσ(x~x)=(2π)d/2σ21e2σ21∣∣x~x2
构造出的数据满足上面这个正态分布,多维高斯分布的pdf。

这个就是目标式子的一部分,
∣ ∇ x ~ log ⁡ ∇ x ~ log ⁡ p σ ( x ~ ∣ x ) = ∇ x ~ log ⁡ 1 ( 2 π ) d / 2 σ 2 e − 1 2 σ 2 ∣ ∣ x ~ − x ∣ ∣ 2 \left|\nabla_{\tilde{x}}\log\right.\\\nabla_{\tilde{x}}\log p_{\sigma}(\tilde{x}|x)=\nabla_{\tilde{x}}\log\frac{1}{(2\pi)^{d/2}\sigma^{2}}e^{-\frac{1}{2\sigma^{2}}||\tilde{x}-x||^{2}} x~logx~logpσ(x~x)=x~log(2π)d/2σ21e2σ21∣∣x~x2

在这里插入图片描述

上面的过程包含对数拆分,归零,对数和指数抵消,微分的链式法则
Chain Rule d d x f ( g ( x ) ) = f ′ ( g ( x ) ) ⋅ g ′ ( x ) \begin{aligned}&\text{Chain Rule}\\&\boxed{\frac d{dx}f(g(x))=f'(g(x))\cdot g'(x)}\end{aligned} Chain Ruledxdf(g(x))=f(g(x))g(x)

∇ x ~ ( − 1 2 σ 2 ∣ ∣ x ~ − x ∣ ∣ 2 ) = − 1 σ 2 ( x ~ − x ) \nabla_{\tilde{x}}(-\frac1{2\sigma^2}||\tilde{x}-x||^2)=-\frac1{\sigma^2}(\tilde{x}-x) x~(2σ21∣∣x~x2)=σ21(x~x)

代入噪声理解:
= 1 σ 2 ( x − x − ϵ ) = 1 σ 2 ( − ϵ ) =\frac1{\sigma^2}(x-x-\epsilon)=\frac1{\sigma^2}(-\epsilon) =σ21(xxϵ)=σ21(ϵ)

这是在目标函数中需要的真实值的梯度,我们得到一个新的目标函数。
1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∣ ∣ s θ ( x ~ ) − 1 σ 2 ( x − x ~ ) ∣ ∣ 2 2 ] \boxed{\frac12\mathbb{E}_{x\sim p(x) ,\tilde{x}\sim p_\sigma(\tilde{x}|x)}[||s_\theta(\tilde{x})-\frac1{\sigma^2}(x-\tilde{x})||_2^2]} 21Exp(x),x~pσ(x~x)[∣∣sθ(x~)σ21(xx~)22]
(和条件概率函数相比)此处不需要评估n个单独的后向传递.
1 2 E x ∼ p ( x ) , x ~ ∼ p σ ( x ~ ∣ x ) [ ∣ ∣ s θ ( x ~ ) + 1 σ 2 ϵ ∣ ∣ 2 2 ] \boxed{\frac12\mathbb{E}_{x\sim p(x) ,\tilde{x}\sim p_\sigma(\tilde{x}|x)}[||s_\theta(\tilde{x})+\frac1{\sigma^2}\epsilon||_2^2]} 21Exp(x),x~pσ(x~x)[∣∣sθ(x~)+σ21ϵ22]
S θ ( x ) S_\theta(x) Sθ(x)模型接收噪声输入,并试图预测(期望是) − ϵ -\epsilon ϵ

请添加图片描述

也是下面这个过程,预测负噪声的模型指向了数据流形。数据的似然性增加,这就是分数匹配算法的核心理念。

在这里插入图片描述

在这里插入图片描述

综上,上述的过程,解决了训练过程的昂贵的训练的问题

在这里插入图片描述

通过增加和减少噪声来作为解决第二个问题的一种方案。

在这里插入图片描述

这实际上并非最优的解决方法。

Sampling

只进行一次采样,并沿着那个方向进行延申,我们可以发现误差会很大,采用多次采样并进行小步移动。

在这里插入图片描述

初始化大量的点,用刚刚的公式进行采样,他们会最终都到达极值点。该值会是数据的平均值。得分函数向梯度方向移动,所以最终都会是正态分布,且值在均值附近(二维均值就是极值点核心)。

让我从物理和数学的角度来解释扩散方程(也叫热方程)为什么会趋向平均值。

在这里插入图片描述

这个现象可以从以下几个角度理解:

  1. 物理角度:
  • 类比热传导,高温区域会向低温区域传递能量
  • 系统总是趋向于最大熵的状态,也就是最混乱、最均匀的状态
  • 这种趋向平均的过程是不可逆的,符合热力学第二定律
  1. 数学角度:
  • 扩散方程是一个抛物型偏微分方程
  • 其解具有"平滑效应",会逐渐消除局部的不规则性
  • 从傅里叶分析的角度看,高频分量会比低频分量衰减得更快
  1. 概率角度:
  • 可以将扩散过程看作是随机行走
  • 大量粒子的随机运动最终会导致均匀分布
  • 这符合大数定律,系统会趋向于期望值

我创建的可视化展示了这个过程:

  • 蓝色线代表不同的采样点
  • 随着时间推移,你可以看到这些点逐渐向平均值(红线)靠拢
  • 最终所有点会在平均值附近达到稳定状态

这种现象在自然界中很常见,比如:

  • 墨水滴入水中的扩散
  • 气体在空间中的扩散
  • 热量在物体中的传导

你可以观察模拟中,起初差异很大的点是如何随着迭代逐渐趋向平均值的。这个过程很好地展示了扩散方程的基本特性。

使用郎之万动力学方程(寿命动力学方程):

Langevin D y n a m i c s S a m p l i n g x ~ i + 1 ← x ~ i + α ⋅ s θ ( x ~ i ) + 2 α ⋅ ϵ i = 0 , 1 , ⋯ , K \begin{gathered} \text{Langevin} \\ DynamicsSampling \\ \tilde{x}_{i+1}\leftarrow\tilde{x}_{i}+\alpha\cdot s_{\theta}(\tilde{x}_{i})+\sqrt{2\alpha}\cdot\epsilon \\ i=0,1,\cdots,K \end{gathered} LangevinDynamicsSamplingx~i+1x~i+αsθ(x~i)+2α ϵi=0,1,,K
有推导过程,但是我不想看了。数值非常小。使用这个进行采样,可以得到一个不达到极值的输出。

最开始还以为和寿命有关是,采样过程随着一些过程的进行就中止了。

请添加图片描述

可以搜索wiki : Langevian Dynamics

此处给出一些直观的可能解释(ai给的)

α (alpha) 的含义:

  • 表示时间步长或学习率
  • 控制每步更新的大小
  • 类似于欧拉方法中的步长
  • 影响采样的稳定性和效率

2 a \sqrt{2a} 2a 的物理意义:

  • 来自于维纳过程的标准差
  • 保证噪声项的正确尺度
  • 与时间步长的平方根成比例
  • 确保数值方法的收敛性

为什么是 2 a \sqrt{2a} 2a

  • 保证离散化的准确性
  • 维持正确的方差增长率
  • 满足中心极限定理
  • 确保采样的有效性

数学原理:

  • 源自Langevin动力学
  • 是连续随机微分方程的离散形式
  • 满足Einstein关系
  • 保证正确的平衡分布

在这里插入图片描述

三者对于 σ \sigma σ 的权衡
在这里插入图片描述

使用高噪声水平,中等噪声水平和低噪声水平来训练模型。

设置在预定义的范围内 [ 0.01 , 25 ] [0.01,25] [0.01,25]变化。

给评分模型也添加上噪声参数

s θ ( x ~ , σ ) s_\theta(\tilde{x},\sigma) sθ(x~,σ)

在这里插入图片描述

从随机点开始,在最高分布的噪声尺度上,向数据分布移动,同时减低噪声尺度。

Generative Modeling by Estimating Gradients of the Data Distribution: https://arxiv.org/pdf/1907.05600

本文提到的使用了1000个噪声扩散。

在扩散模型中,取数据点并使用不同的数量来扰动。

当噪声水平的数量增加到无穷大时,噪声变成了一个随机过程。

在这里插入图片描述

Multiple Noise Perturbations

DDPM(Denoising Diffusion Probabilistic Models)

DDIM(Denoising Diffusion Implicit Models)

EDM(Elucidated Diffusion Models)

在这里插入图片描述

DDPM:

  • 定义了固定的噪声添加过程

  • 训练网络学习去噪

  • 使用马尔可夫链进行采样

EDM (Elucidated Diffusion Models):

  • 创新点:
    • 重新设计扩散过程
    • 优化训练目标
    • 改进采样策略
    • 提供理论解释

这个视频提供的是上面这几个论文的基础的数学推导方式

在这里插入图片描述

无穷大会提供一个随机过程(Stochastic process)

在这里插入图片描述

随机过程:如股票市场和气候模型

在这里插入图片描述

可以使用随机微分方程来建模随机过程

Differential Equations

在这里插入图片描述

f ( x , t ) 漂移参数 d r i f t c o e f f i c i e n t g ( t ) 扩散参数 d i f f u s i o n c o e f f i c i e n t w 表示布朗运动  是一个维纳过程是正态分布的噪声 d w 指噪声的无限小变化 扩散系数描述随机性随时间的影响 f(x,t)漂移参数 drift \ \ \ coefficient\\ g(t) 扩散参数 diffusion \ \ \ coefficient \\ w表示布朗运动 \ \ 是一个维纳过程 是正态分布的噪声\\ dw \ \ 指噪声的无限小变化 \\ 扩散系数描述随机性随时间的影响 f(x,t)漂移参数drift   coefficientg(t)扩散参数diffusion   coefficientw表示布朗运动  是一个维纳过程是正态分布的噪声dw  指噪声的无限小变化扩散系数描述随机性随时间的影响
在早期,x由于随机性而不经历太多变化,随着时间的增长,扩散系数增加。

我们有了一种方法来确定我们想要的数据如何随时间变化。
x ~ = x + ϵ ϵ ∼ N ( 0 , σ t 2 I ) \boxed{\tilde{x}=x+\epsilon\quad\epsilon\sim\mathcal{N}(0,\sigma_t^2I)} x~=x+ϵϵN(0,σt2I)
随着噪声项的增加,x的增加,只有随着t的改变的 σ \sigma σ 。没有drift系数,只有,扩散系数的随机方程。

d x = g ( t ) d w \mathrm{d}x=g(t)\mathrm{~d}w dx=g(t) dw

在这里插入图片描述

Reverse SDE
d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p σ ( x ) ] d t + g ( t ) d w \mathrm{d}x=[f(x,t)-g^2(t)\nabla_x\log p_\sigma(x)] \mathrm{d}t+g(t) \mathrm{d}w dx=[f(x,t)g2(t)xlogpσ(x)]dt+g(t)dw
布莱恩安德森提出了一种通用的反向SD方法,从前向SD中,推出反向SD。

具体参考这篇论文

Yang Song Blog Post on Score Matching: https://yang-song.net/blog/2021/score/

此处不给出推导,而认为是已知条件。

得分函数

在这里插入图片描述

在这里插入图片描述

ddpm的x包括原始x和从标准正态分布中抽取的噪声之间的插值

噪声行为的随机过程和之前不同,原始的x被修改了。

DDPM是离散的,怎么把这个转化为连续情况。

在这里插入图片描述

D D P M x t = 1 − β t x t − 1 + β t ϵ ϵ ∼ N ( 0 , I ) x t − x t − 1 = 1 − β t x t − 1 + β t ϵ − x t − 1 ∣ − x t − 1 泰勒展开 − 1 − β t = 1 − 1 2 β t ( 1 − x ) 1 2 ( 1 + x ) a = 1 + a 1 ! x + a ( a − 1 ) 2 ! x 2 + a ( a − 1 ) ( a − 2 ) 3 ! x 3 + o ( x 3 ) x t − x t − 1 = ( 1 − 1 2 β t ) x t − 1 + β t ϵ − x t − 1 x t − x t − 1 = x t − 1 − 1 2 β t x t − 1 + β t ϵ − x t − 1 x t − x t − 1 = − 1 2 β t x t − 1 + β t ϵ As  x t − x t − 1 → 0 d x = − 1 2 β ( t ) x d t + β ( t ) d w \mathbf{DDPM}\quad x_{t}=\sqrt{1-\beta_{t}} x_{t-1}+\sqrt{\beta_{t}} \epsilon\quad\epsilon\sim\mathcal{N}(0, I)\\x_{t}-x_{t-1}=\sqrt{1-\beta_{t}} x_{t-1}+\sqrt{\beta_{t}} \epsilon-x_{t-1}\quad| -x_{t-1}\\ 泰勒展开 -\sqrt{1-\beta_t}=1-\frac12\beta_t \ \ \ (1-x)^{\frac{1}{2}} \\ \left(1+x\right)^a=1+\frac{a}{1!}x+\frac{a\left(a-1\right)}{2!}x^2+\frac{a\left(a-1\right)\left(a-2\right)}{3!}x^3+o\left(x^3\right) \\\begin{aligned} &x_t-x_{t-1} =\left(1-\frac{1}{2}\beta_{t}\right)x_{t-1}+\sqrt{\beta_{t}} \epsilon-x_{t-1} \\ &x_t-x_{t-1} \begin{aligned}=x_{t-1}-\frac{1}{2}\beta_tx_{t-1}+\sqrt{\beta_t} \epsilon-x_{t-1}\end{aligned} \\ &x_t-x_{t-1} \begin{aligned}&=-\frac{1}{2}\beta_tx_{t-1}+\sqrt{\beta_t} \epsilon\end{aligned} \end{aligned} \\ \text{As }x_t-x_{t-1}\to0 \ \ \ \mathrm{d}x=-\frac{1}{2}\beta(t) x \mathrm{d}t+\sqrt{\beta(t)} \mathrm{d}w DDPMxt=1βt xt1+βt ϵϵN(0,I)xtxt1=1βt xt1+βt ϵxt1xt1泰勒展开1βt =121βt   (1x)21(1+x)a=1+1!ax+2!a(a1)x2+3!a(a1)(a2)x3+o(x3)xtxt1=(121βt)xt1+βt ϵxt1xtxt1=xt121βtxt1+βt ϵxt1xtxt1=21βtxt1+βt ϵAs xtxt10   dx=21β(t)xdt+β(t) dw
把上面的离散形式,给转化为随机微分方程的形式。

在这里插入图片描述

从SDE的随机微分方程到最后的离散形式,使用了欧拉-马鲁亚纳方法。

在这里插入图片描述

可以说,通过随机方程的前向和后向传播公式,把离散的噪声过程和噪声采样(反解)过程给构建了起来。

Link to diffusion models

扩散模型中的采样方法。

在这里插入图片描述

解决一般反向SD 的不同方式
Reverse SDE d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p σ ( x ) ] d t + g ( t ) d w \textbf{Reverse SDE}\\\mathrm{d}x=[f(x,t)-g^2(t)\nabla_x\log p_\sigma(x)] \mathrm{d}t+g(t) \mathrm{d}w Reverse SDEdx=[f(x,t)g2(t)xlogpσ(x)]dt+g(t)dw
猜想:因此,视频提出了,不同的融合模式,即不同的噪声产生形式融合。

Summary

如果我们有一些潜在的函数可以代表和生成这些数据。

在这里插入图片描述

学习函数,来生成符合现有数据集的新数据。

在这里插入图片描述

p ( x ) → learn p θ ( x ) = e − f θ ( x ) Z θ p(x)\xrightarrow{\text{learn}}p_\theta(x)=\frac{e^{-f_\theta(x)}}{Z_\theta} p(x)learn pθ(x)=Zθefθ(x)
对于函数的密度分布函数给出一个估计,有两个限制条件:

非负,且和为1.

我们希望构建从数据到评估函数的期望,但是因为,原数据分布的解析式无法描述。
1 2 E p ( x ) [ ∥ ∇ x log ⁡ p ( x ) − s θ ( x ) ∥ 2 2 ] \frac12\mathbb{E}_{p(x)}[\|\nabla_x\log p(x)-s_\theta(x)\|_2^2] 21Ep(x)[xlogp(x)sθ(x)22]
p ( x ) p(x) p(x)未知,通过一些等效的方式
1 2 E p ( x ) [ s θ ( x ) 2 ] + E p ( x ) [ ∇ x s θ ( x ) ] \frac12\mathbb{E}_{p(x)}[s_\theta(x)^2]+\mathbb{E}_{p(x)}[\nabla_xs_\theta(x)] 21Ep(x)[sθ(x)2]+Ep(x)[xsθ(x)]
我们构建了一个只和构造的 ∇ x s θ ( x ) \nabla_xs_\theta(x) xsθ(x)有关的目标函数。

为了解决雅克比矩阵的反向传递的高额代价,还有数据分布的局部性。
在这里插入图片描述

引入噪声扰动来解决分布局限的问题。

通过一系列化简。

把自编码器和这个过程进行了结合

在这里插入图片描述

在这里插入图片描述

上述等效转化,解决了第一个问题。

在这里插入图片描述

对于第二个问题,

通过变式的噪声规模,和郎之万动力方程,或者diffusion模型的思想,从有限采样,到无限采样,最终使用随机方程,构建了一个从离散采样到不同的正向和逆向过程的桥梁。

本篇只看了这个视频,只见树木,不见森林,可参考其他的文档

Diffusion Model - 知乎

生成模型概述 - 知乎


http://www.mrgr.cn/news/67099.html

相关文章:

  • 微服务系列二:跨微服务请求优化,注册中心+OpenFeign
  • DAY21|二叉树Part08|LeetCode: 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
  • 视频编辑学习笔记
  • Vue的双向绑定
  • 【软服之家-注册安全分析报告-无验证方式导致安全隐患】
  • Vue3和Springboot前后端简单部署
  • 开源的flash浏览器 CelfFlashBrowser
  • 一招教你查看最真实的Facebook广告转化
  • 【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 浅谈SQL JOIN多表查询之FULL JOIN 全连接查询
  • VBA06-组件
  • ThreadLocal从入门到精通
  • RPM Fusion 软件仓库简介
  • Java第十一天(实训学习整理资料(十)Java IO流)
  • Bridge(桥接)
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十七章 交叉编译QT工程
  • 架构评估的方法
  • 【PyTorch][chapter31][transformer-5] MQA,CQA, GQA
  • 7.2 设计模式
  • 零基础‘自外网到内网’渗透过程详细记录(cc123靶场)——下
  • java_继承
  • Oracle 第26章:Oracle Data Guard
  • 11.6 校内模拟赛总结
  • Halcon打开多个窗口,指定窗口显示指定内容
  • ISUP协议视频平台EasyCVR私有化视频平台录像机(Ehome或ISUP 5.0)不在线如何排查原因?
  • 【022A】基于51单片机音乐盒
  • python代码实现datax、sqoop功能,用spark将hive数据导入导出到mysql