既是自編碼器,也是RNN,DeepMind科學(xué)家八個(gè)視角剖析擴(kuò)散模型
如果你嘗試過(guò)目前最火的 AI 繪畫(huà)工具之一 Stable Diffusion,那你就已經(jīng)體驗(yàn)過(guò)擴(kuò)散模型(diffusion model)那強(qiáng)大的生成能力。但如果你想更進(jìn)一步,了解其工作方式,你會(huì)發(fā)現(xiàn)擴(kuò)散模型的形式其實(shí)有很多種。
如果你隨機(jī)選擇兩篇關(guān)于擴(kuò)散模型的研究論文,看看各自引言中對(duì)模型類(lèi)別的描述,你可能會(huì)看到它們的描述大不相同。這可能既讓人沮喪,又具有啟發(fā)性:讓人沮喪是因?yàn)槿藗兏y發(fā)現(xiàn)論文和實(shí)現(xiàn)之間的關(guān)系,而具有啟發(fā)性的原因則是每一種觀(guān)點(diǎn)都能揭示出新的聯(lián)系,催生出新的思想。
近日,DeepMind 研究科學(xué)家 Sander Dieleman 發(fā)布了一篇博客長(zhǎng)文,概括性地總結(jié)了他對(duì)擴(kuò)散模型的看法。
這篇文章是他去年所寫(xiě)的《擴(kuò)散模型是自動(dòng)編碼器》一文的進(jìn)一步延伸。這個(gè)題目有些開(kāi)玩笑的意味,但也強(qiáng)調(diào)了擴(kuò)散模型和自動(dòng)編碼器之間存在緊密聯(lián)系。他認(rèn)為人們直到如今依然低估了這種聯(lián)系。
感興趣的讀者可訪(fǎng)閱:https://sander.ai/2022/01/31/diffusion.html
而在這篇新文章中,Dieleman 從多個(gè)不同視角剖析了擴(kuò)散模型,包括將擴(kuò)散模型看作是自動(dòng)編碼器、深度隱變量模型、預(yù)測(cè)分?jǐn)?shù)函數(shù)的模型、求解逆向隨機(jī)微分方程的模型、流模型、循環(huán)神經(jīng)網(wǎng)絡(luò)、自回歸模型以及估計(jì)期望的模型。他還談了自己對(duì)擴(kuò)散模型研究方向的當(dāng)前研究現(xiàn)狀的看法。
擴(kuò)散模型是自動(dòng)編碼器
去噪自動(dòng)編碼器是一種神經(jīng)網(wǎng)絡(luò),其輸入被噪聲損傷,而它們的任務(wù)目標(biāo)則是預(yù)測(cè)出干凈的輸入,即消除損傷。要很好地完成這一任務(wù),需要學(xué)習(xí)干凈數(shù)據(jù)的分布。它們是非常常用的表征學(xué)習(xí)方法,而在深度學(xué)習(xí)發(fā)展早期,它們也被用于深度神經(jīng)網(wǎng)絡(luò)的分層預(yù)訓(xùn)練。
事實(shí)證明擴(kuò)散模型中使用的神經(jīng)網(wǎng)絡(luò)通常求解的是一個(gè)非常類(lèi)似的問(wèn)題:給定一個(gè)被噪聲污染的輸入示例,它要預(yù)測(cè)出與其數(shù)據(jù)分布相關(guān)的一些量。這可以是對(duì)應(yīng)的干凈輸入(如同去噪自動(dòng)編碼器)、所添加的噪聲或某種介于兩者之間的東西(稍后會(huì)詳細(xì)介紹)。當(dāng)損傷過(guò)程是線(xiàn)性的時(shí),所有這些都是等價(jià)的,即噪聲是添加上去的,只需從有噪聲輸入中減去預(yù)測(cè)結(jié)果,我們就可以將預(yù)測(cè)噪聲的模型變成預(yù)測(cè)干凈輸入的模型。用神經(jīng)網(wǎng)絡(luò)術(shù)語(yǔ)來(lái)說(shuō),就是從輸入到輸出添加一個(gè)殘差連接。
去噪自動(dòng)編碼器(左)和擴(kuò)散模型(右)的示意圖
它們有幾項(xiàng)關(guān)鍵性差異:
- 在學(xué)習(xí)輸入的有用表征時(shí),去噪自動(dòng)編碼器中部的某個(gè)位置往往存在某種信息瓶頸,這會(huì)限制其學(xué)習(xí)表征的能力。去噪任務(wù)本身只是達(dá)到目的的一種手段,而不是我們?cè)谟?xùn)練模型后真正使用模型的目的。用于擴(kuò)散模型的神經(jīng)網(wǎng)絡(luò)通常沒(méi)有這樣的瓶頸,因?yàn)槲覀兏诤跛鼈兊念A(yù)測(cè)結(jié)果,而不是用于得到這些結(jié)果的內(nèi)部表征方式。
- 去噪自動(dòng)編碼器可以使用多種不同類(lèi)型的噪聲來(lái)訓(xùn)練。比如說(shuō),我們可以將部分輸入遮蔽掉(掩蔽噪聲),我們也可以添加來(lái)自某個(gè)任意分布(通常是高斯分布)的噪聲。對(duì)于擴(kuò)散模型,我們通常堅(jiān)持添加高斯噪聲,因?yàn)樗哂杏杏玫臄?shù)學(xué)特性,可以簡(jiǎn)化許多操作。
- 另一個(gè)重要差異是去噪自動(dòng)編碼器的訓(xùn)練目標(biāo)只是處理特定強(qiáng)度的噪聲。而使用擴(kuò)散模型時(shí),我們想要根據(jù)帶有很多或少量噪聲的輸入預(yù)測(cè)一些東西。噪聲水平也是神經(jīng)網(wǎng)絡(luò)的一個(gè)輸入。
事實(shí)上,作者之前詳細(xì)討論過(guò)這兩者之間的關(guān)系,想更加透徹理解這一關(guān)系的讀者可訪(fǎng)問(wèn):https://sander.ai/2022/01/31/diffusion.html
擴(kuò)散模型是深度隱變量模型
Sohl-Dickstein et al. 在一篇 ICML 2015 論文中最早建議使用擴(kuò)散過(guò)程來(lái)逐漸損傷數(shù)據(jù)的結(jié)構(gòu),然后再通過(guò)學(xué)習(xí)逆向該過(guò)程來(lái)構(gòu)建生成模型。五年之后,Ho et al. 基于此開(kāi)發(fā)出了去噪擴(kuò)散概率模型(DDPM),其與基于評(píng)分的模型一起構(gòu)成了擴(kuò)散模型的藍(lán)圖。
DDPM 示意圖
DDPM 如上圖所示,x_T(隱含)表示高斯噪聲,x_0(觀(guān)察到的)表示數(shù)據(jù)分布。這些隨機(jī)變量由有限數(shù)量的中間隱變量 x_t (通常 T=1000)連接在一起,這會(huì)形成一個(gè)馬爾可夫鏈,即 x_{t-1} 僅取決于 x_t,而并不直接依賴(lài)于該鏈中之前的任意隨機(jī)變量。
這個(gè)馬爾可夫鏈的參數(shù)的擬合方式是使用變分推理來(lái)逆向擴(kuò)散過(guò)程,這個(gè)擴(kuò)散過(guò)程本身也是一個(gè)馬爾可夫鏈(方向相反,圖中表示為 q (x_t∣x_{t?1})),但這條鏈?zhǔn)侵饾u向數(shù)據(jù)添加高斯噪聲。
具體來(lái)說(shuō),就像是在變分自動(dòng)編碼器(VAE)中一樣,我們可以寫(xiě)下一個(gè)證據(jù)下界(ELBO),即對(duì)數(shù)似然的一個(gè)界限,而對(duì)數(shù)似然是可以輕松地最大化的。事實(shí)上,這一節(jié)的小標(biāo)題也可以是「擴(kuò)散模型是深度 VAE」,但由于之前已經(jīng)從另一個(gè)視角寫(xiě)了「擴(kuò)散模型是自動(dòng)編碼器」,因此為了避免混淆就選用了當(dāng)前小標(biāo)題。
我們知道 q (x_t∣x_{t?1}) 是高斯分布,但我們想使用模型擬合的 p (x_{t?1}∣x_t) 卻不需要是。但事實(shí)證明,只要每個(gè)單獨(dú)的步驟足夠?。?T 足夠大),我們可以通過(guò)參數(shù)設(shè)置讓 p (x_{t?1}∣x_t) 看起來(lái)像是高斯分布,而且其近似誤差將足夠小,該模型依然能生成優(yōu)質(zhì)樣本。仔細(xì)想想,這有點(diǎn)令人驚訝,因?yàn)樵诓蓸舆^(guò)程中,任何錯(cuò)誤都可能隨著 T 而累積。
擴(kuò)散模型預(yù)測(cè)的是分?jǐn)?shù)函數(shù)
大多數(shù)基于似然的生成模型都是對(duì)輸入 x 的對(duì)數(shù)似然 log p (x∣θ) 進(jìn)行參數(shù)化,然后擬合模型參數(shù) θ 來(lái)最大化它,要么是近似地?cái)M合(如 VAE),要么是精確擬合(如流模型或自回歸模型)。由于對(duì)數(shù)似然表示概率分布,而概率分布必須歸一化,所以通常需要一些約束來(lái)確保參數(shù) θ 的所有可能值都產(chǎn)生有效的分布。比如自回歸模型通過(guò)因果掩碼(causal masking)來(lái)確保這一點(diǎn),而大多數(shù)流模型需要可逆的神經(jīng)網(wǎng)絡(luò)架構(gòu)。
研究表明,還有另一種擬合分布的方法可以巧妙地避開(kāi)對(duì)歸一化的要求,即分?jǐn)?shù)匹配(score matching)。這基于這一觀(guān)察:所謂的分?jǐn)?shù)函數(shù)(score matching)不會(huì)隨 p (x∣θ) 的縮放而變化。這很容易看出來(lái):
施加于概率密度的任何比例因子都會(huì)消失。因此,如果我們有一個(gè)直接對(duì)分?jǐn)?shù)估計(jì)進(jìn)行參數(shù)化的模型,那就可以通過(guò)最小化分?jǐn)?shù)匹配損失來(lái)擬合分布(而不是直接最大化似然):
但是,使用這種形式時(shí),損失函數(shù)可能不實(shí)用,因?yàn)槲覀儧](méi)有為任意數(shù)據(jù)點(diǎn) x 計(jì)算基本真值分?jǐn)?shù)的好方法。有一些技巧可用來(lái)回避這一要求,并將其轉(zhuǎn)換為易于計(jì)算的損失函數(shù),包括隱式分?jǐn)?shù)匹配(ISM)、切片分?jǐn)?shù)匹配(SSM)和去噪分?jǐn)?shù)匹配(DSM)。這里我們?cè)敿?xì)看看最后一種方法:
其中,可通過(guò)向 x 添加高斯噪聲得到。這意味著
的分布基于一個(gè)高斯分布 N (x,σ^2),其基本真值條件分?jǐn)?shù)函數(shù)可以閉式形式計(jì)算得到:
這種形式有非常直觀(guān)的解釋?zhuān)哼@是向 x 添加噪聲以得到的一種擴(kuò)展版本。因此,通過(guò)按照分?jǐn)?shù)(= 對(duì)數(shù)似然的梯度上升)來(lái)使
的可能性更高這一做法直接對(duì)應(yīng)于消除(部分)噪聲:
如果我們選擇步長(zhǎng) η=σ^2,則就能在一步之內(nèi)恢復(fù)干凈數(shù)據(jù) x。
L_SM 和 L_DSM 是不同的損失函數(shù),但巧妙之處在于它們具有相同的期望最小值:
,其中 C 是一個(gè)常數(shù)。Pascal Vincent 早在 2010 年就推導(dǎo)出了這種等價(jià)性,如果你想加深理解,強(qiáng)烈建議你閱讀他的技術(shù)報(bào)告:http://www.iro.umontreal.ca/~vincentp/Publications/smdae_techreport.pdf
這一方法引出了一個(gè)重要問(wèn)題:我們應(yīng)該添加多少噪聲,即 σ 應(yīng)為多少?為這一超參數(shù)選取一個(gè)固定值在實(shí)踐中效果并不好。在低噪聲水平下,在低密度區(qū)域中準(zhǔn)確估計(jì)分?jǐn)?shù)是非常困難的。在高噪聲水平下,這算不上是一個(gè)問(wèn)題,因?yàn)樘砑拥脑肼晻?huì)分散在所有方向的密度上 —— 然后我們正在建模的分布會(huì)因噪聲而顯著扭曲。一種很好的方法是在許多不同噪聲水平下建模密度。一旦我們有了這樣一個(gè)模型,我們就可以在采樣過(guò)程中對(duì) σ 進(jìn)行退火 —— 從大量噪聲開(kāi)始,然后逐漸降低。Song & Ermon 在他們 2019 年的論文中詳細(xì)描述了這些問(wèn)題并提出了這種優(yōu)雅的解決方案。
這種方法是將多種不同噪聲水平下的去噪分?jǐn)?shù)匹配與采樣期間噪聲逐漸退火組合起來(lái),得到的模型實(shí)質(zhì)上等效于 DDPM,但推導(dǎo)過(guò)程卻完全不同 —— 完全看不見(jiàn) ELBO!
有關(guān)這一方法的更詳細(xì)論述請(qǐng)參閱論文作者之一宋飏的博客:https://yang-song.net/blog/2021/score/
擴(kuò)散模型求解的是逆向隨機(jī)微分方程
前面兩個(gè)看待擴(kuò)散模型的視角(深度隱變量模型和分?jǐn)?shù)匹配)考慮的是離散的和有限的步驟。這些步驟對(duì)應(yīng)于不同的高斯噪聲水平,我們可以寫(xiě)出一個(gè)單調(diào)映射 σ(t),其步驟索引 t 映射到該步驟的噪聲的標(biāo)準(zhǔn)差。
如果我們讓步數(shù)趨于無(wú)窮大,則可以將這些離散的索引變量替換為區(qū)間 [0,T] 上的連續(xù)值 t,這可被解釋為一個(gè)時(shí)間變量,即 σ(t) 現(xiàn)在描述的是噪聲的標(biāo)準(zhǔn)差隨時(shí)間的演變。在連續(xù)時(shí)間中,我們可以用以下隨機(jī)微分方程(SDE)來(lái)描述逐漸向數(shù)據(jù)點(diǎn) x 添加噪聲的擴(kuò)散過(guò)程:
該方程將 x 的無(wú)窮小變化與 t 的無(wú)窮小變化聯(lián)系了起來(lái),dw 表示無(wú)窮小高斯噪聲,也被稱(chēng)為維納過(guò)程(Wiener process)。f 和 g 分別稱(chēng)為漂移系數(shù)和擴(kuò)散系數(shù)。f 和 g 的特定選擇可得到用于構(gòu)建 DDPM 的連續(xù)時(shí)間版本馬爾可夫鏈。
SDE 將微分方程和隨機(jī)變量組合到了一起,乍一看似乎有點(diǎn)生畏。幸運(yùn)的是,我們不需要太多現(xiàn)有的先進(jìn) SDE 機(jī)制來(lái)理解這種視角可以如何用于擴(kuò)散模型。然而,有一個(gè)非常重要的結(jié)果可供我們使用。給定一個(gè)像上面那樣描述擴(kuò)散過(guò)程的 SDE,我們可以寫(xiě)出另一個(gè)描述另一方向的過(guò)程的 SDE,即反轉(zhuǎn)時(shí)間:
該方程還描述了一個(gè)擴(kuò)散過(guò)程。
是逆向維納過(guò)程,
是時(shí)間依賴(lài)型分?jǐn)?shù)函數(shù)。這種時(shí)間依賴(lài)性源自這一事實(shí):噪聲水平會(huì)隨時(shí)間變化。
解釋這種情況的原因超出了本文的范圍,感興趣的讀者可閱讀宋飏等人為擴(kuò)散模型引入基于 SDE 的形式化的原始論文《Score-Based Generative Modeling through Stochastic Differential Equations》。
具體來(lái)說(shuō),如果我們有一種方法,可以估計(jì)時(shí)間依賴(lài)型分?jǐn)?shù)函數(shù),那么我們可以模擬逆向擴(kuò)散過(guò)程,從而從噪聲開(kāi)始的數(shù)據(jù)分布中抽取樣本。我們可以再次訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)這個(gè)量,并將其插入到逆向 SDE 中以獲得連續(xù)時(shí)間擴(kuò)散模型。
在實(shí)踐中,模擬這個(gè) SDE 需要再次對(duì)時(shí)間變量 t 執(zhí)行離散化,因此你可能想知道為什么要這么做。其巧妙之處就在于現(xiàn)在我們可以在采樣時(shí)間決定該離散化,而且在我們訓(xùn)練好分?jǐn)?shù)預(yù)測(cè)模型之前不必固定下來(lái)。換句話(huà)說(shuō),通過(guò)選擇采樣步驟數(shù),我們無(wú)需修改模型,就能非常自然地權(quán)衡考慮采樣質(zhì)量和計(jì)算成本。
擴(kuò)散模型是流模型
還記得流模型嗎?流模型并非現(xiàn)如今常用的生成模型,主要原因可能是它們需要更多參數(shù)才能在性能上趕上其它模型。這是由于它們的表達(dá)能力有限:流模型中使用的神經(jīng)網(wǎng)絡(luò)需要是可逆的,并且其雅可比行列式的對(duì)數(shù)行列式必須易于計(jì)算,這就嚴(yán)重限制了可能的計(jì)算類(lèi)型。
至少,離散的歸一化流就是這種情況。連續(xù)的歸一化流(CNF)也存在,并且通常的形式為用神經(jīng)網(wǎng)絡(luò)參數(shù)化的常微分方程(ODE),其描述的是數(shù)據(jù)分布中的樣本與一個(gè)簡(jiǎn)單基礎(chǔ)分布的對(duì)應(yīng)樣本之間的一個(gè)確定性路徑。CNF 不受前面提到的神經(jīng)網(wǎng)絡(luò)架構(gòu)約束的影響,但其原始形式需要用反向傳播通過(guò)一個(gè) ODE 求解器來(lái)訓(xùn)練。盡管可以使用一些技巧來(lái)更加高效地完成這件事,但這也可能會(huì)阻礙更多人使用它。
我們回顧一下擴(kuò)散模型的 SDE 形式化,其描述的隨機(jī)過(guò)程是將簡(jiǎn)單基礎(chǔ)分布的樣本映射到數(shù)據(jù)分布的樣本。有趣的問(wèn)題出現(xiàn)了:中間樣本的分布 p_t (x) 是怎樣的,又會(huì)怎樣隨時(shí)間變化?這由???- 普朗克方程(Fokker-Planck equation)控制。如果你想了解實(shí)踐中的情況,請(qǐng)查看論文 Song et al. (2021) 的附錄 D.1。
瘋狂的來(lái)了:有一個(gè) ODE 所描述的確定性過(guò)程的時(shí)間依賴(lài)型分布與該 SDE 所描述的隨機(jī)過(guò)程的完全一樣!這被稱(chēng)為概率流 ODE。不僅如此,它有一個(gè)簡(jiǎn)單的閉式形式:
該方程描述了前向和后向過(guò)程(只需翻轉(zhuǎn)符號(hào)即可變換方向),注意時(shí)間依賴(lài)型分?jǐn)?shù)函數(shù)依然在其中。要證明這一點(diǎn),你可以寫(xiě)下該 SDE 和概率流 ODE 的福克 - 普朗克方程,然后做一些代數(shù)運(yùn)算,你會(huì)發(fā)現(xiàn)它們其實(shí)是一樣的,因此必定具有形同的解 p_t (x)。
請(qǐng)注意,該 ODE 描述的過(guò)程與該 SDE 并不一樣,這也不可能,因?yàn)榇_定性的微分方程無(wú)法描述一個(gè)隨機(jī)過(guò)程。它描述的是一個(gè)不同的過(guò)程,其具有獨(dú)特的屬性,即兩個(gè)過(guò)程的分布 p_t (x) 是一樣的。
這一現(xiàn)象揭示出了重要的意義:來(lái)自簡(jiǎn)單基礎(chǔ)分布的特定樣本與來(lái)自數(shù)據(jù)分布的樣本之間存在雙射映射。對(duì)于所有隨機(jī)性都包含在初始基礎(chǔ)分布樣本中的采樣過(guò)程 —— 一旦采樣完成,基于此得到數(shù)據(jù)樣本的過(guò)程就是完全確定性的。這也意味著我們可以通過(guò)前向模擬 ODE 來(lái)將數(shù)據(jù)點(diǎn)映射到其相應(yīng)的隱含表征,然后操作它們,再通過(guò)后向模擬 ODE 將它們映射回?cái)?shù)據(jù)空間。
由這個(gè)概率流 ODE 描述的模型是一個(gè)連續(xù)歸一化流模型,但我們不必反向傳播通過(guò) ODE 也能訓(xùn)練它,使該方法的擴(kuò)展性好得多。
我們竟然可以做到這一點(diǎn),而不會(huì)改變模型的訓(xùn)練方式,是不是很神奇?我們可以將分?jǐn)?shù)預(yù)測(cè)器插入到前一節(jié)提到的逆向 SDE 或這一節(jié)的 ODE 中,然后得到兩個(gè)以不同方式建模同一分布的不同生成模型。是不是很炫酷?
不僅如此,概率流 ODE 還能讓擴(kuò)散模型實(shí)現(xiàn)似然計(jì)算,參見(jiàn) Song et al. (2021) 的附錄 D.2。這也需要求解 ODE,所以成本幾乎和采樣一樣高。
由于以上原因,概率流 ODE 范式最近變得相當(dāng)受歡迎。比如 Karras et al. 將其用作探究不同擴(kuò)散模型設(shè)計(jì)選擇的基礎(chǔ),本文作者也與其合作者在他們的擴(kuò)散語(yǔ)言模型中使用了它。這也被泛化和擴(kuò)展到了擴(kuò)散過(guò)程之外,以學(xué)習(xí)任意一對(duì)分布之間的映射,形式包括流匹配(Flow Matching)、修正流(Rectified Flows)和隨機(jī)插值(Stochastic Interpolants)。
旁注:DDIM 給出了另一種可為擴(kuò)散模型獲取確定性采樣過(guò)程的方法,該方法基于深度隱變量模型視角。
擴(kuò)散模型是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
從擴(kuò)散模型采樣涉及到使用神經(jīng)網(wǎng)絡(luò)反復(fù)進(jìn)行預(yù)測(cè)并使用這些預(yù)測(cè)來(lái)更新「畫(huà)布」,而這畫(huà)布一開(kāi)始全是隨機(jī)噪聲。如果我們考慮這個(gè)過(guò)程的完整計(jì)算圖,它看起來(lái)很像循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。RNN 中有一個(gè)隱藏狀態(tài)會(huì)反復(fù)通過(guò)一個(gè)循環(huán)單元來(lái)獲得更新,而這個(gè)循環(huán)單元由一個(gè)或多個(gè)非線(xiàn)性的已參數(shù)化的運(yùn)算(比如 LSTM 的門(mén)控機(jī)制)構(gòu)成。其中,隱藏狀態(tài)就是畫(huà)布,因此它位于輸入空間中,并且其中的單元由我們?yōu)閿U(kuò)散模型訓(xùn)練的去噪神經(jīng)網(wǎng)絡(luò)構(gòu)成。
展開(kāi)的擴(kuò)散采樣回路示意圖
RNN 的訓(xùn)練通常使用通過(guò)時(shí)間的反向傳播(BPTT),其中梯度是通過(guò)循環(huán)傳播的。反向傳播通過(guò)的循環(huán)步驟數(shù)通常受限于某個(gè)最大值,以降低計(jì)算成本,這被稱(chēng)為截?cái)嗍?BPTT。擴(kuò)散模型也是通過(guò)反向傳播訓(xùn)練,但一次僅通過(guò)一步。從某種意義上說(shuō),擴(kuò)散模型提供了一種訓(xùn)練深度循環(huán)神經(jīng)網(wǎng)絡(luò)的方法。該方法完全無(wú)需通過(guò)循環(huán)進(jìn)行反向傳播,從而可得到更具可擴(kuò)展性的訓(xùn)練過(guò)程。
RNN 通常是確定性的,因此這個(gè)類(lèi)比對(duì)于基于上一節(jié)中描述的概率流 ODE 的確定性過(guò)程最有意義 —— 盡管將噪聲注入 RNN 的隱藏狀態(tài)作為正則化的一種方法并非是前所未聞的事情,所以作者認(rèn)為這個(gè)類(lèi)比也適用于隨機(jī)過(guò)程。
在非線(xiàn)性層的數(shù)量方面,這個(gè)計(jì)算圖的總深度是由神經(jīng)網(wǎng)絡(luò)的層數(shù)乘以采樣步驟數(shù)給定的。我們可以將展開(kāi)的循環(huán)看作是一個(gè)非常深的神經(jīng)網(wǎng)絡(luò),甚至可能有成千上萬(wàn)層。深度很大,但也說(shuō)得過(guò)去,因?yàn)閷?duì)真實(shí)世界數(shù)據(jù)進(jìn)行生成式建模就需要如此深度的計(jì)算圖。
我們還可以想想,如果我們?cè)诿總€(gè)擴(kuò)散采樣步驟不使用同樣的神經(jīng)網(wǎng)絡(luò),對(duì)于不同的噪聲水平范圍可能使用不同的神經(jīng)網(wǎng)絡(luò),那么會(huì)發(fā)生什么?這些網(wǎng)絡(luò)可以單獨(dú)且獨(dú)立地訓(xùn)練,甚至可以使用不同的架構(gòu)。這意味著我們可以有效地「解開(kāi)」非常深的神經(jīng)網(wǎng)絡(luò)中的權(quán)重,將其從一個(gè) RNN 變成一個(gè)普通的老式深度神經(jīng)網(wǎng)絡(luò),但我們?nèi)匀粺o(wú)法避免一次性反向傳播通過(guò)它們?nèi)?。Stable Diffusion XL 在其 Refiner 模型中使用這種方法達(dá)到了很好的效果,所以這種方法的熱度可能會(huì)趕上來(lái)。
作者表示他在 2010 年開(kāi)始讀博時(shí),訓(xùn)練隱藏層超過(guò) 2 層的神經(jīng)網(wǎng)絡(luò)可是個(gè)苦累活:反向傳播不是一拿出來(lái)就好用,因此他們的做法是使用無(wú)監(jiān)督的逐層預(yù)訓(xùn)練來(lái)尋找一個(gè)能夠讓反向傳播成為可能的優(yōu)良初始化?,F(xiàn)如今,即使有數(shù)百隱藏層,也不再是阻礙。因此,不難想象未來(lái)幾年之后,使用反向傳播訓(xùn)練數(shù)萬(wàn)層的神經(jīng)網(wǎng)絡(luò)也有可能實(shí)現(xiàn)。到那時(shí),擴(kuò)散模型提供的「分而治之」的方法可能會(huì)失去光彩,也許我們都會(huì)回頭去訓(xùn)練深度變分自動(dòng)編碼器!(注意,同樣的「分而治之」視角也適用于自回歸模型,因此如果未來(lái)果真如此,那么自回歸模型也可能會(huì)過(guò)時(shí)。)
這一視角下的一個(gè)問(wèn)題是:如果我們反向傳播通過(guò)采樣過(guò)程兩步或更多步,擴(kuò)散模型的表現(xiàn)是否會(huì)更好。這種方法并不常見(jiàn),這可能說(shuō)明這種方法實(shí)際做起來(lái)成本很高。不過(guò)也有一個(gè)重要的例外(一定程度上的例外),循環(huán)接口網(wǎng)絡(luò)(RIN)等使用自調(diào)節(jié)(self-conditioning)的模型除了會(huì)在擴(kuò)散采樣步驟之間傳遞更新的畫(huà)布之外,還會(huì)傳遞某種形式的狀態(tài)。要讓模型學(xué)會(huì)使用這個(gè)狀態(tài),可以在訓(xùn)練期間通過(guò)運(yùn)行額外的前向傳遞來(lái)提供該狀態(tài)的近似值。不過(guò),這里不會(huì)有額外的向后傳遞,所以這實(shí)際上不算是兩步 BPTT—— 更像是 1.5 步。
擴(kuò)散模型是自回歸模型
對(duì)于自然圖像的擴(kuò)散模型,采樣過(guò)程往往會(huì)首先產(chǎn)生大尺度的結(jié)構(gòu),然后迭代地添加越來(lái)越細(xì)粒的細(xì)節(jié)。事實(shí)上,噪聲水平與特征尺度之間似乎有近乎直接的對(duì)應(yīng)關(guān)系。
但為什么會(huì)這樣呢?為了理解這一點(diǎn),從空間頻率的角度思考會(huì)有所幫助。圖像中的大尺度特征對(duì)應(yīng)于低空間頻率,而細(xì)粒度細(xì)節(jié)對(duì)應(yīng)于高頻率。我們可以使用 2D 傅立葉變換(或其某種變體)將圖像分解為其空間頻率分量。這通常是圖像壓縮算法的第一步,因?yàn)楸娝苤祟?lèi)視覺(jué)系統(tǒng)對(duì)高頻不太敏感,壓縮時(shí)可以利用這一點(diǎn),即更多地壓縮高頻,更少地壓縮低頻。
8x8 離散余弦變換(比如 JPEG 壓縮方法就使用了它)的空間頻率分量的可視化
自然圖像以及許多其它自然信號(hào)的頻域會(huì)表現(xiàn)出一個(gè)有趣的現(xiàn)象:不同頻率分量的幅度往往與頻率的倒數(shù)成比例下降:(如果你看的是功率譜而不是幅度譜,那么就是頻率平方的倒數(shù))。
另一方面,高斯噪聲的譜形很平坦:在期望中,所以頻率的幅度一樣。由于傅里葉變換是線(xiàn)性運(yùn)算,因此向自然圖像添加高斯噪聲會(huì)產(chǎn)生新圖像,其頻譜是原始圖像的頻譜與噪聲的平坦頻譜之和。在對(duì)數(shù)域中,兩個(gè)光譜的疊加看起來(lái)像一個(gè)鉸鏈,它表明添加噪聲會(huì)以某種方式模糊更高空間頻率中存在的任何結(jié)構(gòu)(見(jiàn)下圖)。這個(gè)噪聲的標(biāo)準(zhǔn)差越大,受影響的空間頻率就越多。
自然圖像、高斯噪聲和有噪聲圖像的幅度譜
由于擴(kuò)散模型的構(gòu)建方式是逐漸向輸入樣本添加更多噪聲,我們可以說(shuō)這個(gè)過(guò)程會(huì)逐漸淹沒(méi)越來(lái)越低頻的內(nèi)容,直到清除所有結(jié)構(gòu)(至少對(duì)自然圖像來(lái)說(shuō)是這樣的)。當(dāng)從模型采樣時(shí),就調(diào)轉(zhuǎn)方向,在越來(lái)越高的空間頻率上有效地添加結(jié)構(gòu)。這基本上就和自回歸一樣,卻是在頻率空間!Rissanen et al. (2023) 討論了他們?cè)谑褂媚嫦蛏幔╥nverse heat dissipation,這是高斯擴(kuò)散的一種替代方法)的生成式建模方面觀(guān)察到這一現(xiàn)象,但他們并未將其與自回歸模型聯(lián)系起來(lái)。這種聯(lián)系是本文作者自己提出的,可能會(huì)具有爭(zhēng)議。
一個(gè)重要的警告是:這種解釋依賴(lài)于自然信號(hào)的頻率特征,因此對(duì)于擴(kuò)散模型在其它領(lǐng)域的應(yīng)用(如語(yǔ)言建模),這種類(lèi)比可能沒(méi)有意義。
擴(kuò)散模型估計(jì)的是期望
轉(zhuǎn)移密度(transition density) p (x_t∣x_0) 描述的是:基于原始的干凈輸入 x_0,其衍生(通過(guò)添加噪聲)出的有噪聲數(shù)據(jù)示例 x_t 在時(shí)間 t 的分布。擴(kuò)散模型中神經(jīng)網(wǎng)絡(luò)的任務(wù)是基于這一分布的樣本預(yù)測(cè)其期望 E [x_0∣x_t](或期望的某個(gè)線(xiàn)性的時(shí)間依賴(lài)型函數(shù))。這可能看起來(lái)再明顯不過(guò),但這也能說(shuō)明一些東西,這里強(qiáng)調(diào)一下。
首先,這提供了一個(gè)佐證,說(shuō)明訓(xùn)練擴(kuò)散模型時(shí)使用均方誤差(MSE)作為損失函數(shù)是正確的選擇。在訓(xùn)練期間,期望 E [x_0∣x_t] 是未知的,所以我們使用 x_0 本身來(lái)監(jiān)督模型。因?yàn)?MSE 損失的最小值正是期望值,所以我們最終可以恢復(fù) E [x_0∣x_t](的近似值),即使我們事先不知道這個(gè)量。這和典型的監(jiān)督學(xué)習(xí)問(wèn)題有些不同。對(duì)于典型的監(jiān)督學(xué)習(xí)問(wèn)題,理想的結(jié)果是模型能準(zhǔn)確預(yù)測(cè)出用于監(jiān)督的目標(biāo)(排除任何標(biāo)注錯(cuò)誤)。這里,我們故意不希望這樣。更一般而言,估計(jì)條件期望的概念(即便我們只是通過(guò)樣本提供監(jiān)督)是非常強(qiáng)大的。
其實(shí),這解釋了為什么擴(kuò)散模型的蒸餾是一個(gè)如此引人注目的命題:在這種情況下,我們可以直接使用我們希望預(yù)測(cè)的目標(biāo)期望 E [x_0∣x_t] 的近似值來(lái)監(jiān)督擴(kuò)散模型,因?yàn)榻處熌P鸵呀?jīng)提供了這一點(diǎn)。由此導(dǎo)致的結(jié)果是,其訓(xùn)練損失的方差將遠(yuǎn)遠(yuǎn)低于從頭開(kāi)始訓(xùn)練時(shí)的情況,收斂速度也會(huì)快得多。當(dāng)然,只有當(dāng)你手上已經(jīng)有一個(gè)已訓(xùn)練好的模型可用作教師時(shí),這才會(huì)有用。
離散和連續(xù)的擴(kuò)散模型
到目前為止,我們已經(jīng)從幾個(gè)視角考慮了一些離散噪聲水平的情況,也有幾個(gè)視角使用了連續(xù)時(shí)間概念,其與映射函數(shù) σ(t) 相組合,可將時(shí)間步驟映射到噪聲中對(duì)應(yīng)的標(biāo)準(zhǔn)差。這些通常分別被稱(chēng)為離散時(shí)間或連續(xù)時(shí)間。一件非常巧妙的事情是:這主要就是一個(gè)如何解釋的問(wèn)題:在離散時(shí)間視角下訓(xùn)練的模型通??梢院苋菀椎刂匦抡{(diào)整用途,以在連續(xù)時(shí)間設(shè)置中生效,反之亦然。
看擴(kuò)散模型是離散還是連續(xù)的另一種方式是看輸入空間。作者發(fā)現(xiàn),文獻(xiàn)中常常不會(huì)清楚說(shuō)明「連續(xù)」或「離散」是相對(duì)于時(shí)間還是相對(duì)于輸入。這非常重要,因?yàn)槟承┮暯莾H對(duì)連續(xù)輸入才真正有意義,因?yàn)樗鼈円蕾?lài)于輸入的梯度(即基于分?jǐn)?shù)函數(shù)的所有視角)。
離散性 / 連續(xù)性存在四種組合方式:
- 時(shí)間離散,輸入連續(xù):原始的深度隱變量模型視角(DDPM)以及基于分?jǐn)?shù)的視角;
- 時(shí)間連續(xù),輸入連續(xù):基于 SDE 和 ODE 的視角;
- 時(shí)間離散,輸入離散:D3PM、MaskGIT、Mask-predict、ARDM、多項(xiàng)式擴(kuò)散和 SUNDAE 都是對(duì)離散輸入使用迭代式精細(xì)化的方法 —— 是否所有這些都應(yīng)該被視為擴(kuò)散模型尚不完全清楚(這取決于你提問(wèn)的對(duì)象);
- 時(shí)間連續(xù),輸入離散:連續(xù)時(shí)間馬爾可夫鏈(CTMC)、基于分?jǐn)?shù)的連續(xù)時(shí)間離散擴(kuò)散模型和 Blackout Diffusion 都是搭配了離散輸入和連續(xù)時(shí)間 —— 這一設(shè)置通常的處理方式是將離散數(shù)據(jù)嵌入到歐幾里得空間中,然后在該空間中對(duì)輸入執(zhí)行連續(xù)的擴(kuò)散,例如 Analog Bits、Self-conditioned Embedding Diffusion 和 CDCD。
其它形式
最近有些論文基于第一性原理為這類(lèi)模型提出了新的推導(dǎo)方式,由于已有后見(jiàn)之明,所以它們完全避開(kāi)了微分方程、ELBO 或分?jǐn)?shù)匹配。然而,這些研究為擴(kuò)散模型提供了另一種視角,這可能更容易理解,因?yàn)樗璧谋尘爸R(shí)更少。
通過(guò)直接迭代進(jìn)行反演(InDI/Inversion by Direct Iteration)這種形式根植于圖像恢復(fù),其目的是利用迭代式精細(xì)化來(lái)提升感知質(zhì)量。其沒(méi)有對(duì)圖像劣化的本質(zhì)做任何假設(shè),并且模型的訓(xùn)練使用的是配對(duì)的低質(zhì)量和高質(zhì)量樣本。Iterative α-(de) blending 通過(guò)在來(lái)自?xún)蓚€(gè)不同分布的樣本之間進(jìn)行線(xiàn)性插值作為起點(diǎn),來(lái)得到這兩個(gè)分布之間的確定性映射。這兩種方法都與之前討論的流匹配、修正流和隨機(jī)插值方法緊密相關(guān)。
一致性
近期的文獻(xiàn)對(duì)擴(kuò)散模型的一致性(consistency)有著不同的概念。
- 一致性模型(CM)被訓(xùn)練用于將概率流 ODE 的任何軌跡上的點(diǎn)映射到軌跡的原點(diǎn)(即干凈的數(shù)據(jù)點(diǎn)),從而實(shí)現(xiàn)在單一步驟中完成采樣。其完成方式是間接的,即通過(guò)在特定軌跡上獲取成對(duì)的點(diǎn)并確保模型對(duì)于兩者的輸出結(jié)果一樣(因此有一致性)。其有一個(gè)蒸餾式的變體,它是從已有的擴(kuò)散模型開(kāi)始的,但也可能從頭開(kāi)始訓(xùn)練出一致性模型。
- 一致擴(kuò)散模型(CDM)的訓(xùn)練使用了明確鼓勵(lì)一致性的正則化項(xiàng),其將一致性定義為:去噪器的預(yù)測(cè)結(jié)果應(yīng)當(dāng)對(duì)應(yīng)于條件期望 E [x_0∣x_t]。
- FP-Diffusion 的任務(wù)是讓???- 普朗克方程描述 p_t (x) 隨時(shí)間的演變,其中引入了一個(gè)顯式的正則化項(xiàng)以確保其成立。
對(duì)理想的擴(kuò)散模型(完全收斂又能力無(wú)限)而言,這些屬性中的每一個(gè)都很容易實(shí)現(xiàn)。但是,現(xiàn)實(shí)中的擴(kuò)散模型都是近似模型,并不是理想模型,所以它們?cè)趯?shí)踐中并不成立,所以需要通過(guò)新增機(jī)制來(lái)顯式地施行它們。
本文之所以有這一節(jié),是因?yàn)樽髡呦胫攸c(diǎn)說(shuō)明近期的一篇論文《On the Equivalence of Consistency-Type Models: Consistency Models, Consistent Diffusion Models, and Fokker-Planck Regularization》,來(lái)自 Lai et al. (2023),其中表明這三種不同的一致性概念本質(zhì)上是不同視角下的同一東西。作者表示這個(gè)結(jié)果很優(yōu)雅,非常契合本文的主題。
打破常規(guī)
除了這些在概念層面上的不同視角,作者表示,擴(kuò)散模型方面的論文也在重新發(fā)明符號(hào)和違反慣例方面特別令人擔(dān)憂(yōu)。有時(shí)候,對(duì)于同一概念,人們使用的兩套描述看起來(lái)簡(jiǎn)直像是一點(diǎn)關(guān)系都沒(méi)有。這無(wú)益于人們理解和學(xué)習(xí),提高了進(jìn)入門(mén)檻。(對(duì)此我很抱歉。)
還有一些其它看似無(wú)害的細(xì)節(jié)和參數(shù)化選擇也可能產(chǎn)生深遠(yuǎn)影響。以下是需要注意的三點(diǎn):
- 總的來(lái)說(shuō),人們使用的是方差保持(VP/variance-preserving)擴(kuò)散過(guò)程,即除了在每一步添加噪聲,當(dāng)前畫(huà)布的尺寸也會(huì)得到調(diào)整以保持整體的方差。不過(guò),方差爆炸(VE/variance-exploding)方法也有不少擁躉,其中不會(huì)調(diào)整畫(huà)布尺寸,所添加的噪聲的方差會(huì)無(wú)限增大。最值得注意的是 Karras et al. (2022) 使用的方法。某些對(duì)于 VP 擴(kuò)散方法成立的結(jié)果對(duì) VE 擴(kuò)散就不一定成立,反之亦然;并且這一點(diǎn)可能不會(huì)被明確提及。如果你在讀一篇擴(kuò)散論文,要確保你知道所使用的構(gòu)建方法,以及論文中是否做了有關(guān)于其的假設(shè)。
- 有時(shí)擴(kuò)散模型中使用的神經(jīng)網(wǎng)絡(luò)的參數(shù)被設(shè)計(jì)成為了預(yù)測(cè)添加到輸入中的(標(biāo)準(zhǔn)化)噪聲,即分?jǐn)?shù)函數(shù),有時(shí)則是為了預(yù)測(cè)干凈的輸入或甚至這兩者的時(shí)間依賴(lài)型組合(如 v-prediction)。所有這些目標(biāo)都是等效的,因?yàn)樗鼈兌际潜舜撕陀性肼曒斎?x_t 的時(shí)間依賴(lài)型線(xiàn)性函數(shù)。但重要的是,要了解其與訓(xùn)練期間不同時(shí)間步驟的損失貢獻(xiàn)的相對(duì)權(quán)重的作用方式,這會(huì)極大影響模型的性能表現(xiàn)。對(duì)于圖像數(shù)據(jù)而言,預(yù)測(cè)標(biāo)準(zhǔn)化噪聲似乎是個(gè)絕佳選擇。人們發(fā)現(xiàn),當(dāng)建模其它某些量(如隱含擴(kuò)散中的隱含量)時(shí),預(yù)測(cè)干凈輸入的效果更好。這主要是因?yàn)樗岛藢?duì)噪聲水平的不同加權(quán),因此特征尺度也就不同。
- 人們普遍認(rèn)為,損傷過(guò)程所添加的噪聲的標(biāo)準(zhǔn)偏差會(huì)隨時(shí)間而增加,即熵會(huì)隨時(shí)間增加,就像我們的宇宙。因此,x_0 對(duì)應(yīng)于干凈數(shù)據(jù),x_T(當(dāng) T 足夠大時(shí))對(duì)應(yīng)于純?cè)肼暋A髌ヅ涞纫恍┭芯款嵉沽诉@種慣例,如果你一開(kāi)始沒(méi)注意到,可能會(huì)深感困惑。
最后,值得注意的是,在生成式建模的語(yǔ)境下,「擴(kuò)散」的定義范圍已經(jīng)變得相當(dāng)廣泛,現(xiàn)在幾乎就等同于「迭代式精細(xì)化」。許多用于離散輸入的「擴(kuò)散模型」實(shí)際上并不基于擴(kuò)散過(guò)程,但是它們當(dāng)然是緊密相關(guān)的,因此擴(kuò)散這一標(biāo)簽的范圍會(huì)逐漸擴(kuò)大并將它們囊括進(jìn)來(lái)。界線(xiàn)在哪目前尚未可知:如果通過(guò)逆向逐漸損傷的過(guò)程而實(shí)現(xiàn)迭代式精細(xì)化的任何模型都算是擴(kuò)散模型,那么所有自回歸模型也算是擴(kuò)散模型。作者認(rèn)為,這樣就太混淆了,會(huì)讓「擴(kuò)散」這個(gè)術(shù)語(yǔ)變得毫無(wú)用處。
結(jié)語(yǔ)
目前,學(xué)習(xí)有關(guān)擴(kuò)散模型的知識(shí)肯定很讓人困惑,但對(duì)這些不同視角的探索已經(jīng)催生出了廣泛多樣的方法和工具,這些方法可以組合起來(lái)使用,畢竟其底層模型都是一樣的。另外,了解這些不同視角的相關(guān)性還能加深理解。在一個(gè)視角下看起來(lái)神秘難解的東西在另一個(gè)視角看來(lái)可能就很明晰。
如果你才剛開(kāi)始學(xué)習(xí)擴(kuò)散模型,希望這篇文章能為你提供引導(dǎo),幫助你找到更進(jìn)一步的學(xué)習(xí)材料。如果你已經(jīng)經(jīng)驗(yàn)豐富,也希望這篇文章能拓寬你對(duì)擴(kuò)散模型的理解,讓你溫故而知新。感謝閱讀!
對(duì)于擴(kuò)散,你最喜歡的視角是哪一個(gè)?文中還沒(méi)提到哪些有用的視角?請(qǐng)與我們分享你的看法。