一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

保姆級(jí)講解 Diffusion 擴(kuò)散模型(DDPM)

 520jefferson 2023-02-06 發(fā)布于北京

我公眾號(hào)文章目錄綜述:

https://wangguisen.blog.csdn.net/article/details/127065903

往期重點(diǎn)回顧:

生成模型與極大似然簡(jiǎn)述

變分自編碼器 VAE 詳解

保姆級(jí)講解 生成對(duì)抗網(wǎng)絡(luò) GAN

往期回顧:

圖像分類篇[10]:EfficientNet V1網(wǎng)絡(luò)詳解

圖像分類篇[9]:ShuffleNet V2網(wǎng)絡(luò)詳解及復(fù)現(xiàn)

圖像分類篇[8]:ShuffleNet V1網(wǎng)絡(luò)詳解

圖像分類篇[7]:MobileNet V3網(wǎng)絡(luò)詳解及復(fù)現(xiàn)

保姆級(jí)講解BERT

保姆級(jí)講解Transformer

關(guān)于Attention的超詳細(xì)講解(Attention、Self-Attention、Multi-Head Attention)

目錄

一、引入

二、擴(kuò)散原理闡述

2.1、直觀理解

2.2、前向過(guò)程(擴(kuò)散)

2.3、反向過(guò)程(去噪)

2.4、模型訓(xùn)練

三、算法流程概述

四、數(shù)學(xué)描述

4.1、前向過(guò)程(擴(kuò)散)

4.2、反向過(guò)程(去噪)

4.3、訓(xùn)練損失

五、torch復(fù)現(xiàn)

References

一、引入

Image

近年AIGC的爆火離不開(kāi)人工智能在圖像生成、文本生成以及多模態(tài)等領(lǐng)域的不斷累積,其中生成模型的發(fā)展占據(jù)了很大功勞,如:生成對(duì)抗網(wǎng)絡(luò) GAN 及其一系列變體、變分自編碼器 VAE 及其一系列變體、自回歸模型 AR、流模型 flow ,以及近年大火的擴(kuò)散模型 Diffusion Model 等。

擴(kuò)散模型的大火并非橫空出世,早在2015年就有人提出了類似的想法,直到2020年才提出了經(jīng)典的 Denoising Diffusion Probabilistic Models(DDPM),像OpenAI、NovelAI、NVIDIA和Google成功的訓(xùn)練了大規(guī)模模型之后,它們吸引了很多人注意,后續(xù)有了很多基于擴(kuò)散模型的變體,比如有:GLIDE、DALLE-2、Imagen和年底爆火的完全開(kāi)源的穩(wěn)定擴(kuò)散模型(Stable Diffusion)。

擴(kuò)散模型與之前所有的生成方法有著本質(zhì)的區(qū)別:

Image

直觀的說(shuō)它是將圖像生成過(guò)程(采樣)分解為許多小的去噪步驟,其實(shí) Diffusion 的含義本質(zhì)上就是一個(gè)迭代過(guò)程,實(shí)線箭頭用于擴(kuò)散步驟中添加隨機(jī)噪聲,虛線箭頭代表的是通過(guò)學(xué)習(xí)逆向擴(kuò)散過(guò)程從噪聲中重構(gòu)所需的數(shù)據(jù)樣本。引入噪聲導(dǎo)致了信息的衰減,再通過(guò)噪聲嘗試還原原始數(shù)據(jù),多次迭代最小化損失后,能夠使模型在給定噪聲輸入的情況下學(xué)習(xí)生成新圖像。

所以Diffusion模型和其它生成模型的區(qū)別是,它不是直接的圖像->潛變量、潛變量->圖像的一步到位,它是一步一步的逐漸分解、逐漸去噪的過(guò)程。

當(dāng)然有關(guān)Diffusion的理解和變體有很多,但是擴(kuò)散模型從本質(zhì)上講就是DDPM,所以本文主要對(duì)DDPM的原理進(jìn)行講解,并給出DDPM的擴(kuò)散過(guò)程、去噪過(guò)程、訓(xùn)練損失的詳細(xì)推導(dǎo),對(duì)于掌握Diffusion算法原理只需要抓住以下四點(diǎn)即可:

