1 基础知识

1.0 资料

Denoising Diffusion Probabilistic Models
deep_thoughts

1.1 满足马尔可夫链的贝叶斯公式

ABCA \to B \to C,则有P(A,B,C)=P(CB,A)P(B,A)=P(CB)P(BA)P(A)P(A,B,C) = P(C|B,A)P(B,A) = P(C|B)P(B|A)P(A),即P(CB,A)=P(CB)P(C|B,A) = P(C|B)

1.2 高斯密度函数与叠加公式

高斯密度函数:q(x)=12πσexp(12(xμσ)2)q(x) = \frac{1} {\sqrt{2\pi }\sigma }\exp \left ( -\frac{1} {2}\left ( \frac{x-\mu } {\sigma } \right )^2 \right )
对于两个高斯分布,
XN(μ1,σ12)X\sim \mathcal{N}(\mu_{1} , \sigma_{1} ^{2})YN(μ2,σ22)Y\sim \mathcal{N}(\mu_{2} , \sigma_{2} ^{2}),叠加aX+bYaX+bY后也为高斯分布,满足aX+bYN(a×μ1+b×μ2,a2×σ12+b2×σ22)aX+bY\sim \mathcal{N}(a\times \mu _{1} + b \times \mu_{2},a^{2} \times \sigma _{1}^{2} + b^{2} \times \sigma _{2}^{2})

1.3 KL散度

KL散度可以用来衡量两个分布的差异,假设随机变量的真实概率分布为PP,而我们通过建模得到的一个近似分布为QQ,则PPQQ的KL散度满足下式:

$D_{KL}(P,Q) = -\sum P\log Q - (-\sum P\log P) = \sum P \log \frac{P} {Q}$

对于高斯分布的KL散度:DKL(p,q)=logσ2σ1+σ12+(μ1μ2)22σ2212D_{KL}(p,q) = \log \frac{\sigma _{2} } {\sigma _{1} } + \frac{\sigma _{1}^{2} + (\mu _{1} - \mu _{2})^{2} } {2 \sigma _{2}^{2} } - \frac{1} {2}

1.4 参数重整化

从高斯分布N(μ,σ2)\mathcal{N}(\mu ,\sigma^{2} )中采样可从标准分布N(0,1)\mathcal{N}(0 ,1)中采样出zz,通过σ2z+μ\sigma ^{2}\ast z + \mu实现采样过程,以实现对参数求偏导的可行性。

2 去噪扩散概率模型

2.1 Forward

扩散过程即在tt步将原始数据逐步叠加高斯噪声,以达到破坏图像的目的。定义扩散率βt\beta_{t},随扩散步数逐渐增大,定义扩散过程为:

xt=1βtxt1+βtzt,ztN(0,I)x_{t}=\sqrt{1-\beta _{t} }x_{t-1}+\sqrt{\beta _{t} }z _{t},\hspace{1.5em}z_{t}\sim \mathcal N(0,\boldsymbol{I})

根据高斯过程的叠加写为概率形式:
q(xtxt1)=N(xt;1βtxt1,βtI)q(x_{t}\mid x_{t-1}) = \mathcal{N} (x_{t}; \sqrt{1 - \beta _{t} }x_{t-1}, \beta_{t}\boldsymbol{I})

加噪过程是马尔可夫链,写为:
q(x1,x2,,xTx0)=q(x1x0)q(x2x1)q(xTxT1)=t=1Tq(xtxt1)q(x_{1},x_{2},\cdots ,x_{T} | x_{0}) = q(x_{1} | x_{0})q(x_{2} | x_{1})\cdots q(x_{T}| x_{T-1}) = \prod_{t=1}^{T}q(x_{t}| x_{t-1})

