AIGC: Discrete Contrastive Diffusion 筆記
如果有錯誤還請各位指出。我們都不是搞研究的,咱們不玩復(fù)雜公式 (*^_^*)
Contrastive Predictive Coding
首先,Conditional Discrete Contrastive Diffusion 這個方法,要先從?Contrastive Predictive Coding(1807.03748,1905.09272,以下簡稱CPC)說起。
CPC?是一種從高位數(shù)據(jù)里面抽取代表性的內(nèi)容(Representations)的無監(jiān)督學(xué)習(xí)方法。其要點(diǎn)是,相比于去模擬? (
?代表一個高維數(shù)據(jù),如文字、圖片、聲音等,
?代表數(shù)據(jù)對應(yīng)的標(biāo)簽)的話,CPC 的目的是最大化
?與?
?之間相互信息(Mutual Information):
. 即,相當(dāng)于最大化?
.?
CPC 的過程也很簡單,挑選一個正樣本和 N 個負(fù)樣本(即所謂的 Contrastive),然后最小化Loss:?, 其中,
.

具體的公式和由來并不是那么的重要,網(wǎng)上由很多相關(guān)的文章可以參考,鏈接放在文章末尾。
如上圖所示,整個模型由負(fù)責(zé)生成的編碼器?, 一個自我回歸(Autoregressive)模型
(比如,GRU), 和一個序列?
?組成。在每一步?
?鐘,我們利用?
?的輸出?
?來預(yù)測接下來幾步的結(jié)果?
. 對于圖像來說,我們可以把圖像整體分割為一個個的小方塊,這樣,整個圖像就可以被看成一個序列了。
然后我們構(gòu)造一些正負(fù)配對,比如,正樣本的配對里面??來自原始聲音,負(fù)樣本的配對是別的地方的聲音。最后,通過 CPC 這么一套流程下來,模型將會更好的區(qū)分正負(fù)樣本,進(jìn)而,我們得到了一個更好的編碼器。
基本設(shè)定
接下來,進(jìn)入到 Conditional Discrete Contrastive Diffusion(2206.07771,以下簡稱 CDCD)的世界里。
CDCD 的設(shè)定是,我們有一個向量量化模型(Vector-Quantized Model,比如,VQ-VAE),這個 VQ 模型將生成??所對應(yīng)的離散向量(Discrete Representation)
.?
擴(kuò)散過程的目標(biāo)則是給出依賴條件 , 然后復(fù)原這個?latent?
. 最后我們通過 VQ 模型的解碼器,將 latent
?復(fù)原成圖像
.?
因此,在?CPC 的設(shè)定下,這里我們的目標(biāo)是最大化相互信息?. 如果我們也采用和 CPC 原論文相同的方法,設(shè)定一個比值?
?,然后去最大化這個比值的話,我們可以導(dǎo)出和 CPC 論文中的形式的 Loss:
這里的??代表了負(fù)樣本通過 VQ 編碼器生成的?latent.
但是,在擴(kuò)散模型的設(shè)定里面,我們并不需要去最大化比值??, 我們可以直接去優(yōu)化?
(但依舊保持 Contrastive Learning 的世界觀)
與擴(kuò)散模型的關(guān)聯(lián)
之前寫的 DDIM 文章里面,詳細(xì)地介紹過 DDPM 的目標(biāo)——最大化變分下界(Evidence Lower Bound),所對應(yīng)的 Loss 為:
當(dāng)然,因為我們這里還有一個依賴條件?, 所以上面公式里面的?
?,
?變成了?
,
. (在這里,
?的具體形式并不重要)
隨后,論文里面提出了兩種擴(kuò)散機(jī)制—— Step-Wise Parallel Diffusion 和 Sample-Wise Auxiliary Diffusion

這兩種擴(kuò)散機(jī)制,源頭都來自于?loss (論文的附錄中有詳細(xì)的公式推導(dǎo)),但是工作方式有所區(qū)別,而上面的示意圖已經(jīng)很直觀地表明了——
無論是 Step-wise 還是 Sample-wise,我們都選取 1 個正樣本 N 個負(fù)樣本,
但是對于 Step-wise 來說,如圖所示,我們同時進(jìn)行 N+1 個擴(kuò)散過程,在每一步 t 中,?.我們"增強(qiáng)"正樣本??的同時,"抑制"負(fù)樣本?
. 這些負(fù)樣本來自于上一步的擴(kuò)散,即公式中的
,(這里注意,凡是有上標(biāo)的都意味著負(fù)樣本)
對應(yīng)的 Loss 為:
而對于 Sample-wise 來說,如圖所示,這里只有一個擴(kuò)散過程,在每一步 t 中,?“增強(qiáng)”?到達(dá)正樣本??的路線,?"抑制"到達(dá)負(fù)樣本?
?的路線,即公式中的?
.
對應(yīng)的 Loss 為:
所以最終的 loss 由變分下界引導(dǎo)出的 loss 和以上的 CDCD loss 兩部分組成
(注:論文的附錄B4有算法的偽代碼,但是個人感覺里面的符號好像有點(diǎn)問題,沒有貼出來,想?yún)⒖嫉目梢匀シ丛撐模?/p>
Loss 相關(guān)的代碼可以參考官方 github 源代碼?synthesis\modeling\transformers\diffusion_d2m.py 中的 458 行開始(d2m應(yīng)該是 dance to music 的意思...)?
Intra/Inter Sampling
intra: 在...之內(nèi);inter: 在...之間
對于負(fù)樣本的獲取,我們可以有兩種不同的辦法,一種是利用原始數(shù)據(jù)本身來制造負(fù)樣本(Intra),一種是利用別的數(shù)據(jù)來充當(dāng)負(fù)樣本(Inter)

這里,原論文給出的示意圖已經(jīng)直觀地說明了兩種不同的方式的差異,故不在多提。
所以根據(jù) Step 和 Sample 兩種擴(kuò)散方式以及 Intra 和 Inter 兩種采樣方式,就有4種不同的組合,這些組合的差異和表現(xiàn)可見原論文第4節(jié),在此也不提了。
一些值得參考的文章
CPC 的原理,非常通俗易懂:https://zhuanlan.zhihu.com/p/137076811

現(xiàn)在擴(kuò)散模型相關(guān)的論文都太多公式了,導(dǎo)致很多內(nèi)容,都特別難懂 orz…