前向過(guò)程(擴(kuò)散);

反向過(guò)程(去噪、采樣);

如何訓(xùn)練;

如何推斷。

二、擴(kuò)散原理闡述

擴(kuò)散模型包括 前向擴(kuò)散過(guò)程 和 反向去噪過(guò)程(采樣),前向階段對(duì)圖像逐步施加噪聲,直至圖像被破壞變成完全的高斯噪聲,然后在反向階段學(xué)習(xí)從高斯噪聲還原為原始圖像的過(guò)程。

2.1、直觀理解

散模型的目的是什么?

學(xué)習(xí)從純?cè)肼暽蓤D片的方法。

擴(kuò)散模型是怎么做的?

訓(xùn)練一個(gè)UNet,接受一系列加了噪聲的圖片,學(xué)習(xí)預(yù)測(cè)所加的噪聲。

前向過(guò)程在干什么?

逐步向真實(shí)圖片添加噪聲最終得到一個(gè)純?cè)肼暎?/p>

對(duì)于訓(xùn)練集中的每張圖片,都能生成一系列的噪聲程度不同的加噪圖片;

在訓(xùn)練時(shí),這些 【不同程度的噪聲圖片 + 生成它們所用的噪聲】 是實(shí)際的訓(xùn)練樣本。

反向過(guò)程在干什么?

訓(xùn)練好模型后,采樣、生成圖片。

2.2、前向過(guò)程(擴(kuò)散)

Image

前向過(guò)程在原始輸入圖像上逐步添加隨機(jī)噪聲,這個(gè)噪聲服從高斯分布,每一步得到的圖像只和上一步的加噪結(jié)果相關(guān),逐步添加噪聲至步,可以得到趨向于純粹噪聲的圖像,如下圖所示:

Image

后面有詳細(xì)的推導(dǎo),公式比較多,這里先提前把主要的列一下方便闡述。

對(duì)于將一張圖片,從的逐步加噪破壞的公式為:

其中:

表示第步的圖像;

是一個(gè)滿足正態(tài)分布的隨機(jī)噪聲,;

是圖片的權(quán)重,是噪聲的權(quán)重;

定義:

隨著的增加,噪聲的占比會(huì)越來(lái)越大,所以添加的噪聲強(qiáng)度也會(huì)越來(lái)越大,也就是說(shuō)圖片的權(quán)重要越來(lái)越小,噪聲的權(quán)重要越來(lái)越大。因?yàn)殡S著擴(kuò)散過(guò)程的增加,圖像中噪聲的占比也會(huì)越來(lái)越大,我們想要進(jìn)一步破壞它的結(jié)構(gòu),就需要添加更多的噪聲。

換句話說(shuō),一開(kāi)始圖像比較清晰,這個(gè)時(shí)候添加的噪聲小一些,隨著圖像的噪聲越來(lái)越多,這個(gè)時(shí)候再加一點(diǎn)噪聲的話,對(duì)原來(lái)的圖像就沒(méi)什么影響了,因?yàn)樗旧砭陀泻枚嘣肼暳?,所以隨著圖像的噪聲越來(lái)越多,后面的步驟就要加更多的噪聲。

實(shí)際訓(xùn)練過(guò)程中會(huì)比較大(DDPM原文中為1000),所以會(huì)有從遞推到的公式:

其中:

、有一個(gè)固定的已知函數(shù),是可以直接進(jìn)行計(jì)算的;

為隨機(jī)產(chǎn)生的噪聲;

所以整個(gè)式子是已知的,式、就可以描述前向過(guò)程了,用于將一張圖片的逐步破壞,用于一步到位的破壞。

2.3、反向過(guò)程(去噪)

反向過(guò)程則是不斷去除噪聲的過(guò)程,給定一個(gè)噪聲圖片,對(duì)它一步步的去噪還原,直至最終將原始圖像給恢復(fù)出來(lái),如下圖所示:

Image

