終于有人將多模態(tài)重點(diǎn)內(nèi)容做成了動(dòng)畫 原創(chuàng)
多模態(tài)學(xué)習(xí)可以看作是深度學(xué)習(xí)的一個(gè)細(xì)分領(lǐng)域,利用不同類型的神經(jīng)網(wǎng)絡(luò)來處理不同模態(tài)(如圖像、文本、音頻等)的數(shù)據(jù)。多模態(tài)任務(wù)大體可以分為理解和生成兩大類,生成任務(wù)又分為文生圖和圖生文。
?CLIP是入門多模態(tài)的最佳選擇,后續(xù)多模態(tài)模型基本上都延續(xù)了它的思想:分別用圖像編碼器和文本編碼器將圖像和文本編碼到一個(gè)共享的特征空間中,然后通過多模態(tài)融合方法將配對(duì)的圖像文本特征向量拉進(jìn)。
[CLIP] 手書動(dòng)畫 ??
[1] 給定
? 一個(gè)包含3個(gè)文本-圖像對(duì)的小批量數(shù)據(jù)(OpenAI 使用了4億個(gè)文本-圖像對(duì)來訓(xùn)練其原始CLIP模型)。
處理第一個(gè)對(duì):"big table"
[2] ?? 文本 → 2個(gè)向量(3維向量)
? 使用word2vec查找詞嵌入向量。(word2vec可以使用Google提供的預(yù)訓(xùn)練模型)
[3] ?? 圖像 → 2個(gè)向量(4維向量)
? 將圖像分成兩個(gè)塊。
? 將每個(gè)塊展平
[4] 處理其他對(duì)
? 重復(fù)步驟 [2]-[3]
[5] ?? 文本編碼器 & ?? 圖像編碼器(紅框內(nèi)的編碼器參數(shù)通過訓(xùn)練得到)
? 將輸入向量編碼為特征向量
? 在這里,兩個(gè)編碼器都是簡(jiǎn)單的單層感知器(線性 + ReLU)
? 實(shí)際中,編碼器通常是Transformer模型。
[6] ?? ?? 均值池化: 2 → 1 個(gè)向量
? 通過對(duì)列進(jìn)行平均,將2個(gè)特征向量平均為一個(gè)向量
? 目標(biāo)是用一個(gè)向量來表示每個(gè)圖像或文本
[7] ?? ?? -> ?? 投影(投影矩陣通過訓(xùn)練得到)
? 注意,編碼器輸出的文本和圖像特征向量維度不同(3維向量 vs. 4維向量)。
? 使用線性層將圖像和文本向量投影到一個(gè)2D共享嵌入空間。
??? 對(duì)比預(yù)訓(xùn)練 ???
[8] 準(zhǔn)備矩陣乘法
? 復(fù)制文本向量(T1,T2,T3)
? 復(fù)制圖像向量的轉(zhuǎn)置(I1,I2,I3)
? 它們都位于2D共享嵌入空間中。
[9] ?? 矩陣乘法
? 將T和I矩陣相乘。
? 這相當(dāng)于計(jì)算每對(duì)圖像和文本向量之間的點(diǎn)積。
? 目的是使用點(diǎn)積來估計(jì)圖像-文本對(duì)之間的相似度。
[10] ?? Softmax: e^x
? 將e提升為每個(gè)單元格中的數(shù)的冪
? 為簡(jiǎn)化手動(dòng)計(jì)算,我們將e^□ 近似為3^□。
[11] ?? Softmax: ∑
? 為 ?? 圖像→?? 文本 求每行之和
? 為 ?? 文本→ ?? 圖像 求每列之和
[12] ?? Softmax: 1 / 總和
? 將每個(gè)元素除以列總和,以獲得 ?? 文本→?? 圖像 的相似度矩陣
? 將每個(gè)元素除以行總和,以獲得 ?? 圖像→?? 文本 的相似度矩陣
[13] ?? 損失梯度
? 相似度矩陣的“目標(biāo)”是單位矩陣。
? 為什么?如果I和T來自同一個(gè)對(duì)(i=j),我們希望最高值為1,否則為0。
? 使用簡(jiǎn)單的[相似度 - 目標(biāo)]公式來計(jì)算雙向梯度。
? 為什么這么簡(jiǎn)單?因?yàn)楫?dāng)Softmax和交叉熵?fù)p失一起使用時(shí),數(shù)學(xué)計(jì)算會(huì)神奇地如此簡(jiǎn)化。
? 這些梯度啟動(dòng)了反向傳播過程,以更新編碼器和投影層的權(quán)重和偏置(紅色邊框)。
CLIP簡(jiǎn)單的融合方法使其非常適合檢索任務(wù),而不適合生成任務(wù),后續(xù)的一些模型為了提升融合效果,常采用Transformer編碼器作為融合模塊,為了具備圖生文本的能力,后續(xù)模型也都增加了Transformer解碼器;或者為了提升效率,則干脆直接使用訓(xùn)練好的大模型作為編解碼器,然后使用一個(gè)適配器作為銜接。
多模態(tài)模型:
CLIP
ViLT
ALBEF
VLMO
BeiT v3
BLIP
CoCa
Flamingo
BLIP-2
IMAGEBIND
Meta-Transformer
[Autoencoder(AE)]手書動(dòng)畫??
圖生文和文生圖雖然都是生成類型任務(wù),但模型架構(gòu)和思想?yún)s有很大不同,與CLIP一樣,AE也是學(xué)習(xí)文生圖的最佳選擇。
自編碼器用于學(xué)習(xí)數(shù)據(jù)的低維表示,常用于圖像壓縮、降維、去噪等任務(wù);但由于缺乏控制變量,所以不太適合用于文生圖,但它為后續(xù)變分自編碼器(VAE)奠定了基礎(chǔ)。
-- 網(wǎng)絡(luò)架構(gòu) --
編碼器
線性層(4,3)
ReLU激活
線性層(3,2)
ReLU激活
解碼器
線性層(2,3)
ReLU激活
線性層(3,4)
-- 步驟詳解 --
[1] 給定
? 四個(gè)訓(xùn)練樣本 X1, X2, X3, X4
[2] 自動(dòng)
? 將訓(xùn)練樣本復(fù)制為目標(biāo) (Y'),目標(biāo)就是訓(xùn)練樣本本身。
? 目的是訓(xùn)練網(wǎng)絡(luò)重構(gòu)訓(xùn)練樣本。
[3] 編碼器: 第1層 + ReLU
? 將輸入與權(quán)重和偏置相乘
? 應(yīng)用ReLU,將負(fù)值劃掉 (-1 -> 0)
[4] 編碼器: 第2層 + ReLU
? 將特征與權(quán)重和偏置相乘
? 應(yīng)用ReLU,將負(fù)值劃掉 (-1 -> 0)
? 這一層通常被稱為"bottleneck",因?yàn)樗妮敵?綠色)的特征維度(2)比輸入特征(4)少得多。
[5] 解碼器: 第1層 + ReLU
? 將特征與權(quán)重和偏置相乘
? 應(yīng)用ReLU,劃掉負(fù)值。這里沒有負(fù)值需要?jiǎng)澋簟?/p>
[6] 解碼器: 第2層
? 將特征與權(quán)重和偏置相乘
? 輸出(Y)是解碼器嘗試從降維到2D的表示(綠色)重構(gòu)訓(xùn)練樣本。
[7] 損失梯度和反向傳播
? 計(jì)算輸出(Y)和目標(biāo)(Y')之間的均方誤差(MSE)損失的梯度。
? 公式是 2 * (Y - Y')
? 首先我們計(jì)算 輸出(Y) - 目標(biāo)(Y')
? 然后我們將每個(gè)元素乘以2
? 這些梯度啟動(dòng)反向傳播過程,用于更新權(quán)重和偏置。
[Variant Autoencoder(VAE)] 手書動(dòng)畫??
變分自編碼器(VAE)擴(kuò)展了自編碼器(AE)的概念。自編碼器將輸入映射到固定的隱變量表示,而變分自編碼器則將輸入映射到隱變量的概率分布。通過從這個(gè)概率分布中進(jìn)行采樣,VAE能夠生成多樣化的新數(shù)據(jù)樣本,而不僅僅是重建輸入數(shù)據(jù)。這種方法使得VAE在生成任務(wù)中表現(xiàn)得更加靈活和有效。
[1] 給定:
? 三個(gè)訓(xùn)練樣本 X1, X2, X3
? 將訓(xùn)練樣本復(fù)制成目標(biāo)。
? 目的是訓(xùn)練網(wǎng)絡(luò)來重建這些訓(xùn)練樣本。
[2] 編碼器:第一層 + ReLU
? 將輸入與權(quán)重和偏置相乘
? 應(yīng)用 ReLU,將負(fù)值去除(-1 -> 0)
[3] 編碼器:均值和方差
? 將特征與兩組權(quán)重和偏置相乘
? ?? 第一組預(yù)測(cè)潛在分布的均值 (??)
? ?? 第二組預(yù)測(cè)潛在分布的標(biāo)準(zhǔn)差 (??)
[4] 重參數(shù)化技巧:隨機(jī)偏移
? 從均值為0、方差為1的正態(tài)分布中抽取隨機(jī)變量 ε。
? 目的是隨機(jī)選擇一個(gè)偏移值,使其偏離均值。
? 將標(biāo)準(zhǔn)差值與 ε 值相乘。
? 目的是根據(jù)標(biāo)準(zhǔn)差來縮放偏移值。
[5] 重參數(shù)化技巧:均值 + 偏移
? 將抽樣得到的偏移值加到預(yù)測(cè)的均值上
? 結(jié)果是新的參數(shù)或特征 ??,作為解碼器的輸入。
[6] 解碼器:第一層 + ReLU
? 將輸入特征與權(quán)重和偏置相乘
? 應(yīng)用 ReLU,去除負(fù)值。此處,-4 被去除。
[7] 解碼器:第二層
? 將特征與權(quán)重和偏置相乘
? 輸出是解碼器嘗試從 ?? 和 ?? 描述的重參數(shù)化分布中重建輸入數(shù)據(jù) X。
[8]-[10] KL散度損失
[8] 損失梯度:均值 ??
? 我們希望 ?? 接近 0。
? 一些叫做 SGVB 的數(shù)學(xué)計(jì)算簡(jiǎn)化了損失梯度的計(jì)算,使其直接為 ??
[9,10] 損失梯度:標(biāo)準(zhǔn)差 ??
? 我們希望 ?? 接近 1。
? 一些數(shù)學(xué)計(jì)算簡(jiǎn)化了計(jì)算,使其為 ?? - (1/ ??)
[11] 重建損失
? 我們希望重建的數(shù)據(jù) Y(深 ??)與輸入數(shù)據(jù) X 相同。
? 一些涉及均方誤差的數(shù)學(xué)計(jì)算簡(jiǎn)化為 Y - X。
VAE中比較難理解的是它的訓(xùn)練過程有兩個(gè)損失,一個(gè)是圖像重構(gòu)損失,重構(gòu)損失衡量模型生成的數(shù)據(jù)與輸入數(shù)據(jù)之間的差異,通常使用MSE;另一個(gè)是KL散度損失,用于衡量VAE中隱變量的近似后驗(yàn)分布與先驗(yàn)分布(通常是標(biāo)準(zhǔn)正態(tài)分布)之間的差異,通過減小該損失,以鼓勵(lì)隱變量的分布接近先驗(yàn)分布,使得模型的潛在空間具有良好的連續(xù)性和生成能力。
[GAN] 手書動(dòng)畫 ??
生成對(duì)抗網(wǎng)絡(luò)(GAN)是一種生成模型,通過兩個(gè)神經(jīng)網(wǎng)絡(luò)——生成器和判別器——相互對(duì)抗,生成與真實(shí)數(shù)據(jù)相似的新樣本。
原始的GAN通過隨機(jī)噪聲控制生成圖像的多樣性,后續(xù)不同版本的GAN豐富了控制變量的類型,例如,標(biāo)簽、文本、圖像等等。
目標(biāo):從2維噪聲生成逼真的4維數(shù)據(jù)。
[1] 給定
? 4個(gè)2維的噪聲向量(N)
? 4個(gè)4維的真實(shí)數(shù)據(jù)向量(X)
[2] ?? 生成器:第一層
? 將噪聲向量與權(quán)重和偏置相乘,以獲得新的特征向量
[3] ?? 生成器:ReLU
? 應(yīng)用ReLU激活函數(shù),其效果是抑制負(fù)值。在此練習(xí)中,-1 和 -2 被劃掉并設(shè)為0。
[4] ?? 生成器:第二層
? 將特征向量與權(quán)重和偏置相乘,以獲得新的特征向量。
? 應(yīng)用了ReLU函數(shù),但由于每個(gè)值都是正數(shù),因此沒有效果。
? 這些新的特征向量就是由這個(gè)簡(jiǎn)單的兩層生成器網(wǎng)絡(luò)生成的“偽”數(shù)據(jù)(F)。
[5] ?? 判別器:第一層
? 將偽數(shù)據(jù)(F)和真實(shí)數(shù)據(jù)(X)都輸入到第一層線性層
? 將F和X與權(quán)重和偏置相乘,以獲得新的特征向量。
? 應(yīng)用了ReLU函數(shù),但由于每個(gè)值都是正數(shù),因此沒有效果。
[6] ?? 判別器:第二層
? 將特征向量與一組權(quán)重和偏置相乘,以獲得新的特征。
? 預(yù)期效果是將每個(gè)數(shù)據(jù)向量的特征減少到僅一個(gè)特征值。
[7] ?? 判別器:Sigmoid σ
? 使用Sigmoid函數(shù)將特征(Z)轉(zhuǎn)換為概率值(Y)
? 1表示判別器100%確信數(shù)據(jù)是真實(shí)的。
? 0表示判別器100%確信數(shù)據(jù)是偽造的。
[8] ??? 訓(xùn)練:?? 判別器
? 通過簡(jiǎn)單的Y - YD公式計(jì)算判別器的損失梯度。為什么這么簡(jiǎn)單?因?yàn)楫?dāng)我們同時(shí)使用Sigmoid和二元交叉熵?fù)p失時(shí),數(shù)學(xué)計(jì)算會(huì)神奇地簡(jiǎn)化為這個(gè)公式。
? YD 是判別器的目標(biāo)預(yù)測(cè)。判別器必須學(xué)習(xí)預(yù)測(cè)4個(gè)偽數(shù)據(jù)(F)為0,4個(gè)真實(shí)數(shù)據(jù)(X)為1。YD=[0,0,0,0,1,1,1,1]。
? 請(qǐng)注意,判別器的損失涉及偽數(shù)據(jù)和真實(shí)數(shù)據(jù)。
? 計(jì)算出損失梯度后,我們可以啟動(dòng)反向傳播過程,以更新判別器的權(quán)重和偏置(藍(lán)色邊框)。
[9] ??? 訓(xùn)練:?? 生成器
? 通過簡(jiǎn)單的Y - YG公式計(jì)算生成器的損失梯度。
? YG 是生成器的目標(biāo)預(yù)測(cè)。生成器必須欺騙判別器,使其預(yù)測(cè)4個(gè)偽數(shù)據(jù)(F)為1。YG=[1,1,1,1]。
? 請(qǐng)注意,生成器的損失只涉及偽數(shù)據(jù)。
? 計(jì)算出損失梯度后,我們可以啟動(dòng)反向傳播過程,以更新生成器的權(quán)重和偏置(綠色邊框)。
對(duì)于文生圖任務(wù),目前最常用的是Diffusion擴(kuò)散模型,前面介紹了VAE和GAN,那么它們各自有什么優(yōu)缺點(diǎn)呢?
GAN生成圖像質(zhì)量高但訓(xùn)練不穩(wěn)定,VAE生成穩(wěn)定但圖像質(zhì)量較低,Diffusion生成質(zhì)量?jī)?yōu)異但速度較慢。
[SORA] 手書動(dòng)畫 ??
OpenAI 的 #SORA 在今年早些時(shí)候宣布時(shí)風(fēng)靡網(wǎng)絡(luò)。Sora 背后的技術(shù)是由 William Peebles 和 Shining Xie 開發(fā)的擴(kuò)散Transformer (DiT)。
DiT 是如何工作的?
????????: 基于文本提示和一系列擴(kuò)散步驟生成視頻
[1] 給定
? 視頻
? 提示詞: "sora is sky"
? 擴(kuò)散步驟: t = 3
[2] 視頻 → 補(bǔ)丁
? 將所有幀中的所有像素劃分為4個(gè)時(shí)空補(bǔ)丁
[3] 視覺編碼器:像素 ?? → 潛在特征 ??
? 將補(bǔ)丁與權(quán)重和偏置相乘,然后經(jīng)過 ReLU 激活函數(shù)
? 每個(gè)補(bǔ)丁得到一個(gè)潛在特征向量
? 目的是將維度從 4 (2x2x1) 降維到 2 (2x1)。
? 在論文中,降維過程是從196,608 (256x256x3)→ 4096 (32x32x4)
[4] ? 添加噪聲
? 根據(jù)擴(kuò)散時(shí)間步 t 采樣噪聲。通常,t 越大,噪聲越小。
? 將采樣的噪聲添加到潛在特征中以獲得有噪聲的潛在特征。
? 目的是故意向視頻添加噪聲,并要求模型猜測(cè)這些噪聲是什么。
? 這類似于通過故意刪除句子中的一個(gè)詞來訓(xùn)練語(yǔ)言模型,并讓模型猜測(cè)被刪除的詞是什么。
[5-7] ?? 通過自適應(yīng)層歸一化進(jìn)行條件化
[5] 編碼條件
? 將 "sora is sky" 編碼為文本嵌入向量 [0,1,-1]。
? 將 t = 3 編碼為一個(gè)二進(jìn)制向量 [1,1]。
? 將這兩個(gè)向量連接成一個(gè)5D列向量。
[6] 估計(jì)縮放/平移
? 將組合向量與權(quán)重和偏置相乘
? 目的是估計(jì)縮放 [2,-1] 和平移 [-1,5]。
? 將結(jié)果復(fù)制到 (X) 和 (+)
[7] 應(yīng)用縮放/平移
? 將有噪聲的潛在特征按 [2,-1] 縮放
? 將縮放后的有噪聲潛在特征按 [-1, 5] 平移
? 結(jié)果是“條件化”的有噪聲潛在特征。
[8-10] Transformer
[8] 自注意力
? 將條件化的有噪聲潛在特征輸入到 Query-Key 函數(shù)中以獲得自注意力矩陣
? 省略了 Value 以簡(jiǎn)化操作
[9] 注意力池化
? 將條件化的有噪聲潛在特征與自注意力矩陣相乘
? 結(jié)果是加權(quán)的注意力特征
[10] 點(diǎn)積前饋網(wǎng)絡(luò)
? 將注意力加權(quán)特征與權(quán)重和偏置相乘
? 結(jié)果是預(yù)測(cè)的噪聲
????♂? ?????????? 訓(xùn)練
[11]
? 通過計(jì)算預(yù)測(cè)噪聲與采樣噪聲(真實(shí)值)之間的 MSE 損失梯度。
? 使用損失梯度啟動(dòng)反向傳播,以更新所有可學(xué)習(xí)的參數(shù)(紅色邊框)。
? 注意,視覺編碼器和解碼器的參數(shù)是凍結(jié)的(藍(lán)色邊框)。
?? ???????????????? (????????????) 生成(采樣)
[12] 去噪
? 從有噪聲的潛在特征中減去預(yù)測(cè)噪聲,以獲得無噪聲的潛在特征。
[13] 視覺解碼器:潛在特征 ?? → 像素 ??
? 將補(bǔ)丁與權(quán)重和偏置相乘,然后經(jīng)過 ReLU 激活函數(shù)
[14] 補(bǔ)丁 → 視頻
? 將補(bǔ)丁重新排列成一系列視頻幀。
本文轉(zhuǎn)載自公眾號(hào)人工智能大講堂
原文鏈接:??????https://mp.weixin.qq.com/s/2lAfcrqy1goVwVhX5PTGOw??
