關(guān)于加強(qiáng)學(xué)校網(wǎng)站建設(shè)的通知網(wǎng)絡(luò)推廣的手段
生成模型
生成模型和判別模型的差異

生成模型的目標(biāo)是在給定了數(shù)據(jù)集D,并且假設(shè)這個(gè)數(shù)據(jù)集的底層分布(underlying distribution)是Pdata,我們希望夠近似出這個(gè)數(shù)據(jù)分布。如果我們能夠?qū)W習(xí)到一個(gè)好的生成模型,我們就能用這個(gè)生成模型為下游任務(wù)做inference 推理。
下面我們簡(jiǎn)單回顧一下生成模型和判別模型,讀者可以自行選擇跳過(guò)這小節(jié)。
生成模型 VS 判別模型
對(duì)于判別模型(discriminative model),像邏輯回歸模型,是對(duì)給定的數(shù)據(jù)點(diǎn)預(yù)測(cè)一個(gè)標(biāo)簽label,但是對(duì)于生成模型,它學(xué)習(xí)的是整個(gè)數(shù)據(jù)的聯(lián)合分布(joint distribution)。當(dāng)然判別模型也可以理解為是給定了輸入數(shù)據(jù)后,標(biāo)簽label的生成模型。但一般生成模型指的是高維數(shù)據(jù)。

那么如果我們的建模方式不一樣,對(duì)應(yīng)的模型也是不一樣的。假設(shè)我們希望求 p(Y|X),對(duì)于左邊的模型,我們需要用貝葉斯規(guī)則計(jì)算 p(Y) 和 p(X|Y)。而對(duì)于右邊的模型,它已經(jīng)可以直接用來(lái)計(jì)算 p(Y|X), 因?yàn)?p(X) 是給定的,所以我們可以不用給它建模。
我們將隨機(jī)變量在圖上顯示出來(lái):

對(duì)于生成模型的聯(lián)合分布: p(Y,X)=p(Y)p(X1|Y)p(X2|Y,X1)...p(Xn|Y,X1,…,Xn?1)我們需要考慮的是怎么確定 p(Xi|(X)pa(i),Y)的參數(shù),這里的 pa(i)指的是指向隨機(jī)變量 Xi的隨機(jī)變量集合。
對(duì)于判別式模型的聯(lián)合分布: p(Y,X)=p(X1)p(X2|X1)p(X3|X1,X2)...p(Y|X1,…,Xn)
生成模型例子-樸素貝葉斯
樸素貝葉斯(Naive Bayes),它是生成模型的一個(gè)特例,它假設(shè)在給定了label之后,各個(gè)隨機(jī)變量之間是獨(dú)立的,這就是它 naive 的原因吧,如下圖:

用訓(xùn)練數(shù)據(jù)估計(jì)參數(shù),用貝葉斯規(guī)則做預(yù)測(cè):

判別模型例子-邏輯回歸

邏輯回歸并不要求隨機(jī)變量之間獨(dú)立。
但是生成模型依然很有用,根據(jù)鏈?zhǔn)椒▌t:
p(Y,X)=p(X|Y)p(Y)=p(Y|X)p(X)
假設(shè) X的部分隨機(jī)變量是可觀測(cè)的,我們還是要計(jì)算 p(Y|Xevidence),那么我們就可以對(duì)這些看不到的隨機(jī)變量marginalize(積分求和)。
學(xué)習(xí)-Learning
生成模型的學(xué)習(xí)(learning)是指在給定一個(gè)數(shù)據(jù)分布 pdata和一個(gè)模型家族 (model family)的情況下,我們要從這個(gè)模型家族中找到一個(gè)近似分布pθ,使得它和數(shù)據(jù)分布盡可能的近。

但是要怎么衡量這個(gè)近呢?我們用距離來(lái)衡量, 寫(xiě)成數(shù)學(xué)表達(dá)式:
minθ∈d(pdata,pθ)
因此,我們自然而然會(huì)對(duì)三個(gè)問(wèn)題感興趣:
模型家族M的表達(dá)式是神馬?
目標(biāo)函數(shù) d(?) 是什么樣子的?
最小化 d(?) 的優(yōu)化過(guò)程是什么?
推理-Inference
一個(gè)生成模型應(yīng)該是一個(gè)聯(lián)合概率分布 p(x),假設(shè)這個(gè)概率分布是從一堆狗狗的圖片上學(xué)習(xí)到的,那么這個(gè)概率分布應(yīng)該可以:
生成(Generation), 即采樣(sampling) xnew~p(x),并且采樣 xnew圖片應(yīng)該很像狗狗。
密度估計(jì)(Density estimation),如果給了一張狗狗的圖片 x,那么這個(gè)概率分布 p(x) 的值應(yīng)該很高?;蛘呓o了一張不相關(guān)的圖片,p(x)的值很低,這可以用來(lái)做異常檢測(cè)。
無(wú)監(jiān)督表示學(xué)習(xí)(unsupervised representation learning), 我們可以學(xué)習(xí)到這些圖片的一些公共信息,像是一些特征,耳朵,尾巴…
但我們也發(fā)現(xiàn)量化評(píng)估上面的任務(wù)1和任務(wù)3其實(shí)是很難的;其次,并不是所有的模型家族在這些任務(wù)上都推理速度都快且精準(zhǔn),也正是因?yàn)橥评磉^(guò)程的折中和權(quán)衡,導(dǎo)致了各種不同的方法。
數(shù)學(xué)建模為隨機(jī)分布,忽略了輸入數(shù)據(jù)分布逐步轉(zhuǎn)化到最后生成圖片的隨機(jī)過(guò)程,只關(guān)心輸入數(shù)據(jù)分布到生成數(shù)據(jù)分布的轉(zhuǎn)化分布。
自回歸模型
變分自編碼器
正則化流模型
生成對(duì)抗網(wǎng)絡(luò)
數(shù)學(xué)建模為隨機(jī)過(guò)程,輸入數(shù)據(jù)分布經(jīng)歷了一個(gè)過(guò)程逐步轉(zhuǎn)化成最終生成圖片,對(duì)轉(zhuǎn)化的隨機(jī)過(guò)程也考慮進(jìn)去,用T步隨機(jī)噪聲過(guò)程來(lái)模擬(擴(kuò)散模型家族)。
1.DDIM
2.SDE
3.stable diffusion

VAE
深度隱變量模型(Deep Latent Variable Models)通常長(zhǎng)什么樣子呢?

假設(shè)隱變量 z服從正態(tài)分布 z~N(0,I)
p(x|z)=(μθ(z),Σθ(z)) 其中 μθ和 Σθ都是神經(jīng)網(wǎng)絡(luò)
我們希望在訓(xùn)練完之后,z可以有一定的意義,能表示有意義的特征,這些特征可以用在無(wú)監(jiān)督學(xué)習(xí)里面。
特征的計(jì)算可以通過(guò) p(z|x)


當(dāng)且僅當(dāng) q=p(z|x;θ) 的時(shí)候,等號(hào)成立。證明略,讀者可以帶入得到,也可以參考 VI 這節(jié)的證明。
因此,我們需要找到一個(gè)分布 q(z) 它必須和 p(z|x;θ)盡可能相近的時(shí)候,才能讓等式的右邊的證據(jù)下界和左邊的likelihood越接近。另外左邊的likelihood,也被稱之為evidence。
熟悉 KL divergence的讀者應(yīng)該已經(jīng)發(fā)現(xiàn),當(dāng)我們把右邊的式子移到左邊,其實(shí)就是分布q(z)和 分布p(z|x;θ)的KL散度:
DKL(q(z)||p(z|x;θ))=logp(x;θ)?∑zq(z)logp(x,z;θ)?H(q)≥0
當(dāng)然,q=p(z|x;θ)的時(shí)候,KL散度為 0。
這個(gè)時(shí)候我們就將問(wèn)題轉(zhuǎn)到了如何找到這樣的分布 q(z)?
在開(kāi)始學(xué)習(xí)VAE的參數(shù)之前,我們看看這里有兩組參數(shù)需要我們優(yōu)化,一組是對(duì)應(yīng)于分布q 的參數(shù) ?, 另一組是對(duì)應(yīng)分布 p 的參數(shù) θ,見(jiàn)下面的式子:

我們?cè)賮?lái)看一張學(xué)習(xí) VAE,經(jīng)常會(huì)看到的圖,很好的解釋了 ELBO,KL散度和likelihood之間的關(guān)系:

