【深度學(xué)習(xí)】擴(kuò)散模型(Diffusion Model)詳解
1. 介紹
擴(kuò)散模型有兩個(gè)過程:
-
擴(kuò)散過程:如上圖所示,擴(kuò)散過程為從右到左 X 0 → X T X_0 \rightarrow X_T X0?→XT? 的過程,表示對圖片逐漸加噪,且 X t + 1 X_{t+1} Xt+1?是在 X t X_{t} Xt?上加躁得到的,其只受 X t X_{t} Xt?的影響。因此擴(kuò)散過程是一個(gè)馬爾科夫過程。
- X 0 X_0 X0?表示從真實(shí)數(shù)據(jù)集中采樣得到的一張圖片,對 X 0 X_0 X0?添加 T T T 次噪聲,圖片逐漸變得模糊。當(dāng) T T T 足夠大時(shí), X T X_T XT?為標(biāo)準(zhǔn)正態(tài)分布。在訓(xùn)練過程中,每次添加的噪聲是已知的,即 q ( X t ∣ X t ? 1 ) q(X_t|X_{t-1}) q(Xt?∣Xt?1?) 是已知的。根據(jù)馬爾科夫過程的性質(zhì),我們可以遞歸得到 q ( X t ∣ X 0 ) q(X_t|X_0) q(Xt?∣X0?),即 q ( X t ∣ X 0 ) q(X_t|X_0) q(Xt?∣X0?) 是已知的。
其中,擴(kuò)散過程最主要的是 q ( X t ∣ X 0 ) q(X_t|X_0) q(Xt?∣X0?) 和 q ( X t ∣ X t ? 1 ) q(X_t|X_{t-1}) q(Xt?∣Xt?1?)的推導(dǎo)。
-
逆擴(kuò)散過程:如上圖所示,逆擴(kuò)散過程為從左到右 X T → X 0 X_T \rightarrow X_0 XT?→X0? 的過程,表示從噪聲中逐漸復(fù)原出圖片。如果我們能夠在給定 X t X_t Xt? 條件下知道 X t ? 1 X_{t-1} Xt?1? 的分布,即如果我們可以知道 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),那我們就能夠從任意一張?jiān)肼晥D片中經(jīng)過一次次的采樣得到一張圖片而達(dá)成圖片生成的目的。
- 顯然我們很難知道 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),因此我們才會(huì)用 p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?) 來近似 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),而 p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?) 就是我們要訓(xùn)練的網(wǎng)絡(luò),在原文中就是個(gè)U-Net。而很妙的是,雖然我們不知道 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),但是 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?) 卻是可以用 q ( X t ∣ X 0 ) q(X_t|X_0) q(Xt?∣X0?) 和 q ( X t ∣ X t ? 1 ) q(X_t|X_{t-1}) q(Xt?∣Xt?1?) 表示的,即 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?) 是可知的,因此我們可以用 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?) 來指導(dǎo) p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?) 進(jìn)行訓(xùn)練。
其中,逆擴(kuò)散過程最主要的是 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?)的推導(dǎo)。
2. 具體方法
在上面的介紹中,我們已經(jīng)明確了要訓(xùn)練 p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?),但是目標(biāo)函數(shù)如何確定?
有兩個(gè)很直接的想法:
- 負(fù)對數(shù)的最大似然概率,即 ? l o g p Θ ( X 0 ) -logp_{Θ}(X_0) ?logpΘ?(X0?);
- 真實(shí)分布與預(yù)測分布的交叉熵,即 ? E q ( X 0 ) l o g p Θ ( X 0 ) -E_{q(X_0)}logp_{Θ}(X_0) ?Eq(X0?)?logpΘ?(X0?)。
但是這兩種方法都很難去求解(求積分)和優(yōu)化。因此擴(kuò)散模型參考了VAE,不去優(yōu)化這兩個(gè)東西,而是優(yōu)化他們的變分上界(variational lower bound),定義
L
V
L
B
L_{VLB}
LVLB?,如下:
即
L
V
L
B
L_{VLB}
LVLB? 減小就代表著
?
l
o
g
p
Θ
(
X
0
)
-logp_{Θ}(X_0)
?logpΘ?(X0?) 和
?
E
q
(
X
0
)
l
o
g
p
Θ
(
X
0
)
-E_{q(X_0)}logp_{Θ}(X_0)
?Eq(X0?)?logpΘ?(X0?) 的上界減小。且經(jīng)過推導(dǎo),$L_{VLB}又可寫成如下形式:
由上式不難發(fā)現(xiàn), L t L_{t} Lt?就是逆擴(kuò)散過程中 q ( X t ∣ X t + 1 X 0 ) q(X_{t}|X_{t+1}X_0) q(Xt?∣Xt+1?X0?) 和 p Θ ( X t ∣ X t + 1 ) p_{Θ}(X_{t}|X_{t+1}) pΘ?(Xt?∣Xt+1?) 的 K L KL KL 散度,即用 q ( X t ∣ X t + 1 X 0 ) q(X_{t}|X_{t+1}X_0) q(Xt?∣Xt+1?X0?) 來指導(dǎo) p Θ ( X t ∣ X t + 1 ) p_{Θ}(X_{t}|X_{t+1}) pΘ?(Xt?∣Xt+1?) 進(jìn)行訓(xùn)練。這部分主要就是(1)式和(2)式的推導(dǎo),細(xì)節(jié)部分見下文的損失函數(shù)。
2.1 擴(kuò)散過程
如上圖所示,擴(kuò)散過程為從右到左 X 0 → X T X_0 \rightarrow X_T X0?→XT? 的過程,表示對圖片逐漸加噪。
- X t + 1 X_{t+1} Xt+1?是在 X t X_{t} Xt?上加躁得到的,其只受 X t X_{t} Xt?的影響。因此擴(kuò)散過程是一個(gè)馬爾科夫過程。
下面,我們對擴(kuò)散過程進(jìn)行推導(dǎo):
由于每一步擴(kuò)散的步長受變量
{
β
t
∈
(
0
,
1
)
}
t
=
1
T
\{β_{t} \in (0,1)\}_{t=1}^{T}
{βt?∈(0,1)}t=1T? 的影響。
q
(
X
t
∣
X
t
?
1
)
q(X_{t}|X_{t-1})
q(Xt?∣Xt?1?) 可寫為如下形式,即給定
X
t
?
1
X_{t-1}
Xt?1? 的條件下,
X
t
X_{t}
Xt?服從均值為
1
?
β
t
X
t
?
1
\sqrt{1-β_{t}}X_{t-1}
1?βt??Xt?1?,方差為
β
t
I
β_{t}I
βt?I的正態(tài)分布:
用重參數(shù)化技巧表示
X
t
X_{t}
Xt?,令
α
t
=
1
?
β
t
α_{t}=1-β_{t}
αt?=1?βt? ,令
Z
t
~
N
(
0
,
I
)
,
t
≥
0
Z_{t} \sim N(0,I), t \ge 0
Zt?~N(0,I),t≥0,即:
其中,
可以得到,令
α
ˉ
t
=
∏
i
=
1
t
α
i
\bar{α}_{t}= {\textstyle \prod_{i=1}^{t}α_{i}}
αˉt?=∏i=1t?αi? :
設(shè)隨機(jī)變量
Z
ˉ
t
?
1
\bar{Z}_{t-1}
Zˉt?1? 為:
則
Z
ˉ
t
?
1
\bar{Z}_{t-1}
Zˉt?1? 的期望和方差如下:
因此,
至此,我們推出了 q ( X t ∣ X t ? 1 ) q(X_{t}|X_{t-1}) q(Xt?∣Xt?1?) 和 q ( X t ∣ X 0 ) q(X_{t}|X_{0}) q(Xt?∣X0?),完成了擴(kuò)散過程。
2.2 逆擴(kuò)散過程
如上圖所示,逆擴(kuò)散過程為從左到右 X T → X 0 X_T \rightarrow X_0 XT?→X0? 的過程,表示從噪聲中逐漸復(fù)原出圖片。
- 如果我們能夠在給定 X t X_t Xt? 條件下知道 X t ? 1 X_{t-1} Xt?1? 的分布,即如果我們可以知道 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),那我們就能夠從任意一張?jiān)肼晥D片中經(jīng)過一次次的采樣得到一張圖片而達(dá)成圖片生成的目的。
- 顯然我們很難知道 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),因此我們才會(huì)用 p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?) 來近似 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),而 p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?) 就是我們要訓(xùn)練的網(wǎng)絡(luò)。
雖然我們不知道 q ( X t ? 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt?1?∣Xt?),但是 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?) 卻是可以用 q ( X t ∣ X 0 ) q(X_t|X_0) q(Xt?∣X0?) 和 q ( X t ∣ X t ? 1 ) q(X_t|X_{t-1}) q(Xt?∣Xt?1?) 表示的,即 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?) 是可知的。
- 因此我們可以用 q ( X t ? 1 ∣ X t X 0 ) q(X_{t-1}|X_tX_0) q(Xt?1?∣Xt?X0?) 來指導(dǎo) p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?) 進(jìn)行訓(xùn)練。
下面我們對逆擴(kuò)散過程進(jìn)行推導(dǎo):
先對
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?)進(jìn)行推導(dǎo):
現(xiàn)在,我們已經(jīng)把
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?)用
q
(
X
t
∣
X
0
)
q(X_t|X_0)
q(Xt?∣X0?)和
q
(
X
t
∣
X
t
?
1
)
q(X_t|X_{t-1})
q(Xt?∣Xt?1?) 進(jìn)行表示,下面對
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?) 的表達(dá)式進(jìn)行推導(dǎo):
至此,我們得到了
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?)的分布表達(dá)式,完成了逆擴(kuò)散過程。
2.3 損失函數(shù)
我們已經(jīng)明確了要訓(xùn)練 p Θ ( X t ? 1 ∣ X t ) p_{Θ}(X_{t-1}|X_t) pΘ?(Xt?1?∣Xt?),那要怎樣進(jìn)行訓(xùn)練?有兩個(gè)很直接的想法:
- 一個(gè)是負(fù)對數(shù)的最大似然概率,即 ? l o g p Θ ( X 0 ) -logp_{Θ}(X_0) ?logpΘ?(X0?);
- 另一個(gè)是真實(shí)分布與預(yù)測分布的交叉熵,即 ? E q ( X 0 ) l o g p Θ ( X 0 ) -E_{q(X_0)}logp_{Θ}(X_0) ?Eq(X0?)?logpΘ?(X0?)。
然而,類似于VAE,由于我們很難對噪聲空間進(jìn)行積分,因此直接優(yōu)化 ? l o g p Θ -logp_{Θ} ?logpΘ? 或 E q ( X 0 ) l o g p Θ ( X 0 ) E_{q(X_0)}logp_{Θ}(X_0) Eq(X0?)?logpΘ?(X0?)都是很困難的。
因此我們不直接優(yōu)化它們,而是優(yōu)化它們的變分上界
L
V
L
B
L_{VLB}
LVLB?,其定義如下:
下面證明
L
V
L
B
L_{VLB}
LVLB? 是
?
l
o
g
p
Θ
(
X
0
)
-logp_{Θ}(X_0)
?logpΘ?(X0?) 和
?
E
q
(
X
0
)
l
o
g
p
Θ
(
X
0
)
-E_{q(X_0)}logp_{Θ}(X_0)
?Eq(X0?)?logpΘ?(X0?) 的上界,即證明
L
V
L
B
≥
?
l
o
g
p
Θ
(
X
0
)
L_{VLB} \ge -logp_{Θ}(X_0)
LVLB?≥?logpΘ?(X0?) 和
L
V
L
B
≥
?
E
q
(
X
0
)
l
o
g
p
Θ
(
X
0
)
L_{VLB} \ge -E_{q(X_0)}logp_{Θ}(X_0)
LVLB?≥?Eq(X0?)?logpΘ?(X0?):
至此,證明了
L
V
L
B
L_{VLB}
LVLB? 是
?
l
o
g
p
Θ
(
X
0
)
-logp_{Θ}(X_0)
?logpΘ?(X0?)和
?
E
q
(
X
0
)
l
o
g
p
Θ
(
X
0
)
-E_{q(X_0)}logp_{Θ}(X_0)
?Eq(X0?)?logpΘ?(X0?)的上界。進(jìn)而,對
L
V
L
B
L_{VLB}
LVLB?進(jìn)行化簡,得到:
從
L
t
L_{t}
Lt? 即可看出,對
p
Θ
(
X
t
∣
X
t
+
1
)
p_{Θ}(X_{t}|X_{t+1})
pΘ?(Xt?∣Xt+1?) 的監(jiān)督就是最小化
p
Θ
(
X
t
∣
X
t
+
1
)
p_{Θ}(X_{t}|X_{t+1})
pΘ?(Xt?∣Xt+1?) 和
q
(
X
t
∣
X
t
+
1
X
0
)
q(X_t|X_{t+1}X_0)
q(Xt?∣Xt+1?X0?) 的KL散度。
3. 總結(jié)
總結(jié)來說,擴(kuò)散模型的目的是希望學(xué)習(xí)出一個(gè)
p
Θ
(
X
t
?
1
∣
X
t
)
p_{Θ}(X_{t-1}|X_t)
pΘ?(Xt?1?∣Xt?),即能夠從噪聲圖恢復(fù)出原圖。
為了達(dá)到這一個(gè)目的,我們使用
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?) 來監(jiān)督
p
Θ
(
X
t
?
1
∣
X
t
)
p_{Θ}(X_{t-1}|X_t)
pΘ?(Xt?1?∣Xt?) 進(jìn)行訓(xùn)練,而
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?) 是可以用
q
(
X
t
∣
X
0
)
q(X_t|X_0)
q(Xt?∣X0?)和
q
(
X
t
∣
X
t
?
1
)
q(X_t|X_{t-1})
q(Xt?∣Xt?1?) 進(jìn)行表示的,即
q
(
X
t
?
1
∣
X
t
X
0
)
q(X_{t-1}|X_tX_0)
q(Xt?1?∣Xt?X0?)是已知的。文章來源:http://www.zghlxwxcb.cn/news/detail-804220.html
4. 參考
【1】https://blog.csdn.net/Little_White_9/article/details/124435560
【2】https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
【3】https://arxiv.org/abs/2105.05233
【4】https://arxiv.org/abs/1503.03585
【5】https://arxiv.org/abs/2006.11239文章來源地址http://www.zghlxwxcb.cn/news/detail-804220.html
到了這里,關(guān)于【深度學(xué)習(xí)】擴(kuò)散模型(Diffusion Model)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!