AIGC: SGM (Score-based Generative Model) 筆記
SGM 在擴散模型大家庭中算是一個重要的思想,也涉及很多復雜的東西, 如有寫得不準確的地方還請指出。
本人數(shù)學不好,盡量避免復雜公式和各種證明 (′。_。`)
標準布朗運動
SGM (Score-based Generative Model) 說來話長,至于有多長,一直可以追溯到布朗運動(啊對,就是初高中物理課上學的那個……)
現(xiàn)在,假設我們有一個一維的直線,有個小人從原點出發(fā),每次隨機地選擇向左走1格或者向右走1格,且向左走和向右走的兩個選項,被選擇的概率相等。
用??代表小人離原點的距離,
?代表選擇的次數(shù),如果選擇的次數(shù)越多,那么?
?將會逐漸服從一個均值為 0,方差為
的正態(tài)分布。

在上面的設定里面,很明顯,步長 ?(每次走1格的距離) 以及時間間隔
(每次選一下).?
接下來,我們希望把這個步長無限縮小,一直縮小到上述的過程變成一個連續(xù)的過程。
根據(jù)"定義"?, 我們?nèi)?
, 然后我們讓
, 就得到了所謂的"標準布朗運動" (Standard Brownian Motion). 由于布朗運動也叫做維納過程 (Wiener Process),所以我們用
?來表示。這個標準布朗運動滿足一個特性(當然還有其他特性,不一一列舉)——對于?
,
?服從一個均值為0,方差為
?正態(tài)分布
最后,順帶一談,這個布朗運動有一個重要的性質(zhì),其二階變差(Quadratic Variation)存在且等于 .?
換句話說,就是,假設把一個??的時間區(qū)間,切分為無限小的一份一份(即,?
)。每個非常小的區(qū)間里面,相鄰兩個
的差(即?
, 只不過 t 和 t-1 間隔非常?。┳鰝€平方。然后,將所有的這么一小份一小份累加起來,最終的合計值將會是?
(此處應該有皮卡丘震驚表情).?引申一下,就得到了?
.(這里的?
意味著
?的變化;布朗運動不可微分)
隨機微分方程
現(xiàn)在,我們知道了什么是布朗運動?(a.k.a. 維納過程),以及一個重要的發(fā)現(xiàn). 這個公式是伊藤微積分(It? calculus)的一個基礎,從這個公式可以引入一系列的微分、積分的定理,但因為和文章主旨無關,所以略過不談了。
Cut to the chase, 隨機微分方程(stochastic differential equation, SDE)即帶有隨機過程的微分方程,其中一個典型的例子就是
這里的前一項??被稱為 drift, 后一項?
?被稱為 diffusion,
?是一個標準布朗運動.? SGM 的論文里面為了簡單,diffusion 項簡化為了?
?且是一個標量(雖然論文也給出了帶有參數(shù)
?的一般化形式,但是太難了一句話都沒看懂).
所以,以上公式說明了什么呢——除了我們知道上面這個系統(tǒng)帶有布朗運動(噪音)以外,基本上什么都沒有說,因為我們不知道??是
是什么。
DDPM 與 VP-SDE
感謝谷歌團隊,直接給出了一系列? 和?
?的公式;例如在
,
?的情況下,這個?SDE 被稱作 VP-SDE, 是 DDPM 的一般化的形式.
這里稍微花一點時間,說一下上面兩個函數(shù) f 和 g 是怎么得到的。
首先,我們從 DDPM 的馬爾可夫鏈出發(fā):
上面的馬爾可夫鏈是非連續(xù)的,每一步的間隔是1。于是,我們借用最初那個布朗運動的那個小人的思想,把馬爾科夫鏈的步長無限縮小,一直縮小到一個連續(xù)的區(qū)間??上面去。
因為我們縮放了區(qū)間,所以這里我們做一些變換——,?
, 這樣我們就有了?
?之類的“映射”關系。
(原論文這里有個 typo, 把 1/N?寫成了 1,看了半天沒看懂,ε=( o`ω′)ノ)
當然,我們的步長?, 然后我們有以下的公式
等式后面的第一項中的?,我們可以利用二項近似(Binomial Approximation)進行改寫
.
當我們 N 趨向于正無窮時,自然有?, 所以,這里有如下的近似關系
把后面的??移到前面去,于是我們就有了如下的隨機微分方程
上面的這個式子叫做 VP-SDE(Variance Preserving SDE),DDPM 是其離散化的形式,還有一種叫做 VE-SDE,SMLD 是其離散化的形式(在這里略過不說了)。
所以,正兒八經(jīng)說了大半天?裝了大半天B,想說的一點就是——上面的 VP-SDE 就是給數(shù)據(jù)分布加噪的過程(正向過程)。

Reverse-Time SDE
有了加噪的過程,我們還需要一個去噪的過程,而這個過程,當然也是一個連續(xù)的過程。感謝我們前輩們的研究成果,我們知道上述的加噪過程 ,有一個對應的逆向過程——
上面的這個式子,函數(shù)??是我們已知的,
是標準布朗運動,如果我們知道?
?這一項的話,那就大功告成了。
Score Matching
問題就是,??是什么呢。
很明顯,?一個概率分布,這個概率分布,我們雖然不知道,但我們也許可以用一個
?參數(shù)化的概率分布
去模擬它,我們通過學習參數(shù)
使
?去接近
。
這個?,我們可以認為由兩部分組成——表示"密度"的函數(shù)?
?, 與歸一化因子
.?
如果我們想要求解?,比如說,用極大似然估計法 (Maximum Likelihood Estimation),我們首先要知道?
?的具體形式,但是問題就在于
?這一項是解不出來的。
怎么辦呢,這里我們引入 score matching 的概念。我們把? 叫做 score function,然后把上面的
通過 log 拆分成兩項?
. 然后我們發(fā)現(xiàn),我們要的是 x 的梯度,所以后面一項
因為和 x 無關,所以就完全沒了(皮卡丘震驚表情)。而且?
?還不受"概率分布"的約束 (unnormalized),意味著我們甚至可以使用一個神經(jīng)網(wǎng)絡作為 ?
?。
現(xiàn)在,我們的目標就是選擇一個 loss 讓??去貼近數(shù)據(jù)分布的 score function
. 然后就大功告成了,是嗎?問題是,我們也不知道數(shù)據(jù)分布的?score function。
總而言之,我們需要一個方法,這個方法不能依賴數(shù)據(jù)分布的?score function,也不能有??.
這個方法有么?還真有!(なんとでもなるはずだ!)
這里直接把公式列出來了:
?
注:我在一維的情況下做了一些模擬——例如,標準正態(tài)分布中采樣,并假設我們的模型就是標準正態(tài)分布,理論上 loss 應該給出0,但是最后算出來卻是 -0.5(而且還是個負數(shù))。這里貼出代碼,請大佬們指點一下。我也試了一下邏輯分布(Logistic Distribution), 但也沒有得到想要的結果。
最后,我們有了去噪的SDE,我們對其離散化,我們就得到了逆向過程。這里我就直接貼論文里的公式了。
Predictor-Corrector
上面的式子,論文里叫做 predictor, 其作用就是解逆向 SDE(給出?)而因為我們的 score function 是一個隨著 t 變動的模型,為了確保?
?來自分布?
論文里面使用了一個 corrector 進行修正。這個 corrector 可以是任何基于 MCMC 的算法。

一些可以參考的資料
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