DALL·E 2: 讓 AI 獲得想象力(一)
DALL·E 2 是 OpenAI 的最新工作,可以根據(jù)自然語(yǔ)言的描述創(chuàng)建逼真的圖像和藝術(shù)。
DALL·E 2 也可以根據(jù)自然語(yǔ)言標(biāo)題對(duì)現(xiàn)有圖像進(jìn)行逼真的編輯。它可以在考慮陰影、反射和紋理的同時(shí)添加和刪除元素。
文本描述:An astronaut riding a horse in a photorealistic style
DALL·E 2 生成:

DALL·E 2 學(xué)習(xí)了圖像和用于描述圖像的文本之間的關(guān)系。它使用一種稱為“擴(kuò)散”的過(guò)程,該過(guò)程從隨機(jī)點(diǎn)的圖案開(kāi)始,并在識(shí)別圖像的特定方面時(shí)逐漸改變?cè)搱D案朝向圖像。
1. CLIP
論文地址:https://arxiv.org/abs/2103.00020
CLIP 是 OpenAI 2021 年發(fā)表的圖文多模態(tài)模型,它通過(guò)互聯(lián)網(wǎng)上大量可用的各種自然語(yǔ)言監(jiān)督對(duì)各種圖像進(jìn)行訓(xùn)練(重新定義了 “Zero-Shot” ??)
通過(guò)對(duì)比學(xué)習(xí),在 OpenAI 新制作的400億數(shù)據(jù)集(??)上預(yù)訓(xùn)練達(dá)到了SOTA。CLIP 如此強(qiáng)大的主要原因之一就在于 OpenAI 從互聯(lián)網(wǎng)收集的 400 億數(shù)據(jù)集
CLIP 預(yù)訓(xùn)練了一個(gè)圖像編碼器(ResNet50 或者 ViT)和一個(gè)文本編碼器(Transformer 結(jié)構(gòu)),以預(yù)測(cè)哪些圖像與數(shù)據(jù)集中的哪些文本相匹配。然后使用這種行為將 CLIP 變成一個(gè) Zero-Shot 分類器。

1.1 Contrastive Learning
CLIP 采取的方法非常簡(jiǎn)單且高效,將圖片與對(duì)應(yīng)的文本配對(duì)作為正樣本,其他的圖片文本對(duì)作為負(fù)樣本進(jìn)行對(duì)比學(xué)習(xí)。
給定一批 圖像文本對(duì),訓(xùn)練 CLIP 以預(yù)測(cè)批次中 可能的圖像文本對(duì)中的哪一個(gè)實(shí)際發(fā)生。CLIP 通過(guò)聯(lián)合訓(xùn)練圖像編碼器和文本編碼器來(lái)學(xué)習(xí)多模態(tài) embedding 空間,以最大化批次中 個(gè)正樣本對(duì)的圖像和文本 embedding 的余弦相似度,同時(shí)最小化 個(gè)負(fù)樣本對(duì) embedding 的余弦相似度。并在這些相似性分?jǐn)?shù)上優(yōu)化了對(duì)稱交叉熵?fù)p失。
1.2 Prompt engineering
比較有意思的是除了互聯(lián)網(wǎng)數(shù)據(jù)集,OpenAI 還應(yīng)用了 prompt:
測(cè)試的數(shù)據(jù)集包含了 ImageNet 等,其圖片對(duì)應(yīng)一個(gè)分類標(biāo)簽,比如 貓狗等。OpenAI 設(shè)計(jì)了一個(gè)模版,如
A photo of a {label}.處理后將標(biāo)簽轉(zhuǎn)化成一句話來(lái)處理,這樣轉(zhuǎn)化后在 ImageNet 帶來(lái) 1.3% 的提升。對(duì)于 OCR 數(shù)據(jù)集進(jìn)行類似處理使用諸如A satellite photo of a {label}.描述OpenAI 還設(shè)計(jì)了一種更復(fù)雜的 Assembly 的方法,使用 80 種模板。將每個(gè)詞放進(jìn)去,組合出 80 個(gè)句子,分別計(jì)算出 embedding 后做一個(gè)平均。在 ImageNet 上又有了 3.5% 的提升。
Prompt_Engineering_for_ImageNet.ipynb

