解鎖Diffusion Model: 初識Stable Diffusion、DALL-E、Imagen 原創(chuàng)
擴(kuò)散模型在生成高質(zhì)量圖像、視頻、聲音等方面表現(xiàn)突出。它們與物理學(xué)中的自然擴(kuò)散過程相似而得名,自然擴(kuò)散過程描述了分子如何從高濃度區(qū)域移動到低濃度區(qū)域。在機(jī)器學(xué)習(xí)的背景下,擴(kuò)散模型通過逆轉(zhuǎn)擴(kuò)散過程來生成新數(shù)據(jù)。主要的思想是向數(shù)據(jù)添加隨機(jī)噪聲,然后反過來從噪聲數(shù)據(jù)中推理和獲取原始數(shù)據(jù)。
“是先有雕像,還是先有石頭,其實(shí)雕像已經(jīng)早在石頭里面!”
1.Diffusion Model
Diffusion Model(擴(kuò)散模型)其實(shí)理解起來不難,它分為兩個過程,正向擴(kuò)散和逆向擴(kuò)散。正向擴(kuò)散過程從基本分布(通常是高斯分布)采樣開始生成噪聲。選擇一幅圖片,然后對圖片不斷地增加噪聲,隨著噪聲不斷地增加,最后會變?yōu)橐粋€純噪聲圖片。可以想象一下較早期收不到信號的電視畫面!
每一個噪聲都是在前一時刻增加噪聲而來。從最開始的x0開始,反復(fù)迭代直到最終得到xt的純噪聲圖像(中間經(jīng)歷N輪)。因?yàn)镈iffusion的本質(zhì)是去噪,為了推導(dǎo)出逆向的去噪方法,采用了很取巧的加噪聲的原理。<大白話的意思是,讓你在畫上亂涂是很容易的,但是讓你畫出還是有難度的吧!>。
添加噪聲的過程的目的其實(shí)就是不斷構(gòu)建新的訓(xùn)練樣本,因?yàn)榍耙粫r刻可以預(yù)測出來后一時刻的噪聲。按照剛才的說法,在第一個過程的擴(kuò)散中將數(shù)據(jù)收集起來,用于下面的這個Noise Predicter的模型訓(xùn)練。最終訓(xùn)練出來的模型可以從噪聲中恢復(fù)(創(chuàng)造)出清晰的圖片。
這個模型是一個逆噪聲的模型,它用于預(yù)測輸入圖片中在本輪需要去掉的噪聲,然后將原圖與預(yù)測生成的噪聲相減,突出下一輪更清晰的圖。這個訓(xùn)練過程將剛才正向迭代的數(shù)據(jù)集作為樣本反向訓(xùn)練這個模塊(上圖藍(lán)色的為輸入值,紅色的為預(yù)測值),讀者好好思考下為什么?<說白了就是訓(xùn)練它的去噪聲能力!> 是不是很巧妙,也是不是很簡單~
當(dāng)訓(xùn)練完畢再生成圖片的時候,就開始要表演魔術(shù)了??梢噪S機(jī)生成噪聲,然后丟進(jìn)去Noise Predicter,一輪一輪的去掉噪聲,一幅清晰的圖片不就展示在讀者的眼前。具體的算法如上,在原來的論文中,第0步代表最清晰的圖,第N步代表噪聲圖,一般N是個超參數(shù)??梢暬^程如下:
那么文縐縐的術(shù)語如下:“它逐漸增加了復(fù)雜性,通常被可視化為結(jié)構(gòu)化噪聲的添加。通過連續(xù)變換對初始數(shù)據(jù)的擴(kuò)散使模型能夠捕獲和再現(xiàn)目標(biāo)分布中固有的復(fù)雜模式和細(xì)節(jié)。前向擴(kuò)散過程的最終目標(biāo)是將這些簡單的開始演變?yōu)榫o密模擬所需復(fù)雜數(shù)據(jù)分布的樣本。前向擴(kuò)散過程的最終目標(biāo)是將這些簡單的開始演變?yōu)榫o密模擬所需復(fù)雜數(shù)據(jù)分布的樣本。這確實(shí)表明了如何從最少的信息開始可以帶來豐富、詳細(xì)的輸出?!?/p>
通過緩慢添加(去除)噪聲來生成樣本的馬爾可夫鏈前向(反向)擴(kuò)散過程。
2.文本生成圖片
現(xiàn)在的Stable Diffusion、DALL-E、Imagen背后都有比較類似的文本生成圖片的架構(gòu)。抽象出來一般分為三部分:1 文字Embedding(Encoder)、2 文字和圖的Diffusion的過程生成具有特定意義的中間向量(Latent Representation)、3 將最終的中間向量丟到解碼器(Decoder)進(jìn)而生成圖片。
值得注意的是第2部分的過程也是Diffusion的逆生成過程,將噪聲和文本一起輸入去噪聲模塊,不斷地重復(fù),值得生成的中間表達(dá)向量比較優(yōu)質(zhì),在將中間表達(dá)向量丟到解碼器生成圖片。
是不是很熟悉的味道和配方,其實(shí)類似于自動編解碼器。先來看看Stable Diffusion的架構(gòu)圖。
上面的正向擴(kuò)散,下面是逆向訓(xùn)練過程。Z是原始的圖片,Zt是噪聲圖。讀者可以在圖中找1,2,3,其實(shí)就是從右到左的三個部分。
再來看看DALL-E的模型架構(gòu)圖,這時候的1,2,3則是從左往右。text-encoder就是之前說的1文字編碼器,prior就是2中間的Diffusion過程,最后的decoder就是3。
上圖虛線上方,描述了CLIP訓(xùn)練過程,通過該過程可以學(xué)習(xí)文本和圖像的聯(lián)合表示空間。還記得CLIP么,不記得的話點(diǎn)擊鏈接回去溫習(xí)一下。
虛線下方,描述了文本到圖像的生成過程:將CLIP文本嵌入饋送到自回歸或擴(kuò)散prior以生成圖像嵌入,然后使用此嵌入來調(diào)節(jié)擴(kuò)散解碼器,從而生成最終圖像。值得一提的是,在prior和解碼器的訓(xùn)練期間,CLIP 模型處于凍結(jié)狀態(tài)。
而22年的Google的Imagen也是類似的架構(gòu),從上往下1,2,3。讀者可以發(fā)現(xiàn)這個圖中,第二部分輸出的Latent Representation是64*64的圖(應(yīng)該稱呼為特征表達(dá)向量),最終64*64會經(jīng)過Decoder(這里也使用了Diffusion Model)生成1024*1024的圖片。
相信讀者還是會有很多疑問,不著急。先建立起基本的概念,形成初步的認(rèn)知,后續(xù)會循序漸進(jìn)地帶著讀者進(jìn)一步遨游這個領(lǐng)域。
本文轉(zhuǎn)載自 ??魯班模錘??,作者: 龐德公