注意上面圖片中的q是conditioned在x 上的,暫時(shí)可以理解為給了我們一些 x 的信息后,我們的分布 q 才能更容易接近 p(z|x;θ),或者理解為 q的空間可以限定的小一些,這樣更容易采樣到有意義的樣本。
從上面的推導(dǎo)中,我們可以看到最大化likelihood這個(gè)問(wèn)題被轉(zhuǎn)換為最大化證據(jù)下界ELBO。接下來(lái),我們來(lái)看一下要怎么聯(lián)合優(yōu)化參數(shù) ? 和 θ來(lái)最大化 ELBO。
學(xué)習(xí)Learning
根據(jù)前面的論述,我們知道我們的目標(biāo)是要讓證據(jù)下界盡可能的大,這里再貼一下 ELBO:

從這個(gè)式子中,我們可以看到如果我們想求 ?θ(x;θ,?)和 ??(x;θ,?)。如果這個(gè)期望函數(shù)有對(duì)應(yīng)的closed-form解自然是很好的,比如我們?cè)?VI-變分推理里舉的那個(gè)例子,但是如果沒(méi)有,對(duì)于前者我們求起來(lái)很方便,假設(shè)q(z;?)是容易采樣的,我們可以用采樣的方法:

但是要怎么求 ??(x;θ,?) 呢?我們的期望是依賴 ? 的,這個(gè)求解過(guò)程瞬間就變復(fù)雜了,當(dāng)然其實(shí)也是可以用蒙特卡洛采樣的方法來(lái)求解的,這里先不講了。我們來(lái)看看另一個(gè)方法先。
再參數(shù)化-Reparameterization
我們將上面的式子簡(jiǎn)化一下: 𝔼q(z;?)[r(z)]=∫q(z;?)r(z)dz
把前面ELBO方括號(hào)中的東西全部用 r(?) 來(lái)表示。另外需要注意其中 z 是連續(xù)隨機(jī)變量。接下來(lái)假設(shè)分布 q(z;?)=N(μ,σ2I), 參數(shù)為 ?=(μ,σ)。那么下面兩種方法的采樣是相同的:
采樣 z~q?(z)
采樣 ?~(0,I),z=μ+σ?=g(?;?)
我們把第二種方法帶入前面的式子: 𝔼z~q(z;?)[r(z)]=𝔼?~(0,I)[r(g(?;?))]=∫p(?)r(μ+σ?)d?
那我們?cè)賮?lái)對(duì) ?�求梯度:
??𝔼q(z;?)[r(z)]=??𝔼?[r(g(?;?))]=𝔼?[??r(g(?;?))]
這樣我們就成功把求梯度的符號(hào)挪到了方括號(hào)里面去了,期望也不再依賴 ? 了。只要 r 和 g對(duì)于 ? 是可導(dǎo)的,我們就很容易用蒙特卡洛采樣來(lái)計(jì)算?梯度了。
𝔼?[??r(g(?;?))]≈1k∑k??r(g(?k;?))where?1,…,?k~(0,I)
我們?cè)诤竺嬉矔?huì)看到,這個(gè)trick使得我們的神經(jīng)網(wǎng)絡(luò)可以反向傳導(dǎo)。
回到我們最初的ELBO中,我們可以看大我們的 r(z,?)和這里的 r(z) 還有些差別,但是類(lèi)似的,我們還是可以用reparameterization的方法將其轉(zhuǎn)換為:
𝔼?[??r(g(?;?)),?]≈1k∑k??r(g(?k;?),?)where?1,…,?k~(0,I)
Amortized Inference
假設(shè)我們的數(shù)據(jù)樣本集合為D,那么我們可以把我們的likelihood和ELBO 表達(dá)成:

值得注意的是,我們這里每個(gè)xi 都有一個(gè)參數(shù) ?i與之對(duì)應(yīng),還記得我們的參數(shù) ?是分布 q(z;?)的參數(shù),而這個(gè)分布是為了近似地?cái)M合真實(shí)分布 p(z|xi;θ),從這個(gè)真實(shí)分布中,我們都可以看到這個(gè)后驗(yàn)分布對(duì)于不同的數(shù)據(jù)點(diǎn) 𝕩i 都是不同的,因此對(duì)于不同的數(shù)據(jù)點(diǎn),這個(gè)近似分布對(duì)于每個(gè)數(shù)據(jù)點(diǎn)的分布也應(yīng)該是不同的,于是我們用不同的?i來(lái)表示。
但是這樣一來(lái),如果數(shù)據(jù)集很大,參數(shù)量就炸了呀。于是我們用一個(gè)參數(shù)化函數(shù) fλ把每個(gè) x 映射到一組變分參數(shù)上: xi→?i,?。通常我們把 q(z;fλ(xi)) 寫(xiě)作 q?(z|x)。
Amortized inference: 也就是要學(xué)習(xí)怎么通過(guò) q(z;fλ(xi))),把 xi 映射到一組好的參數(shù)上 ?i。
于是我們的ELBO就變?yōu)?

那我們的整個(gè)計(jì)算流程就是:
初始化 θ(0), ?(0)
隨機(jī)在數(shù)據(jù)集D中抽一個(gè)數(shù)據(jù)點(diǎn) xi
計(jì)算

根據(jù)梯度方向更新θ 和 ?
計(jì)算梯度的方法還是用前面提到的reparameterization。
自編碼器的視角
有了上面的式子之后,我們可以進(jìn)一步的把上面的式子進(jìn)行轉(zhuǎn)換:

那這個(gè)式子就很有趣了。我們引入了z的先驗(yàn), 我們可以把它理解為:
首先,從數(shù)據(jù)集中拿出一個(gè)數(shù)據(jù)點(diǎn) xi
用 q?(z|xi)(encoder) 采樣 z?
用 p(x|z? ;θ) (decoder) 采樣得到重建的x?

我們的訓(xùn)練目標(biāo) (x;θ,?),其中第一項(xiàng)是希望 x? ≈xi^,即 xi 要在 p(x|z? ;θ)下概率盡可能的大。第二項(xiàng),是為了讓 z? 盡可能的貼合先驗(yàn) p(z)換句話說(shuō)假設(shè)我們的先驗(yàn)是已知的,那么我們可以用它來(lái)代替q?直接進(jìn)行采樣z? ~p(z),再用解碼器生成分布 p(x|z? ;θ),進(jìn)行采樣得到樣本。
GAN
一個(gè)最優(yōu)的生成模型應(yīng)該能夠生成最好的樣本質(zhì)量(sample quality) 和最高的測(cè)試集的log-likelihood。但是對(duì)于不完美的模型,取得高的 log-likelihood 也許并不意味著好的樣本質(zhì)量,反之亦然。
Two-sample tests
給定了 S1=x~P,S=x~Q, 一個(gè) two-sample test 指的是下面的兩個(gè)假設(shè)(hypothesis):
Null hypothesis H0:P=Q
Alternate hypothesis: H1:P≠Q(mào)
我們用統(tǒng)計(jì)指標(biāo) T 來(lái)比較 S1和 S2,比如,T 可以是兩個(gè)分布均值的不同或者方差的不同。如果 T 小于一個(gè)閾值 α,那么接受 H0 否則就拒絕。我們可以看到測(cè)試統(tǒng)計(jì)指標(biāo) T 是 likelihood-free 的(likelihood-free),因?yàn)樗⒉恢苯涌紤]計(jì)算概率密度 P或者 Q,它只比較了兩個(gè)分布的樣本集合S1和 S2。
先前我們假設(shè)可以直接獲取到數(shù)據(jù)集S1==x~Pdata。另外,我們有模型分布 pθ,假設(shè)模型分布允許高效率采樣,S2=x~pθ。 Alternate notion of distance between distributions (改變兩個(gè)分布之間的距離定義): 訓(xùn)練一個(gè)生成模型從而最小化 S1 和 S2 之間的two-sample test 目標(biāo)。
到這里,我們可以發(fā)現(xiàn),我們把從直接在概率密度分布上建模轉(zhuǎn)換到了用一個(gè)考慮兩個(gè)分布上的樣本的統(tǒng)計(jì)指標(biāo)來(lái)衡量?jī)蓚€(gè)分布是否相同。因此找到一個(gè)好的統(tǒng)計(jì)指標(biāo)是至關(guān)重要的,它決定了我們是否能生成出高質(zhì)量的樣本。
用判別器做 Two-Sample Test
在高維空間中找到這樣的統(tǒng)計(jì)指標(biāo)還是很難的,比如說(shuō)兩個(gè)高斯分布的方差相同,均值不同,那么它們的分布也是完全不同的。那在高維空間中更是如此,稍微某個(gè)維度有一些差異,那對(duì)應(yīng)的分布可能就差很大。那么我們是不是能學(xué)習(xí)一個(gè)統(tǒng)計(jì)指標(biāo)能找到這些差異,它最大化兩個(gè)樣本集S1 和 S2 之間的距離定義呢?
到這里,我們就有了兩個(gè)目標(biāo),一個(gè)目標(biāo)是想最小化 S1 和 S2 之間的距離,使得 S2 的樣本盡量逼近 S1;另一個(gè)目標(biāo)是最大化 S1和 S2 樣本之間的距離,找到那些會(huì)讓兩個(gè)分布很不相同的差異。
生成對(duì)抗網(wǎng)絡(luò)
生成對(duì)抗網(wǎng)絡(luò)是兩個(gè)玩家之間的零和游戲,這兩個(gè)玩家是 生成器 和 判別器。
生成器 (generator) 是一個(gè)有向的隱變量模型,隱變量 z和生成樣本x之間的映射為 Gθ。它的目標(biāo)為最小化 two-sample test。

