手寫Sora中的Diffusion Transformer(DiT)——探索最先進視頻生成器背后的秘密 精華
"在遠古的DiTharos大地上,曾經有一個傳說,名為Sora。它體現了無限潛力的本質,包括廣闊和壯麗的天空。當它展翅高飛,其彩虹般的翅膀跨越廣闊的空間,光線反射在它引人注目的身體上時,人們可以聽到“Sora即天空”的聲音在天空中回蕩。使它成為傳說的不僅僅是它史詩般的巨大,而是它能夠駕馭在飄動的云中散落的光元素。憑借其強大的力量,Sora用一次旋轉創造的魔力,是一種令人嘆為觀止的景象!他們說,Sora依然存在,不斷磨練自己的技能,并在每一天變得更加強大,準備在黃金時刻飛翔。當你今天在天空中看到一抹深紅色的斑點時,你會知道那是傳說飛向光明境界的一小部分!"
這是我給兒子講的一個關于一只傳說中的龍的故事,它生活在遙遠的地方。我們稱之為“Sora傳奇”。他非常喜歡這個故事,因為Sora又大又強壯,照亮了天空。當然,他現在還不理解Transformer和Diffusion 的概念,他只有四歲,但他確實理解一個宏偉的龍利用光的力量統治著DiTharos。
Sora由 Open AI 開發
這個故事與我們世界中的Sora,Open AI 的文本到視頻模型如何在人工智能領域出現并引起轟動非常相似。原則上,Sora是由 William Peebles 和 Saining Xie 在 2023 年開發的Diffusion Transformer(DiT)。
換句話說,它利用Diffusion 的概念來預測視頻,利用Transformer的力量進行下一級別的縮放。為了進一步理解這一點,讓我們試著回答這兩個問題:
- 給定提示時,Sora會做什么?
- 它如何結合Diffusion Transformer的思想?
談到Sora制作的視頻,以下是我最喜歡的一部視頻,它展示了意大利街頭一只可愛的達爾馬提犬。它的動作是多么自然啊!
視頻所使用的提示:“相機直接對著意大利布拉諾的彩色建筑。一只可愛的達爾馬提犬從一座建筑物的一樓窗戶向外張望。許多人在運河街道上走動和騎自行車。”
Sora是如何做到的?
話不多說,讓我們深入了解細節,看看Sora如何基于文本提示創建這些超逼真的視頻。
Sora是如何工作的?
再次感謝 Tom Yeh 教授出色的“AI手工系列”,我們可以在討論中使用這個關于Sora的好文章(除非另有說明,下文中所有圖片均由Tom Yeh 教授提供)
那么,我們開始吧:
我們的目標 —— 基于文本提示生成視頻。
我們有:
- 訓練視頻
- 文本提示
- Diffusion 步驟 t = 3
對于本示例,你能猜到我們的文本提示是什么嗎?沒錯,它是“Sora是天空”。t = 3 的Diffusion 步驟意味著在三個步驟中添加噪音或Diffusion 模型,但為了說明問題,在這個示例中將堅持只用一步。
什么是Diffusion?Diffusion 主要指的是粒子的散射現象 — 想象一下我們如何欣賞到柔和的陽光從云層后面射出。這種柔和的光輝可以歸因于陽光穿過云層時的散射,導致光線朝不同方向Diffusion 。
粒子的隨機運動驅動了這種Diffusion 現象。這正是圖像生成中使用的Diffusion 模型所發生的情況。向圖像添加隨機噪聲,使圖像中的元素偏離原始狀態,從而為生成更精細圖像鋪平道路。
當談到圖像模型中的Diffusion 時,要記住的關鍵思想是“噪聲”。
該過程從以下步驟開始:
[1] 將視頻轉換為patches
在進行文本生成時,模型將大型語料庫分解為稱為token的小塊,并使用這些token進行所有計算。類似地,Sora將視頻分解為稱為視覺patches的較小元素,以使工作更簡單。
由于我們討論的是一個視頻,談論的是多個幀中的圖像。在示例中,有四個幀。每個四個幀或矩陣包含創建圖像的像素。
這里的第一步是將訓練視頻轉換為4個時空patches,如下所示:
[2] 減少這些視覺patches的維度:編碼器
接下來是降維。降維的概念已經存在了一個多世紀(趣事:主成分分析,也稱為PCA,是由Karl Pearson于1901年引入的),但其重要性沒有隨時間消退。
Sora也使用了它!
當我們談論神經網絡時,降維的基本思想之一就是編碼器。編碼器通過其設計將高維數據轉換為低維數據,重點是捕獲數據的最相關特征。兩全其美:它提高了計算的效率和速度,同時算法得到了有用的數據。
Sora使用相同的思想將高維像素轉換為較低維的潛在空間。為此,我們將patches與權重和偏差相乘,然后進行ReLU激活。
筆記
線性變換:輸入embedding向量乘以權重矩陣 W,然后加上偏置向量 b,
z = Wx+b,其中 W 是權重矩陣,x 是我們的詞embedding,b 是偏置向量。
ReLU 激活函數:接下來,將 ReLU 應用于這個中間值 z。
ReLU 返回輸入和零的元素最大值。在數學上,h = max{0,z}。
- 這里的權重矩陣是一個 2x4 矩陣 [ [1, 0, -1, 0], [0, 1, 0, 1] ],偏置為 [0,1]。
- 這里的patches矩陣是 4x4。
將權重矩陣 W 的轉置和偏置 b 與patches相乘,然后進行 ReLU,得到的潛在空間只是一個 2x4 矩陣。因此,通過使用視覺編碼器,‘模型’的維度從 4(2x2x1)降低到 2(2x1)。
在原始 DiT 論文中,這個減少是從 196,608(256x256x3)降低到 4096(32x32x4),這是巨大的。想象一下與使用 4096 進行工作相比使用 196,608 像素 —— 減少了 48 倍!
在這個維度減少之后,我們進行了整個過程中最重要的一個步驟 —— Diffusion 。
[3] 用噪聲Diffusion 模型
為了引入Diffusion ,我們在前一步中獲得的潛在特征上添加了采樣噪聲,以獲得Diffusion 后的潛在特征。這里的目標是要求模型檢測噪聲是什么。
這本質上就是圖像生成的Diffusion 思想。
通過向圖像添加噪聲,模型被要求猜測噪聲是什么樣的,它是什么樣子。作為回報,模型可以基于它從嘈雜的圖像中猜測和學習到的內容生成全新的圖像。
這也可以看作是相對于從語言模型中刪除一個詞并要求它猜測被刪除詞是什么。
現在,訓練視頻已經被減少并且被Diffusion 了噪聲,接下來的步驟是利用文本提示來根據提示獲取視頻。通過自適應規范化層進行條件化。
[4]-[6] 自適應規范化層的條件化
‘條件化’ 實質上意味著嘗試利用我們可用的額外信息來影響模型的行為。例如:由于提示是 ‘Sora 是天空’,我們希望模型集中關注天空或云等元素,而不是給其他概念如帽子或植物賦予重要性。因此,自適應規范化層會動態地根據接收到的輸入來縮放和移動網絡中的數據。
什么是縮放和移動?
縮放發生在乘法時,例如,可以從一個變量 A 開始。當將其乘以 2 時,得到 2*A,這樣可以將 A 的值放大或縮放 2 倍。如果將其乘以 ?,那么值將縮小為 0.5。
移動由加法表示,例如,可能正在數軸上行走。從 1 開始,被要求移到 5。我們該怎么做?可以添加 4 來獲得 1+4=5,或者可以添加一百個 0.04 來到達 5,1+(100*0.04 )= 5。這完全取決于我們是否想要采取更大的步伐(4)還是更小的步伐(0.04)來達到我們的目標。
[4] 編碼條件
為了利用條件,即我們用于構建模型的信息,首先我們將其轉換為模型能理解的形式,即向量。
- 該過程的第一步是將提示轉換為文本embedding向量。
- 接下來的步驟是將步驟 t = 3 轉換為二進制向量。
- 第三步是將這些向量連接在一起。
[5] 估計縮放/移動
請記住,這里我們使用的是‘自適應’層歸一化,這意味著它根據模型當前的條件調整其值。因此,為了捕捉數據的正確本質,需要包括數據中每個元素的重要性。這是通過估計縮放和移動來完成的。
為了為我們的模型估計這些值,將提示和Diffusion 步驟的連接向量與權重相乘,并將偏置加到其中。這些權重和偏置是可學習的參數,模型會學習并更新它們。
(注:根據我的理解,結果向量中的第三個元素應該為 1。這可能是原始文章中的一個小錯誤,但是作為人類,我們允許有一點錯誤,對嗎?為了保持一致性,我繼續使用原始文章中的值。)
這里的目標是估計縮放 [2,-1] 和移動 [-1,5](因為我們的模型大小為 2,所以有兩個縮放和兩個移動參數)。我們將它們分別命名為‘X’和‘+’。
[6] 應用縮放/移動
要應用上一步中獲得的縮放和移動,將第 3 步中的Diffusion 潛在與 [2, -1] 相乘,并通過添加 [-1,5] 進行移動。結果就是‘條件化’的噪聲潛在。
[7]-[9] Transformer
最后三步包括將Transformer元素添加到上述Diffusion 和條件化步驟中。這一步幫助我們找到模型預測的噪聲。
[7] 自注意力
這是Transformer背后的關鍵思想,使它們如此卓越!
什么是自注意力?
這是一種機制,通過該機制,句子中的每個單詞分析其他每個單詞,并衡量它們對彼此的重要性,從而理解文本中的上下文和關系。
為了啟用自注意力,條件化的噪聲潛在被饋送到查詢-鍵(QK)函數中,以獲得自注意力矩陣。這里簡化了 QK 值的表示。
[8] 注意力池化
接下來,我們將條件化的噪聲潛在與自注意力矩陣相乘,以獲得注意力加權特征。
[9] 逐點前饋網絡
再次回到基礎知識,將注意力加權特征與權重和偏置相乘,以獲得預測的噪聲。
訓練
現在,最后一步是使用預測的噪聲和采樣的噪聲(基本事實)之間的均方誤差來訓練模型。
[10] 計算均方誤差損失梯度并更新可學習參數
使用均方誤差損失梯度,使用反向傳播來更新所有可學習的參數(例如自適應規范層中的權重和偏置)。編碼器和解碼器參數被凍結,不可學習。
(備注:第二行的第二個元素應該是 -1,這是一個微小的錯誤,使情況更好。)
[11]-[13] 生成新樣本 [11] 降噪
現在我們已經準備好生成新視頻(耶!),首先需要去除我們引入的噪聲。為此,將預測的噪聲從噪聲潛在中減去,以獲得無噪聲的潛在。請注意,這與我們的原始潛在不同。原因是在此期間,經歷了多個條件和注意力步驟,這些步驟將我們問題的上下文包含到模型中。因此,讓模型在生成視頻時更好地了解其目標應該是什么。
[12] 將潛在空間轉換回像素:解碼器
就像為編碼器所做的一樣,將潛在空間的patches與權重和偏置相乘,然后再通過 ReLU 進行操作。可以看到在解碼器的工作之后,模型的維度恢復到了最初降低到 2 的原始維度。
[13] 時間到了,制作視頻!
最后一步是將上述矩陣的結果排列成一系列幀,最終給出我們的新視頻。萬歲!
隨著這強大技術的結束,我們來總結一下以上所說的和做的所有事情,以下是 5 個關鍵點:
- 將視頻轉換為視覺patches ,然后降低它們的維度是至關重要的。視覺編碼器在這里是我們的朋友。
- 正如其名稱所示,Diffusion是這種方法的關鍵。將噪聲添加到視頻中,然后在每個后續步驟中(以不同的方式)處理它,這是這種技術依賴的。
- 接下來是Transformer架構,它增強了擴散過程的能力,并放大了模型的規模。
- 一旦模型訓練并準備好收斂到一個解決方案時,兩個 D —— 去噪器和解碼器將會派上用場。一個通過移除噪聲,另一個通過將低維空間投影到其原始維度。
- 最后,解碼器產生的像素被重新排列以生成所需的視頻。
(完成本文后,建議您再次閱讀開頭的故事。您能發現 DiTharos 的 Sora 和我們世界的 Sora 之間的相似之處嗎?)
Diffusion-Transformer(DiT)組合
Sora 能夠生成的視頻類型,可以說是Diffusion-Transformer組合極具殺傷力。除此之外,視覺patches 的概念為調整一系列圖像分辨率、寬高比和持續時間開辟了一條道路,從而允許進行極大的實驗。
總的來說,毫不夸張地說,這個想法是開創性的,毫無疑問是值得長久保留的。根據《紐約時報》的一篇文章,Sora 的名字取自日語中的“天空”,意在喚起無限潛力的概念。經歷了最初的承諾,可以肯定 Sora 絕對開辟了人工智能的新領域。現在我們只需要看看它在安全性和時間測試中表現如何。
就像 DiTharos 的傳說一樣:“Sora 一直生活著,磨練自己的技能,并在每一天變得更加強大,準備在時機成熟時飛翔!”
現在,去‘DiTharos’的土地上,與 Sora 一起玩耍吧!
本文轉自 AI生成未來 ,作者:AI生成未來
