在实际训练中,关于
μ
(
x
t
,
t
)
\mu(x_t,t)
μ(xt,t)的参数化的方式
使用网络预测
x
0
x_0
x0,然后使用公式
μ
ˉ
(
x
t
,
x
0
)
:
=
a
ˉ
t
−
1
β
t
1
−
α
ˉ
t
+
α
t
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
x
t
\bar{\mu } (x_t,x_0):=\frac{\sqrt{\bar{a}_{t-1}}\beta_t}{1-\bar{\alpha} _t} +\frac{\sqrt{\alpha _t}(1-\bar{\alpha }_{t-1} ) }{1-\bar{\alpha } _t}x_t
μˉ(xt,x0):=1−αˉtaˉt−1βt+1−αˉtαt(1−αˉt−1)xt可以得到均值。
也可以使用网络预测
ε
\varepsilon
ε,然后使用
x
t
=
α
ˉ
t
x
0
+
(
1
−
α
ˉ
t
)
I
x_t=\sqrt{\bar{\alpha}}_tx_0+(\sqrt{1-\bar{\alpha}}_t)I
xt=αˉtx0+(1−αˉt)I
μ
ˉ
(
x
t
,
x
0
)
:
=
a
ˉ
t
−
1
β
t
1
−
α
ˉ
t
+
α
t
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
x
t
\bar{\mu } (x_t,x_0):=\frac{\sqrt{\bar{a}_{t-1}}\beta_t}{1-\bar{\alpha} _t} +\frac{\sqrt{\alpha _t}(1-\bar{\alpha }_{t-1} ) }{1-\bar{\alpha } _t}x_t
μˉ(xt,x0):=1−αˉtaˉt−1βt+1−αˉtαt(1−αˉt−1)xt去生成均值
μ
ˉ
(
x
t
,
x
0
)
\bar{\mu } (x_t,x_0)
μˉ(xt,x0)
目前这种方法是最好的,尤其是结合重新加权的损失函数
L
simple
=
E
t
,
x
0
,
ϵ
[
∥
ϵ
−
ϵ
θ
(
x
t
,
t
)
∥
2
]
L_{\text {simple }}=E_{t, x_{0}, \epsilon}\left[\left\|\epsilon-\epsilon_{\theta}\left(x_{t}, t\right)\right\|^{2}\right]
Lsimple =Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]
原本的lvb损失
L
v
l
b
:
=
L
0
+
L
1
+
…
+
L
T
−
1
+
L
T
L_{\mathrm{vlb}} :=L_{0}+L_{1}+\ldots+L_{T-1}+L_{T}
Lvlb:=L0+L1+…+LT−1+LT
L
0
:
=
−
log
p
θ
(
x
0
∣
x
1
)
L_{0} :=-\log p_{\theta}\left(x_{0} \mid x_{1}\right)
L0:=−logpθ(x0∣x1)
L
t
−
1
:
=
D
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
p
θ
(
x
t
−
1
∣
x
t
)
)
L_{t-1}:=D_{K L}(q\left(x_{t-1} \mid x_{t}, x_{0}\right)|| p_{\theta}(x_{t-1}|x_{t}))
Lt−1:=DKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))
L
T
:
=
D
K
L
(
q
(
x
T
∣
x
0
)
∥
p
(
x
T
)
)
L_{T} :=D_{K L}\left(q\left(x_{T} \mid x_{0}\right) \| p\left(x_{T}\right)\right)
LT:=DKL(q(xT∣x0)∥p(xT))
对数似然的改进
为研究不同流形上的作用,在image net64*64 上训练固定的模型结构使用固定的超参数。
不同的实验设置对比
方法
ho(2020)
our
损失函数及参数设置
L
s
i
m
p
l
e
L_{simple}
Lsimple &
σ
2
=
β
t
\sigma^2=\beta_t
σ2=βt &
T
=
10000
T=10000
T=10000
L
h
y
b
r
i
d
=
L
simple
+
λ
L
v
l
b
,
λ
=
0.001
L_{\mathrm{hybrid}}=L_{\text {simple }}+\lambda L_{\mathrm{vlb}},\lambda = 0.001
Lhybrid=Lsimple +λLvlb,λ=0.001
训练轮数
200k
T
1000
4000
数据集
image_net64*64
实验结果
3.99
3.77
学习
Σ
θ
(
x
t
,
t
)
\Sigma_{\theta}\left(x_{t}, t\right)
Σθ(xt,t)
在无限步长的扩散的过程条件下,方差的作用远没有均值对实验结果的影响大。或者说,方差几乎不发挥作用。
实验中,我们发现扩散过程前几步对整个扩散过程很重要。于是,通过使用更好的
Σ
θ
(
x
t
,
t
)
\Sigma_{\theta}\left(x_{t}, t\right)
Σθ(xt,t)可以很大程度上提高对数释然。
合理的
Σ
θ
(
x
t
,
t
)
\Sigma_{\theta}\left(x_{t}, t\right)
Σθ(xt,t)的范围很小,对于神经网络去寻找一个合理的
Σ
θ
(
x
t
,
t
)
\Sigma_{\theta}\left(x_{t}, t\right)
Σθ(xt,t)不是容易的,
我们发现更好的参数化
Σ
θ
(
x
t
,
t
)
\Sigma_{\theta}\left(x_{t}, t\right)
Σθ(xt,t)是差值
β
ˉ
t
\bar{\beta}_t
βˉt和
β
t
\beta_t
βt在对数域。我们的模型输出
v
v
v,每个维度包含一个分量,然后将这个输出转换为如下方差:
Σ
θ
(
x
t
,
t
)
=
exp
(
v
log
β
t
+
(
1
−
v
)
log
β
~
t
)
\Sigma_{\theta}\left(x_{t}, t\right)=\exp \left(v \log \beta_{t}+(1-v) \log \tilde{\beta}_{t}\right)
Σθ(xt,t)=exp(vlogβt+(1−v)logβ~t)
t
r
i
c
k
{\color{Red}trick }
trick stop- gradient
q
(
x
1
,
…
,
x
T
∣
x
0
)
:
=
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
q(x_{1}, \dots, x_{T} | x_{0}) :=\prod_{t=1}^{T} q\left(x_{t} \mid x_{t-1}\right)
q(x1,…,xT∣x0):=∏t=1Tq(xt∣xt−1)
q
(
x
t
∣
x
t
−
1
)
:
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
q(x_{t}| x_{t-1}):=\mathcal{N}\left(x_{t} ; \sqrt{1-\beta_{t}} x_{t-1}, \beta_{t} \mathbf{I}\right)
q(xt∣xt−1):=N(xt;1−βtxt−1,βtI)
对任何时刻的加噪样本:
q
(
x
t
∣
x
0
)
=
N
(
x
t
;
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
\begin{aligned} q\left(x_{t} \mid x_{0}\right) &=\mathcal{N}\left(x_{t} ; \sqrt{\bar{\alpha}_{t}} x_{0},\left(1-\bar{\alpha}_{t}\right) \mathbf{I}\right) \\ x_{t} &=\sqrt{\bar{\alpha}_{t}} x_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon \end{aligned}
q(xt∣x0)xt=N(xt;αˉtx0,(1−αˉt)I)=αˉtx0+1−αˉtϵ
加噪机制的改进:
α
ˉ
t
=
f
(
t
)
f
(
0
)
,
f
(
t
)
=
cos
(
t
/
T
+
s
1
+
s
⋅
π
2
)
2
\bar{\alpha}_{t}=\frac{f(t)}{f(0)}, \quad f(t)=\cos \left(\frac{t / T+s}{1+s} \cdot \frac{\pi}{2}\right)^{2}
αˉt=f(0)f(t),f(t)=cos(1+st/T+s⋅2π)2 其中:
β
t
=
1
−
α
ˉ
t
α
ˉ
t
−
1
\beta_{t}=1-\frac{\bar{\alpha}_{t}}{\bar{\alpha}_{t-1}}
βt=1−αˉt−1αˉt
为了防止开始时
β
t
,
t
=
0
\beta_t,t=0
βt,t=0太小,使得网络在预测噪声的时候很困难。我们让
β
0
\sqrt{\beta_0}
β0=1/127.5=0.008。
在实际中使用
c
o
s
2
cos^2
cos2
不同的
L
v
l
b
L_{vlb}
Lvlb有不同边际。采样t均匀的会引起没必要的噪声在
L
v
l
b
L_{vlb}
Lvlb中。我们使用重要性采样:
L
v
l
b
=
E
t
∼
p
t
[
L
t
p
t
]
, where
p
t
∝
E
[
L
t
2
]
and
∑
p
t
=
1
L_{\mathrm{vlb}}=E_{t \sim p_{t}}\left[\frac{L_{t}}{p_{t}}\right] \text {, where } p_{t} \propto \sqrt{E\left[L_{t}^{2}\right]} \text { and } \sum p_{t}=1
Lvlb=Et∼pt[ptLt], where pt∝E[Lt2] and ∑pt=1,由于
E
[
L
t
2
]
E\left[L_{t}^{2}\right]
E[Lt2]是未知的,可能在整个训练过程中发生变化。于是,我们的每个损失保持10个值的历史,并在训练期间动态更新。训练开始,我们均匀的采样十个样本,
t
∈
[
0
,
T
−
1
]
t \in[0, T-1]
t∈[0,T−1]。