判別器 (discriminator) 是一個(gè)函數(shù)比如神經(jīng)網(wǎng)絡(luò),用來(lái)區(qū)分來(lái)自數(shù)據(jù)集的”真實(shí)”數(shù)據(jù),和來(lái)自模型生成器的”偽造”數(shù)據(jù)。它的目標(biāo)為最大化 two-sample test。

訓(xùn)練目標(biāo)
判別器的訓(xùn)練目標(biāo)為:
上面的式子可以理解為,對(duì)于一個(gè)固定的生成器,判別器就是做了一個(gè)二分類(lèi),交叉熵為目標(biāo),當(dāng)x~pdata,即樣本來(lái)自真實(shí)數(shù)據(jù)集,那么概率賦值為1,當(dāng) x~pG,即樣本來(lái)自生成器,那么概率賦值為0.
最優(yōu)的判別器有:

證明:對(duì)于給定的生成器 G,判別器 D 的訓(xùn)練目標(biāo)就是要最大化 V(G,D)

對(duì)于任意的 (a,b)∈R2,(a,b)≠0,0(,函數(shù) y→alog(y)+blog(1?y),在區(qū)間 [0,1][0,1] 上的取得最大值的地方在 aa+b。因此,令y=D(x),即可得證。
對(duì)于生成器,我們的訓(xùn)練目標(biāo)為:

也就是說(shuō)我們希望能找到一個(gè)生成器,使得判別器的目標(biāo)不能實(shí)現(xiàn)(最小),因此也就產(chǎn)生了對(duì)抗。
這時(shí),將最優(yōu)判別器 D?G(?) 帶入,我們有:
DJSD 表示為 2xJensen-Shannon Divergence,也叫做對(duì)稱KL散度,寫(xiě)作:


訓(xùn)練流程
我們來(lái)總結(jié)一下 GAN 的訓(xùn)練步驟:
從真實(shí)數(shù)據(jù)D中采樣 m個(gè)訓(xùn)練樣本 x(1),x(2),…,x(m)
從噪聲分布 pz 中采樣 m 個(gè)噪聲向量 z(1),z(2),…,z(m)
用隨機(jī)梯度下降更新生成器參數(shù) θ

因?yàn)槲覀冞@里是更新生成器,所以不關(guān)注 V的第一項(xiàng)(從真實(shí)數(shù)據(jù)采樣)。
用隨機(jī)梯度上升更新判別器參數(shù) ?
以上步驟重復(fù)固定個(gè)epochs
上面的訓(xùn)練過(guò)程是先訓(xùn)練生成器然后訓(xùn)練判別器,這個(gè)順序也可以反過(guò)來(lái)。
訓(xùn)練 GAN 中帶來(lái)的困難
GAN的訓(xùn)練是比較困難的,許多論文提出了很多的tricks,主要的困難有以下幾個(gè)方面:
不穩(wěn)定的優(yōu)化過(guò)程 Unstable optimization
Mode collapse
評(píng)估 Evaluation
Unstable optimization
理論上來(lái)說(shuō),在每個(gè)step,判別器如果達(dá)到了最優(yōu),生成器在函數(shù)空間中更新,那么生成器是能夠收斂到數(shù)據(jù)分布的。但是實(shí)際訓(xùn)練過(guò)程中,生成器和判別的損失函數(shù)值總是震蕩著的。也不同于極大似然估計(jì)MLE,應(yīng)該什么時(shí)候停止訓(xùn)練也很難判斷。
Mode Collapse
Mode Collapse 主要指的是GAN的生成器總是只生成固定的一個(gè)或幾個(gè)樣本,類(lèi)似于modes(眾數(shù))。事實(shí)上,筆者發(fā)現(xiàn)其它的一些生成模型也會(huì)有這個(gè)問(wèn)題。
課件中給的例子是這樣的:假設(shè)我們的真實(shí)分布是混合高斯(mixture of Gaussians)

但是在生成過(guò)程中,我們的生成器分布總是在各個(gè)中心點(diǎn)之間跳來(lái)跳去。
對(duì)于眾數(shù)問(wèn)題,可以通過(guò)改變架構(gòu),增加正則項(xiàng),引入噪音干擾等方法。這里有個(gè)repo,給了許多GAN的訓(xùn)練建議和tricks。
FLOW
自回歸模型雖然似然likelihood很容易計(jì)算但是沒(méi)有直接的辦法來(lái)學(xué)習(xí)特征。 變分自編碼器雖然可以學(xué)習(xí)特征的表示(隱變量 z 但是它的邊緣似然函數(shù)很難求,所以我們?nèi)《昧俗畲蠡C據(jù)下界ELBO來(lái)近似求解。
我們有沒(méi)有辦法設(shè)計(jì)一個(gè)含有隱變量的模型并且它的似然函數(shù)也容易求呢?的確是有的。 我們對(duì)這樣的模型還有些其他要求,除了概率密度是可以計(jì)算的,還需要容易采樣。許多簡(jiǎn)單的分布像是高斯和均勻分布都是滿足這個(gè)要求的。但是實(shí)際的數(shù)據(jù)分布是很復(fù)雜的。那有什么辦法可以用這些容易采樣又容易計(jì)算概率密度的分布映射到復(fù)雜分布呢?有的,用換元法(change of variables)
在后面的部分中,讀者可以記住 z 來(lái)自于一個(gè)容易采樣的分布,x 來(lái)自于實(shí)際的數(shù)據(jù)的復(fù)雜分布。
在介紹 Flow 模型前,我們先來(lái)看一些基本概念。
換元法
相信大家對(duì)這個(gè)概念都不陌生。如果讀者對(duì)這個(gè)概念不熟悉,可以參考這個(gè)網(wǎng)站。
先來(lái)貼一下一維的公式: 如果 X=f(Z),f(?) 是單調(diào)的并且它的逆函數(shù) Z=f?1(X)=h(X),那么:

舉個(gè)例子,假設(shè) Z=1/4X并且 Z~[0,2], 那么 pX(4)為多少? 帶入公式 h(X)=X/4?,所以 pX(4)=pZ(1)h′(4)=1/2×1/4=1/8。
更一般的,假設(shè) Z 是一個(gè)均勻隨機(jī)向量 [0,1]^n,X=AZ,其中 A 是一個(gè)可逆的方陣,它的逆矩陣為 W=A?1,那么 X 是怎么分布的?
矩陣 A 是把一個(gè)單位超立方體 [0,1]n 變成了一個(gè)超平行體。超立方體和超平行四邊形是正方形和平行四邊形的更一般式。下圖中,我們看到這里的變換矩陣

把單位正方形變成了一個(gè)任意的平行四邊形。

超平行四邊形體的體積(volume) 等于轉(zhuǎn)換矩陣 A的行列式的值。

因?yàn)?X是均勻分布在超四邊形上的,因此:


標(biāo)準(zhǔn)化流模型 Normalizing Flow Models
在一個(gè)標(biāo)準(zhǔn)流模型(normalizing flow model), 假設(shè) Z和 X分別為隱變量和觀測(cè)變量,并且他們之間的映射為函數(shù) f:?n??n,并且它是可逆的,那么 X=f(Z),Z=f?1(X):

那么利用換元法,可以得到觀測(cè)變量的似然值為:

這里的 f 轉(zhuǎn)換函數(shù)我們加上了參數(shù)下標(biāo) θ,也就是我們的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的參數(shù)。從這個(gè)公式中,我們可以看到,假設(shè)我們的隱變量來(lái)自一個(gè)簡(jiǎn)單分布,我們經(jīng)過(guò)轉(zhuǎn)換 fθ,可以把它隱射到復(fù)雜分布 pX上,并且當(dāng)我們想要計(jì)算觀測(cè)變量的概率值的時(shí)候只需要把這個(gè)過(guò)程逆轉(zhuǎn)過(guò)來(lái),用 f?1對(duì) x 進(jìn)行轉(zhuǎn)換并代入到簡(jiǎn)單分布pZ中,乘以相應(yīng)的行列式的值即可。當(dāng)然,讀者應(yīng)該會(huì)有疑惑,如何保證這個(gè)轉(zhuǎn)換是可逆的呢?這個(gè)我們后面再提。
這里插一張筆者從李宏毅老師的課件里摘來(lái)的圖:

這里的generator,也就是我們的 fθ,這里的正太分布π(z) 即為簡(jiǎn)單分布 pZ。
流式轉(zhuǎn)換(flow of transformations)
標(biāo)準(zhǔn)化-Normalizing 換元法使得我們用一個(gè)可逆變換得到了標(biāo)準(zhǔn)化的概率密度。那么 流-Flow 的意思指的是一系列的可逆變換互相組合在一起:

首先 z0 來(lái)自于一個(gè)簡(jiǎn)單分布,例如,高斯分布
用 M 個(gè)可逆轉(zhuǎn)換后得到了 x,即: x?zM
通過(guò)換元,我們可以得到 (乘積的行列式等于行列式的乘積):

Planar flows
Planar flow 指的flow模型是它的可逆轉(zhuǎn)換為:

具體的代碼,可以參考這個(gè)repo,但是這里的代碼中的分布是由close-form解的,loss其實(shí)用的是KL divergence,和我們所希望學(xué)習(xí)的任意的實(shí)際數(shù)據(jù)分布(沒(méi)有close-formed)是不一樣的,之所以不能學(xué)習(xí)任意分布是因?yàn)檎撐闹幸矝](méi)給出計(jì)算Likelihoode所需要的 f?1,論文參考這里。 后面我們會(huì)寫(xiě)要怎么設(shè)計(jì)這個(gè)轉(zhuǎn)換。
下圖是 Planar flow 通過(guò)多次轉(zhuǎn)換后把簡(jiǎn)單的高斯分布變成了復(fù)雜的一個(gè)分布:

學(xué)習(xí)和推理
我們把上面的likelhood,加上log,得到在數(shù)據(jù)集D上的極大似然為:

當(dāng)我們訓(xùn)練完模型,想要采樣的時(shí)候,可以通過(guò)前向轉(zhuǎn)換 z?x z~pZ(z)x=fθ(z)
學(xué)習(xí)隱變量的表示可以通過(guò)逆轉(zhuǎn)換得到,比如我們有一張圖片,我們可以得到它的特征:
z=f?1θ(x)
因?yàn)橛?jì)算Jacobian的行列式值復(fù)雜度很高 O(n3),但是我們知道上三角/下三角矩陣的行列式的值為對(duì)角線元素相乘 O(n),所以復(fù)雜度一下子就降下來(lái)了。所以我們可以按照這個(gè)思路來(lái)設(shè)計(jì)我們的可逆轉(zhuǎn)換函數(shù)。
NICE
NICE(Non-linear Independent Components Estimation),源自這里。它包含了兩種類(lèi)型的層,additive coupling layers 和 rescaling layers。
Additive coupling layers
首先我們把隱變量 z 分成兩個(gè)部分z1:d 和 zd+1:n,1≤d<n1。
那么我們的前向映射: z?x
x1:d=z1:d (直接拷貝過(guò)去)
xd+1:n=zd+1:n+mθ(z1:d),其中mθ(?)是一個(gè)神經(jīng)網(wǎng)絡(luò),參數(shù)為 θ,輸入為維度為 d,輸出維度為 n?d。
逆映射:x?z
z1:d=x1:d (直接拷貝回去)

因此,det(J)=1det(下三角矩陣,且對(duì)角線為1),當(dāng)行列式的值為1的時(shí)候,我們稱這種變換為 Volume preserving transformation。
這些 coupling layers 可以任意疊加下去,所以是 additive的。并且每一層的隱變量分隔partition可以是不一樣的(d 的取值每一層都可以不同)。
Rescaling layers
NICE 的最后一層用了一個(gè) rescaling transformation。同樣地,
前向映射: z?x: xi=sizi
其中, si 是第i維的scaling factor.
逆映射:x?z:
zi=xisi
前向映射的Jacobian矩陣為:

好了,我們的每種類(lèi)型的曾都有前向映射和逆映射了,就可以開(kāi)開(kāi)心心的訓(xùn)練我們的神經(jīng)網(wǎng)絡(luò)了。
Real-NVP
Real-NVP(Non-volume presreving extention of NICE)是NICE模型的一個(gè)拓展,可以參考這篇論文。

如下圖所示:

我們可以發(fā)現(xiàn) z1:d 基本都是直接復(fù)制下去了,其實(shí)也可以讓 z1:d和 zd+1:n 反一下,如下圖(疊加了3個(gè)coupling layers):

將自回歸模型看成流模型
這一節(jié)中,我們嘗試?yán)斫馊绾伟炎曰貧w模型看成是流模型,接著我們介紹兩種模型Masked Autoregressive Flow (MAF) 和 Inverse Autoregressive Flow (IAF)模型。
假設(shè)我們的自回歸模型:

MAF
我們的MAF(Masked Autoregressive Flow)的前向映射:

那么它的前向映射: z?x
讓 x1=exp(α1)z1+μ1。并且計(jì)算 μ2(x1),α2(x1)
讓 x2=exp(α2)z2+μ2。并且計(jì)算 μ3(x1,x2),α3(x1,x2)
采樣依然是序列化的并且慢(和自回歸一樣),需要 O(n) 的時(shí)間。
逆映射如下圖:
逆映射:x?z
所有的 μi和 αi 都可以并行計(jì)算,因?yàn)?zi 互相沒(méi)有依賴關(guān)系。比如我們可以用自回歸文章中介紹的 MADE 模型來(lái)做。
z1=(x1?μ1)/exp(α1)
z2=(x2?μ2)/exp(α2)
…
Jacobian矩陣是下三角,因此行列式的值計(jì)算起來(lái)也很快。 似然值評(píng)估(likelihood estimation)起來(lái)也很簡(jiǎn)單方便,并且是并行的。(因?yàn)?/span>zi可以并行計(jì)算)
IAF
前面的MAF,我們發(fā)現(xiàn)采樣是很慢的但是計(jì)算likelihood很快,而在IAF(Inverse Autoregressive Flow)中這種情況反了過(guò)來(lái)。同樣地,我們分別來(lái)看看前向映射,逆映射和Jacobian值。
前向映射: z?x (并行):
對(duì) i=1,…,n 采樣 zi~(0,1)
并行計(jì)算好所有的 μi 和 αi
x1=exp(α1)z1+μ1
x2=exp(α2)z2+μ2
逆映射:x?z (序列化計(jì)算):
讓 z1=(x1?μ1)/exp(α1), 根據(jù) z1計(jì)算μ2(z1), α2(z1)
讓 z2=(x2?μ2)/exp(α2), 根據(jù) z1,z2 計(jì)算 μ3(z1,z2),α3(z1,z2)
從上面的映射中可以看到采樣很方便, 計(jì)算數(shù)據(jù)點(diǎn)的likelihood很慢(訓(xùn)練)。
注意,IAF對(duì)給定的數(shù)據(jù)點(diǎn)x計(jì)算likelihood慢,但是評(píng)估計(jì)算它自己生成的點(diǎn)的概率是很快的。
IAF 是 MAF 的逆過(guò)程
如下圖,我們發(fā)現(xiàn)在 MAF 的逆轉(zhuǎn)換中,把 x 和 z交換一下,就變成了 IAF 的前向轉(zhuǎn)換。類(lèi)似地。 MAF 的前向轉(zhuǎn)換是 IAF的逆轉(zhuǎn)換。
MAF的likelihood計(jì)算很快,采樣很慢。IAF的采樣很快,likelihood計(jì)算很慢。所以MAF更適合基于極大似然估計(jì)(MLE)的訓(xùn)練過(guò)程以及概率密度計(jì)算,IAF更適合實(shí)施的生成過(guò)程。那我們可以同時(shí)利用兩個(gè)模型的優(yōu)點(diǎn)嗎?
Parallel Wavenet
接下來(lái)就看一下我們?cè)趺赐瑫r(shí)利用 MAF 和 IAF 的特點(diǎn),訓(xùn)練一個(gè)采樣和訓(xùn)練都很快的模型。
Parallel Wavenet 分兩個(gè)部分,一個(gè)老師模型,一個(gè)學(xué)生模型。 其中老師模型是 MAF, 用來(lái)做訓(xùn)練計(jì)算極大似然估計(jì)MLE。 一旦老師模型訓(xùn)練好了之后,我們?cè)賮?lái)訓(xùn)練學(xué)生模型。學(xué)生模型用 IAF,雖然學(xué)生模型不能快速計(jì)算給定的外部數(shù)據(jù)點(diǎn)的概率密度,但是它可以很快地采樣,并且它也可以直接計(jì)算它的隱變量的概率密度。
概率密度蒸餾(Probability density distillation): 學(xué)生模型的訓(xùn)練目標(biāo)是最小化學(xué)生分布 s和 老師分布 t�之間的 KL 散度。
DKL(s,t)=Ex~s[logs(x)?logt(x)]
計(jì)算流程為:
用學(xué)生模型 IAF 抽取樣本 x (詳見(jiàn)IAF前向轉(zhuǎn)換)
獲得學(xué)生模型的概率密度 (這里的概率密度直接用上一步中的z和相應(yīng)的Jacobian矩陣的值exp(∑ni=1αi)得到)
用老師模型 MAF 計(jì)算,根據(jù)學(xué)生模型采樣得到的 x樣本的概率密度。
計(jì)算KL散度
整體的訓(xùn)練過(guò)程就是:
用極大似然訓(xùn)練老師模型 MAF
用最小化和老師模型的分布的KL散度訓(xùn)練學(xué)生模型 IAF
測(cè)試過(guò)程: 用學(xué)生模型直接測(cè)試,生成樣本
這個(gè)流程的效率比原來(lái)的 Wavenet-自回歸模型快了近1000倍!
Parallel Wavenet 論文
我們來(lái)看一下這個(gè)模型的圖:
首先呢,我們的老師模型 MAF 已經(jīng)是訓(xùn)練好了,注意在訓(xùn)練過(guò)程中會(huì)加上一些語(yǔ)言學(xué)信息特征 linguistic features(通常大家用的都是spectrogram頻譜,筆者不是很確定直接加像是文字特征行不行)。接著呢,我們讓學(xué)生模型 IAF 進(jìn)行采樣,采樣得到的樣本(紫色的圈圈)放到老師模型中去評(píng)估概率密度。
WaveGlow
我們還是回到Glow模型來(lái)看看另一個(gè)例子,WaveGlow
這里的 WN 模塊指的是類(lèi)似于WaveNet中的結(jié)構(gòu),實(shí)際上它可以是任意的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),作者用了膨脹卷積(dilated convolutions)和gated-tanh,invertible 1x1 convolution可以參考這篇論文。稍微注意一下,我們前面都是從 z?x,現(xiàn)在這張圖我們是直接看的逆轉(zhuǎn)換x?z(畢竟在訓(xùn)練的時(shí)候,我們就是在用 z 計(jì)算likelihood)。
代碼可以參考這里。
diffusion發(fā)展史
對(duì)于擴(kuò)散模型技術(shù)正在蓬勃發(fā)展期,網(wǎng)上的資料也很多很全面,各種綜述文章也不少。我就不在做更多闡述,會(huì)把一些我覺(jué)得整理不錯(cuò)的技術(shù)帖綜合放進(jìn)文章,減少大家文章檢索的工作保持閱讀流暢。
其實(shí)diffusion模型和上面一些模型的主要差異在于對(duì)生成過(guò)程的建模。相當(dāng)于是通過(guò)增加了一個(gè)隨機(jī)生成過(guò)程的仿真讓生成內(nèi)容質(zhì)量可控。
擴(kuò)散模型(diffusion models)是深度生成模型中新的SOTA。擴(kuò)散模型在圖片生成任務(wù)中超越了原SOTA:GAN,并且在諸多應(yīng)用領(lǐng)域都有出色的表現(xiàn),如計(jì)算機(jī)視覺(jué),NLP、波形信號(hào)處理、多模態(tài)建模、分子圖建模、時(shí)間序列建模、對(duì)抗性凈化等。此外,擴(kuò)散模型與其他研究領(lǐng)域有著密切的聯(lián)系,如穩(wěn)健學(xué)習(xí)、表示學(xué)習(xí)、強(qiáng)化學(xué)習(xí)。然而,原始的擴(kuò)散模型也有缺點(diǎn),它的采樣速度慢,通常需要數(shù)千個(gè)評(píng)估步驟才能抽取一個(gè)樣本;它的最大似然估計(jì)無(wú)法和基于似然的模型相比;它泛化到各種數(shù)據(jù)類(lèi)型的能力較差。如今很多研究已經(jīng)從實(shí)際應(yīng)用的角度解決上述限制做出了許多努力,或從理論角度對(duì)模型能力進(jìn)行了分析。
然而,現(xiàn)在缺乏對(duì)擴(kuò)散模型從算法到應(yīng)用的最新進(jìn)展的系統(tǒng)回顧。為了反映這一快速發(fā)展領(lǐng)域的進(jìn)展,我們對(duì)擴(kuò)散模型進(jìn)行了首個(gè)全面綜述。我們?cè)O(shè)想我們的工作將闡明擴(kuò)散模型的設(shè)計(jì)考慮和先進(jìn)方法,展示其在不同領(lǐng)域的應(yīng)用,并指出未來(lái)的研究方向。此綜述的概要如下圖所示:
盡管diffusion model在各類(lèi)任務(wù)中都有著優(yōu)秀的表現(xiàn),它仍還有自己的缺點(diǎn),并有諸多研究對(duì)diffusion model進(jìn)行了改善。為了系統(tǒng)地闡明diffusion model的研究進(jìn)展,我們總結(jié)了原始擴(kuò)散模型的三個(gè)主要缺點(diǎn),采樣速度慢,最大化似然差、數(shù)據(jù)泛化能力弱,并提出將的diffusion models改進(jìn)研究分為對(duì)應(yīng)的三類(lèi):采樣速度提升、最大似然增強(qiáng)和數(shù)據(jù)泛化增強(qiáng)。我們首先說(shuō)明改善的動(dòng)機(jī),再根據(jù)方法的特性將每個(gè)改進(jìn)方向的研究進(jìn)一步細(xì)化分類(lèi),從而清楚的展現(xiàn)方法之間的聯(lián)系與區(qū)別。在此我們僅選取部分重要方法為例, 我們的工作中對(duì)每類(lèi)方法都做了詳細(xì)的介紹,內(nèi)容如圖所示:

在分析完三類(lèi)擴(kuò)散模型后,我們將介紹其他的五種生成模型GAN,VAE,Autoregressive model, Normalizing flow, Energy-based model??紤]到擴(kuò)散模型的優(yōu)良性質(zhì),研究者們已經(jīng)根據(jù)其特性將diffusion model與其他生成模型結(jié)合,所以為了進(jìn)一步展現(xiàn)diffusion model 的特點(diǎn)和改進(jìn)工作,我們?cè)敿?xì)地介紹了diffusion model和其他生成模型的結(jié)合的工作并闡明了在原始生成模型上的改進(jìn)之處。Diffusion model在諸多領(lǐng)域都有著優(yōu)異的表現(xiàn),并且考慮到不同領(lǐng)域的應(yīng)用中diffusion model產(chǎn)生了不同的變形,我們系統(tǒng)地介紹了diffusion model的應(yīng)用研究,其中包含如下領(lǐng)域:計(jì)算機(jī)視覺(jué),NLP、波形信號(hào)處理、多模態(tài)建模、分子圖建模、時(shí)間序列建模、對(duì)抗性凈化。對(duì)于每個(gè)任務(wù),我們定義了該任務(wù)并介紹利用擴(kuò)散模型處理任務(wù)的工作,我們將本項(xiàng)工作的主要貢獻(xiàn)總結(jié)如下:
l 新的分類(lèi)方法:我們對(duì)擴(kuò)散模型和其應(yīng)用提出了一種新的、系統(tǒng)的分類(lèi)法。具體的我們將模型分為三類(lèi):采樣速度提升、最大似然提升、數(shù)據(jù)泛化提升。進(jìn)一步地,我們將擴(kuò)散模型的應(yīng)用分為七類(lèi):計(jì)算機(jī)視覺(jué),NLP、波形信號(hào)處理、多模態(tài)建模、分子圖建模、時(shí)間序列建模、對(duì)抗性凈化。
l 全面的回顧:我們首次全面地概述了現(xiàn)代擴(kuò)散模型及其應(yīng)用。我們展示了每種擴(kuò)散模型的主要改進(jìn),和原始模型進(jìn)行了必要的比較,并總結(jié)了相應(yīng)的論文。對(duì)于擴(kuò)散模型的每種類(lèi)型的應(yīng)用,我們展示了擴(kuò)散模型要解決的主要問(wèn)題,并說(shuō)明它們?nèi)绾谓鉀Q這些問(wèn)題
l 未來(lái)研究方向:我們對(duì)未來(lái)研究提出了開(kāi)放型問(wèn)題,并對(duì)擴(kuò)散模型在算法和應(yīng)用方面的未來(lái)發(fā)展提供了一些建議。
二. 擴(kuò)散模型基礎(chǔ)
生成式建模的一個(gè)核心問(wèn)題是模型的靈活性和可計(jì)算性之間的權(quán)衡。擴(kuò)散模型的基本思想是正向擴(kuò)散過(guò)程來(lái)系統(tǒng)地?cái)_動(dòng)數(shù)據(jù)中的分布,然后通過(guò)學(xué)習(xí)反向擴(kuò)散過(guò)程恢復(fù)數(shù)據(jù)的分布,這樣就了產(chǎn)生一個(gè)高度靈活且易于計(jì)算的生成模型。
A. Denoising Diffusion Probabilistic Models(DDPM)
一個(gè)DDPM由兩個(gè)參數(shù)化馬爾可夫鏈組成,并使用變分推斷以在有限時(shí)間后生成與原始數(shù)據(jù)分布一致的樣本。前向鏈的作用是擾動(dòng)數(shù)據(jù),它根據(jù)預(yù)先設(shè)計(jì)的噪聲進(jìn)度向數(shù)據(jù)逐漸加入高斯噪聲,直到數(shù)據(jù)的分布趨于先驗(yàn)分布,即標(biāo)準(zhǔn)高斯分布。反向鏈從給定的先驗(yàn)開(kāi)始并使用參數(shù)化的高斯轉(zhuǎn)換核,學(xué)習(xí)逐步恢復(fù)原數(shù)據(jù)分布。用 x0 ~q(x0) 表示原始數(shù)據(jù)及其分布,則前向鏈的分布是可由下式表達(dá):

