到生成模型:Score-based Model 原理、訓(xùn)練與調(diào)參實(shí)戰(zhàn))
最近幾年生成模型的研究基本被擴(kuò)散模型和 Score-based Model 這兩條線霸屏了。如果你翻過(guò)一些頂會(huì)論文會(huì)發(fā)現(xiàn)大量工作都掛著一個(gè)叫“Score”的詞從圖像生成到分子構(gòu)象采樣再到科學(xué)計(jì)算里的反問(wèn)題求解到處都能看到它的影子。很多人第一次接觸這個(gè)概念時(shí)容易被“得分”這個(gè)翻譯帶偏以為是個(gè)打分機(jī)制其實(shí)它和“打分”沒(méi)有半點(diǎn)關(guān)系。Score-based Model 指的是對(duì)數(shù)據(jù)分布的對(duì)數(shù)密度梯度進(jìn)行建模換句話說(shuō)模型不直接學(xué)習(xí)分布本身而是學(xué)習(xí)分布指向高概率區(qū)域的“方向場(chǎng)”。這個(gè)思路繞開(kāi)了概率密度歸一化難題讓生成這件事變得異常優(yōu)雅。這篇內(nèi)容適合誰(shuí)看如果你已經(jīng)在用擴(kuò)散模型做生成任務(wù)但對(duì)其中的數(shù)學(xué)原理還停留在“去噪”這種直觀理解層面想真正搞懂 Score-based Model 為什么能工作、采樣時(shí)那些參數(shù)為什么這樣設(shè)置那你來(lái)對(duì)地方了。如果你是剛?cè)腴T(mén)生成模型的研究生或工程師想知道除了擴(kuò)散模型之外還有沒(méi)有其他等價(jià)視角這篇也能幫你把兩套框架打通。文章會(huì)從原理逐步拆到實(shí)操細(xì)節(jié)再到訓(xùn)練時(shí)踩過(guò)的坑和調(diào)參經(jīng)驗(yàn)全程用大白話遇到數(shù)學(xué)盡量用直覺(jué)解釋清楚。1. 為什么要把分布的學(xué)習(xí)轉(zhuǎn)成“得分”的學(xué)習(xí)1.1 從歸一化難題說(shuō)起任何一個(gè)概率模型的核心任務(wù)都是刻畫(huà)數(shù)據(jù)分布 p(x)。最直接的做法是把這個(gè)密度函數(shù)顯式寫(xiě)出來(lái)比如高斯混合模型就是一堆高斯分布的加權(quán)和。但現(xiàn)實(shí)數(shù)據(jù)往往是高維空間里極其復(fù)雜的流形比如一張 256x256 的彩色圖像其本質(zhì)是 196608 維空間里的一個(gè)低維流形。直接估計(jì)這個(gè)密度函數(shù)的解析形式幾乎不可能因?yàn)槊芏群瘮?shù)必須滿足兩個(gè)條件處處非負(fù)且在整個(gè)空間上積分等于 1。第二個(gè)條件也就是歸一化約束是所有顯式概率模型最頭疼的事??紤]一個(gè)常見(jiàn)的能量模型形式p(x) exp(-E(x)) / Z其中 Z 是配分函數(shù)也就是 exp(-E(x)) 在全空間的積分。在高維空間里這個(gè)積分沒(méi)有解析解數(shù)值積分也會(huì)隨著維度增加指數(shù)級(jí)崩潰。于是 Score-based Model 換了一個(gè)思路我不估計(jì) p(x)我估計(jì) ?x log p(x)。這個(gè)量叫得分函數(shù)Score Function。關(guān)鍵的一點(diǎn)是求導(dǎo)操作自動(dòng)消掉了歸一化常數(shù) Z因?yàn)?Z 對(duì) x 的導(dǎo)數(shù)是零。用直覺(jué)理解就是歸一化常數(shù)只負(fù)責(zé)把整個(gè)分布“壓”到積分面積為 1它不改變分布形狀的“走向”所以求梯度時(shí)它就自動(dòng)消失了。這個(gè)思路等價(jià)于你不需要知道一座山每個(gè)點(diǎn)的絕對(duì)海拔密度值只需要知道每個(gè)點(diǎn)往哪個(gè)方向走是上坡以及坡有多陡。而爬山路線完全由梯度決定海拔絕對(duì)值不影響你到達(dá)山頂。1.2 得分函數(shù)到底長(zhǎng)什么樣直觀一點(diǎn)想如果數(shù)據(jù)點(diǎn)集中在一個(gè)區(qū)域的中心得分函數(shù)就是這個(gè)區(qū)域邊緣指向中心的箭頭場(chǎng)。如果數(shù)據(jù)分布有幾個(gè)簇得分函數(shù)就會(huì)在每個(gè)簇周?chē)纬梢粋€(gè)“指向簇心”的向量場(chǎng)而簇與簇之間的鞍點(diǎn)處向量會(huì)趨于零。訓(xùn)練 Score-based Model就是訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò) sθ(x)讓它逼近真實(shí)的得分函數(shù) ?x log p(x)。有了得分函數(shù)生成新樣本的過(guò)程就變成了 Langevin 動(dòng)力學(xué)采樣。這個(gè)采樣方法本質(zhì)上是帶噪的梯度上升每次沿得分方向走一小步同時(shí)加入一點(diǎn)高斯噪聲防止模型收斂到同一個(gè)點(diǎn)。迭代若干步之后初始的隨機(jī)噪聲點(diǎn)就會(huì)被“搬運(yùn)”到數(shù)據(jù)分布的高概率區(qū)域也就是生成出逼真樣本。整個(gè)生成過(guò)程沒(méi)有顯式密度計(jì)算沒(méi)有歸一化常數(shù)所有困難一步到位繞開(kāi)了。1.3 與擴(kuò)散模型的關(guān)系澄清經(jīng)常會(huì)有人問(wèn)Score-based Model 和擴(kuò)散模型到底是不是一回事答案是是同一類(lèi)方法的不同視角。擴(kuò)散模型的前向過(guò)程是逐步加噪把數(shù)據(jù)破壞成純?cè)肼暦聪蜻^(guò)程學(xué)習(xí)的是“去噪”從純?cè)肼曋鸩竭€原出數(shù)據(jù)。Score-based Model 則直接定義了一個(gè)隨機(jī)微分方程SDE前向過(guò)程把數(shù)據(jù)分布逐漸變成噪聲分布反向過(guò)程則依賴得分函數(shù)來(lái)逆轉(zhuǎn)這個(gè)過(guò)程。DDPM、DDIM、Score SDE 這些算法都能統(tǒng)一在同一個(gè) SDE 框架下。用大白話解釋擴(kuò)散模型是從“圖像被噪聲毀掉”的角度學(xué)怎么修復(fù)Score-based Model 是從“知道每個(gè)像素怎么調(diào)整更像真實(shí)數(shù)據(jù)”的角度去生成。兩套視角描述的是同一個(gè)物理過(guò)程只是解釋起來(lái)一個(gè)像視頻倒放一個(gè)像地圖導(dǎo)航。2. 核心技術(shù)拆解從得分匹配到 SDE 統(tǒng)一框架2.1 訓(xùn)練目標(biāo)為什么不能直接用 L2 距離你可能會(huì)想既然要逼近真實(shí)的得分函數(shù)那我直接用均方誤差讓 sθ(x) 去擬合 ?x log p(x) 不就行了理論上沒(méi)問(wèn)題但實(shí)操中會(huì)撞上一堵墻真實(shí)得分函數(shù)我們根本不知道。我們手里只有一堆樣本數(shù)據(jù)p(x) 本身是未知的。這就陷入“沒(méi)有參考答案怎么對(duì)答案”的困境。于是有了 Score Matching 這一系列方法。它巧妙的地方在于可以把這個(gè)未知目標(biāo)轉(zhuǎn)成一個(gè)只依賴樣本的優(yōu)化目標(biāo)。核心思想是通過(guò)分部積分把目標(biāo)函數(shù)里的未知項(xiàng)換掉最終得到的形式只包括模型輸出對(duì)輸入的雅可比矩陣的跡以及模型本身。這個(gè)目標(biāo)不需要知道真實(shí) p(x)只需要對(duì)訓(xùn)練樣本做前向傳播就可以計(jì)算。其中一種最常用的變體是 Denoising Score MatchingDSM。它的做法更直觀給數(shù)據(jù)點(diǎn)加上高斯噪聲得到擾動(dòng)后的樣本然后訓(xùn)練模型去預(yù)測(cè)這個(gè)噪聲。等等這不就是擴(kuò)散模型的噪聲預(yù)測(cè)目標(biāo)嗎對(duì)完全一樣。這也從目標(biāo)函數(shù)層面印證了兩個(gè)框架殊途同歸。2.2 單一噪聲尺度為什么搞不定早期 Score-based Model 最簡(jiǎn)單的版本就是訓(xùn)練一個(gè)模型去匹配某個(gè)固定噪聲水平下的得分函數(shù)。但實(shí)際跑起來(lái)會(huì)發(fā)現(xiàn)效果很差。原因在高維空間里數(shù)據(jù)流形只占據(jù)極小的體積噪聲稍微小一點(diǎn)采樣點(diǎn)落在流形附近的概率極低得分函數(shù)在那里幾乎沒(méi)有信號(hào)噪聲稍微大一點(diǎn)數(shù)據(jù)細(xì)節(jié)全被抹掉了生成的樣本模糊不清。單一噪聲尺度就像用一把固定焦距的鏡頭拍微距對(duì)不上焦。所以后來(lái)的方法都采用多尺度噪聲策略訓(xùn)練一個(gè)網(wǎng)絡(luò)同時(shí)接受噪聲尺度作為條件輸入。低噪聲水平負(fù)責(zé)捕捉細(xì)節(jié)紋理高噪聲水平負(fù)責(zé)把握整體結(jié)構(gòu)。采樣時(shí)從大噪聲開(kāi)始逐步退火到小噪聲這個(gè)過(guò)程本質(zhì)上和擴(kuò)散模型的“從純?cè)肼曋鸩饺ピ搿蓖耆珜?duì)應(yīng)。梯度場(chǎng)從“粗略的輪廓指引”逐步細(xì)化到“精確的細(xì)節(jié)修正”生成質(zhì)量有了質(zhì)的飛躍。2.3 SDE 框架把幾套方法統(tǒng)一了我真正覺(jué)得 Score-based Model 體系漂亮的點(diǎn)是它的 SDE 統(tǒng)一視角。論文里的核心結(jié)論可以概括成這樣前向過(guò)程可以用一個(gè)隨機(jī)微分方程來(lái)描述dx f(x, t)dt g(t)dw其中 f 是漂移項(xiàng)g 是擴(kuò)散系數(shù)dw 是維納過(guò)程的增量。這個(gè) SDE 的作用是把復(fù)雜的數(shù)據(jù)分布 p_data(x) 隨時(shí)間演化成一個(gè)簡(jiǎn)單的先驗(yàn)分布 p_prior(x)。而神奇的是任何 SDE 都存在一個(gè)對(duì)應(yīng)的反向 SDE反向過(guò)程同樣可以用 SDE 表示但里面的未知項(xiàng)恰好就是得分函數(shù) ?x log p_t(x)。這意味著什么意味著只要你學(xué)會(huì)了所有時(shí)間點(diǎn)上的得分函數(shù)就能從先驗(yàn)分布開(kāi)始一步步逆向演化回到數(shù)據(jù)分布。不同論文之間的區(qū)別只是 f 和 g 的取法不同。取特定的 f 和 g退出來(lái)就是 DDPM 的離散加噪過(guò)程取另一種形式就是連續(xù)時(shí)間擴(kuò)散模型再換一種就是經(jīng)典的郎之萬(wàn)動(dòng)力學(xué)采樣方式。這種統(tǒng)一視角不僅讓理論更優(yōu)雅還帶來(lái)一個(gè)實(shí)際好處可以借用 SDE 求解器的各種數(shù)值技巧來(lái)加速采樣比如后來(lái)很火的 SDE 快速求解器本質(zhì)就是高階數(shù)值解法。2.4 概率流 ODE一條確定性的生成捷徑除了反向 SDE這個(gè)框架還推出了一個(gè)確定性過(guò)程叫 Probability Flow ODE。直覺(jué)解釋是SDE 的反向過(guò)程中除了一個(gè)確定性的漂移項(xiàng)還有一個(gè)隨機(jī)噪聲項(xiàng)把樣本往不同方向推。如果你把隨機(jī)噪聲項(xiàng)去掉只保留確定性部分得到的 ODE 軌跡仍然能把先驗(yàn)分布映射回?cái)?shù)據(jù)分布只是每條軌跡是確定性的。好處是采樣時(shí)可以大步長(zhǎng)跳躍不用像 SDE 那樣小心翼翼小步走。這個(gè) ODE 還帶來(lái)了額外紅利因?yàn)樗_定了從噪聲到數(shù)據(jù)的可逆映射可以在潛在空間做插值、編輯比如在兩張圖的隱變量之間做線性插值生成過(guò)渡幀。這為生成模型做語(yǔ)義編輯和控制打開(kāi)了大門(mén)。3. 實(shí)操過(guò)程自己訓(xùn)練一個(gè) Score-based Model3.1 環(huán)境與數(shù)據(jù)準(zhǔn)備動(dòng)手實(shí)踐時(shí)不需要太夸張的硬件我自己的經(jīng)驗(yàn)是單張 24GB 顯存的顯卡足夠跑通 CIFAR-10 級(jí)別的實(shí)驗(yàn)如果你只有 12GB 顯存把 batch size 調(diào)小、模型寬度減少一些也能跑只是效果差點(diǎn)。代碼框架建議直接用 PyTorch生態(tài)成熟調(diào)試方便。數(shù)據(jù)集先用簡(jiǎn)單的MNIST 或 CIFAR-10 都是好選擇。MNIST 分辨率低、結(jié)構(gòu)簡(jiǎn)單能快速驗(yàn)證 pipeline 是否正確CIFAR-10 的彩色圖像和復(fù)雜紋理能檢驗(yàn)?zāi)P褪欠裾娴膶W(xué)到了分布結(jié)構(gòu)。我建議首次實(shí)驗(yàn)用 CIFAR-10因?yàn)?MNIST 太簡(jiǎn)單指標(biāo)好看但掩蓋了實(shí)現(xiàn)細(xì)節(jié)問(wèn)題容易讓你誤以為代碼寫(xiě)對(duì)了。模型結(jié)構(gòu)推薦 U-Net這和擴(kuò)散模型社區(qū)的經(jīng)驗(yàn)一致。U-Net 的編碼器-解碼器結(jié)構(gòu)配合跳躍連接能在不同尺度上同時(shí)捕捉全局結(jié)構(gòu)和局部紋理。關(guān)鍵是要把噪聲尺度 t 作為條件輸入到網(wǎng)絡(luò)中常見(jiàn)做法是做正弦位置編碼后加到每個(gè)殘差塊上。3.2 損失函數(shù)與訓(xùn)練循環(huán)的關(guān)鍵代碼訓(xùn)練目標(biāo)用 Denoising Score Matching 的變體。給定數(shù)據(jù)點(diǎn) x隨機(jī)采樣一個(gè)噪聲尺度 σ加噪得到 x? x σ·ε其中 ε 是標(biāo)準(zhǔn)高斯噪聲。模型的輸出用于預(yù)測(cè) ε 或者等價(jià)地預(yù)測(cè)得分損失函數(shù)如下L(θ) E[ λ(σ) · || sθ(x?, σ) - (-ε/σ) ||2 ]這里 sθ 的監(jiān)督目標(biāo)是 -ε/σ也就是真實(shí)得分的蒙特卡洛近似。為什么該目標(biāo)有效因?yàn)?x? 的條件分布是已知的高斯分布它的得分函數(shù)有閉式解就是 -ε/σ不需要知道 p(x) 就能構(gòu)造監(jiān)督信號(hào)。權(quán)重 λ(σ) 常見(jiàn)取 σ2用來(lái)平衡不同噪聲尺度下?lián)p失的尺度差異。實(shí)際代碼里有個(gè)容易踩的坑如果沒(méi)有做損失加權(quán)高噪聲尺度的損失天然就大模型會(huì)偏向優(yōu)化這些大尺度而忽略細(xì)節(jié)。加上 σ2 加權(quán)后相當(dāng)于給低噪聲尺度更大的相對(duì)權(quán)重能明顯改善生成紋理的銳利度。訓(xùn)練循環(huán)本身并不復(fù)雜前向傳播得到預(yù)測(cè)噪聲計(jì)算加權(quán) MSE反向傳播更新參數(shù)。但要注意不要把噪聲采樣和加噪寫(xiě)進(jìn) DataLoader 的預(yù)處理里而是在每次迭代時(shí)隨機(jī)采樣。這樣每個(gè) epoch 中同一個(gè)圖像會(huì)被不同強(qiáng)度的噪聲擾動(dòng)數(shù)據(jù)增強(qiáng)效果等于無(wú)限倍模型泛化性會(huì)好很多。3.3 采樣過(guò)程參數(shù)怎么設(shè)訓(xùn)練完成后采樣最經(jīng)典的方式是 annealed Langevin dynamics。每次迭代分兩步先沿得分方向更新再加噪聲隨機(jī)擾動(dòng)x_{i1} x_i α · sθ(x_i, σ_i) √(2α) · z_i其中 α 是步長(zhǎng)z_i 是標(biāo)準(zhǔn)高斯噪聲。步長(zhǎng)與噪聲尺度的平方成正比因?yàn)榇笤肼曀较碌梅謭?chǎng)的尺度大步子要相應(yīng)變大。整個(gè)采樣過(guò)程從最大的噪聲尺度出發(fā)逐步減小噪聲每一輪噪聲尺度下迭代若干步。關(guān)鍵參數(shù)有三組。第一是噪聲尺度序列的長(zhǎng)度常用等差或者幾何序列長(zhǎng)度從 10 到上百都有。第二是每個(gè)尺度下的迭代步數(shù)一般 50 到 100 步足夠多了邊際收益很小。第三是初始噪聲尺度必須大到能把數(shù)據(jù)完全淹沒(méi)否則采樣鏈永遠(yuǎn)無(wú)法從噪聲區(qū)“登陸”到數(shù)據(jù)流形上。如果你生成出來(lái)的圖片全是模糊一片沒(méi)有結(jié)構(gòu)多半是初始噪聲不夠大或步數(shù)太少。如果你生成的圖有形狀但細(xì)節(jié)很臟通常是低噪聲尺度迭代不足或者模型對(duì)低頻噪聲擬合還不夠精細(xì)。這些都需要反復(fù)調(diào)參沒(méi)有萬(wàn)能公式但上面的排查方向基本能覆蓋 90% 的問(wèn)題。3.4 采樣加速的實(shí)用技巧SDE 采樣器雖然穩(wěn)定但速度確實(shí)慢需要的步數(shù)多。實(shí)際使用中有幾個(gè)提升效率的手段。第一是換成 DDIM 式的確定性采樣器步數(shù)能直接從幾百降到 50 甚至更少代價(jià)是多樣性略微下降。第二是使用高階 SDE 求解器比如基于指數(shù)積分器的方法能在同樣的步數(shù)下獲得更小的離散化誤差細(xì)節(jié)保留更好。第三種技巧和模型本身配合蒸餾。用訓(xùn)練好的教師模型生成一批高質(zhì)量的噪聲-數(shù)據(jù)對(duì)再用學(xué)生模型直接學(xué)習(xí)從大噪聲到小噪聲的跳躍映射一步完成原來(lái)幾十步做的事情。這個(gè)方案在減少生成成本上成效顯著許多生產(chǎn)環(huán)境部署用的就是這個(gè)思路。4. 訓(xùn)練中的常見(jiàn)問(wèn)題與排查心得4.1 損失曲線看著很漂亮但生成效果差這是我見(jiàn)過(guò)最多的一個(gè)坑。訓(xùn)練損失一路下降但采樣出來(lái)的圖像像打了馬賽克甚至完全是噪聲。問(wèn)題通常出在“訓(xùn)練和采樣之間的噪聲尺度分布錯(cuò)配”。訓(xùn)練時(shí)模型見(jiàn)過(guò)的噪聲分布比較寬但采樣時(shí)你給的初始噪聲超出了訓(xùn)練覆蓋范圍模型對(duì)沒(méi)見(jiàn)過(guò)的噪聲水平只能瞎猜。解決辦法檢查你訓(xùn)練時(shí)采樣的 σ 范圍是否覆蓋了采樣時(shí)所有可能用到的值尤其是最大值。我習(xí)慣在訓(xùn)練結(jié)束時(shí)多采樣幾個(gè)超大噪聲尺度的樣本放進(jìn)驗(yàn)證集里看模型輸出是否合理。另一個(gè)常見(jiàn)原因是訓(xùn)練和采樣時(shí)對(duì) σ 的條件編碼方式不一致比如訓(xùn)練時(shí)用了 log 尺度而采樣時(shí)用了線性尺度這種細(xì)節(jié)容易被忽略但破壞力極大。4.2 模型對(duì)噪聲尺度條件不敏感條件注入應(yīng)該是 Score-based Model 訓(xùn)練里最容易被忽視的步驟。如果你把 σ 編碼后和圖像特征直接拼接或簡(jiǎn)單相加模型很容易忽略這個(gè)條件導(dǎo)致所有尺度共用一套特征。正確的做法是參考 DDPM 的 AdaGN 機(jī)制把 σ 編碼后生成每個(gè)殘差塊的縮放和偏移參數(shù)和批歸一化的做法類(lèi)似。判斷模型是否真正“理解”了條件有個(gè)笨辦法固定一張輸入圖連續(xù)改變 σ 輸入觀察輸出變化是否平滑。如果輸出幾乎不變說(shuō)明條件注入失效如果變化是漸變而非突變說(shuō)明注入方式基本正確。4.3 顯存溢出與 Batch Size 的平衡固定噪聲尺度的 Score-based Model 前向傳播不需要通過(guò)太多中間變量反傳顯存壓力主要來(lái)自 U-Net 本身的深度和大通道數(shù)。訓(xùn)練時(shí)如果 OOM我一般先降 batch size 而不是降模型尺寸因?yàn)槟P统叽缰苯佑绊懮少|(zhì)量上限batch size 可以通過(guò)梯度累積補(bǔ)償。梯度累積每 k 步做一次參數(shù)更新效果等價(jià)于用更大的 batch size代價(jià)只是訓(xùn)練時(shí)間線性增加。另一個(gè)節(jié)省顯存的實(shí)用手段是混合精度訓(xùn)練。score 本身是浮點(diǎn)梯度誤差對(duì)精度不那么敏感用 FP16 訓(xùn)練損失很少出問(wèn)題但注意損失縮放策略要設(shè)置對(duì)否則前期容易出現(xiàn) NaN。4.4 生成樣本多樣性不足有時(shí)候你發(fā)現(xiàn)生成出來(lái)的圖雖然質(zhì)量不錯(cuò)但像是在復(fù)制訓(xùn)練集里的樣本多樣性明顯不足。這個(gè)現(xiàn)象通常和采樣溫度或者噪聲退火策略有關(guān)。如果最終噪聲水平降得太低采樣鏈就被“釘死”在單個(gè)數(shù)據(jù)點(diǎn)附近失去多樣性。解決辦法是讓最終噪聲尺度不要小到完全消失留一點(diǎn)點(diǎn)噪聲作為“探索溫度”同時(shí)增大中低噪聲段的迭代步數(shù)。還有一種情況是模型容量太高而訓(xùn)練數(shù)據(jù)太少模型直接把訓(xùn)練集記住了。這種時(shí)候調(diào)參沒(méi)用得換更正則化的訓(xùn)練策略或者擴(kuò)充數(shù)據(jù)增強(qiáng)方法。Score-based Model 同樣受困于過(guò)擬合只是表現(xiàn)形態(tài)比較隱蔽。4.5 數(shù)值不穩(wěn)定的處理訓(xùn)練偶爾會(huì)遇到 loss 突然變成 NaN。這個(gè)問(wèn)題的來(lái)源通常有兩個(gè)一是學(xué)習(xí)率過(guò)高導(dǎo)致梯度爆炸這個(gè)最好排查直接降學(xué)習(xí)率或加梯度裁剪就能解決二是數(shù)據(jù)里存在極端離群值加噪后得到的 x? 過(guò)于極端前向傳播經(jīng)過(guò)深層網(wǎng)絡(luò)時(shí)激活值溢出。我習(xí)慣在數(shù)據(jù)預(yù)處理時(shí)做一次 z-score 標(biāo)準(zhǔn)化讓像素分布零均值單位方差同時(shí)把梯度裁剪閾值設(shè)在 1.0 左右基本能擋住 99% 的數(shù)值崩潰問(wèn)題。5. 更進(jìn)一步Score-based Model 的擴(kuò)展應(yīng)用思路5.1 從圖像生成到科學(xué)計(jì)算Score-based Model 最迷人的地方可能不在圖像而在任意高維分布建模場(chǎng)景。比如分子構(gòu)象生成難點(diǎn)在于分子在三維空間中的分布高度多模態(tài)傳統(tǒng)方法難以采樣到所有能量低谷。用 Score-based Model 對(duì)分子構(gòu)象分布建模能從隨機(jī)坐標(biāo)出發(fā)逐步演化出合理構(gòu)象而且天然處理多模態(tài)性質(zhì)。類(lèi)似思路也被用在蛋白質(zhì)結(jié)構(gòu)預(yù)測(cè)、材料設(shè)計(jì)、逆分子設(shè)計(jì)等領(lǐng)域。這些場(chǎng)景的共同特點(diǎn)是數(shù)據(jù)分布極其復(fù)雜、顯式密度不可得、但可以拿到大量樣本。這正是 Score-based Model 最擅長(zhǎng)的設(shè)定。5.2 與強(qiáng)化學(xué)習(xí)的結(jié)合最近有個(gè)比較熱的方向是把 Score-based Model 和學(xué)習(xí)策略結(jié)合。傳統(tǒng)強(qiáng)化學(xué)習(xí)需要策略分布輸出具體動(dòng)作但高維動(dòng)作空間的策略分布同樣存在歸一化難題。Score-based Model 可以繞開(kāi)顯式策略密度直接在動(dòng)作空間上學(xué)習(xí)得分函數(shù)然后通過(guò)郎之萬(wàn)采樣輸出最優(yōu)動(dòng)作。這種范式在機(jī)器人控制中被造了個(gè)詞叫 “Diffusion Policy”已經(jīng)在不少物理仿真任務(wù)中刷新了效果榜。這類(lèi)工作的工程坑往往不在策略本身而在采樣延遲。郎之萬(wàn)采樣幾十步對(duì)實(shí)時(shí)控制來(lái)說(shuō)太慢所以實(shí)踐里大多用蒸餾或者確定性 ODE 采樣器把推理壓到一步以內(nèi)。把生成模型的采樣效率和決策頻率做匹配是落地這類(lèi)系統(tǒng)真正要面對(duì)的難題。5.3 條件生成與可控編輯如果你想讓 Score-based Model 生成特定類(lèi)別的圖像最簡(jiǎn)單的方式是類(lèi)別條件注入也就是把類(lèi)別標(biāo)簽作為額外的條件輸入網(wǎng)絡(luò)。復(fù)雜一點(diǎn)的場(chǎng)景是文本引導(dǎo)生成這時(shí)得分函數(shù)要改寫(xiě)為條件得分 ?x log p(x|c)根據(jù)貝葉斯公式它等于無(wú)條件得分 ?x log p(x) 加上條件對(duì)數(shù)似然的梯度 ?x log p(c|x)。后者通常用另一個(gè)分類(lèi)器或 CLIP 模型提供這就是所謂分類(lèi)器引導(dǎo)Classifier Guidance的原理。這種合成梯度的方法讓編輯和可控生成變得非常靈活你想讓圖像更偏向某個(gè)屬性就在得分場(chǎng)上疊加一個(gè)指向?qū)傩苑较虻钠脠?chǎng)。不用重新訓(xùn)練生成模型只需要額外訓(xùn)練一個(gè)輕量級(jí)分類(lèi)器這也是 Score-based Model 生態(tài)能迅速擴(kuò)展的原因之一。5.4 與潛在空間方法的區(qū)別很多人喜歡拿 VAE、GAN 和 Score-based Model 做比較。VAE 的問(wèn)題在于用高斯分布作為潛在空間的先驗(yàn)太弱學(xué)到的隱變量往往沒(méi)有充分解耦語(yǔ)義生成質(zhì)量上限受限。GAN 的問(wèn)題在于訓(xùn)練不穩(wěn)定判別器和生成器的博弈很容易坍縮。Score-based Model 繞開(kāi)這些困難的方式是不做顯式的潛在空間建模而是直接在數(shù)據(jù)空間上定義概率路徑。代價(jià)是推理時(shí)需要迭代采樣計(jì)算成本更高。這個(gè)取舍在離線生成場(chǎng)景下完全值得因?yàn)槟銚Q來(lái)了兩個(gè)顯著優(yōu)勢(shì)一是訓(xùn)練過(guò)程穩(wěn)定沒(méi)有對(duì)抗博弈那種極度敏感的超參數(shù)二是生成的多樣性有保障不會(huì)像 GAN 那樣模型崩塌后只剩幾張圖輪流轉(zhuǎn)。如果你需要快速推理且對(duì)多樣性要求不高GAN 仍然有它的位置如果你要覆蓋復(fù)雜數(shù)據(jù)分布且追求訓(xùn)練穩(wěn)定性Score-based Model 顯然是更穩(wěn)妥的選擇。6. 實(shí)操后的經(jīng)驗(yàn)與建議跑了一整輪 Score-based Model 的實(shí)驗(yàn)之后我想分享幾條樸素但管用的經(jīng)驗(yàn)。第一條是先跑通小規(guī)模實(shí)驗(yàn)再上大模型。我在 CIFAR-10 上先把噪聲尺度序列長(zhǎng)度設(shè)成 10模型通道數(shù)減半用一個(gè)非常小的配置把損失曲線和采樣流程全部跑通確保從訓(xùn)練到采樣整條鏈路沒(méi)問(wèn)題再逐步加到完整配置。這個(gè)習(xí)慣幫我避開(kāi)了很多“訓(xùn)練了一天發(fā)現(xiàn)采樣代碼有 bug”的慘劇。第二條是保存模型時(shí)同時(shí)保存一份采樣配置。不同模型用的最優(yōu)噪聲尺度序列、迭代步數(shù)可能都不同把參數(shù)和模型綁定存檔能省掉大量重復(fù)調(diào)參時(shí)間。我踩過(guò)因?yàn)椴蓸优渲煤陀?xùn)練配置不一致導(dǎo)致結(jié)果暴漲暴跌的坑后來(lái)就養(yǎng)成了每次跑實(shí)驗(yàn)都寫(xiě)配置文件的習(xí)慣。第三條是可視化得分場(chǎng)的分布。很多人只看生成的最終圖像但中間過(guò)程的診斷信息同樣重要。我習(xí)慣在每個(gè) epoch 結(jié)束后從測(cè)試集挑幾張圖把真實(shí)加噪樣本的得分場(chǎng)可視化出來(lái)看模型預(yù)測(cè)的箭頭是否指向數(shù)據(jù)聚集區(qū)域。這個(gè)可視化比損失數(shù)值直觀得多能提早發(fā)現(xiàn)梯度方向混亂、條件注入失效這類(lèi)深層問(wèn)題。第四條是學(xué)習(xí)率要根據(jù)模型規(guī)模動(dòng)態(tài)調(diào)整。Score-based Model 對(duì)學(xué)習(xí)率沒(méi)有 GAN 那么敏感但仍然有明顯的適用區(qū)間。模型小時(shí)學(xué)習(xí)率大一點(diǎn)沒(méi)事模型加深加寬后需要適當(dāng)降低學(xué)習(xí)率否則后期會(huì)出現(xiàn) loss 震蕩不減的現(xiàn)象。我通常先用線性學(xué)習(xí)率掃描找出量級(jí)再配合余弦退火獲得更平滑的收斂過(guò)程。最后一條可能聽(tīng)起來(lái)有些反直覺(jué)不要迷信論文里的超參數(shù)。論文里的配置是在特定數(shù)據(jù)集、特定計(jì)算資源下調(diào)出來(lái)的直接復(fù)制到你的場(chǎng)景很可能不是最優(yōu)甚至?xí)霈F(xiàn)訓(xùn)練不穩(wěn)定。理解每個(gè)參數(shù)的作用然后用你的數(shù)據(jù)去做小規(guī)模搜索遠(yuǎn)比照抄參數(shù)清單更有效率。Score-based Model 的理論框架很優(yōu)雅但它能發(fā)揮多大效果最終還是由你在工程細(xì)節(jié)上的處理水平?jīng)Q定。