去噪的過(guò)程,、、都是已知的,只有公式中的真實(shí)噪聲是未知的,因?yàn)樗请S機(jī)采樣的。所以需要一個(gè)神經(jīng)網(wǎng)絡(luò)把給學(xué)出來(lái),也就是說(shuō)訓(xùn)練一個(gè)由和估測(cè)噪聲的模型:

其中就是模型的參數(shù),通常使用UNet作為預(yù)估噪聲的模型。

2.4、模型訓(xùn)練

所以說(shuō)反向過(guò)程其實(shí)就是訓(xùn)練網(wǎng)絡(luò)去學(xué)習(xí)分解過(guò)程每一步的噪聲,當(dāng)網(wǎng)絡(luò)訓(xùn)練好之后,輸入一張?jiān)肼晥D片,通過(guò)網(wǎng)絡(luò)就能把加的噪聲給求出來(lái),噪聲有了代入公式,就能把步的比較清晰的圖給求出來(lái)了,一步步往前迭代就行了。

采用L2距離刻畫(huà)相近程度就可以,DDPM的關(guān)鍵是訓(xùn)練,目的就是使預(yù)測(cè)的噪聲與真實(shí)用于破壞的噪聲相近:

Image

模型訓(xùn)練完后,只要給定隨機(jī)高斯噪聲,就可以生成一張從未見(jiàn)過(guò)的圖像。

UNet本文不做介紹,結(jié)構(gòu)圖為:

Image

額外強(qiáng)調(diào)的是:Unet里有一個(gè)位置編碼,是關(guān)于時(shí)間步的,每個(gè)時(shí)間步是有一個(gè)線性調(diào)度器的,每個(gè)時(shí)間添加的噪聲的方差是不一樣的,所以將時(shí)間步作為編碼嵌入的話,可以將模型預(yù)測(cè)的噪聲更加的準(zhǔn)確。

三、算法流程概述

Image

再次總結(jié),擴(kuò)散模型兩個(gè)步驟如下:

一個(gè)固定的(預(yù)先定義好的)前向擴(kuò)散過(guò)程:逐步向圖片增加噪聲直到最終得到一張純粹的噪聲圖;

一個(gè)學(xué)習(xí)得到的去噪過(guò)程:訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)去逐漸的從一張純?cè)肼曋邢肼?,直到得到一張真正的圖片。

Image

算法1 為訓(xùn)練流程:

line2:從數(shù)據(jù)中采樣,的意思是給加上噪聲;

line3:隨機(jī)選取 time step ;

真實(shí)訓(xùn)練過(guò)程中我們不可能一步步的從到,因?yàn)闀?huì)很大,這就意味著每輸入一張圖片,就會(huì)產(chǎn)生張?jiān)肼晥D像,也就是一張圖像的網(wǎng)絡(luò)要訓(xùn)練個(gè)噪聲樣本,非常耗時(shí)。

所以對(duì)進(jìn)行了采樣,就是從里采集若干個(gè)的意思。

舉個(gè)例子:假設(shè)采集的分別為100、20、3,對(duì)應(yīng)的為、、,對(duì)應(yīng)噪聲為、、,對(duì)于的預(yù)測(cè)噪聲為、、,只需要將和代入MSE公式即可(相減、平方、最小化)。

line 4:生成隨機(jī)高斯噪聲;

line 5:調(diào)用模型估計(jì),計(jì)算真實(shí)噪聲與估計(jì)噪聲之間的MSE Loss,反向傳播更新模型。

網(wǎng)絡(luò)的作用是預(yù)測(cè)噪聲,隨著的增加,噪聲強(qiáng)度會(huì)越來(lái)越大,因此預(yù)測(cè)的噪聲是和迭代是直接相關(guān)的,所以要把作為參數(shù)送入到網(wǎng)絡(luò)當(dāng)中。

直到收斂。

算法2 為采樣流程:

line 1:從高斯分布采樣;

line 2:按照的順序進(jìn)行迭代;

line 3:如果令;如果,從高斯分布中采樣;

line 4:利用公式求出均值和方差,進(jìn)而求得;

經(jīng)過(guò)上述迭代,恢復(fù)。