定义αt=1βt\alpha _{t} = 1 - \beta _{t},有:
xt=1βtxt1+βtzt=αtxt1+βtztx_{t} = \sqrt{1-\beta _{t} }x_{t-1} + \sqrt{\beta _{t} }z _{t} = \sqrt{\alpha _{t} }x_{t-1}+\sqrt{\beta _{t} }z _{t}=αtαt1α1x0+αtαt1α2β1z1+αtαt1α3β2z2++αtαt1βt2zt2+αtβt1zt1+βtzt= \sqrt{\alpha _{t}\alpha _{t-1}\cdots \alpha _{1} }x_{0} + \sqrt{\alpha _{t}\alpha _{t-1}\cdots \alpha _{2}\beta _{1} }z _{1} + \sqrt{\alpha _{t}\alpha _{t-1}\cdots \alpha _{3}\beta _{2} }z _{2} + \cdots + \sqrt{\alpha _{t}\alpha _{t-1}\beta _{t-2} }z _{t-2} + \sqrt{\alpha _{t}\beta _{t-1} }z _{t-1} + \sqrt{\beta _{t} }z _{t}

αˉt=αtαt1α1{\bar \alpha _t} = {\alpha _t} {\alpha _{t - 1} } \cdots {\alpha _1}

xt=αˉtx0+1αˉtzˉt,zˉtN(0,I)x_{t} = \sqrt{\bar{\alpha }_{t} }x_{0} + \sqrt{1-\bar{\alpha }_{t} }\bar{z}_{t},\bar{z}_{t} \sim \mathcal N(0,\boldsymbol{I})

故前向过程可以直接计算任意步的概率分布:

q(xtx0)=N(xt;αˉtx0,(1αˉt)I)q(x_{t}\mid x_{0}) = \mathcal{N}(x_{t}; \sqrt{\bar{\alpha }_{t} }x_{0}, (1-\bar{\alpha }_{t})\boldsymbol{I})

2.2 Backward

反向过程用q(xt1xt)q(x_{t-1}\mid x_{t})表示,从正态分布反求真实数据。若扩散率βt\beta_{t}足够小,则q(xtxt1)q(x_{t}\mid x_{t-1})也满足高斯分布。反向过程是通过学习一个含参θ\theta的神经网络去拟合的。
反向过程也是一个马尔可夫链的过程,单步有下式:

$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θ(xT1xT)pθ(x0x1)=pθ(xT)t=1Tpθ(xt1xt)p_{\theta}(x_{0:T}) = p_{\theta}(x_{T})p_{\theta}(x_{T-1} \mid x_{T})\cdots p_{\theta}(x_{0}\mid x_{1}) = p_{\theta}(x_{T}) \prod_{t=1}^{T}p_{\theta}(x_{t-1}\mid x_{t})

将反向过程利用贝叶斯公式展开:q(xt1xt)=q(xtxt1)q(xt1)q(xt)q(x_{t-1}\mid x_{t}) = q(x_{t}\mid x_{t-1}) \frac{q(x_{t-1})} {q(x_{t})},对于训练过程,已知x0x_{0},则上式写为:

q(xt1xt,x0)=q(xtxt1,x0)×q(xt1x0)q(xtx0)=N(xt1,μ~(xt,x0),β~tI)q(x_{t-1}\mid x_{t}, x_{0}) = \frac{q(x_{t}\mid x_{t-1}, x_{0})\times q(x_{t-1}\mid x_{0})} {q(x_{t}\mid x_{0})} = \mathcal{N}\left ( x_{t-1}, {\tilde{\mu }(x_{t}, x_{0})}, {\tilde{\beta }_{t} }\boldsymbol{I} \right )

其中,根据高斯过程的概率密度公式可以写出:
μ~(xt,x0)=1αt(xtβt1αˉtzˉt)\tilde \mu ({x_t},{x_0}) = \frac{1} { {\sqrt { {\alpha _t} } } }\left( { {x_t} - \frac{ { {\beta _t} } } { {\sqrt {1 - { {\bar \alpha }_t} } } } { {\bar z}_t} } \right)

反向过程满足:

q(xt1xt,x0)=N(xt1,μ~(xt,x0),β~tI)=N(xt1,1αt(xtβt1αˉtzˉt),1αˉt11αˉtβtI)q({x_{t - 1} }\mid {x_t},{x_0}) = {\cal N}\left( { {x_{t - 1} },\tilde \mu ({x_t},{x_0}),{ {\tilde \beta }_t} {\bf{I} } } \right) = {\cal N}\left( { {x_{t - 1} },\frac{1} { {\sqrt { {\alpha _t} } } }\left( { {x_t} - \frac{ { {\beta _t} } } { {\sqrt {1 - { {\bar \alpha }_t} } } } { {\bar z}_t} } \right),\frac{ {1 - { {\bar \alpha }_{t - 1} } } } { {1 - { {\bar \alpha }_t} } } {\beta _t} {\bf{I} } } \right)