2. Diffusion Model
參考資料:從DDPM到GLIDE:基于擴(kuò)散模型的圖像生成算法進(jìn)展
DDPM 論文:https://arxiv.org/abs/2006.11239

擴(kuò)散模型通常包括兩個(gè)過(guò)程,從信號(hào)逐步到噪聲的正向過(guò)程/擴(kuò)散過(guò)程(forward/diffusion process)和從噪聲逐步到信號(hào)的逆向過(guò)程(reverse process)。擴(kuò)散模型大都是基于 DDPM 的框架所設(shè)計(jì)。
逆向過(guò)程:
從一張隨機(jī)高斯噪聲圖片 開(kāi)始,通過(guò)逐步去噪生成最終結(jié)果 。這個(gè)過(guò)程是一個(gè)馬爾可夫鏈,可以被定義為:
其中,
這個(gè)過(guò)程可以理解為, 作為輸入,預(yù)測(cè)高斯分布的均值和方差,再基于預(yù)測(cè)的分布進(jìn)行隨機(jī)采樣得到 。通過(guò)不斷預(yù)測(cè)和采樣過(guò)程,最終生成一張真實(shí)的圖片
正向/擴(kuò)散過(guò)程
正向過(guò)程或者說(shuō)擴(kuò)散過(guò)程,采用的是一個(gè)固定的馬爾可夫鏈的形式,即逐步地向圖片添加高斯噪聲:
其中,
在 DDPM 中, 是預(yù)先設(shè)置的定值參數(shù)。擴(kuò)散過(guò)程有一個(gè)重要的特性,我們可以采樣任意時(shí)刻 下的加噪結(jié)果 。將 以及 ,則我們可以得到:
使得我們可以直接獲得任意程度的加噪圖片,方便后續(xù)的訓(xùn)練。
2.1 Guided Diffusion
論文地址:https://arxiv.org/abs/2105.05233
通常而言,對(duì)于通用圖像生成任務(wù),加入類別條件能夠比無(wú)類別條件生成獲得更好的效果,這是因?yàn)榧尤腩悇e條件的時(shí)候,實(shí)際上是大大減小了生成時(shí)的多樣性。OpenAI 的Guided Diffusion 就提出了一種簡(jiǎn)單有效的類別引導(dǎo)的擴(kuò)散模型生成方式。Guided Diffusion 的核心思路是在逆向過(guò)程的每一步,用一個(gè)分類網(wǎng)絡(luò)對(duì)生成的圖片進(jìn)行分類,再基于分類分?jǐn)?shù)和目標(biāo)類別之間的交叉熵?fù)p失計(jì)算梯度,用梯度引導(dǎo)下一步的生成采樣。這個(gè)方法一個(gè)很大的優(yōu)點(diǎn)是,不需要重新訓(xùn)練擴(kuò)散模型,只需要在前饋時(shí)加入引導(dǎo)既能實(shí)現(xiàn)相應(yīng)的生成效果。
3. DALL·E 2
CLIP embedding 有一些理想的屬性:它們對(duì)圖像分布的轉(zhuǎn)變是穩(wěn)健的,有強(qiáng)大的 zero-shot 能力,并且已經(jīng)被微調(diào)以在各種視覺(jué)和語(yǔ)言任務(wù)上取得 SOTA 。同時(shí),擴(kuò)散模型(diffusion models )推動(dòng)了圖像和視頻生成任務(wù)的 SOTA。為了達(dá)到最佳效果,擴(kuò)散模型利用了一種指導(dǎo)方法,以樣本多樣性為代價(jià)提高了樣本的保真度(如對(duì)于圖像,逼真度)。
作者結(jié)合這兩種方法來(lái)進(jìn)行文本條件的圖像生成。首先訓(xùn)練一個(gè)擴(kuò)散編碼器(diffusion decoder)來(lái)逆向 CLIP 圖像編碼器。擴(kuò)散編碼器是非確定性的,并且在給定圖像 embedding 可以生成多個(gè)圖像。編碼器和它的近似逆變器(approximate inverse,為解碼器)的存在允許超越文本到圖像翻譯的能力。與 GAN 一樣,對(duì)輸入圖像進(jìn)行編碼后解碼會(huì)產(chǎn)生語(yǔ)義為相似的輸出圖像。還可以通過(guò)對(duì)多張輸入圖像編碼后的 embedding 之間進(jìn)行插值得到圖片融合的效果。使用 CLIP embedding 空間的一個(gè)顯著優(yōu)勢(shì)是能夠通過(guò)在任何編碼文本向量的方向上移動(dòng)來(lái)對(duì)圖像進(jìn)行語(yǔ)義修改。而在 GAN 潛在空間中發(fā)現(xiàn)這些方向需要運(yùn)氣和大量的人工檢查。此外,編碼和解碼圖像還提供了一種工具,用于觀察圖像的哪些特征被 CLIP 識(shí)別或忽略。作者將其全文本條件的圖像生成棧稱為 unCLIP,因?yàn)樗ㄟ^(guò)倒置 CLIP 圖像編碼器來(lái)生成圖像。
圖 3. unCLIP 概述。在虛線上方,描述了 CLIP 訓(xùn)練過(guò)程,通過(guò)它模型學(xué)習(xí)了文本和圖像的聯(lián)合表示空間。在虛線下方,描述了文本到圖像的生成過(guò)程:在生成圖像 embedding 之前,首先將 CLIP 文本 embedding 輸入到先驗(yàn)?zāi)P瓦M(jìn)行自回歸或擴(kuò)散,然后該 embedding 用于調(diào)節(jié)擴(kuò)散解碼器,產(chǎn)生最終圖片。
為了獲得完整的圖像生成模型,作者將 CLIP 圖像 embedding 解碼器與先驗(yàn)?zāi)P停╬rior model)相結(jié)合,該模型從給定的文本標(biāo)題生成可能的 CLIP 圖像 embedding。作者將其文本到圖像系統(tǒng)與 DALL-E ?和 GLIDE ?等其他系統(tǒng)進(jìn)行比較,發(fā)現(xiàn)樣本在質(zhì)量上與 GLIDE 相當(dāng),但在其中具有更大的多樣性。作者還開(kāi)發(fā)了在 embedding 空間中訓(xùn)練擴(kuò)散先驗(yàn)的方法,并表明它們實(shí)現(xiàn)了與自回歸先驗(yàn)相當(dāng)?shù)男阅?,同時(shí)具有更高的計(jì)算效率。
2.1 Method
訓(xùn)練數(shù)據(jù)集由圖像 及其對(duì)應(yīng)的標(biāo)題 組成 。給定圖像 ,讓 和 分別為其 CLIP 圖像和文本 embedding。設(shè)計(jì)的生成堆棧以使用兩個(gè)組件從標(biāo)題生成圖像:
先驗(yàn)?zāi)P? 以標(biāo)題 為條件生成 CLIP 圖像 embedding 解碼器 以 CLIP 圖像 embedding (以及可選的文本標(biāo)題 ?)為條件生成圖像 。
解碼器在給定 CLIP 圖像 embedding 的情況下反向生成圖像,而先驗(yàn)?zāi)P蛯W(xué)習(xí)圖像 embedding 本身的生成模型。堆疊這兩個(gè)組件產(chǎn)生一個(gè)生成模型 圖像 給定標(biāo)題 :
2.2.1 Prior
雖然解碼器可以逆向 CLIP 圖像 embedding 以生成圖像 ,但作者需要一個(gè)從標(biāo)題 生成 的先驗(yàn)?zāi)P?,以便能夠從文本?biāo)題生成圖像。作者為先前的模型探索了兩個(gè)不同的模型類型:
Autoregressive (AR) prior:CLIP 圖像的 embedding 被轉(zhuǎn)換為一系列離散編碼,并根據(jù)標(biāo)題 進(jìn)行自回歸預(yù)測(cè)。 Diffusion prior:連續(xù)向量 使用以標(biāo)題 為條件的高斯擴(kuò)散模型直接建模。
因?yàn)樗菢?biāo)題的確定性函數(shù),除了標(biāo)題之外,作者還可以在 CLIP 文本 embedding 上設(shè)置先驗(yàn)條件。為了提高樣本質(zhì)量,作者還通過(guò)在訓(xùn)練過(guò)程中 10% 的時(shí)間概率隨機(jī)丟棄此文本條件信息,對(duì) AR prior 和 Diffusion prior 使用無(wú)分類器采樣。
為了更有效地從 AR prior 訓(xùn)練和采樣,作者首先通過(guò)應(yīng)用主成分分析 (PCA) 來(lái)降低 CLIP 圖像 embedding 的維數(shù)。特別的是,作者發(fā)現(xiàn)當(dāng)使用 SAM (Sharpness-Aware Minimization,是 Google 研究團(tuán)隊(duì)發(fā)表于 2021年 ICLR 的 spotlight 論文,核心想法是在 minimize 損失函數(shù)時(shí),不僅僅追求 loss value的 minima ,同時(shí)考慮了 loss landscape 的平坦程度)訓(xùn)練 CLIP 時(shí),CLIP 表示空間的秩顯著降低,同時(shí)略微提高了評(píng)估指標(biāo)。通過(guò)僅保留原始 1,024 個(gè)主成分中的 319 個(gè),能夠保留幾乎所有信息。應(yīng)用 PCA 后,作者通過(guò)降低特征值大小對(duì)主成分進(jìn)行排序,將 319 個(gè)維度中的每一個(gè)量化為 1,024 個(gè)離散桶,并使用帶有因果注意掩碼(causal attention mask)的 Transformer 模型預(yù)測(cè)結(jié)果序列。這使得推理期間預(yù)測(cè)的 ?token 數(shù)量減少了三倍,并提高了訓(xùn)練穩(wěn)定性。
作者通過(guò)將文本標(biāo)題和 CLIP 文本 embedding 編碼為序列的前綴來(lái)調(diào)整 AR prior。此外,作者在文本 embedding 和圖像 embedding 之間添加一個(gè)表示(量化)點(diǎn)積的 token,。這允許在更高的點(diǎn)積上調(diào)整模型,因?yàn)楦叩奈谋緢D像點(diǎn)積對(duì)應(yīng)于更好地描述圖像的標(biāo)題。
對(duì)于 diffusion prior,作者在一個(gè)序列上訓(xùn)練一個(gè)帶有因果注意掩碼的解碼器 Transformer,該序列依次包括:編碼文本、CLIP 文本 embedding、擴(kuò)散時(shí)間步的 embedding、噪聲 CLIP 圖像 embedding、最終 embedding(來(lái)自 Transformer 的輸出用于預(yù)測(cè)無(wú)噪聲的 CLIP 圖像嵌入)。作者選擇不像 AR prior 那樣在 上調(diào)節(jié) diffusion prior;相反,通過(guò)生成兩個(gè) 樣本并選擇一個(gè)與 具有更高點(diǎn)積的樣本來(lái)提高采樣時(shí)間的質(zhì)量。而不是使用 Ho 等人的預(yù)測(cè)公式。[25],我們發(fā)現(xiàn)最好訓(xùn)練我們的模型直接預(yù)測(cè)無(wú)噪聲 zi,并在該預(yù)測(cè)上使用均方誤差損失
參考資料
https://openai.com/blog/clip/ https://openai.com/dall-e-2/