四、數(shù)學(xué)描述

4.1、前向過(guò)程(擴(kuò)散)

我們來(lái)推導(dǎo)如何從原始圖像直接到第t時(shí)刻的圖像()。

首先回顧 2.1小節(jié) 的兩個(gè)定義:

,要越大越好,論文中從0.0001到0.02;

,累乘,下面會(huì)用到;

,每一時(shí)刻添加的噪聲均獨(dú)立;

我們要求時(shí)刻的圖像,它需要一步步的加噪迭代,這樣太慢了。因?yàn)槊恳徊教砑拥脑肼暘?dú)立且服從正太分布,我們可以做如下推導(dǎo):

為了不混淆,只需要記?。合聵?biāo)越小,噪聲越小,即的噪聲是小于的。

上述用的就是重參數(shù)化技巧。

方差參數(shù)可以固定為一個(gè)常數(shù),也可以選擇作為時(shí)間段的一個(gè)時(shí)間表。事實(shí)上,人們可以定義一個(gè)方差表,它可以是線性的、二次的、余弦的等等。最初的DDPM作者利用了一個(gè)從到增加的線性時(shí)間表。Nichol等人2021年的研究表明,采用余弦時(shí)間表效果更好。

Image

4.2、反向過(guò)程(去噪)

接下來(lái)是反向過(guò)程的推導(dǎo):

給定要預(yù)測(cè),它是一個(gè)高斯分布,和的方差是固定的,論文作者使用原始的噪聲調(diào)度器作為方差,也就是說(shuō)噪聲調(diào)度器一旦確立,方差的大小也就固定了。所以我們只需要預(yù)測(cè)這個(gè)均值就好了,下面給出具體的推導(dǎo)過(guò)程:

我們先看整個(gè)損失函數(shù),是個(gè)負(fù)對(duì)數(shù)似然:

希望神經(jīng)網(wǎng)絡(luò)的參數(shù),可以使得生成的概率越大越好。

但問(wèn)題在于的概率不好計(jì)算,因?yàn)樗蕾囉谥暗乃胁介L(zhǎng),從開(kāi)始。作為一種解決方案,我們可以計(jì)算這個(gè)目標(biāo)的變分下界,并得到一個(gè)更易于計(jì)算的公式:

其中:

指的是...整個(gè)序列。

現(xiàn)在依然無(wú)法計(jì)算,我們繼續(xù)推導(dǎo):

我們將 KL divergence 改寫(xiě)后,再利用貝葉斯公式進(jìn)行變形,即分母可以改寫(xiě)為:

將其代回原式:

所以原式可簡(jiǎn)化為:

分子,就是前向過(guò)程,它是固定的,從到的采樣,換句話說(shuō)就是從我們數(shù)據(jù)中的一些圖像開(kāi)始;

分母,

;

將提出來(lái),是因?yàn)槭侵府?dāng)前圖像,它是不依賴于網(wǎng)絡(luò)參數(shù)的。

Image

根據(jù)貝葉斯公式可以變換如下:

具有比較高的方差,因?yàn)楦鶕?jù)這張照片,我們無(wú)法確定它來(lái)自哪里,但是引入,我們就可以容易的預(yù)測(cè)出,

Image

因此我們使用:

替換貝葉斯重寫(xiě)后的式子,我們得到:

上述標(biāo)記的式子,也可以簡(jiǎn)化,我們假設(shè):

因此我們可以簡(jiǎn)化為:

第一項(xiàng)KL散度可以忽略,因?yàn)橹皇莻€(gè)正向過(guò)程,沒(méi)有可學(xué)習(xí)參數(shù),換句話說(shuō)就是它是固定的。

第二項(xiàng)KL散度,左邊和右邊都是正太分布,分別服從

、:

第一項(xiàng)的、就是我們要求的值,這里省略了這部分的推導(dǎo),不影響算法的理解,

凡是涉及到的,就是學(xué)習(xí)調(diào)度器的,我們不需要關(guān)注它

我們可以化簡(jiǎn),我們知道,即:

還知道:、

代入得到:

