最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

AIGC: SGM (Score-based Generative Model) 筆記

2023-07-06 16:21 作者:剎那-Ksana-  | 我要投稿

SGM 在擴散模型大家庭中算是一個重要的思想,也涉及很多復雜的東西, 如有寫得不準確的地方還請指出。

本人數(shù)學不好,盡量避免復雜公式和各種證明 (′。_。`)

標準布朗運動

SGM (Score-based Generative Model) 說來話長,至于有多長,一直可以追溯到布朗運動(啊對,就是初高中物理課上學的那個……)

現(xiàn)在,假設我們有一個一維的直線,有個小人從原點出發(fā),每次隨機地選擇向左走1格或者向右走1格,且向左走和向右走的兩個選項,被選擇的概率相等。

用?S_t?代表小人離原點的距離,t?代表選擇的次數(shù),如果選擇的次數(shù)越多,那么?S_t?將會逐漸服從一個均值為 0,方差為 t 的正態(tài)分布。

網(wǎng)上找的圖片,圖中的N就是上文的t;t越大,曲線就會越來越扁平

在上面的設定里面,很明顯,步長 %5CDelta%20x%3D1?(每次走1格的距離) 以及時間間隔 %5CDelta%20t%3D1 (每次選一下).?

接下來,我們希望把這個步長無限縮小,一直縮小到上述的過程變成一個連續(xù)的過程。

根據(jù)"定義"?Var(S_1)%3D1, 我們?nèi)?%5CDelta%20x%3D%5Csqrt%7B%5CDelta%20t%7D%20, 然后我們讓 %5CDelta%20t%20%5Cto%200, 就得到了所謂的"標準布朗運動" (Standard Brownian Motion). 由于布朗運動也叫做維納過程 (Wiener Process),所以我們用 W_t?來表示。這個標準布朗運動滿足一個特性(當然還有其他特性,不一一列舉)——對于?s%3E0%2C%20t%3E0, W_%7Bs%2Bt%7D-W_s?服從一個均值為0,方差為 t?正態(tài)分布

最后,順帶一談,這個布朗運動有一個重要的性質(zhì),其二階變差(Quadratic Variation)存在且等于 T.?

換句話說,就是,假設把一個?%5B0%2C%20T%5D?的時間區(qū)間,切分為無限小的一份一份(即,?dt)。每個非常小的區(qū)間里面,相鄰兩個 W 的差(即?W_%7Bt_i%7D-W_%7Bt_%7Bi-1%7D%7D , 只不過 t 和 t-1 間隔非常?。┳鰝€平方。然后,將所有的這么一小份一小份累加起來,最終的合計值將會是?T(此處應該有皮卡丘震驚表情).?引申一下,就得到了?(dW_t)%5E2%3Ddt.(這里的?dW_t 意味著 W?的變化;布朗運動不可微分

隨機微分方程

現(xiàn)在,我們知道了什么是布朗運動?(a.k.a. 維納過程),以及一個重要的發(fā)現(xiàn)(dW_t)%5E2%3Ddt. 這個公式是伊藤微積分(It? calculus)的一個基礎,從這個公式可以引入一系列的微分、積分的定理,但因為和文章主旨無關,所以略過不談了。

Cut to the chase, 隨機微分方程(stochastic differential equation, SDE)即帶有隨機過程的微分方程,其中一個典型的例子就是

dX_t%3Df(X_t%2Ct)dt%2Bg(X_t%2Ct)dW_t

這里的前一項?f(X_t%2Ct)dt?被稱為 drift, 后一項?g(X_t%2Ct)dW_t?被稱為 diffusion, W?是一個標準布朗運動.? SGM 的論文里面為了簡單,diffusion 項簡化為了?g(t)?且是一個標量(雖然論文也給出了帶有參數(shù) X_t?的一般化形式,但是太難了一句話都沒看懂).

所以,以上公式說明了什么呢——除了我們知道上面這個系統(tǒng)帶有布朗運動(噪音)以外,基本上什么都沒有說,因為我們不知道?f?是 g 是什么。

DDPM 與 VP-SDE

感謝谷歌團隊,直接給出了一系列?f 和?g?的公式;例如在 f(X_t%2Ct)%3D-%5Cfrac%7B1%7D%7B2%7D%5Cbeta_t%20%5Cbf%7Bx%7D, g(t)%3D%5Csqrt%7B%5Cbeta%20(t)%7D?的情況下,這個?SDE 被稱作 VP-SDE, 是 DDPM 的一般化的形式.

這里稍微花一點時間,說一下上面兩個函數(shù) f 和 g 是怎么得到的。

首先,我們從 DDPM 的馬爾可夫鏈出發(fā):

%5Cbf%7Bx%7D_t%3D%5Csqrt%7B1-%5Cbeta_t%7D%5Cbf%7Bx%7D_%7Bt-1%7D%2B%5Csqrt%7B%5Cbeta_t%7D%5Cepsilon_%7Bt-1%7D%2C%5Cepsilon_%7Bt-1%7D%5Csim%20%5Cmathcal%7BN%7D(0%2CI)%2Ct%3D1%2C...%2CN

上面的馬爾可夫鏈是非連續(xù)的,每一步的間隔是1。于是,我們借用最初那個布朗運動的那個小人的思想,把馬爾科夫鏈的步長無限縮小,一直縮小到一個連續(xù)的區(qū)間?t%5Cin%5B0%2C1%5D?上面去。

因為我們縮放了區(qū)間,所以這里我們做一些變換——%5Cbf%7Bz%7D_%7Bt%7D%3D%5Cbf%7Bz%7D(t%2FN)%2C%20x_i%3Dx(t%2FN)%2C%5Cbar%7B%5Cbeta_t%7D%3D%5Cbeta(t%2FN),?t%5Cin%20%5C%7B0%2C%5Cfrac%7B1%7D%7BN%7D%2C...%2C%5Cfrac%7BN-1%7D%7BN%7D%20%5C%7D, 這樣我們就有了?z_N%3Dz(1)%2Cx_N%3Dx(1)?之類的“映射”關系。

(原論文這里有個 typo, 把 1/N?寫成了 1,看了半天沒看懂,ε=( o`ω′)ノ)