2.3 Optimize

调整参数θ\theta,使得真实数据最大化,写出极大似然函数:
p(x0θ)=pθ(x0)=x1x2xTpθ(x0,x1,x2,,xT)dx1dx2dxTp\left ( x_{0}\mid \theta \right ) = p_{\theta }(x_{0}) = \int_{x_{1} }\int _{x_{2} }\cdots \int _{x_{T} }p_{\theta}(x_{0}, x_{1}, x_{2},\cdots ,x_{T}) d_{x_{1} }d_{x_{2} }\cdots d_{x_{T} }=x1x2xTq(x1:Tx0)pθ(x0,x1,x2,,xT)q(x1:Tx0)dx1dx2dxT=Eq(x1:Tx0)[pθ(x0:T)q(x1:Tx0)]= \int_{x_{1} }\int _{x_{2} }\cdots \int _{x_{T} } {q(x_{1:T}\mid x_{0}) }\frac{p_{\theta}(x_{0}, x_{1}, x_{2},\cdots ,x_{T})} { {q(x_{1:T}\mid x_{0})} } d_{x_{1} }d_{x_{2} }\cdots d_{x_{T} }= \mathbb{E}_{ q(x_{1:T}\mid x_{0})}\left [\frac{ {p_{\theta}(x_{0:T})} } { q(x_{1:T}\mid x_{0})} \right]

经过推导可得到最终优化目标:

$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的输入生成xt0x_t^0,从而预测时间序列。

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ϵ,ht1,n)2]\mathcal L_t = \mathbb E_{\mathbf x^0_t, \epsilon, n} \left[ \lVert \epsilon - \epsilon_\theta ( \sqrt{\bar \alpha_n} \mathbf x^0_t + \sqrt{1-\bar \alpha_n}\epsilon, \mathbf h_{t-1}, n ) \rVert^2 \right]

预测公式:

$\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{\beta _t}或者βtˉ\bar{\beta _t},而改进方案中使用神经网络拟合方差Σθ(xt,t)=exp(vlogβt+(1v)logβˉt){\Sigma _\theta }({x_t},t) = \exp (v\log {\beta _t} + (1 - v)\log {\bar \beta _t}),可以防止tt较大时βt{\beta _t}βtˉ\bar{\beta _t}相差不大。同时Loss函数可以设置为Lhybrid=Lsimple+λLvlb{L_{hybrid} } = {L_{simple} } + \lambda {L_{vlb} }

5.2 非线性加噪过程

原文章中的αˉt{\bar \alpha _t}是线性确定的,生成的噪声容易在t为0或T时突然变化,而使用非线性方法生成的αˉt{\bar \alpha _t}可以更迅速的完成扩散过程。

其中αˉt=f(t)f(0),f(t)=cos(t/T+s1+sπ2)2{\bar \alpha _t} = \frac{ {f(t)} } { {f(0)} },f(t) = \cos {(\frac{ {t/T + s} } { {1 + s} } \cdot \frac{\pi } {2})^2}

5.3 动态LOSS采样步数

TT在原文章中是从均匀分布采样的,而改进方法中可以按照重要性学习采样步数。具体方法是:

  • 在训练开始时,先均匀采样t直到每个t都有其前的10个loss项
  • 然后进行动态的调整

5.4 code

https://github.com/openai/improved-diffusion

6 SDE随机微分方程

随机微分方程可以统一DDPM和SDM,即按照公式dXt=μ(t,X)dt+σ(t,X)dWt\mathrm{d}X_t=\mu(t,X)\mathrm{d}t+\sigma(t,X)\mathrm{d}W_t可以实现无限步的扩散。
积分形式:Xt=X0+0tμ(s,Xs)ds+0tσ(s,Xs)dWsX_t=X_0+\int_0^{t}\mu(s,X_s)\mathrm{d}s+\int_0^{t}\sigma(s,X_s)\mathrm{d}W_s
利用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的结构。