代入之后我們發(fā)現(xiàn)它就不再依賴于了,它就是和的一個(gè)關(guān)系式,式中的、、都是已知的,最后的本質(zhì)就是我們只是從中減去縮放的隨機(jī)噪聲。

這樣一來(lái),DDPM的每一步推斷可以總結(jié)為:

每個(gè)時(shí)間步通過(guò)和來(lái)預(yù)測(cè)高斯噪聲,圖中用表示,根據(jù)上述公式計(jì)算得到均值;

得到方差;

代入公式得到,利用重參數(shù)化得到。

Image

4.3、訓(xùn)練損失

下面我們來(lái)看損失的推導(dǎo),我們來(lái)回顧第二項(xiàng):

Image

我們需要減小KL散度,由于方差是固定的,我們無(wú)法優(yōu)化,所以需要將它們的均值之差減小,原論文中使用的是簡(jiǎn)單的均方誤差:

將表達(dá)式代入:

研究人員發(fā)現(xiàn),忽略前面的系數(shù)項(xiàng)會(huì)變得更簡(jiǎn)單,采樣質(zhì)量也會(huì)得到提高,所以前面這個(gè)系數(shù)項(xiàng)我們直接忽略,它是和噪聲調(diào)度器有關(guān)的,我們加噪的話也會(huì)使計(jì)算復(fù)雜。

我們最小化也就是最小化了KL散度,KL散度變小了也就是變分上限優(yōu)化到最小,所以那個(gè)負(fù)對(duì)數(shù)似然也會(huì)變小。

上面還剩了最后一項(xiàng),這個(gè)作者決定去掉它,即在時(shí),我們不添加噪聲。也就是下面橫線的地方,只有的時(shí)候才服從高斯分布,如果,直接讓,即噪聲設(shè)置為0。

Image

回顧上面整個(gè)推導(dǎo)過(guò)程:我們從負(fù)對(duì)數(shù)似然 -> 優(yōu)化下界 -> 簡(jiǎn)化下界 -> 預(yù)測(cè)噪聲。

五、torch復(fù)現(xiàn)

https://wangguisen.blog.csdn.net/article/details/128821008

Referenceshttps:///abs/2006.11239https:///archives/9119https://zhuanlan.zhihu.com/p/576475987https://zhuanlan.zhihu.com/p/525106459https://www.bilibili.com/video/BV1b541197HXhttps://www.bilibili.com/video/BV1WD4y1E7X5https:///blog/annotated-diffusionhttps://www./blog/1051664857725795https://lilianweng./posts/2021-07-11-diffusion-models

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品午夜福利免费阅读| 日本高清不卡在线一区| 偷拍洗澡一区二区三区| 亚洲视频偷拍福利来袭| 免费精品一区二区三区| 免费观看日韩一级黄色大片| 久久91精品国产亚洲| 国产欧美日产久久婷婷| 日韩欧美综合中文字幕| 国产一区一一一区麻豆| 久久精品国产99精品亚洲| 亚洲欧洲成人精品香蕉网| 日韩中文高清在线专区| 亚洲一区二区三区日韩91| 午夜视频成人在线免费| 欧美视频在线观看一区| 亚洲一级在线免费观看| 久热久热精品视频在线观看 | 国产剧情欧美日韩中文在线| 99国产高清不卡视频| 亚洲黄片在线免费小视频| 97人妻精品一区二区三区男同| 亚洲熟妇中文字幕五十路| 又黄又爽禁片视频在线观看| 麻豆果冻传媒一二三区| 欧美黑人在线精品极品| 欧美色欧美亚洲日在线| 亚洲精品中文字幕一二三| 日木乱偷人妻中文字幕在线| 中文字幕日韩一区二区不卡| 国产成人人人97超碰熟女| 内用黄老外示儒术出处| 欧美国产亚洲一区二区三区| 成人国产激情在线视频| 久久精品国产亚洲av久按摩| 正在播放玩弄漂亮少妇高潮| 国产传媒高清视频在线| 视频一区二区 国产精品| 久久精品亚洲情色欧美| 在线观看视频日韩精品| 黄男女激情一区二区三区|