扩散模型的数学原理(基于分数)
写在前面:
扩散模型有不同的描述视角和形式化方法:
概率扩散视角:
- 基于马尔可夫链
- 逐步添加高斯噪声
- 关注条件概率分布
- 例如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πσ21e−2σ2(x−μ)2
对于一个数据,我们可以先假设其PDF有多少参数,符合那种分布函数。
PDF有两个约束:
- 非负性
- 综合为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θe−fθ(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θe−fθ(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]=21∫p(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}} (a−b)2=a2+b2−2ab
= 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 =21∫p(x)∇xlogp(x)2+sθ(x)2−2⋅∇xlogp(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 =21∫p(x)⋅∇xlogp(x)2dx+21∫p(x)⋅sθ(x)2dx−21∫p(x)⋅2⋅∇xlogp(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=uv∣ab−∫vdu
把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} =21∫p(x)⋅∇xlogp(x)2dx+21∫p(x)⋅sθ(x)2dx−∫p(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} =21∫p(x)⋅sθ(x)2dx−∫p(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)noisepσ(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]Start21Ex∼p(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} =21∫pσ(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} =21∫pσ(x~)⋅(∇x~logpσ(x~))2dx~+21∫pσ(x~)⋅sθ(x~)2dx~−21∫pσ(x~)⋅2⋅∇x~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} $的条件下,该点来自于原始数据分布的概率。
-
生成带噪声的数据分布:通过边缘化可以得到在加入噪声后的数据分布 p σ ( x ~ ) p_\sigma(\tilde{x}) pσ(x~),这表明了加入噪声后的数据在不同状态下的概率分布。这一步生成的分布让模型能够估计在特定噪声强度下的样本分布。
-
平滑目标:边缘分布使模型更容易在训练过程中学习到平滑的分布,从而在逆扩散(生成样本)时更平稳地从带噪声的数据恢复出清晰的样本。
-
噪声对不同数据的平均影响:边缘分布通过对所有潜在的干净数据 $ 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})] =21∫pσ(x~)⋅(∇x~logpσ(x~))2dx~+21∫pσ(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]−Ex∼p(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]21Ex∼p(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]+21E∥x∼p(x),x~∼pσ(x~)∥2[∥sθ(x~)∥22−2⋅∇xlogpσ(x~∣x)⋅sθ(x~)]+∥∇xlogpσ(x~∣x)∥22−∥∇x~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+21Ex∼p(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+21Ex∼p(x),x~∼pσ(x~∣x)[∥sθ(x~)−∇x~logpσ(x~∣x)∥22−21Ex∼p(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} =21Ex∼p(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σ21e−2σ21∣∣x~−x∣∣2
构造出的数据满足上面这个正态分布,多维高斯分布的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~log∇x~logpσ(x~∣x)=∇x~log(2π)d/2σ21e−2σ21∣∣x~−x∣∣2
上面的过程包含对数拆分,归零,对数和指数抵消,微分的链式法则
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~−x∣∣2)=−σ21(x~−x)
代入噪声理解:
= 1 σ 2 ( x − x − ϵ ) = 1 σ 2 ( − ϵ ) =\frac1{\sigma^2}(x-x-\epsilon)=\frac1{\sigma^2}(-\epsilon) =σ21(x−x−ϵ)=σ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]} 21Ex∼p(x),x~∼pσ(x~∣x)[∣∣sθ(x~)−σ21(x−x~)∣∣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]} 21Ex∼p(x),x~∼pσ(x~∣x)[∣∣sθ(x~)+σ21ϵ∣∣22]
S θ ( x ) S_\theta(x) Sθ(x)模型接收噪声输入,并试图预测(期望是) − ϵ -\epsilon −ϵ
也是下面这个过程,预测负噪声的模型指向了数据流形。数据的似然性增加,这就是分数匹配算法的核心理念。
综上,上述的过程,解决了训练过程的昂贵的训练的问题
通过增加和减少噪声来作为解决第二个问题的一种方案。
这实际上并非最优的解决方法。
Sampling
只进行一次采样,并沿着那个方向进行延申,我们可以发现误差会很大,采用多次采样并进行小步移动。
初始化大量的点,用刚刚的公式进行采样,他们会最终都到达极值点。该值会是数据的平均值。得分函数向梯度方向移动,所以最终都会是正态分布,且值在均值附近(二维均值就是极值点核心)。
让我从物理和数学的角度来解释扩散方程(也叫热方程)为什么会趋向平均值。
这个现象可以从以下几个角度理解:
- 物理角度:
- 类比热传导,高温区域会向低温区域传递能量
- 系统总是趋向于最大熵的状态,也就是最混乱、最均匀的状态
- 这种趋向平均的过程是不可逆的,符合热力学第二定律
- 数学角度:
- 扩散方程是一个抛物型偏微分方程
- 其解具有"平滑效应",会逐渐消除局部的不规则性
- 从傅里叶分析的角度看,高频分量会比低频分量衰减得更快
- 概率角度:
- 可以将扩散过程看作是随机行走
- 大量粒子的随机运动最终会导致均匀分布
- 这符合大数定律,系统会趋向于期望值
我创建的可视化展示了这个过程:
- 蓝色线代表不同的采样点
- 随着时间推移,你可以看到这些点逐渐向平均值(红线)靠拢
- 最终所有点会在平均值附近达到稳定状态
这种现象在自然界中很常见,比如:
- 墨水滴入水中的扩散
- 气体在空间中的扩散
- 热量在物体中的传导
你可以观察模拟中,起初差异很大的点是如何随着迭代逐渐趋向平均值的。这个过程很好地展示了扩散方程的基本特性。
使用郎之万动力学方程(寿命动力学方程):
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+1←x~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−βtxt−1+βtϵϵ∼N(0,I)xt−xt−1=1−βtxt−1+βtϵ−xt−1∣−xt−1泰勒展开−1−βt=1−21βt (1−x)21(1+x)a=1+1!ax+2!a(a−1)x2+3!a(a−1)(a−2)x3+o(x3)xt−xt−1=(1−21βt)xt−1+βtϵ−xt−1xt−xt−1=xt−1−21βtxt−1+βtϵ−xt−1xt−xt−1=−21βtxt−1+βtϵAs xt−xt−1→0 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)learnpθ(x)=Zθe−fθ(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 - 知乎
生成模型概述 - 知乎