這說(shuō)明前向鏈?zhǔn)邱R爾可夫過(guò)程, xt 是加入t步噪音后的樣本, βt 是事先給定的控制噪聲進(jìn)度的參數(shù)。當(dāng) ∏t1?βt趨于1時(shí), xT 可以近似認(rèn)為服從標(biāo)準(zhǔn)高斯分布。當(dāng) βt 很小時(shí),逆向過(guò)程的轉(zhuǎn)移核可以近似認(rèn)為也是高斯的:
我們可以將變分下界作為損失函數(shù)進(jìn)行學(xué)習(xí):
B. Score-Based Generative Models(SGM)
上述DDPM可以視作SGM的離散形式。SGM構(gòu)造一個(gè)隨機(jī)微分方程(SDE)來(lái)平滑的擾亂數(shù)據(jù)分布,將原始數(shù)據(jù)分布轉(zhuǎn)化到已知的先驗(yàn)分布:
和一個(gè)相應(yīng)的逆向SDE,來(lái)將先驗(yàn)分布變換回原始數(shù)據(jù)分布:
因此,要逆轉(zhuǎn)擴(kuò)散過(guò)程并生成數(shù)據(jù),我們需要的唯一信息就是在每個(gè)時(shí)間點(diǎn)的分?jǐn)?shù)函數(shù)。利用score-matching的技巧我們可以通過(guò)如下?lián)p失函數(shù)來(lái)學(xué)習(xí)分?jǐn)?shù)函數(shù):
對(duì)兩種方法的進(jìn)一步介紹和兩者關(guān)系的介紹請(qǐng)參見(jiàn)我們的文章。
原始擴(kuò)散模型的三個(gè)主要缺點(diǎn),采樣速度慢,最大化似然差、數(shù)據(jù)泛化能力弱。最近許多研究都在解決這些缺點(diǎn),因此我們將改進(jìn)的擴(kuò)散模型分為三類(lèi):采樣速度提升、最大似然增強(qiáng)和數(shù)據(jù)泛化增強(qiáng)。在接下來(lái)的三、四、五節(jié)我們將對(duì)這三類(lèi)模型進(jìn)行詳細(xì)的介紹。
三. 采樣加速方法
在應(yīng)用時(shí),為了讓新樣本的質(zhì)量達(dá)到最佳,擴(kuò)散模型往往需要進(jìn)行成千上萬(wàn)步計(jì)算來(lái)獲取一個(gè)新樣本。這限制了diffusion model的實(shí)際應(yīng)用價(jià)值,因?yàn)樵趯?shí)際應(yīng)用時(shí),我們往往需要產(chǎn)生大量的新樣本,來(lái)為下一步處理提供材料。研究者們?cè)谔岣遜iffusion model采樣速度上進(jìn)行了大量的研究。我們對(duì)這些研究進(jìn)行了詳細(xì)的闡述。我們將其細(xì)化分類(lèi)為三種方法:Discretization Optimization,Non-Markovian Process,Partial Sampling。
A. Discretization Optimization方法優(yōu)化求解diffusion SDE的方法。因?yàn)楝F(xiàn)實(shí)中求解復(fù)雜SDE只能使用離散解來(lái)逼近真正的解,所以該類(lèi)方法試圖優(yōu)化SDE的離散化方法,在保證樣本質(zhì)量的同時(shí)減少離散步數(shù)。SGM 提出了一個(gè)通用的方法來(lái)求解逆向過(guò)程,即對(duì)前向和后向過(guò)程采取相同的離散方法。如果給定了前向SDE的離散方式:

那么我們就可以以相同的方式離散化逆向SDE:

這種方法比樸素DDPM效果略好一點(diǎn)。進(jìn)一步,SGM向SDE求解器中加入了一個(gè)矯正器,從而讓每一步生成的樣本都有正確的分布。在求解的每一步,求解器給出一個(gè)樣本后,矯正器都使用馬爾可夫鏈蒙特卡羅方法來(lái)矯正剛生成的樣本的分布。實(shí)驗(yàn)表明向求解器中加入矯正器比直接增加求解器的步數(shù)效率更高。
B. Non-Markovian Process方法突破了原有Markovian Process的限制,其逆過(guò)程的每一步可以依賴更多以往的樣本來(lái)進(jìn)行預(yù)測(cè)新樣本,所以在步長(zhǎng)較大時(shí)也能做出較好的預(yù)測(cè),從而加速采樣過(guò)程。其中主要的工作DDIM,不再假設(shè)前向過(guò)程是馬爾可夫過(guò)程,而是服從如下分布:

DDIM的采樣過(guò)程可以視為離散化的神經(jīng)常微分方程,其采樣過(guò)程更高效,并且支持樣本的內(nèi)插。進(jìn)一步的研究發(fā)現(xiàn)DDIM可以視作流形上擴(kuò)散模型PNDM的特例。
C. Partial Sampling方法通過(guò)在generation process中忽略一部分的時(shí)間節(jié)點(diǎn),而只使用剩下的時(shí)間節(jié)點(diǎn)來(lái)生成樣本,直接減少了采樣時(shí)間。例如,Progressive Distillation從訓(xùn)練好的擴(kuò)散模型中蒸餾出效率更高的擴(kuò)散模型。對(duì)于訓(xùn)練好的一個(gè)擴(kuò)散模型,Progressive Distillation會(huì)從新訓(xùn)練一個(gè)擴(kuò)散模型,使新的擴(kuò)散模型的一步對(duì)應(yīng)于訓(xùn)練好的擴(kuò)散模型的兩步,這樣新模型就可以省去老模型一半的采樣過(guò)程。具體算法如下:

不斷循環(huán)這個(gè)蒸餾過(guò)程就能讓采樣步驟指數(shù)級(jí)下降。
四. 最大似然估計(jì)加強(qiáng)
擴(kuò)散模型在最大似然估計(jì)的表現(xiàn)差于基于似然函數(shù)的生成模型,但最大化似然估計(jì)在諸多應(yīng)用場(chǎng)景都有重要意義,比如圖片壓縮, 半監(jiān)督學(xué)習(xí), 對(duì)抗性凈化。由于對(duì)數(shù)似然難以直接計(jì)算,研究主要集中在優(yōu)化和分析變分下界(VLB)。我們對(duì)提高擴(kuò)散模型最大似然估計(jì)的模型進(jìn)行了詳細(xì)的闡述。我們將其細(xì)化分類(lèi)為三類(lèi)方法:Objectives Designing,Noise Schedule Optimization,Learnable Reverse Variance。
A. Objectives Designing方法利用擴(kuò)散 SDE推倒出生成數(shù)據(jù)的對(duì)數(shù)似然與分?jǐn)?shù)函數(shù)匹配的損失函數(shù)的關(guān)系。這樣通過(guò)適當(dāng)設(shè)計(jì)損失函數(shù),就可以最大化 VLB 和對(duì)數(shù)似然。 Song et al. 證明了可以設(shè)計(jì)損失函數(shù)的權(quán)重函數(shù),使得plug-in reverse SDE 生成樣本的似然函數(shù)值小于等于損失函數(shù)值,即損失函數(shù)是似然函數(shù)的上界。分?jǐn)?shù)函數(shù)擬合的損失函數(shù)如下:

我們只需將權(quán)重函數(shù) λ(t) 設(shè)為擴(kuò)散系數(shù)g(t)即可讓損失函數(shù)成為似然函數(shù)的VLB,即:
B. Noise Schedule Optimization通過(guò)設(shè)計(jì)或?qū)W習(xí)前向過(guò)程的噪聲進(jìn)度來(lái)增大VLB。VDM證明了當(dāng)離散步數(shù)接近無(wú)窮時(shí),損失函數(shù)完全由信噪比函數(shù)SNR(t)的端點(diǎn)決定:
那么在離散步數(shù)接近無(wú)窮時(shí),可以通過(guò)學(xué)習(xí)信噪比函數(shù)SNR(t)的端點(diǎn)最優(yōu)化VLB,而通過(guò)學(xué)習(xí)信噪比函數(shù)中間部分的函數(shù)值來(lái)實(shí)現(xiàn)模型其他方面的改進(jìn)。
C. Learnable Reverse Variance方法學(xué)習(xí)反向過(guò)程的方差,從而較少擬合誤差,可以有效地最大化VLB。Analytic-DPM證明,在DDPM和DDIM中存在反向過(guò)程中的最優(yōu)期望和方差:
使用上述公式和訓(xùn)練好的分?jǐn)?shù)函數(shù),在給定前向過(guò)程的條件下,最優(yōu)的VLB可以近似達(dá)到。
五. 數(shù)據(jù)泛化增強(qiáng)
擴(kuò)散模型假設(shè)數(shù)據(jù)存在于歐幾里得空間,即具有平面幾何形狀的流形,并添加高斯噪聲將不可避免地將數(shù)據(jù)轉(zhuǎn)換為連續(xù)狀態(tài)空間,所以擴(kuò)散模型最初只能處理圖片等連續(xù)性數(shù)據(jù),直接應(yīng)用離散數(shù)據(jù)或其他數(shù)據(jù)類(lèi)型的效果較差。這限制了擴(kuò)散模型的應(yīng)用場(chǎng)景。數(shù)個(gè)研究工作將擴(kuò)散模型推廣到適用于其他數(shù)據(jù)類(lèi)型的模型,我們對(duì)這些方法進(jìn)行了詳細(xì)地闡釋。我們將其細(xì)化分類(lèi)為兩類(lèi)方法:Feature Space Unification,Data-Dependent Transition Kernels。
A. Feature Space Unification方法將數(shù)據(jù)轉(zhuǎn)化到統(tǒng)一形式的latent space,然后再latent space上進(jìn)行擴(kuò)散。LSGM提出將數(shù)據(jù)通過(guò)VAE框架先轉(zhuǎn)換到連續(xù)的latent space 上后再在其上進(jìn)行擴(kuò)散。這個(gè)方法的難點(diǎn)在于如何同時(shí)訓(xùn)練VAE和擴(kuò)散模型。LSGM表明由于潛在先驗(yàn)是intractable的,分?jǐn)?shù)匹配損失不再適用。LSGM直接使用VAE中傳統(tǒng)的損失函數(shù)ELBO作為損失函數(shù),并導(dǎo)出了ELBO和分?jǐn)?shù)匹配的關(guān)系:
該式在忽略常數(shù)的意義下成立。通過(guò)參數(shù)化擴(kuò)散過(guò)程中樣本的分?jǐn)?shù)函數(shù),LSGM可以高效的學(xué)習(xí)和優(yōu)化ELBO。
B. Data-Dependent Transition Kernels方法根據(jù)數(shù)據(jù)類(lèi)型的特點(diǎn)設(shè)計(jì)diffusion process 中的transition kernels,使擴(kuò)散模型可以直接應(yīng)用于特定的數(shù)據(jù)類(lèi)型。D3PM為離散型數(shù)據(jù)設(shè)計(jì)了transition kernel,可以設(shè)為lazy random-walk,absorbing state等。GEODIFF為3D分子圖數(shù)據(jù)設(shè)計(jì)了平移-旋轉(zhuǎn)不變的圖神經(jīng)網(wǎng)絡(luò),并且證明了具有不變性的初分布和transition kernel可以導(dǎo)出具有不變性的邊緣分布。假設(shè)T是一個(gè)平移-旋轉(zhuǎn)變換,如:
那么生成的樣本分布也有平移-旋轉(zhuǎn)不變性:

六. 和其他生成模型的聯(lián)系
在下面的每個(gè)小節(jié)中,我們首先介紹其他五類(lèi)重要的生成模型,并分析它們的優(yōu)勢(shì)和
局限性。然后我們介紹了擴(kuò)散模型是如何與它們聯(lián)系起來(lái)的,并說(shuō)明通過(guò)結(jié)合擴(kuò)散模型來(lái)改進(jìn)這些生成模型。VAE,GAN,Autoregressive model, Normalizing flow, Energy-based model和擴(kuò)散模型的聯(lián)系如下圖所示:

A. DDPM可以視作層次馬爾可夫VAE(hierarchical Markovian VAE)。但DDPM和一般的VAE也有區(qū)別。DDPM作為VAE,它的encoder和decoder都服從高斯分布、有馬爾科夫行;其隱變量的維數(shù)和數(shù)據(jù)維數(shù)相同;decoder的所有層都共用一個(gè)神經(jīng)網(wǎng)絡(luò)。
B. DDPM可以幫助GAN解決訓(xùn)練不穩(wěn)定的問(wèn)題。因?yàn)閿?shù)據(jù)是在高維空間中的低維流形中,所以GAN生成數(shù)據(jù)的分布和真實(shí)數(shù)據(jù)的分布重合度低,導(dǎo)致訓(xùn)練不穩(wěn)定。擴(kuò)散模型提供了一個(gè)系統(tǒng)地增加噪音的過(guò)程,通過(guò)擴(kuò)散模型向生成的數(shù)據(jù)和真實(shí)數(shù)據(jù)添加噪音,然后將加入噪音的數(shù)據(jù)送入判別器,這樣可以高效地解決GAN無(wú)法訓(xùn)練、訓(xùn)練不穩(wěn)定的問(wèn)題。
C. Normalizing flow通過(guò)雙射函數(shù)將數(shù)據(jù)轉(zhuǎn)換到先驗(yàn)分布,這樣的作法限制了Normalizing flow的表達(dá)能力,導(dǎo)致應(yīng)用效果較差。類(lèi)比擴(kuò)散模型向encoder中加入噪聲,可以增加Normalizing flow的表達(dá)能力,而從另一個(gè)視角看,這樣的做法是將擴(kuò)散模型推廣到前向過(guò)程也可學(xué)習(xí)的模型。
D. Autoregressive model在需要保證數(shù)據(jù)有一定的結(jié)構(gòu),這導(dǎo)致設(shè)計(jì)和參數(shù)化自回歸模型非常困難。擴(kuò)散模型的訓(xùn)練啟發(fā)了自回歸模型的訓(xùn)練,通過(guò)特定的訓(xùn)練方式避免了設(shè)計(jì)的困難。
E. Energy-based model直接對(duì)原始數(shù)據(jù)的分布建模,但直接建模導(dǎo)致學(xué)習(xí)和采樣都比較困難。通過(guò)使用擴(kuò)散恢復(fù)似然,模型可以先對(duì)樣本加入微小的噪聲,再?gòu)挠新晕⒃肼暤臉颖痉植紒?lái)推斷原始樣本的分布,使的學(xué)習(xí)和采樣過(guò)程更簡(jiǎn)單和穩(wěn)定。
七. 擴(kuò)散模型的應(yīng)用
在下面的每個(gè)小節(jié)中,我們分別介紹了擴(kuò)散模型在計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理、波形信號(hào)處理、多模態(tài)學(xué)習(xí)、分子圖生成、時(shí)間序列以及對(duì)抗學(xué)習(xí)等七大應(yīng)用方向中的應(yīng)用,并對(duì)每類(lèi)應(yīng)用中的方法進(jìn)行了細(xì)分并解析。例如在計(jì)算機(jī)視覺(jué)中可以用diffusion model進(jìn)行圖像補(bǔ)全修復(fù)(RePaint):
在多模態(tài)任務(wù)中可以用diffusion model進(jìn)行文本到圖像的生成(GLIDE):
還可以在分子圖生成中用diffusion model進(jìn)行藥物分子和蛋白質(zhì)分子的生成(GeoDiff):
應(yīng)用分類(lèi)匯總見(jiàn)表:
VAE\GAN\FLOW\DDPM\SDE技術(shù)區(qū)別
總結(jié):
1.數(shù)學(xué)建模為隨機(jī)分布,忽略了輸入數(shù)據(jù)分布逐步轉(zhuǎn)化到最后生成圖片的隨機(jī)過(guò)程,只關(guān)心輸入數(shù)據(jù)分布到生成數(shù)據(jù)分布的轉(zhuǎn)化分布。
a.自回歸模型 b.變分自編碼器. c.正則化流模型 d.生成對(duì)抗網(wǎng)絡(luò)
2.數(shù)學(xué)建模為隨機(jī)過(guò)程,輸入數(shù)據(jù)分布經(jīng)歷了一個(gè)過(guò)程逐步轉(zhuǎn)化成最終生成圖片,對(duì)轉(zhuǎn)化的隨機(jī)過(guò)程也考慮進(jìn)去,用T步隨機(jī)噪聲過(guò)程來(lái)模擬(擴(kuò)散模型家族)。
a.DDIM b.SDE c.stable diffusion
3.從Auto encode到VAE,是對(duì)數(shù)據(jù)樣本做了分布假設(shè),不是單個(gè)數(shù)據(jù)點(diǎn),輸入數(shù)據(jù)是一個(gè)分布。增加輸入多樣性,讓學(xué)習(xí)更難增加模型輸出的魯棒性。
4.GAN的不穩(wěn)定性來(lái)源于,對(duì)數(shù)據(jù)樣本分布沒(méi)做任何約束、同時(shí)對(duì)隨機(jī)分布也沒(méi)做任何約束,可以認(rèn)為是隨機(jī)分布建模生成的最樸素方法。所以模型的表達(dá)力很強(qiáng),但是可控性不太好
5.Flow其實(shí)已經(jīng)有對(duì)生成過(guò)程約束的意思了,只是沒(méi)有引入隨機(jī)工程數(shù)學(xué)建模,所以flow可控性比較好
通俗理解
現(xiàn)在我們通過(guò)一個(gè)比喻來(lái)說(shuō)明它們之間的區(qū)別。我們把數(shù)據(jù)的生成過(guò)程,也就是從Z映射到X的過(guò)程,比喻為過(guò)河。河的左岸是Z,右岸是X,過(guò)河就是乘船從左岸碼頭到達(dá)右岸碼頭。船可以理解為生成模型,碼頭的位置可以理解為樣本點(diǎn)Z或者X在分布空間的位置。不同的生成模型有不同的過(guò)河的方法,如下圖所示(圖中小圓點(diǎn)代表樣本點(diǎn),大圓圈代表樣本分布,綠色箭頭表示loss),我們分別來(lái)分析。

