目前AIGC可以說是整個(gè)人工智能領(lǐng)域的當(dāng)紅炸子雞,而Diffusion Model(擴(kuò)散模型)正是目前各項(xiàng)圖像生成式應(yīng)用的主要架構(gòu)。本人并不主要研究圖像生成領(lǐng)域,不過由于項(xiàng)目需要也對(duì)其進(jìn)行過一些調(diào)研,故寫下這篇文章進(jìn)行分享與記錄。本文會(huì)從最簡(jiǎn)單的擴(kuò)散模型開始講起,然后根據(jù)原始模型存在的缺點(diǎn)介紹當(dāng)前的一些改進(jìn)方法,最后介紹一個(gè)經(jīng)典的可用于條件生成的擴(kuò)散模型Stable Diffusion。
1、擴(kuò)散模型簡(jiǎn)介 - Diffusion Model
如下圖所示,目前的圖像生成式模型主要可以分為四類:① 首先是生成對(duì)抗網(wǎng)絡(luò)GAN通過一種生成對(duì)抗式的方式進(jìn)行學(xué)習(xí),其生成器 G G G根據(jù)潛在空間的采樣 z z z生成圖像 x ′ x' x′,判別器 D D D則判斷輸入圖像是真實(shí)圖像 x x x還是生成圖像 x ′ x' x′;② 變分自編碼器VAE通過編碼器學(xué)習(xí)圖像分布 p ( x ) p(x) p(x)到先驗(yàn)分布 p ( z ) p(z) p(z)之間的轉(zhuǎn)換,解碼器學(xué)習(xí) p ( z ) p(z) p(z)到 p ( x ) p(x) p(x)的轉(zhuǎn)換關(guān)系,其在數(shù)學(xué)上可以被視為通過最大化ELBO進(jìn)行優(yōu)化;③ 標(biāo)準(zhǔn)化流模型則是通過構(gòu)造一個(gè)可逆的變換,建立圖像分布 p ( x ) p(x) p(x)與某個(gè)已知分布 p ( z ) p(z) p(z)的變換;④ 最后是擴(kuò)散模型Diffusion Model,其通過逐步增加高斯噪聲將其變?yōu)榧兏咚乖肼?span id="n5n3t3z" class="katex--inline"> z z z,再通過對(duì) z z z逐步去噪生成新的圖像。
簡(jiǎn)單地說,擴(kuò)散模型就分為兩個(gè)過程:“加噪”和“去噪”(也稱為前向過程和逆向過程)。
- 加噪過程:不斷地往輸入數(shù)據(jù)中加入噪聲,直到其就變成純高斯噪聲,每個(gè)時(shí)刻都要給圖像疊加一部分高斯噪聲。其中后一時(shí)刻是前一時(shí)刻增加噪聲得到的。
- 去噪過程:由一個(gè)純高斯噪聲出發(fā),逐步地去除噪聲,得到一個(gè)滿足訓(xùn)練數(shù)據(jù)分布的圖片。
在數(shù)學(xué)上可以將擴(kuò)散模型的前向和逆向過程理解為馬爾科夫鏈,其特點(diǎn)是"無記憶性",即下一狀態(tài)的概率分布只能由當(dāng)前狀態(tài)決定,與之前的事件均與之無關(guān)。
在下一節(jié)本文將詳細(xì)介紹具體的加噪過程與去噪過程,以及整體的學(xué)習(xí)流程。
2、最簡(jiǎn)單的擴(kuò)散模型 - DDPM
我們從Denoising Diffusion Probabilistic Models(DDPM)這個(gè)工作出發(fā)來分析擴(kuò)散模型的前向與逆向過程
前向加噪過程
首先對(duì)于前向加噪過程涉及兩個(gè)公式:
- α t = 1 ? β t \alpha_t = 1 - \beta_t αt?=1?βt?,其中 β \beta β會(huì)隨著時(shí)間步長(zhǎng) t t t線性增大(0.0001->0.02),從而 α \alpha α越來越??;
- x t = α t x t ? 1 + 1 ? α t z t x_t= \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z_t xt?=αt??xt?1?+1?αt??zt? ,其中 x t ? 1 x_{t-1} xt?1?是前一階段的圖像,z是一個(gè)滿足標(biāo)準(zhǔn)高斯分布的噪音。
可以看到,模型的加噪其實(shí)就是將上一階段輸入的圖像與一個(gè)高斯分布采樣進(jìn)行加權(quán)融合,權(quán)重隨著時(shí)間步長(zhǎng)而繁盛變化,可以看到一開始所加噪聲幅度比較少,越往后噪聲幅度逐漸增加。并且根據(jù)上面兩個(gè)式子,我們可以推算得到任意時(shí)刻下
x
t
x_t
xt?與
x
0
x_0
x0?的關(guān)系(根據(jù)
t
t
t和
x
0
x0
x0直接得到
x
t
x_t
xt?):
其中的 a t ^ \hat{a_t} at?^?是 t t t個(gè)時(shí)間內(nèi)的 a t a_t at?的連乘項(xiàng)
根據(jù)上式可以得到,當(dāng)時(shí)間步長(zhǎng) t t t足夠大時(shí),最終輸出 x t x_t xt?就會(huì)變成一個(gè)標(biāo)準(zhǔn)高斯分布(因?yàn)棣列∮?,并且其隨著時(shí)間一直衰減)。
逆向去噪過程
去噪過程仍然是逐步進(jìn)行的,其需要根據(jù)
x
t
x_t
xt?得到
x
t
?
1
x_{t-1}
xt?1?,我們利用貝葉斯公式進(jìn)行推導(dǎo)。如果我們已知
x
t
x_t
xt?和
x
0
x_0
x0?去求
x
t
x_t
xt?,其貝葉斯公式如下所示:
其中等式右邊都可以通過前向加噪過程中的推理公式求得每一項(xiàng)的分布,如下所示:
將這些正態(tài)分布代入到貝葉斯公式中(利用正態(tài)分布的乘除規(guī)則),得到下式:
然后進(jìn)行化簡(jiǎn)+合并同類項(xiàng)+配方, 如下所示。其中
σ
\sigma
σ方差已知的 → 常數(shù)(綠色框)。然后可以進(jìn)一步計(jì)算得到
μ
\mu
μ的表達(dá)式。
需要注意這個(gè)過程要對(duì)X0進(jìn)行換算,使得最后的結(jié)果只與Xt相關(guān)(此外還有一個(gè)待求參數(shù) z t z_t zt?)
經(jīng)過上式的推導(dǎo)我們就能得到分布 p ( x t ? 1 ∣ x t ) p(x_{t-1}|x_t) p(xt?1?∣xt?),其滿足某個(gè)高斯分布。在這個(gè)分布中,方差是已知的(由α和β組成),而均值與 x t x_t xt?還有一個(gè)高斯噪聲 z t z_t zt?相關(guān),其中 x t x_t xt?是已知的。因此,我們只要求得這個(gè) z t z_t zt?,就可以得到從 x t x_t xt?得到 x t ? 1 x_{t-1} xt?1?的分布(知道了高斯分布的均值和方差)。而Diffusion Model采用一個(gè)深度模型 m o d e l ( X t , t ) model(X_t,t) model(Xt?,t)去預(yù)測(cè)輪次 t t t的噪聲 z t z_t zt?,根據(jù) x t x_t xt?和 z t z_t zt?,我們就可以得到去噪后的 x t ? 1 x_{t-1} xt?1?。這個(gè)模型采用U-Net結(jié)構(gòu)(共享權(quán)重-所有時(shí)間輪次都只用這一個(gè)模型)。
訓(xùn)練與推理流程
左邊是訓(xùn)練過程:隨機(jī)選擇一張圖片,均勻采樣得到時(shí)間輪次t,并從標(biāo)準(zhǔn)正態(tài)分布采樣得到噪聲ε【這也會(huì)當(dāng)做U-Net訓(xùn)練時(shí)的label】,通過公式得到第
t
t
t輪加噪后的圖像。將噪聲圖像和時(shí)間步長(zhǎng)一起輸入網(wǎng)絡(luò)預(yù)測(cè)噪聲值
z
t
z_t
zt?,計(jì)算其與采樣噪聲ε之間的loss來更新模型參數(shù)(即U-Net網(wǎng)絡(luò));
訓(xùn)練主要關(guān)注的是逆向去噪過程,訓(xùn)練的目標(biāo)也是讓U-Net能夠根據(jù) x t x_t xt?和 t t t得到噪聲 z t z_t zt?.
右邊是生成過程:先從標(biāo)準(zhǔn)高斯分布中隨機(jī)采樣得到 X T X_T XT?,然后利用噪聲預(yù)測(cè)模型預(yù)測(cè)每一輪次的噪聲 z t z_t zt?,并根據(jù)上面推導(dǎo)的從 x t x_t xt?到 x t ? 1 x_{t-1} xt?1?的公式進(jìn)行逐步去噪。
模型優(yōu)缺點(diǎn)
對(duì)于一個(gè)圖像生成模型,存在三個(gè)方面的考慮:1. 高質(zhì)量樣本;2. 生成多樣性;3. 高效快速的采樣。但這三者之間往往難以權(quán)衡:
- GAN可以生成高質(zhì)量的結(jié)果,同時(shí)可以快速采樣,但是生成結(jié)果缺乏多樣性,而且GAN網(wǎng)絡(luò)訓(xùn)練過程中會(huì)出現(xiàn)不穩(wěn)定和模式坍塌的問題;
- VAE和Normalizing Flows可以快速采樣,而且生成的結(jié)果也有良好的多樣性, 但是生成的質(zhì)量卻比較差;
- Diffusion生成的結(jié)果質(zhì)量比較高,甚至可以超過GAN, 而且結(jié)果也有良好的多樣性,但是Diffusion需要幾百甚至幾千步的采樣,這導(dǎo)致訓(xùn)練與推理十分緩慢。此外,Diffusion Model的訓(xùn)練也比較容易(相比于GAN)。
在下一節(jié)中,本文將會(huì)介紹一個(gè)用于減少Diffusion Model采用次數(shù)的工作。
3、減少擴(kuò)散模型的采樣步驟 - DiffusionGAN
Tackling the Generative Learning Trilemma with Denoising Diffusion GANs
目前已有很多工作提出用于減少擴(kuò)散模型的采樣次數(shù),這里介紹其中一項(xiàng)工作 - DiffusionGAN,其核心在于通過使用生成對(duì)抗模型來進(jìn)行l(wèi)arge step的快速采樣。
不過目前主要流行的方法主要是DDIM()
首先回顧Diffusion Model,其有兩個(gè)重要假設(shè):1. 去噪過程的分布 p θ ( x t ? 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ?(xt?1?∣xt?)是高斯分布;2. 去噪過程的步數(shù)需要數(shù)百/數(shù)千的數(shù)量級(jí)。這里也引申出兩個(gè)問題:
- 去噪過程真實(shí)分布是高斯分布嗎?或者在什么條件下是高斯分布?
- 去噪過程的步數(shù)多少與高斯分布的假設(shè)是否相關(guān)?
分析高斯分布、采樣步長(zhǎng)
我們先回顧上一節(jié)用到的貝葉斯公式: q ( x t ? 1 ∣ x t ) ∝ q ( x t ∣ x t ? 1 ) q ( x t ? 1 ) q(x_{t-1}|x_t)\propto q(x_{t}|x_{t-1})q(x_{t-1}) q(xt?1?∣xt?)∝q(xt?∣xt?1?)q(xt?1?),其中前向加噪過程的分布 q ( x t ∣ x t ? 1 ) q(x_{t}|x_{t-1}) q(xt?∣xt?1?)服從高斯分布。那么在如下兩種情況下,去噪過程滿足高斯分布:
- 當(dāng)步長(zhǎng) β t \beta_t βt?無限小的時(shí)候,這時(shí)候貝葉斯項(xiàng)中的 q ( x t ∣ x t ? 1 ) q(x_{t}|x_{t-1}) q(xt?∣xt?1?)占主導(dǎo),無論 q ( x t ) q(x_{t}) q(xt?)是什么形式,真實(shí)的去噪過程的分布與前向過程相同,都是高斯分布,這也是Diffusion Models需要大量采樣步驟的原因;
因?yàn)?span id="n5n3t3z" class="katex--inline"> q ( x t ) q(x_{t}) q(xt?)和 q ( x t ? 1 ) q(x_{t-1}) q(xt?1?)的分布基本一致
- 當(dāng)數(shù)據(jù)邊緣分布 q ( x t ) q(x_{t}) q(xt?)是高斯分布時(shí),那么真實(shí)的去噪分布也是高斯分布的形式,因此有一種做法就是通過VAE將其編碼到高斯分布,再利用Diffusion模型(但這個(gè)VAE很難學(xué))。
高斯分布相乘仍然還是高斯分布
所以當(dāng)兩個(gè)條件都不滿足時(shí),真實(shí)的去噪過程分布會(huì)變得很復(fù)雜:
上圖是在一維數(shù)據(jù)集上模擬前向加噪過程的各數(shù)據(jù)分布,可以看到:采用較小的采樣步長(zhǎng)時(shí),真實(shí)去噪過程分布滿足高斯分布,如果步長(zhǎng)過大,真實(shí)去噪分布將變得非常復(fù)雜(幾種高斯混合在一起)。這說明在DDPM中,需要具有較多的采樣step的必要性,但這也影響著模型在推理時(shí)的采樣速率。
Diffusion GAN
DiffusionGAN的目標(biāo)是當(dāng)數(shù)據(jù)分布不為高斯分布時(shí)減少采樣的步數(shù)。在這種情況下,真實(shí)去噪分布也不再服從高斯分布形式,那么建模的反向過程的分布
p
θ
(
x
t
?
1
∣
x
t
)
p_\theta(x_{t-1}|x_t)
pθ?(xt?1?∣xt?)也不再是高斯分布。因此diffusionGAN直接采用Conditional GAN去直接學(xué)習(xí)去噪分布(即
q
(
x
t
∣
x
t
?
1
q(x_t|x_{t-1}
q(xt?∣xt?1?),而不是顯式地去學(xué)習(xí)高斯分布的均值和方差。它訓(xùn)練目標(biāo)是擬合真實(shí)的去噪過程分布,如下所示:
其中GAN的判別器優(yōu)化目標(biāo)是去區(qū)分真實(shí)去噪過程分布與模式輸出的去噪分布:
但是我們也無法知道真實(shí)的去噪過程分布
q
(
x
t
?
1
∣
x
t
)
q(x_{t-1}|x_{t})
q(xt?1?∣xt?)到底是什么,因此使用如下定義去重寫第一項(xiàng):
最終使得第一項(xiàng)變?yōu)橄率剑?br>
利用條件概率的特性,將真實(shí)去噪分布 q ( x t ) q ( x t ? 1 ∣ x t ) q(x_{t})q(x_{t-1}|x_{t}) q(xt?)q(xt?1?∣xt?)一起進(jìn)行轉(zhuǎn)換成 q ( x 0 ) q ( x t ? 1 ∣ x 0 ) q ( x t ∣ x t ? 1 ) q(x_{0})q(x_{t-1}|x_{0})q(x_t|x_{t-1}) q(x0?)q(xt?1?∣x0?)q(xt?∣xt?1?),而這三項(xiàng)我們是比較公式直接可定義的
而GAN的生成器優(yōu)化目標(biāo)就是反著來,即讓判別器無法分辨模型輸出分布和真實(shí)分布:
Diffusion GAN模型的整體架構(gòu)如下所示:判別器需要輸入
x
t
?
1
,
x
t
,
t
x_{t-1},x_t,t
xt?1?,xt?,t三項(xiàng),判斷輸入的
x
t
?
1
x_{t-1}
xt?1?是真實(shí)的還是模型模擬得到的。根據(jù)輸入的
x
0
x_0
x0?就可以在前向過程中直接得到真實(shí)的
x
t
?
1
x_{t-1}
xt?1?和
x
t
x_t
xt?,這樣就解決了真實(shí)分布下的數(shù)據(jù)。而生成器則是根據(jù)輸入的
x
t
x_t
xt?直接得到完全去噪后的
x
0
′
x'_0
x0′?,然后再對(duì)
x
0
′
x'_0
x0′?進(jìn)行一次posterior sampling去得到
x
t
?
1
′
x'_{t-1}
xt?1′?,得到模型預(yù)測(cè)的結(jié)果:
這個(gè)過程就類似于DDPM的采樣過程,只不過我們直接得到了 x 0 x_0 x0?和 x t x_t xt?,直接算出 x t ? 1 x_{t-1} xt?1?就可以了(在DDPM預(yù)測(cè)噪聲 z t z_t zt?也是為了得到 x 0 x_0 x0?)
總結(jié):生成器的目標(biāo)是根據(jù) x t x_t xt?得到 x 0 ′ x'_0 x0′?,然后通過后驗(yàn)采樣得到 x t ? 1 ′ x'_{t-1} xt?1′?;而判別器的目標(biāo)是根據(jù)輸入的 x t ? 1 , x t , t x_{t-1},x_t,t xt?1?,xt?,t來判斷 x t ? 1 x_{t-1} xt?1?是從真實(shí)加噪過程中得到的還是模型模擬出來的結(jié)果。
可以看到,生成器需要輸入 x t , z , t x_t,z,t xt?,z,t,相比于DDPM多引入了一個(gè)隨機(jī)latent code變量z,并且直接輸出 x 0 ′ x_0^{'} x0′?。作者認(rèn)為引入 z z z可以使得建模出來的去噪分布能夠更復(fù)雜以及multimodal。
- 為什么不直接輸出 x t ? 1 ′ x_{t-1}^{'} xt?1′?? 因?yàn)?span id="n5n3t3z" class="katex--inline"> x t x_t xt?在不同時(shí)刻擾動(dòng)程度不同,直接用單個(gè)網(wǎng)絡(luò)預(yù)測(cè) x t ? 1 ′ x_{t-1}^{'} xt?1′?很難,不如直接預(yù)測(cè)無噪聲的 x 0 x_0 x0?;
- 什么不直接訓(xùn)練一個(gè)直接去生成樣本的GAN,而是采用這種逐步去噪的模式?主要是因?yàn)镚AN存在"訓(xùn)練不穩(wěn)定"+“模型崩塌”+ “判別器容易過擬合” + 一些其他原因。相比之下,DiffusionGAN將生成的過程拆分多步,每一步都比較簡(jiǎn)單。此外diffusion過程能夠平滑數(shù)據(jù)分布,判別器也不容易過擬合. 【多樣性更好 + 更穩(wěn)定】
總結(jié):DDPM之所以要這么多的采樣步長(zhǎng),是為了使得去噪過程 q ( x t ? 1 ∣ x t ) q(x_{t-1}|x_t) q(xt?1?∣xt?)為高斯分布。如果采樣步長(zhǎng)較大,那么 q ( x t ? 1 ∣ x t ) q(x_{t-1}|x_t) q(xt?1?∣xt?)的分布就復(fù)雜了,而DiffusionGAN就用一個(gè)GAN去直接學(xué)習(xí)這個(gè)分布,從而減少采樣步長(zhǎng),提升推理速度。
此外還有從其他角度分析的工作,比如DDIM不限制擴(kuò)散過程是一個(gè)馬爾科夫鏈,使得其在采樣時(shí)可以采用更小的采樣步數(shù)來加速生成過程(采樣一個(gè)子序列),詳情請(qǐng)見擴(kuò)散模型之DDIM。
4、潛在擴(kuò)散模型與條件生成模型 - Stable Diffusion
High-Resolution Image Synthesis with Latent Diffusion Models
雖然目前已經(jīng)存在一些方法來減少擴(kuò)散模型的采樣步驟數(shù),比如上文提到的DiffusionGAN和DDIM,但要訓(xùn)練一個(gè)不錯(cuò)的擴(kuò)散模型還是需要大量的GPU資源,這主要是因?yàn)槟P偷挠?xùn)練與推理過程都基于像素空間進(jìn)行。除此之外,作為一類生成式模型,擴(kuò)散模型應(yīng)該擁有條件建模能力(即根據(jù)輸入的條件信息生成對(duì)應(yīng)的圖像,例如文本、語(yǔ)義掩碼等)。
為了解決這兩個(gè)問題,Stable Diffusion分別提出了兩種解決措施:首先將模型從像素空間遷移到特征空間中,去除掉不必要的高頻和細(xì)節(jié)信息,在主要的語(yǔ)義層面進(jìn)行擴(kuò)散過程;其次引入條件建模,采用Cross-Attention操作將條件信息嵌入到生成去噪過程中。
感知圖像壓縮
為了使擴(kuò)散模型不在高分辨率的圖像空間中進(jìn)行訓(xùn)練與推理,Stable Diffusion額外引入一個(gè)感知圖像壓縮模型,其實(shí)也就是自編碼器。自編碼器包括一個(gè)編碼器和一個(gè)解碼器,其中編碼器負(fù)責(zé)將圖像x壓縮到一個(gè)潛在表征 z z z(latent representation),解碼器則是將這個(gè)潛在表征重構(gòu)到圖像空間(上圖中的 ε \varepsilon ε和 D D D)。
自編碼器在訓(xùn)練時(shí)引入了KL約束和VQ約束,并保留圖像的空間維度
在引入自編碼器后,擴(kuò)散模型就只需要在表征空間 z z z中進(jìn)行訓(xùn)練和推理,其空間維度是將原像素空間下采樣了 f = 2 m f=2^m f=2m倍。
這類將擴(kuò)散模型在特征空間中訓(xùn)練與推理的方法也稱為L(zhǎng)DM(Latent Diffusion Model)
上面的實(shí)驗(yàn)展示了不同采樣倍率的LDM在訓(xùn)練時(shí)的收斂情況,可以看到當(dāng)下采樣倍率過大和過小時(shí)效果都不太好,在4-16之間的效果較好。這意味著,下采樣倍率過大時(shí),圖像會(huì)損失較多信息,倍率過小時(shí)包含了太多無效信息,導(dǎo)致收斂時(shí)間較長(zhǎng)。
上面實(shí)驗(yàn)展示了不同采樣倍率的LDM的推理速度(其中不同的點(diǎn)代表不同的采樣步驟數(shù) - 這里參考DDIM,使用了{(lán)10,20,50,100,200}),可以看到在潛在空間中推理會(huì)顯著提升模型效率。
條件信息建模
為了引入條件信息,Stable Diffusion在擴(kuò)散模型中(即U-Net)引入了cross-attention機(jī)制,如上面的模型結(jié)構(gòu)圖所示,先通過一個(gè)條件編碼器將條件信息進(jìn)行編碼(比如文本信息就可以采用BERT這類transformer模型進(jìn)行編碼)。在得到條件編碼信息后,每一層采用下式計(jì)算注意力:
其中Q來自特征編碼
z
t
z_t
zt?,而K,V來自條件信息
y
y
y。通過這種方式,模型就能夠在訓(xùn)練過程中學(xué)習(xí)到條件信息,從而在推理時(shí)根據(jù)不同的條件生成出不同的圖像。
上圖就是展示了Stable Diffusion對(duì)于不同的條件建模任務(wù)生成的圖像(上兩行是布局式圖像生成, layout-to-image,下兩行是文本-圖像生成)。
關(guān)于Stable Diffusion更多的量化實(shí)驗(yàn)結(jié)果就不放在文中了,其不僅可以進(jìn)行條件圖像生成,還可以進(jìn)行圖像超分、圖像重建等任務(wù),并且表現(xiàn)都非常好,詳情參照原文。文章來源:http://www.zghlxwxcb.cn/news/detail-493277.html
參考資料
[1] 強(qiáng)推!不愧是公認(rèn)的講的最好的【Diffusion模型全套教程】
[2] 擴(kuò)散模型之DDIM。
[3] 十分鐘讀懂stable diffusion model
[4] Stable Diffusion原理解讀文章來源地址http://www.zghlxwxcb.cn/news/detail-493277.html
到了這里,關(guān)于一文速覽擴(kuò)散模型優(yōu)化過程:從DDPM到條件生成模型Stable Diffusion的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!