當然,我們的步長?%5CDelta%20t%3D1%2FN, 然后我們有以下的公式

x(t%2B%5CDelta%20t)%3D%5Csqrt%7B(1-%5Cbeta(t%2B%5CDelta%20t)%5CDelta%20t%7D%5Ccdot%20x(t)%2B%5Csqrt%7B%5Cbeta(t%2B%5CDelta%20t)%5CDelta%20t%7D%5Ccdot%20z(t)

等式后面的第一項中的?%5Csqrt%7B(1-%5Cbeta(t%2B%5CDelta%20t)%5CDelta%20t%7D,我們可以利用二項近似(Binomial Approximation)進行改寫%5Csqrt%7B(1-%5Cbeta(t%2B%5CDelta%20t)%5CDelta%20t%7D%20%5Capprox%20%5Cfrac%7B1%7D%7B2%7D%5Cbeta(t%2B%5CDelta%20t)%5CDelta%20t%20%3D%20(1-%5Cfrac%7B1%7D%7B2%7D)%5Cbeta(t%2B%5CDelta%20t)%5CDelta%20t.

當我們 N 趨向于正無窮時,自然有?%5CDelta%20t%5Cto0, 所以,這里有如下的近似關系

x(t%2B%5CDelta%20t)%5Capprox%20x(t)-%5Cfrac%7B1%7D%7B2%7D%5Cbeta%20(t)%5CDelta%20t%20x(t)%2B%5Csqrt%7B%5Cbeta(t)%5CDelta%20t%7Dz(t)

把后面的?x(t)?移到前面去,于是我們就有了如下的隨機微分方程

dx%3D-%5Cfrac%7B1%7D%7B2%7D%5Cbeta(t)xdt%2B%5Csqrt%7B%5Cbeta(t)%7Ddw

上面的這個式子叫做 VP-SDE(Variance Preserving SDE),DDPM 是其離散化的形式,還有一種叫做 VE-SDE,SMLD 是其離散化的形式(在這里略過不說了)。

所以,正兒八經(jīng)說了大半天?裝了大半天B,想說的一點就是——上面的 VP-SDE 就是給數(shù)據(jù)分布加噪的過程(正向過程)。

網(wǎng)上找的一張很直觀的圖片,左側是數(shù)據(jù)分布,右側是正態(tài)分布,t 是連續(xù)時間

Reverse-Time SDE

有了加噪的過程,我們還需要一個去噪的過程,而這個過程,當然也是一個連續(xù)的過程。感謝我們前輩們的研究成果,我們知道上述的加噪過程 dX_t%3Df(X_t%2Ct)dt%2Bg(X_t%2Ct)dW_t,有一個對應的逆向過程——

d%5Cbf%7Bx%7D%20%3D%20%5B%5Cbf%7Bf%7D(%5Cbf%7Bx%7D%2C%20t)%20-%20g(t)%5E2%20%20%5Cnabla_%7B%5Cbf%7Bx%7D%7D%20%20%5Clog%20p_t(%5Cbf%7Bx%7D)%5D%20dt%20%2Bg(t)%20d%5Cbar%7B%5Cbf%7Bw%7D%7D

上面的這個式子,函數(shù)?f%2Cg?是我們已知的,%5Cbar%7Bw%7D 是標準布朗運動,如果我們知道?%5Cnabla_%7B%5Cbf%7Bx%7D%7D%20%20%5Clog%20p_t(%5Cbf%7Bx%7D)?這一項的話,那就大功告成了。

Score Matching

問題就是,?%5Cnabla_%7B%5Cbf%7Bx%7D%7D%20%20%5Clog%20p_t(%5Cbf%7Bx%7D)?是什么呢。

很明顯,p_t(x)?一個概率分布,這個概率分布,我們雖然不知道,但我們也許可以用一個 %5Ctheta?參數(shù)化的概率分布 p_%7B%5Ctheta%7D去模擬它,我們通過學習參數(shù) %5Ctheta 使 p_%7B%5Ctheta%7D?去接近 p

這個?p_%7B%5Ctheta%7D,我們可以認為由兩部分組成——表示"密度"的函數(shù)?%5Ctilde%7Bp%7D_%7B%5Ctheta%7D?, 與歸一化因子 Z_%7B%5Ctheta%7D.?

p_%7B%5Ctheta%7D(x)%3D%5Cfrac%7B%5Ctilde%7Bp%7D_%7B%5Ctheta%7D(x)%7D%7BZ_%7B%5Ctheta%7D%7D%3D%5Cfrac%7B%5Ctilde%7Bp%7D_%7B%5Ctheta%7D(x)%7D%7B%5Cint_%7Bx%5Cin%20X%7D%5Ctilde%7Bp%7D_%7B%5Ctheta%7D(x)dx%7D

如果我們想要求解?%5Ctheta,比如說,用極大似然估計法 (Maximum Likelihood Estimation),我們首先要知道?p_%7B%5Ctheta%7D?的具體形式,但是問題就在于 Z_%7B%5Ctheta%7D?這一項是解不出來的。

怎么辦呢,這里我們引入 score matching 的概念。我們把?%5Cnabla_%7Bx%7D%5Clog%20p_%7B%5Ctheta%7D(x) 叫做 score function,然后把上面的 p_%7B%5Ctheta%7D(x) 通過 log 拆分成兩項?%5Cnabla_%7Bx%7D%20%5Clog%20%5Ctilde%7Bp%7D_%7B%5Ctheta%7D(x)%20-%5Cnabla_%7Bx%7D%20%5Clog%20Z_%5Ctheta . 然后我們發(fā)現(xiàn),我們要的是 x 的梯度,所以后面一項 %5Cnabla_%7Bx%7D%20%5Clog%20Z_%5Ctheta 因為和 x 無關,所以就完全沒了(皮卡丘震驚表情)。而且?%5Ctilde%7Bp%7D_%7B%5Ctheta%7D?還不受"概率分布"的約束 (unnormalized),意味著我們甚至可以使用一個神經(jīng)網(wǎng)絡作為 ?%5Ctilde%7Bp%7D_%7B%5Ctheta%7D?。

現(xiàn)在,我們的目標就是選擇一個 loss 讓?%5Cnabla_%7Bx%7D%5Clog%20p_%7B%5Ctheta%7D(x)?去貼近數(shù)據(jù)分布的 score function %5Cnabla_%7Bx%7D%5Clog%20p_%7Bdata%7D(x). 然后就大功告成了,是嗎?問題是,我們也不知道數(shù)據(jù)分布的?score function。

總而言之,我們需要一個方法,這個方法不能依賴數(shù)據(jù)分布的?score function,也不能有?Z_%7B%5Ctheta%7D?.

這個方法有么?還真有!(なんとでもなるはずだ!)

這里直接把公式列出來了:

L%3D%5Cmathbb%7BE%7D_%7Bp_%7Bd%7D%7D%5Btr(%5Cnabla%20_x%5E2%5Clog%20p_%7B%5Ctheta%7D%20(x))%2B%5Cfrac%7B1%7D%7B2%7D%7C%7C%5Cnabla_x%20%5Clog%20p_%7B%5Ctheta%7D(x)%20%7C%7C_2%5E2%5D?

注:我在一維的情況下做了一些模擬——例如,標準正態(tài)分布中采樣,并假設我們的模型就是標準正態(tài)分布,理論上 loss 應該給出0,但是最后算出來卻是 -0.5(而且還是個負數(shù))。這里貼出代碼,請大佬們指點一下。我也試了一下邏輯分布(Logistic Distribution), 但也沒有得到想要的結果。

最后,我們有了去噪的SDE,我們對其離散化,我們就得到了逆向過程。這里我就直接貼論文里的公式了。

%5Ctextbf%7Bx%7D_i%3D%5Ctextbf%7Bx%7D_%7Bi%2B1%7D-f_%7Bi%2B1%7D(x_%7Bi%2B1%7D)%2Bg_%7Bi%2B1%7Dg%5ET_%7Bi%2B1%7Ds_%7B%5Ctheta%5E*%7D(%5Ctextbf%7Bx%7D_%7Bi%2B1%7D%2Ci%2B1)%2Bg_%7Bi%2B1%7D%5Ctextbf%7Bz%7D_%7Bi%2B1%7D%2C%20z%5Csim%20%5Cmathcal%7BN%7D(0%2C%20I)

Predictor-Corrector

上面的式子,論文里叫做 predictor, 其作用就是解逆向 SDE(給出?x_%7Bi%7D)而因為我們的 score function 是一個隨著 t 變動的模型,為了確保?x_%7Bi%7D?來自分布?p_t(x) 論文里面使用了一個 corrector 進行修正。這個 corrector 可以是任何基于 MCMC 的算法。

論文給出的 Predictor-Corrector 采樣的偽代碼;這里的 corrector 用的是朗之萬;這里,外循環(huán)和內(nèi)循環(huán)里面,s 的下標一個是 i+1, 一個是 i,所以是兩個不同的 score function

一些可以參考的資料

MIT的公開課程,講伊藤微積分、隨機微分方程的。小白也能看的懂,而且還帶英文字幕:

https://ocw.mit.edu/courses/18-s096-topics-in-mathematics-with-applications-in-finance-fall-2013/video_galleries/video-lectures/

知乎上的一篇有關于SDE和Diffusion的文章,如果你想知道一些SDE公式的來龍去脈,可以參考:

https://zhuanlan.zhihu.com/p/619188621

知乎上的一篇講DDPM的文章,非常透徹,之前也推薦過,這里再推薦一次:

https://zhuanlan.zhihu.com/p/638442430

知乎上的一篇有關于 Score Matching 的文章,里面有 Score Matching 的 loss 的公式推導:

https://zhuanlan.zhihu.com/p/583666759

SGM 論文,官方的 colab,里面有完整的代碼

https://colab.research.google.com/drive/120kYYBOVa1i0TD85RjlEkFjaWDxSFUx3?usp=sharing

還有一個 probability flow ODE 沒有涉及,但太累了寫不下去了,留到以后哪天和DDIM一起合并了寫吧……坑+1

AIGC: SGM (Score-based Generative Model) 筆記的評論 (共 條)

分享到微博請遵守國家法律
金乡县| 图片| 新田县| 育儿| 三台县| 新乡市| 仪陇县| 芮城县| 花莲市| 电白县| 商城县| 绍兴县| 曲麻莱县| 石渠县| 青州市| 新沂市| 新兴县| 宜兴市| 天长市| 茂名市| 漾濞| 固安县| 池州市| 神农架林区| 迁西县| 涟水县| 兴宁市| 深州市| 南木林县| 开原市| 滕州市| 吉木乃县| 金门县| 东港市| 岳阳市| 天台县| 安陆市| 高碑店市| 凤阳县| 鄂托克前旗| 桃源县|