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