Introduction
Denoising Diffusion Probabilistic Models,簡稱DDPM是近年最流行的影像生成模型。主要可以分成兩個部分來介紹,分別是forward process以及reverse process。
forward process的概念就是給定一張乾淨清晰的圖片,我們不斷添加noise到這張圖片上,直到這整張圖片都是noise,且呈現高斯分佈。
reverse process的概念就是給定一張呈現高斯分佈的noise圖片,不斷地做denoise(去雜訊),逐步讓這張圖片越來越清晰,直到生成一張乾淨清晰的圖片。
而ddpm就是希望透過forward process和reverse process來學習真實圖片的distribution。舉例來說:我們想生成貓的圖片,那就需要學習貓的圖片的distribution,如果學到了,那們我們只需要做reverse process,給定一張高斯分佈的雜訊圖片,就能生成出貓的圖片。
Forward Process
forward process如同前面所說,就是針對一張乾淨的圖片x0,不斷地加入雜訊,直到整張圖片變成一個高斯分佈的雜訊圖,如下圖。x0代表的是初始乾淨的圖片,xt代表的是x0加上t次雜訊的結果,而在本篇論文作者設定T為1000,也就是加入1000次雜訊。
而forward process可以用下面這個式子來表示,給定xt-1,產生xt的distribution可以視為一個normal distribution,而這個normal distribution的mean為xt-1乘上一個係數,variance為1乘上一個係數。這個係數會在後面做介紹。
然而,這樣的表示法會需要我們每一次做forward process時都從這個normal distribution隨機採樣資料,這樣的操作是不可微分的,也因此沒辦法進行backprobagation,此外也不利於後續的推導。
因此這裡使用了一個叫做Reparameterization trick的技巧,我們可以把原式改寫成下面這樣。這裡的物理意義可以解釋成,我們把原本normal distribution的隨機性轉移到了epsilon上,而epsilon是一個從standard normal distribution隨機採用的資料。如此一來有助於後續的推導。
補充說明一下這裡的係數beta,這個beta在本篇論文是人工設定的,是利用linear schedule從0.0001到0.02,timestamp越大,那他的數值就越大。
講完上面這些,我們可以了解forward process是怎麼運作的了,那麼接下來會進一步推導來簡化forward process的過程。
我們可以將式子表達成下方這樣,xt可以根據xt-1和一個epsilon組合而成,而xt-1同樣也可以由xt-2和另外一個epsilon組合而成,因此不斷地遞迴下去做,xt最終可以只透過x0和epsilon組合而成。
這裡用數學式來表達如下圖。xt-1可以用xt-2和epsilone t-1的組合來替換,最終得到最底下的結果。
可以發現這裡推導的結果出現了兩個獨立的epsilon,也就是兩個獨立的高斯,那這裡就可以用到高斯的一個性質稱為sum of two independent Gaussian random variables,任意兩個獨立的高斯相加,等同於一個新的高斯,其mean和variance都是那兩個高斯的相加。因此最終就可以得到下圖的結果。
因此我們遞迴的做這個操作,就能使用x0和一個epsilon來組成xt。
這裡為了簡化式子,多定義了一個notation如下:
因此最終結果如下。並且我們可以得到結論,在任意的timestamp我們都可以透過x0和epsilon得到那個timestamp的結果。
Reverse Process
reverse process可以用下圖來表達。我們輸入一張想要去雜訊的xt以及他對應的timestamp t到noise predicter,這個noise predicter就是我們要訓練的模型(在本篇論文為一個Unet架構),他會輸出預測出來的雜訊,最後我們將xt減這個預測出來的noise就能得到xt-1了。而具體為什麼要這樣做,就請看後續的介紹。
我們把reverse process 的過程表達上下面這個式子,p theta代表在theta這個參數的情況下給定xt產生xt-1的機率。那這個機率可以表達成一個normal distribution,而我們要做的就是預測這個normal distribution的mean,也就是u theta,variance的部分在本篇論文是固定的。因此我們的目標就在於求出下方這個式子。
那為了求解上方的式子,我們首先來定義pθ(x0),它代表的是在pθ這個data distribution中產生x0的機率。而我們就是希望模型產生最接近真實世界的圖片,因此這個機率當然是要越大越好。但是要直接計算pθ是相當困難的,因此有一個技巧是去取得pθ的lower bound,lower bound恆小於pθ,所以lower bound越大,pθ就越大。
那這邊根據論文的描述有做一些特別的操作,是將pθ加上log,並且加上負號,因此目變就變成要求upper bound,並且upper bound越小越好。如下圖。紅線代表的都是一系列複雜的數學推導,這裡就先跳過。值得一提的是upper bound經過數學推導得到最下面這個式子,這個式子可以分成三部分來看,最左邊的LT,DKL代表的是KL divergen,可以想像成是兩個distribution的距離,那裡面的q代表的是forward process,p(xT)代表的是一個高斯分佈的雜訊圖。因此最左邊這個LT跟我們模型要學習的參數θ沒有關係,可以不用看他。那最右邊的L0,這篇論文的作者有做一系列複雜的數學推導來求這項,但後來發現不需要這項就能有很好的實驗結果了,所以這項可以不用計算直接拿掉。那中間的Lt-1就是我們後續要計算的東西。
Lt-1這項裡面也是一個KL divergen,那輸入是一個q和我們最前面介紹的reverse process的表達式。因此我們只要能算出q就能得到這個表達式。具體做法也是一系列複雜的數學推導,最終q也能表達成下方這個normal distribution。
那這個normal distribution的結果可以用下圖來呈現,它的採樣結果就是我們要求的xt-1,而它的mean可以想成是xt和x0的某種內差,variance則是一個常數。我們將紅框的這個mean中的x0用先前forward process推導的公式來代換,就能得到最底下這個結果。
既然我們已經取得q的分佈了,而q是一個高斯分佈,我們想要求的pθ也是一個高斯分佈。那根據高斯分佈的性質,兩個高斯分佈的mean越靠近,其KL divergen就越小,因此我們直接使q計算出來的mean作為pθ的mean,如下圖所示,而這個mean的前面都是人工設定的常數,只有epsilon是不知道的,因此我們的模型只需要預測這個epsilon即可得到我們要的結果。因此就成功取得reverse process的distribution了。
Training/Sampling Algorithm
最後來看一下論文提供的演算法,左邊是訓練的演算法,可以發現每一次採樣一個standar gaussian distribution的epsilon並且將它和x0做forward process變成一張具有雜訊的圖片xt,再將xt輸入模型來預測雜訊。而訓練目標就是希望預測出來的雜訊和我們添加的真實雜訊越接近越好。
右邊是sampling的演算法,我們若想取得xt-1,只需要套用我們前面推導出來的reverse process的公式,將xt減去模型預測出來的雜訊,再乘上一些係數,最終再加上一個雜訊z就可以取得了。而自所以要加入這個雜訊z,作者認為且實驗也證實這樣加入一些隨機性對結果是比較好的。
Conclusion
可以總結一下DDPM為以下幾點
- forward process將一張圖片添加雜訊,直到這張圖片變成一個standar gaussian distribution的雜訊圖。
- reverse process將一個從standar gaussian distribution隨機採樣的雜訊圖逐步去雜訊,直到還原出原來的圖片。
- 根據forward process和reverse process去學習真實圖像的distribution,如此一來每次只需要丟一個隨機的noise map就能生成我們要的圖片了。