不同生成模型的過(guò)河方式
1. GAN的過(guò)河方式
從先驗(yàn)分布隨機(jī)采樣一個(gè)Z,也就是在左岸隨便找一個(gè)碼頭,直接通過(guò)對(duì)抗損失的方式強(qiáng)制引導(dǎo)船開(kāi)到右岸,要求右岸下船的碼頭和真實(shí)數(shù)據(jù)點(diǎn)在分布層面上比較接近。
2. VAE的過(guò)河方式
1)VAE在過(guò)河的時(shí)候,不是強(qiáng)制把河左岸的一個(gè)隨機(jī)點(diǎn)拉到河右岸,而是考慮右岸的數(shù)據(jù)到達(dá)河左岸會(huì)落在什么樣的碼頭。如果知道右岸數(shù)據(jù)到達(dá)左岸大概落在哪些碼頭,我們直接從這些碼頭出發(fā)就可以順利回到右岸了。
2)由于VAE編碼器的輸出是一個(gè)高斯分布的均值和方差,一個(gè)右岸的樣本數(shù)據(jù)X到達(dá)河左岸的碼頭位置不是一個(gè)固定點(diǎn),而是一個(gè)高斯分布,這個(gè)高斯分布在訓(xùn)練時(shí)會(huì)和一個(gè)先驗(yàn)分布(一般是標(biāo)準(zhǔn)高斯分布)接近。
3)在數(shù)據(jù)生成時(shí),從先驗(yàn)分布采樣出來(lái)的Z也大概符合右岸過(guò)來(lái)的這幾個(gè)碼頭位置,通過(guò)VAE解碼器回到河右岸時(shí),大概能到達(dá)真實(shí)數(shù)據(jù)分布所在的碼頭。
3. Flow的過(guò)河方式
1)Flow的過(guò)河方式和VAE有點(diǎn)類(lèi)似,也是先看看河右岸數(shù)據(jù)到河左岸能落在哪些碼頭,在生成數(shù)據(jù)的時(shí)候從這些碼頭出發(fā),就比較容易能到達(dá)河右岸。
2)和VAE不同的是,對(duì)于一個(gè)從河右岸碼頭出發(fā)的數(shù)據(jù),通過(guò)Flow到達(dá)河左岸的碼頭是一個(gè)固定的位置,并不是一個(gè)分布。而且往返的船開(kāi)著雙程航線,來(lái)的時(shí)候從什么右岸碼頭到達(dá)左岸碼頭經(jīng)過(guò)什么路線,回去的時(shí)候就從這個(gè)左岸碼頭經(jīng)過(guò)這個(gè)路線到達(dá)這個(gè)右岸碼頭,是完全可逆的。
3)Flow需要約束數(shù)據(jù)到達(dá)河左岸碼頭的位置服從一個(gè)先驗(yàn)分布(一般是標(biāo)準(zhǔn)高斯分布),這樣在數(shù)據(jù)生成的時(shí)候方便從先驗(yàn)分布里采樣碼頭的位置,能比較好的到達(dá)河右岸。
4. Diffusion的過(guò)河方式
1)Diffusion也借鑒了類(lèi)似VAE和Flow的過(guò)河思想,要想到達(dá)河右岸,先看看數(shù)據(jù)從河右岸去到左岸會(huì)在哪個(gè)碼頭下船,然后就從這個(gè)碼頭上船,準(zhǔn)能到達(dá)河右岸的碼頭。
2)但是和Flow以及VAE不同的是,Diffusion不只看從右岸過(guò)來(lái)的時(shí)候在哪個(gè)碼頭下船,還看在河中央經(jīng)過(guò)了哪些橋墩或者浮標(biāo)點(diǎn)。這樣從河左岸到河右岸的時(shí)候,也要一步一步打卡之前來(lái)時(shí)經(jīng)過(guò)的這些浮標(biāo)點(diǎn),能更好約束往返的航線,確保到達(dá)河右岸的碼頭位置符合真實(shí)數(shù)據(jù)分布。
3)Diffusion從河右岸過(guò)來(lái)的航線不是可學(xué)習(xí)的,而是人工設(shè)計(jì)的,能保證到達(dá)河左岸的碼頭位置,雖然有些隨機(jī)性,但是符合一個(gè)先驗(yàn)分布(一般是高斯分布),這樣方便我們?cè)谏蓴?shù)據(jù)的時(shí)候選擇左岸出發(fā)的碼頭位置。
4)因?yàn)橛?xùn)練模型的時(shí)候要求我們一步步打卡來(lái)時(shí)經(jīng)過(guò)的浮標(biāo),在生成數(shù)據(jù)的時(shí)候,基本上也能遵守這些潛在的浮標(biāo)位置,一步步打卡到達(dá)右岸碼頭。
5)如果覺(jué)得開(kāi)到河右岸一步步這樣打卡浮標(biāo)有點(diǎn)繁瑣,影響船的行進(jìn)速度,可以選擇一次打卡跨好幾個(gè)浮標(biāo),就能加速船行速度,這就對(duì)應(yīng)diffusion的加速采樣過(guò)程。
5. AR的過(guò)河方式
1)可以類(lèi)比Diffusion模型,將AR生成過(guò)程 X0,X0:1,…,X0:t,X0:t+1,…,X0:T 看成中間的一個(gè)個(gè)浮標(biāo)。從河右岸到達(dá)河左岸的過(guò)程就好比自回歸分解,將 X0:T 一步步拆解成中間的浮標(biāo),這個(gè)過(guò)程也是不用學(xué)習(xí)的。
2)河左岸的碼頭 X0 可以看成自回歸生成的第一個(gè)START token。AR模型河左岸碼頭的位置是確定的,就是START token對(duì)應(yīng)的embedding。
3)在訓(xùn)練過(guò)程中,自回歸模型也一個(gè)個(gè)對(duì)齊了浮標(biāo),所以在生成的時(shí)候也能一步步打卡浮標(biāo)去到河右岸。
4)和Diffusion不同的是,自回歸模型要想加速,跳過(guò)某些浮標(biāo),就沒(méi)有那么容易了,除非重新訓(xùn)練一個(gè)semi-autoregressive的模型,一次生成多個(gè)token跨過(guò)多個(gè)浮標(biāo)。
5)和Diffusion類(lèi)似的是,在訓(xùn)練過(guò)程中都使用了teacher-forcing的方式,以當(dāng)前步的ground-truth浮標(biāo)位置為出發(fā)點(diǎn),預(yù)測(cè)下一個(gè)浮標(biāo)位置,這也降低了學(xué)習(xí)的難度,所以通常來(lái)講,自回歸模型和Diffusion模型訓(xùn)練起來(lái)都比較容易。