随机噪声
z z z类比为砖瓦水泥
,样本数据
x x x类比为高楼大厦;
砖瓦水泥建设高楼大厦;
生成模型
就是一支用原材料建设高楼大厦的施工队
,过程很难;
换种思路
:建楼难,我们就先不建楼,改成拆楼,考虑将高楼大厦一步步地拆为砖瓦水泥,这样我们就知道怎么建楼;
拆楼的过程
:设 x 0 x_0 x0为建好的高楼大厦
(数据样本
), x T x_T xT为拆好的砖瓦水泥
(随机噪声
),假设“拆楼
”需要 T T T步,整个过程可以表示为 x = x 0 → x 1 → x 2 → . . . → x T − 1 → x T = z (1) x=x_0\rightarrow x_1\rightarrow x_2\rightarrow...\rightarrow x_{T-1}\rightarrow x_T=z \tag{1} x=x0→x1→x2→...→xT−1→xT=z(1)难度
在于,从原材料
x T x_T xT到最终高楼大厦
x 0 x_0 x0的跨度过大
,普通人很难理解 x T x_T xT是怎么一下子变成 x 0 x_0 x0的,先记住我们的目标生成
x 0 x_0 x0这个高楼大厦。
拆楼的过程
x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT后,就可以知道 x t − 1 → x t x_{t-1}\rightarrow x_t xt−1→xt( t − 1 t-1 t−1步到 t t t步时)代表着拆楼的一步
;反过来
x t → x t − 1 x_{t}\rightarrow x_{t-1} xt→xt−1就是建楼的一步
;两者之间的变换关系
x t − 1 = μ ( x t ) x_{t-1}=\mu(x_t) xt−1=μ(xt)(这里是建楼
x t → x t − 1 x_{t}\rightarrow x_{t-1} xt→xt−1),那么从
z = x T z=x_T z=xT开始
,反复执行
x T − 1 = μ ( x T ) x_{T-1}=\mu(x_T) xT−1=μ(xT)、 x T − 2 = μ ( x T − 1 ) x_{T-2}=\mu(x_{T-1}) xT−2=μ(xT−1)、 . . . ... ...,最终就将高楼大厦造出来了
x 0 x_0 x0。
拆楼-建楼
”的类比是完全一致的,它也是先反过来构建一个从数据样本渐变到随机噪声的过程
,然后再考虑其逆变换
,通过反复执行逆变换来完成数据样本的生成。
建模
为 x t = α t x t − 1 + β t ε t , ( ε t ∼ N ( 0 , I ) ) (2) x_t=\alpha_t x_{t-1}+\beta_t \varepsilon_t, (\varepsilon_t \sim N(0, I)) \tag{2} xt=αtxt−1+βtεt,(εt∼N(0,I))(2)
非常接近0
,代表着单步拆楼中对原来楼体的破坏程度
;对原始信号的一种破坏
,也就是原材料
;每一步拆楼
都将 x t − 1 x_{t-1} xt−1拆分成
α t x t − 1 \alpha_tx_{t-1} αtxt−1的楼体
+ β t ε t \beta_t\varepsilon_t βtεt的原料
。这样想:拆楼,都是在原楼体上拆,这样,原楼体还剩,a*原楼体(a肯定小于1),还有一堆拆下来的砖块等原料。
反复执行这个拆楼步骤
:第二项到最后
( ( α t ⋅ ⋅ ⋅ α 2 ) β 1 ε 1 + ( α t ⋅ ⋅ ⋅ α 3 ) β 2 ε 2 + ⋅ ⋅ ⋅ + α t β t − 1 ε t − 1 + β t ε t (\alpha_t···\alpha_2)\beta_1\varepsilon_1+(\alpha_t···\alpha_3)\beta_2\varepsilon_2+···+\alpha_t\beta_{t-1}\varepsilon_{t-1}+\beta_{t}\varepsilon_{t} (αt⋅⋅⋅α2)β1ε1+(αt⋅⋅⋅α3)β2ε2+⋅⋅⋅+αtβt−1εt−1+βtεt)就是多个独立的正态噪声之和
。正态分布的叠加性
:
都是均值为0,方差为
( α t ⋅ ⋅ ⋅ α 2 ) 2 β 1 2 , ( α t ⋅ ⋅ ⋅ α 3 ) 2 β 2 2 , . . . , α t 2 β t − 1 2 , β t 2 (\alpha_t···\alpha_2)^2\beta_1^2,(\alpha_t···\alpha_3)^2\beta_2^2,...,\alpha_t^2\beta_{t-1}^2,\beta_{t}^2 (αt⋅⋅⋅α2)2β12,(αt⋅⋅⋅α3)2β22,...,αt2βt−12,βt2的正态分布所有噪声和叠加,就是均值为0,方差为
( α t ⋅ ⋅ ⋅ α 2 ) 2 β 1 2 + ( α t ⋅ ⋅ ⋅ α 3 ) 2 β 2 2 + . . . + α t 2 β t − 1 2 + β t 2 (\alpha_t···\alpha_2)^2\beta_1^2+(\alpha_t···\alpha_3)^2\beta_2^2+...+\alpha_t^2\beta_{t-1}^2+\beta_{t}^2 (αt⋅⋅⋅α2)2β12+(αt⋅⋅⋅α3)2β22+...+αt2βt−12+βt2的正态分布
(这里很容易得出,可以去看一下(常数*一个随机变量)的方差怎么算的,其实就是常数的平方*随机变量的方差
)。递推式就变成了
: x t = ( α t ⋅ ⋅ ⋅ α 1 ) x 0 + 1 − ( α t ⋅ ⋅ ⋅ α 1 ) 2 ε ˉ t , ε ˉ t ∼ N ( 0 , I ) (4) x_t=(\alpha_t···\alpha_1)x_0+\sqrt{1-(\alpha_t···\alpha_1)^2}\bar\varepsilon_t,\bar\varepsilon_t \sim N(0,I) \tag{4} xt=(αt⋅⋅⋅α1)x0+1−(αt⋅⋅⋅α1)2εˉt,εˉt∼N(0,I)(4)记住这里
,后面会解释为什么这样),这意味着经过
T T T步的拆楼后,所剩的楼体几乎没有了
( x 0 x_0 x0几乎没有了, x 0 x_0 x0前面的系数是一堆很小的数相乘),已经几乎全部转化为原材料
ε \varepsilon ε(原论文中, x 0 x_0 x0前面的系数是 α ˉ t \sqrt{\bar \alpha_t} αˉt, ε ˉ \bar\varepsilon εˉ前面的系数是 1 − α ˉ t \sqrt{1-\bar\alpha_t} 1−αˉt,平方和也是1,所以没有影响,这样改动,更美观)。拆楼是
x t − 1 → x t x_{t-1}\rightarrow x_t xt−1→xt的过程,这个过程,我们会得到很多数据对
( x t − 1 , x t ) (x_{t-1},x_t) (xt−1,xt)建楼就是从这些数据对中学习一个
x t − 1 ← x t x_{t-1}\leftarrow x_t xt−1←xt的模型
。该模型
为 x ^ t − 1 = μ ( x t ) \hat x_{t-1}=\mu(x_t) x^t−1=μ(xt),容易想到的学习方案就是最小化两者的欧氏距离
: ∥ x t − 1 − x ^ t − 1 ∥ 2 = ∥ x t − 1 − μ ( x t ) ∥ 2 (5) \|x_{t-1}-\hat x_{t-1}\|^2=\|x_{t-1}-\mu(x_t)\|^2 \tag{5} ∥xt−1−x^t−1∥2=∥xt−1−μ(xt)∥2(5)首先拆楼的递推式
x t = α t x t − 1 + β t ε t x_t=\alpha_t x_{t-1}+\beta_t \varepsilon_t xt=αtxt−1+βtεt可以移项得到为
x t − 1 = 1 α t ( x t − β t ε t ) x_{t-1}=\frac{1}{\alpha_t}(x_t-\beta_t\varepsilon_t) xt−1=αt1(xt−βtεt)
so,我们就会想能不能把
μ ( x t ) \mu(x_t) μ(xt)设计为和上面移项后的函数的形式大致一样
: μ ( x t ) = 1 α t ( x t − β t ϵ θ ( x t , t ) ) (6) \mu(x_t)=\frac{1}{\alpha_t}(x_t-\beta_t\epsilon_\theta(x_t,t)) \tag{6} μ(xt)=αt1(xt−βtϵθ(xt,t))(6)
其中 θ \theta θ是训练参数, ϵ θ \epsilon_\theta ϵθ是预测的是带噪图片所带的噪声,不是随机噪声
,将 ( 6 ) (6) (6)其代入到损失函数 ( 5 ) (5) (5),得到进一步的损失函数: ∣ ∣ x t − 1 − μ ( x t ) ∣ ∣ 2 = ∥ x t − 1 − 1 α t ( x t − β t ϵ θ ( x t , t ) ) ∥ 2 = ∥ x t − 1 − x t α t + β t α t ϵ θ ( x t , t ) ∥ 2 = ∥ x t − 1 − α t x t − 1 + β t ε t α t + β t α t ϵ θ ( x t , t ) ∥ 2 = β t 2 α t 2 ∣ ∣ ε t − ϵ θ ( x t , t ) ∣ ∣ 2 (7) \begin{aligned}||x_{t-1}-\mu(x_t)||^2&=\|x_{t-1}-\frac{1}{\alpha_t}(x_t-\beta_t\epsilon_\theta(x_t,t))\|^2 \\&=\|x_{t-1}-\frac{x_t}{\alpha_t}+\frac{\beta_t}{\alpha_t}\epsilon_\theta(x_t,t)\|^2\\ &=\|x_{t-1}-\frac{\alpha_t x_{t-1}+\beta_t \varepsilon_t}{\alpha_t}+\frac{\beta_t}{\alpha_t}\epsilon_\theta(x_t,t)\|^2\\ &=\frac{\beta_t^2}{\alpha_t^2}||\varepsilon_t-\epsilon_\theta(x_t,t)||^2\tag{7}\end{aligned} ∣∣xt−1−μ(xt)∣∣2=∥xt−1−αt1(xt−βtϵθ(xt,t))∥2=∥xt−1−αtxt+αtβtϵθ(xt,t)∥2=∥xt−1−αtαtxt−1+βtεt+αtβtϵθ(xt,t)∥2=αt2βt2∣∣εt−ϵθ(xt,t)∣∣2(7)
β t 2 α t 2 \frac{\beta_t^2}{\alpha_t^2} αt2βt2代表 l o s s loss loss的权重
下一步就是消去 l o s s loss loss中的 x t x_t xt
x t x_t xt的表达式用退一步的 x t − 1 x_{t-1} xt−1表示为: x t = α t x t − 1 + β t ε t = α t ( α ˉ t − 1 x 0 + β ˉ t − 1 ε ˉ t − 1 ) + β t ε t = α ˉ t x 0 + α t β ˉ t − 1 ε ˉ t − 1 + β t ε t (8) \begin{aligned}x_t&=\alpha_t x_{t-1}+\beta_t \varepsilon_t\\ &=\alpha_t(\bar\alpha_{t-1}x_0+\bar\beta_{t-1}\bar\varepsilon_{t-1})+\beta_t\varepsilon_t\\ &=\bar\alpha_tx_0+\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t \tag{8}\end{aligned} xt=αtxt−1+βtεt=αt(αˉt−1x0+βˉt−1εˉt−1)+βtεt=αˉtx0+αtβˉt−1εˉt−1+βtεt(8)
其中 α ˉ t − 1 \bar\alpha_{t-1} αˉt−1为 α t − 1 ⋅ ⋅ ⋅ α 1 \alpha_{t-1}···\alpha_1 αt−1⋅⋅⋅α1, β ˉ t − 1 \bar\beta_{t-1} βˉt−1为 1 − ( α t − 1 ⋅ ⋅ ⋅ α 1 ) 2 \sqrt{1-(\alpha_{t-1}···\alpha_1)^2} 1−(αt−1⋅⋅⋅α1)2
最重要的是
ε ˉ t \bar\varepsilon_t εˉt是由
ε 1 , . . . , ε t − 1 \varepsilon_1,...,\varepsilon_{t-1} ε1,...,εt−1叠加的,和
ε t \varepsilon_t εt是无关的,独立的(这一点非常重要,下面会说为什么要这样做?)
得到的
l o s s loss loss形式为
: ∣ ∣ ε t − ϵ θ ( α ˉ t x 0 + α t β ˉ t − 1 ε ˉ t − 1 + β t ε t , t ) ∣ ∣ 2 (9) ||\varepsilon_t-\epsilon_\theta(\bar\alpha_tx_0+\alpha_t \bar \beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t,t)||^2 \tag{9} ∣∣εt−ϵθ(αˉtx0+αtβˉt−1εˉt−1+βtεt,t)∣∣2(9)
为什么要得到 ( 8 ) (8) (8)中的 x t x_t xt,不能直接用 ( 4 ) (4) (4)的 x t = ( α t ⋅ ⋅ ⋅ α 1 ) x 0 + 1 − ( α t ⋅ ⋅ ⋅ α 1 ) 2 ε ˉ t x_t=(\alpha_t···\alpha_1)x_0+\sqrt{1-(\alpha_t···\alpha_1)^2}\bar\varepsilon_t xt=(αt⋅⋅⋅α1)x0+1−(αt⋅⋅⋅α1)2εˉt给出的 x t x_t xt吗?
不行
, ε ˉ t \bar\varepsilon_t εˉt和 ε t \varepsilon_t εt有关联
,非独立
,因为之前我们已经sample了,所以在给定 ε t \varepsilon_t εt的情况下,不能独立采样
ε ˉ t \bar\varepsilon_t εˉt,看
( 8 ) (8) (8)下面的解释。
对四个变量进行sample
:
从训练样本中采样一个
x 0 x_0 x0从正态分布
N ( 0 , I ) N(0,I) N(0,I)中采样
ε ˉ t − 1 \bar\varepsilon_{t-1} εˉt−1和 ε t \varepsilon_t εt从
1 ∼ T 1\sim T 1∼T中采样一个
t t t随机变量越多
,就越难
对损失函数
做准确的估计,反过来说就是每次对损失函数进行估计的波动(方差)过大了。对于 α t β ˉ t − 1 ε ˉ t − 1 + β t ε t \alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t αtβˉt−1εˉt−1+βtεt,由正态分布的叠加性
,相当于单个随机变量
β ˉ t ε ∣ ε ∼ N ( 0 , I ) \bar\beta_t \varepsilon |\varepsilon\sim N(0,I) βˉtε∣ε∼N(0,I),其中 ε ∼ N ( 0 , I ) \varepsilon\sim N(0,I) ε∼N(0,I)
所以我们只要保证系数为 α t β ˉ t − 1 \alpha_t\bar\beta_{t-1} αtβˉt−1和 β t \beta_t βt就可以
构造出
β t ε ˉ t − 1 − α t β ˉ t − 1 ε t \beta_t\bar\varepsilon_{t-1}-\alpha_t\bar\beta_{t-1}\varepsilon_t βtεˉt−1−αtβˉt−1εt,经过简单的计算得出 β ˉ t w ∣ w ∼ N ( 0 , I ) \bar\beta_t w|{w \sim N(0,I)} βˉtw∣w∼N(0,I),其目的就是希望凑出下面那个期望,且为0,这样就能保证是独立的正态随机变量
了
并且可以验证 E [ ε w T ] = 0 \mathbb{E}[\varepsilon w^T]=0 E[εwT]=0,验证方法
可以用 E ( β ˉ t β ˉ t ε w T ) = . . . E( \bar\beta_t\bar\beta_t\varepsilon w^T)=... E(βˉtβˉtεwT)=...展开就ok
对于均值为0的高斯随机变量,不相关等价于独立
两个相互独立的正态随机变量
。反过来将 ε t \varepsilon_t εt用 ε , w \varepsilon,w ε,w重新表示出来:
{ α t β ˉ t − 1 ε ˉ t − 1 + β t ε t = β ˉ t ε β t ε ˉ t − 1 − α t β ˉ t − 1 ε t = β ˉ t (10) \begin{aligned} \begin{cases} \alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t=\bar\beta_t \varepsilon \tag{10}\\ \beta_t\bar\varepsilon_{t-1}-\alpha_t\bar\beta_{t-1}\varepsilon_t=\bar\beta_t\\ \end{cases} \end{aligned} {αtβˉt−1εˉt−1+βtεt=βˉtεβtεˉt−1−αtβˉt−1εt=βˉt(10)
( 10 ) (10) (10)中的方程组第一个
式子记为 ( 1 ) (1) (1),第二个
式子记为 ( 2 ) (2) (2)
求解过程:
由上式 ( 11 ) (11) (11),即解得
: ε t = β ˉ t β t ε − β ˉ t α t β ˉ t − 1 w β t 2 + α t 2 β ˉ t − 1 2 = ( β t ε − α t β ˉ t − 1 w ) β ˉ t β t 2 + α t 2 β ˉ t − 1 2 = β t ε − α t β ˉ t − 1 w β ˉ t (12) \varepsilon_t=\frac{\bar\beta_t\beta_t\varepsilon-\bar\beta_t\alpha_t\bar\beta_{t-1}w}{\beta_t^2+\alpha_t^2\bar\beta_{t-1}^2}=\frac{(\beta_t\varepsilon-\alpha_t\bar\beta_{t-1}w)\bar\beta_t}{\beta_t^2+\alpha_t^2\bar\beta_{t-1}^2}=\frac{\beta_t\varepsilon-\alpha_t\bar\beta_{t-1}w}{\bar\beta_t} \tag{12} εt=βt2+αt2βˉt−12βˉtβtε−βˉtαtβˉt−1w=βt2+αt2βˉt−12(βtε−αtβˉt−1w)βˉt=βˉtβtε−αtβˉt−1w(12)
上式 ( 12 ) (12) (12)代入到 ( 9 ) (9) (9)式 ∥ ε t − ϵ θ ( α ˉ t x 0 + α t β ˉ t − 1 ε ˉ t − 1 + β t ε t , t ) ∥ 2 \|\varepsilon_t-\epsilon_\theta(\bar\alpha_tx_0+\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t,t)\|^2 ∥εt−ϵθ(αˉtx0+αtβˉt−1εˉt−1+βtεt,t)∥2(这里面 α t β ˉ t − 1 ε ˉ t − 1 + β t ε t \alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t αtβˉt−1εˉt−1+βtεt已经等于 β ˉ t ε \bar\beta_t\varepsilon βˉtε,看不懂的,可以看一下上面的标准正态分布叠加
)
得
E ε ˉ t − 1 , ε t ∼ N ( 0 , I ) [ ∣ ∣ ε t − ϵ θ ( α ˉ t x 0 + α t β ˉ t − 1 ε ˉ t − 1 + β t ε t , t ) ∣ ∣ 2 ] = E w , ε ∼ N ( 0 , I ) [ ∥ β t ε − α t β ˉ t − 1 w β ˉ t − ϵ θ ( α ˉ t x 0 + β ˉ t ε , t ) ∥ 2 ] (13) \begin{aligned}\mathbb{E}_{{\bar\varepsilon_{t-1},\varepsilon_t}\sim N(0,I)}\left[||\varepsilon_t-\epsilon_\theta(\bar\alpha_tx_0+\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t,t)||^2 \right]\\ =\mathbb{E}_{{w,\varepsilon}\sim N(0,I)}\left[\left\|\frac{\beta_t\varepsilon-\alpha_t\bar\beta_{t-1}w}{\bar\beta_t}-\epsilon_\theta(\bar\alpha_tx_0+\bar\beta_t\varepsilon,t)\right\|^2 \right] \end{aligned} \tag{13} Eεˉt−1,εt∼N(0,I)[∣∣εt−ϵθ(αˉtx0+αtβˉt−1εˉt−1+βtεt,t)∣∣2]=Ew,ε∼N(0,I)[∥∥∥∥βˉtβtε−αtβˉt−1w−ϵθ(αˉtx0+βˉtε,t)∥∥∥∥2](13)
现在损失函数关于
w w w只是二次的
,所以我们可以展开然后将它的期望直接算出来:
∥ ⋅ ∥ 2 = ( β t β t ˉ ε ) 2 − 2 α t β ˉ t − 1 β t β t ˉ ε w + ( α t β ˉ t − 1 β t ˉ w ) 2 + 2 α t β ˉ t − 1 w β t ˉ ϵ θ − 2 β t ε β t ˉ ϵ θ + ϵ θ 2 (14) \|·\|^2=(\frac{\beta_t}{\bar{\beta_t}}\varepsilon)^2-\frac{2\alpha_t\bar{\beta}_{t-1}\beta_t}{\bar{\beta_t}}\varepsilon w+(\frac{\alpha_t\bar{\beta}_{t-1}}{\bar{\beta_t}}w)^2+\frac{2\alpha_t\bar{\beta}_{t-1}w}{\bar{\beta_t}}\epsilon_{\theta}-\frac{2\beta_t\varepsilon}{\bar{\beta_t}}\epsilon_{\theta}+\epsilon_{\theta}^2 \tag{14} ∥⋅∥2=(βtˉβtε)2−βtˉ2αtβˉt−1βtεw+(βtˉαtβˉt−1w)2+βtˉ2αtβˉt−1wϵθ−βtˉ2βtεϵθ+ϵθ2(14)
得到关于
w w w的常数项、一次项、二次项
。
常数项的积分直接积出来
,一次项的积分为0
(均值为0),二次项的积分得到一个与训练参数无关的常数
。二次项的积分得到一个与训练参数无关的常数
: E ( X 2 ) = D ( X ) + [ E ( X ) ] 2 E(X^2)=D(X)+[E(X)]^2 E(X2)=D(X)+[E(X)]2,可以求 w w w的二次项的期望,求出来是常数一次项的积分为0
:化简
得: ∥ ⋅ ∥ 2 = ( β t β t ˉ ε ) 2 − 2 β t ε β t ˉ ϵ θ + ϵ θ 2 + C (15) \|·\|^2=(\frac{\beta_t}{\bar{\beta_t}}\varepsilon)^2-\frac{2\beta_t\varepsilon}{\bar{\beta_t}}\epsilon_{\theta}+\epsilon_{\theta}^2+C \tag{15} ∥⋅∥2=(βtˉβtε)2−βtˉ2βtεϵθ+ϵθ2+C(15)
我们只关心有用的项,所以将常数和系数(权重)丢掉
,最终我们得到了DDPM最终所用的损失函数: ∥ ε − β ˉ t β t ϵ θ ( α ˉ t x 0 + β ˉ t ε , t ) ∥ 2 (18) \left\|\varepsilon-\frac{\bar \beta_t}{\beta_t}\epsilon_{\theta(\bar\alpha_t x_0+\bar\beta_t\varepsilon ,t)}\right\|^2 \tag{18} ∥∥∥∥ε−βtβˉtϵθ(αˉtx0+βˉtε,t)∥∥∥∥2(18)
以上就是整个训练过程
随机采样,需要补噪声项
: x t − 1 = 1 α t ( x t − β t ϵ θ ( x t , t ) ) + σ t z , z ∼ N ( 0 , I ) (20) x_{t-1}=\frac{1}{\alpha_t}(x_t-\beta_t\epsilon_{\theta(x_t,t)})+\sigma_tz,z\sim N(0,I) \tag{20} xt−1=αt1(xt−βtϵθ(xt,t))+σtz,z∼N(0,I)(20)一般的让
σ t = β t \sigma_t=\beta_t σt=βt,即正向和反向的方差保持同步
。生成速度是一个瓶颈
,DDPM设了
T = 1000 T=1000 T=1000,意味着每生成一个图片,需要将
ϵ θ ( x t , t ) \epsilon_{\theta(x_t,t)} ϵθ(xt,t)反复执行
1000 1000 1000次
,因此DDPM的一大缺点就是采样速度慢
,后面会有提高DDPM的采样速度DDPM中, T = 1000 T=1000 T=1000,为什么要设置这么大
的 T T T?另一边,对于 α t \alpha_t αt的选择,论文里是这样的: α t = 1 − 0.02 t T \alpha_t=\sqrt{1-\frac{0.02t}{T}} αt=1−T0.02t
这是一个单调递减
的函数,那为什么要选择单调递减的 α t \alpha_t αt呢?
其实这两个问题有着相近的答案,跟具体的数据背景有关。简单起见,在重构(建楼)的时候我们用了欧氏距离 ∣ ∣ x t − 1 − μ ( x t ) ∣ ∣ 2 ||x_{t-1}-\mu(x_t)||^2 ∣∣xt−1−μ(xt)∣∣2作为损失函数,而一般DDPM做图片生成,欧氏距离并不好(在VAE中就是欧氏距离来重构,往往得到模糊的结果,除非输入输出的两张图片非常接近才能得到比较清晰的结果),所以选择尽可能大的
T T T(这样
α t \alpha_t αt减少的慢),正是为了使得输入输出尽可能相近,减少欧氏距离带来的模糊问题。
选择单调递减的 α t \alpha_t αt也有类似的考虑,当 t t t比较小时, x t x_t xt还比较接近真实图片,所以我们要缩小 x t − 1 x_{t-1} xt−1和 x t x_t xt的差距,以便更适用欧氏距离 ∥ x t − 1 − μ ( x t ) ∥ 2 \|x_{t-1}-\mu(x_t)\|^2 ∥xt−1−μ(xt)∥2,因此要用较大的 α t \alpha_t αt;当 t t t比较大时, x t x_t xt已经比较接近纯噪声了,噪声用欧式距离无妨,所以可以稍微增大 x t − 1 x_{t−1} xt−1与 x t x_t xt的差距,即可以用较小的 α t \alpha_t αt。
那么可不可以一直用较大的 α t \alpha_t αt呢?
可以是可以,但是要增大 T T T。注意在 ( 4 ) (4) (4)式时,我们说过应该有 α ˉ T ≈ 0 \bar\alpha_T≈0 αˉT≈0,而我们可以直接估算 log α ˉ T = ∑ t = 1 T log α t = 1 2 ∑ t = 1 T log ( 1 − 0.02 t T ) < 1 2 ∑ t = 1 T ( 1 − 0.02 t T ) = − 0.005 ( T + 1 ) \log \bar\alpha_T=\sum_{t=1}^T\log \alpha_t=\frac{1}{2}\sum_{t=1}^T\log\left(1-\frac{0.02t}{T}\right)<\frac{1}{2}\sum_{t=1}^T\left(1-\frac{0.02t}{T}\right)=-0.005(T+1) logαˉT=t=1∑Tlogαt=21t=1∑Tlog(1−T0.02t)<21t=1∑T(1−T0.02t)=−0.005(T+1)
代入 T = 1000 T=1000 T=1000大致是 α ˉ T ≈ e − 5 \bar\alpha_T ≈ e^{-5} αˉT≈e−5,这个其实就刚好达到 ≈ 0 ≈0 ≈0的标准。
所以从头到尾都用较大的 α t \alpha_t αt,那么必然要更大得到 T T T才能使得 α ˉ T ≈ 0 \bar\alpha_T ≈ 0 αˉT≈0
建楼模型里 ϵ θ ( α ˉ t x 0 + β ˉ t ε , t ) \epsilon_{\theta(\bar\alpha_t x_0+\bar\beta_t\varepsilon ,t)} ϵθ(αˉtx0+βˉtε,t)中,我们在输入显式地写出了 t t t,这是因为原则上不同的t处理的是不同层次的对象,所以应该用不同的重构模型,即应该有 T T T个不同的重构模型才对,于是我们共享了所有重构模型的参数,将t作为条件传入, t t t是转换成(通过Transformer)位置编码后,直接加到残差模块上去的。