Diffusion 和Stable Diffusion的數(shù)學和工作原理詳細解釋
擴散模型的興起可以被視為人工智能生成藝術(shù)領(lǐng)域最近取得突破的主要因素。而穩(wěn)定擴散模型的發(fā)展使得我們可以通過一個文本提示輕松地創(chuàng)建美妙的藝術(shù)插圖。所以在本文中,我將解釋它們是如何工作的。
擴散模型 Diffusion
擴散模型的訓練可以分為兩部分:
- 正向擴散→在圖像中添加噪聲。
- 反向擴散過程→去除圖像中的噪聲。
正向擴散過程
正向擴散過程逐步對輸入圖像 x? 加入高斯噪聲,一共有 T 步。該過程將產(chǎn)生一系列噪聲圖像樣本 x?, …, x_T。
當 T → ∞ 時,最終的結(jié)果將變成一張完包含噪聲的圖像,就像從各向同性高斯分布中采樣一樣。
但是我們可以使用一個封閉形式的公式在特定的時間步長 t 直接對有噪聲的圖像進行采樣,而不是設(shè)計一種算法來迭代地向圖像添加噪聲。
封閉公式
封閉形式的抽樣公式可以通過重新參數(shù)化技巧得到。
通過這個技巧,我們可以將采樣圖像x?表示為:
然后我們可以遞歸展開它,最終得到閉式公式:
這里的ε 是 i.i.d. (獨立同分布)標準正態(tài)隨機變量。使用不同的符號和下標區(qū)分它們很重要,因為它們是獨立的并且它們的值在采樣后可能不同。
但是,上面公式是如何從第4行跳到第5行呢?
有些人覺得這一步很難理解。下面我詳細介紹如何工作的:
讓我們用 X 和 Y 來表示這兩項。它們可以被視為來自兩個不同正態(tài)分布的樣本。即 X ~ N(0, α?(1-α???)I) 和 Y ~ N(0, (1-α?)I)。
兩個正態(tài)分布(獨立)隨機變量的總和也是正態(tài)分布的。即如果 Z = X + Y,則 Z ~ N(0, σ2?+σ2?)。因此我們可以將它們合并在一起并以重新以參數(shù)化的形式表示合并后的正態(tài)分布。
重復這些步驟將為得到只與輸入圖像 x? 相關(guān)的公式:
現(xiàn)在我們可以使用這個公式在任何時間步驟直接對x?進行采樣,這使得向前的過程更快。
反向擴散過程
與正向過程不同,不能使用q(x???|x?)來反轉(zhuǎn)噪聲,因為它是難以處理的(無法計算)。所以我們需要訓練神經(jīng)網(wǎng)絡(luò)pθ(x???|x?)來近似q(x???|x?)。近似pθ(x???|x?)服從正態(tài)分布,其均值和方差設(shè)置如下:
損失函數(shù)
損失定義為負對數(shù)似然:
這個設(shè)置與VAE中的設(shè)置非常相似。我們可以優(yōu)化變分的下界,而不是優(yōu)化損失函數(shù)本身。
通過優(yōu)化一個可計算的下界,我們可以間接優(yōu)化不可處理的損失函數(shù)。
通過展開,我們發(fā)現(xiàn)它可以用以下三項表示:
1、L_T:常數(shù)項
由于 q 沒有可學習的參數(shù),p 只是一個高斯噪聲概率,因此這一項在訓練期間將是一個常數(shù),因此可以忽略。
2、L???:逐步去噪項
這一項是比較目標去噪步驟 q 和近似去噪步驟 pθ。通過以 x? 為條件,q(x???|x?, x?) 變得易于處理。
經(jīng)過一系列推導,上圖為q(x???|x?,x?)的平均值μ′?。為了近似目標去噪步驟q,我們只需要使用神經(jīng)網(wǎng)絡(luò)近似其均值。所以我們將近似均值 μθ 設(shè)置為與目標均值 μ?? 相同的形式(使用可學習的神經(jīng)網(wǎng)絡(luò) εθ):
目標均值和近似值之間的比較可以使用均方誤差(MSE)進行:
經(jīng)過實驗,通過忽略加權(quán)項并簡單地將目標噪聲和預測噪聲與 MSE 進行比較,可以獲得更好的結(jié)果。所以為了逼近所需的去噪步驟 q,我們只需要使用神經(jīng)網(wǎng)絡(luò) εθ 來逼近噪聲 ε?。
3、L?:重構(gòu)項
這是最后一步去噪的重建損失,在訓練過程中可以忽略,因為:
- 可以使用 L??? 中的相同神經(jīng)網(wǎng)絡(luò)對其進行近似。
- 忽略它會使樣本質(zhì)量更好,并更易于實施。
所以最終簡化的訓練目標如下:
我們發(fā)現(xiàn)在真實變分界上訓練我們的模型比在簡化目標上訓練產(chǎn)生更好的碼長,正如預期的那樣,但后者產(chǎn)生了最好的樣本質(zhì)量。[2]
通過測試在變分邊界上訓練模型比在簡化目標上訓練會減少代碼的長度,但后者產(chǎn)生最好的樣本質(zhì)量。[2]
U-Net模型
在每一個訓練輪次
- 每個訓練樣本(圖像)隨機選擇一個時間步長t。
- 對每個圖像應用高斯噪聲(對應于t)。
- 將時間步長轉(zhuǎn)換為嵌入(向量)。
訓練過程的偽代碼
官方的訓練算法如上所示,下圖是訓練步驟如何工作的說明:
反向擴散
我們可以使用上述算法從噪聲中生成圖像。下面的圖表說明了這一點:
在最后一步中,只是輸出學習的平均值μθ(x?,1),而沒有添加噪聲。反向擴散就是我們說的采樣過程,也就是從高斯噪聲中繪制圖像的過程。
擴散模型的速度問題
擴散(采樣)過程會迭代地向U-Net提供完整尺寸的圖像獲得最終結(jié)果。這使得純擴散模型在總擴散步數(shù)T和圖像大小較大時極其緩慢。
穩(wěn)定擴散就是為了解決這一問題而設(shè)計的。
穩(wěn)定擴散 Stable Diffusion
穩(wěn)定擴散模型的原名是潛擴散模型(Latent Diffusion Model, LDM)。正如它的名字所指出的那樣,擴散過程發(fā)生在潛在空間中。這就是為什么它比純擴散模型更快。
潛在空間
首先訓練一個自編碼器,學習將圖像數(shù)據(jù)壓縮為低維表示。
通過使用訓練過的編碼器E,可以將全尺寸圖像編碼為低維潛在數(shù)據(jù)(壓縮數(shù)據(jù))。然后通過使用經(jīng)過訓練的解碼器D,將潛在數(shù)據(jù)解碼回圖像。
潛在空間的擴散
將圖像編碼后,在潛在空間中進行正向擴散和反向擴散過程。
- 正向擴散過程→向潛在數(shù)據(jù)中添加噪聲
- 反向擴散過程→從潛在數(shù)據(jù)中去除噪聲
條件作用/調(diào)節(jié)
穩(wěn)定擴散模型的真正強大之處在于它可以從文本提示生成圖像。這是通過修改內(nèi)部擴散模型來接受條件輸入來完成的。
通過使用交叉注意機制增強其去噪 U-Net,將內(nèi)部擴散模型轉(zhuǎn)變?yōu)闂l件圖像生成器。
上圖中的開關(guān)用于在不同類型的調(diào)節(jié)輸入之間進行控制:
- 對于文本輸入,首先使用語言模型 ??θ(例如 BERT、CLIP)將它們轉(zhuǎn)換為嵌入(向量),然后通過(多頭)Attention(Q, K, V) 映射到 U-Net 層。
- 對于其他空間對齊的輸入(例如語義映射、圖像、修復),可以使用連接來完成調(diào)節(jié)。
訓練
訓練目標(損失函數(shù))與純擴散模型中的訓練目標非常相似。唯一的變化是:
- 輸入潛在數(shù)據(jù)z?而不是圖像x?。
- U-Net增加條件輸入??θ(y)。
采樣
由于潛在數(shù)據(jù)的大小比原始圖像小得多,所以去噪過程會快得多。
架構(gòu)的比較
比較純擴散模型和穩(wěn)定擴散模型(潛在擴散模型)的整體架構(gòu)。
Diffusion Model
Stable Diffusion (Latent Diffusion Model)
快速總結(jié)一下:
- 擴散模型分為正向擴散和反向擴散兩部分。
- 正擴散可以用封閉形式的公式計算。
- 反向擴散可以用訓練好的神經(jīng)網(wǎng)絡(luò)來完成。
- 為了近似所需的去噪步驟q,我們只需要使用神經(jīng)網(wǎng)絡(luò)εθ近似噪聲ε?。
- 在簡化損失函數(shù)上進行訓練可以獲得更好的樣本質(zhì)量。
- 穩(wěn)定擴散(潛擴散模型)是在潛空間中進行擴散過程,因此比純擴散模型快得多。
- 純擴散模型被修改為接受條件輸入,如文本、圖像、語義等。