1 基础知识
1.0 资料
Denoising Diffusion Probabilistic Models
deep_thoughts
1.1 满足马尔可夫链的贝叶斯公式
若A→B→C,则有P(A,B,C)=P(C∣B,A)P(B,A)=P(C∣B)P(B∣A)P(A),即P(C∣B,A)=P(C∣B)。
1.2 高斯密度函数与叠加公式
高斯密度函数:q(x)=2πσ1exp(−21(σx−μ)2)。
对于两个高斯分布,
X∼N(μ1,σ12),Y∼N(μ2,σ22),叠加aX+bY后也为高斯分布,满足aX+bY∼N(a×μ1+b×μ2,a2×σ12+b2×σ22)。
1.3 KL散度
KL散度可以用来衡量两个分布的差异,假设随机变量的真实概率分布为P,而我们通过建模得到的一个近似分布为Q,则P与Q的KL散度满足下式:
$D_{KL}(P,Q) = -\sum P\log Q - (-\sum P\log P) = \sum P \log \frac{P} {Q}$
对于高斯分布的KL散度:DKL(p,q)=logσ1σ2+2σ22σ12+(μ1−μ2)2−21。
1.4 参数重整化
从高斯分布N(μ,σ2)中采样可从标准分布N(0,1)中采样出z,通过σ2∗z+μ实现采样过程,以实现对参数求偏导的可行性。
2 去噪扩散概率模型
2.1 Forward
扩散过程即在t步将原始数据逐步叠加高斯噪声,以达到破坏图像的目的。定义扩散率βt,随扩散步数逐渐增大,定义扩散过程为:
xt=1−βtxt−1+βtzt,zt∼N(0,I)。
根据高斯过程的叠加写为概率形式:q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
加噪过程是马尔可夫链,写为:q(x1,x2,⋯,xT∣x0)=q(x1∣x0)q(x2∣x1)⋯q(xT∣xT−1)=∏t=1Tq(xt∣xt−1)
定义αt=1−βt,有:xt=1−βtxt−1+βtzt=αtxt−1+βtzt=αtαt−1⋯α1x0+αtαt−1⋯α2β1z1+αtαt−1⋯α3β2z2+⋯+αtαt−1βt−2zt−2+αtβt−1zt−1+βtzt
令αˉt=αtαt−1⋯α1,
有
xt=αˉtx0+1−αˉtzˉt,zˉt∼N(0,I)
故前向过程可以直接计算任意步的概率分布:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
2.2 Backward
反向过程用q(xt−1∣xt)表示,从正态分布反求真实数据。若扩散率βt足够小,则q(xt∣xt−1)也满足高斯分布。反向过程是通过学习一个含参θ的神经网络去拟合的。
反向过程也是一个马尔可夫链的过程,单步有下式:
$p_{\theta}(x_{t-1}\mid x_{t}) = \mathcal{N}\left ( x_{t-1}; \mu _{\theta}(x_{t}, t), \Sigma _{\theta}(x_{t}, t) \right )$
有
pθ(x0:T)=pθ(xT)pθ(xT−1∣xT)⋯pθ(x0∣x1)=pθ(xT)∏t=1Tpθ(xt−1∣xt)
将反向过程利用贝叶斯公式展开:q(xt−1∣xt)=q(xt∣xt−1)q(xt)q(xt−1),对于训练过程,已知x0,则上式写为:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)×q(xt−1∣x0)=N(xt−1,μ~(xt,x0),β~tI)
其中,根据高斯过程的概率密度公式可以写出:
μ~(xt,x0)=αt1(xt−1−αˉtβtzˉt)
反向过程满足:
q(xt−1∣xt,x0)=N(xt−1,μ~(xt,x0),β~tI)=N(xt−1,αt1(xt−1−αˉtβtzˉt),1−αˉt1−αˉt−1βtI)
2.3 Optimize
调整参数θ,使得真实数据最大化,写出极大似然函数:
p(x0∣θ)=pθ(x0)=∫x1∫x2⋯∫xTpθ(x0,x1,x2,⋯,xT)dx1dx2⋯dxT=∫x1∫x2⋯∫xTq(x1:T∣x0)q(x1:T∣x0)pθ(x0,x1,x2,⋯,xT)dx1dx2⋯dxT=Eq(x1:T∣x0)[q(x1:T∣x0)pθ(x0:T)]
经过推导可得到最终优化目标:
$L_{t-1}^{simple}= \mathbb{E}_{ x_{0}, \bar{z}_{t} \sim \mathcal{N}(0,\boldsymbol{I})} \left [ \left \| \bar{z}_{t} - z_{\theta}(\sqrt{\bar{\alpha }_{t} }x_{0} + \sqrt{1-\bar{\alpha }_{t} }\bar{z}_{t}, t) \right \| ^{2} \right ]$
最终得到的优化目标非常简单,就是让网络预测的噪声与真实的噪声一致。
2.4 优化的DDPM(未阅读)
来源Improved Denoising Diffusion Probabilistic Models,利用变化的方差和非线性变化的扩散率以提高生成网络的有效性。
3 TimeGrad(DDPM)
Timegrad是使用DDPM进行时间序列概率预测的方法,主要思想是将传统的RNN网络和DDPM结合起来,将RNN的隐藏状态作为DDPM的输入生成xt0,从而预测时间序列。
3.0 参考资料
原论文Autoregressive Denoising Diffusion Models for Multivariate Probabilistic Time Series Forecasting。
笔记Autoregressive Denoising Diffusion Model。
3.1 网络架构
3.1.1 整体架构
3.1.2 噪声预测网络结构
利用8级残差网络拟合噪声。
3.2 概率预测
由于扩散模型基于标准高斯分布采样,生成的预测值也将服从一定的分布而非固定,多次生成,利用分位数去代替最终的概率分布。若需要平滑绘制曲线,可以考虑插值再绘制,插值方法也许可以参考CSDI。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ps_data = [forecast.quantile(p / 100.0)[:,dim] for p in percentiles_sorted] i_p50 = len(percentiles_sorted) // 2
p50_data = ps_data[i_p50] p50_series = pd.Series(data=p50_data, index=forecast.index) p50_series.plot(color=color, ls="-", label=f"{label_prefix}median", ax=ax)
ax.fill_between( forecast.index, ps_data[i], ps_data[-i - 1], facecolor=color, alpha=alpha, interpolate=True, )
|
3.3 核心公式
所需优化的LOSS函数:
Lt=Ext0,ϵ,n[∥ϵ−ϵθ(αˉnxt0+1−αˉnϵ,ht−1,n)∥2]
预测公式:
$\mathbf x^{n-1}_{T+1} = \frac{1} {\alpha_n} \left( \mathbf x^n_{T+1} - \frac{\beta_n} {1 - \bar\alpha_n} \epsilon_\theta( \mathbf x^n_{T+1}, \mathbf h_{T}, n ) \right) + \sqrt{\Sigma_\theta} \mathbf z$
3.4 code
https://github.com/zalandoresearch/pytorch-ts
4 Conditional Score-Based Diffusion Model
论文来源:CSDI: Conditional Score-based Diffusion Models for Probabilistic Time Series Imputation
4.1基础定义
分数定义:
\begin{align*}
f(\boldsymbol{x}) = \nabla_\boldsymbol{x} \log p_{\text{data} }(\boldsymbol{x})
\end{align*}
迭代公式:
${\tilde {\boldsymbol{x}_t} } = {\tilde {\boldsymbol{x}_{t - 1} } } + \frac{\varepsilon } {2} {\nabla _x}\log p({\tilde {\boldsymbol{x}_{t - 1} } }) + \sqrt \varepsilon {\boldsymbol{z}_t}$
模型${s_\theta }(\tilde {\boldsymbol{x} },\sigma )$用于拟合分数$\nabla_\boldsymbol{x} \log p_{\text{data} }(\boldsymbol{x})$完成迭代。
4.2 原理
5 Improved DDPM
5.1 似然函数改进
对于逆过程的方差,原方案是取固定的βt或者βtˉ,而改进方案中使用神经网络拟合方差Σθ(xt,t)=exp(vlogβt+(1−v)logβˉt),可以防止t较大时βt与βtˉ相差不大。同时Loss函数可以设置为Lhybrid=Lsimple+λLvlb。
5.2 非线性加噪过程
原文章中的αˉt是线性确定的,生成的噪声容易在t为0或T时突然变化,而使用非线性方法生成的αˉt可以更迅速的完成扩散过程。
其中αˉt=f(0)f(t),f(t)=cos(1+st/T+s⋅2π)2。
5.3 动态LOSS采样步数
T在原文章中是从均匀分布采样的,而改进方法中可以按照重要性学习采样步数。具体方法是:
- 在训练开始时,先均匀采样t直到每个t都有其前的10个loss项
- 然后进行动态的调整
5.4 code
https://github.com/openai/improved-diffusion
6 SDE随机微分方程
随机微分方程可以统一DDPM和SDM,即按照公式dXt=μ(t,X)dt+σ(t,X)dWt可以实现无限步的扩散。
积分形式:Xt=X0+∫0tμ(s,Xs)ds+∫0tσ(s,Xs)dWs
利用SDE也可以实现概率预测,但年代久远。
论文Probabilistic Forecasting Using Stochastic Diffusion Models, With Applications to Cohort Processes of Marriage and Fertility利用SDM对太阳辐射的预测(2014)。
7 U-Net 和 Attention
扩散概率模型中对噪声的预测中,使用了U-Net和Attention的结构。