從U-Net到DiT:Transformer技術在統治擴散模型的應用
近年來,在 Transformer 的推動下,機器學習正在經歷復興。在過去五年中,用於自然語言處理、電腦視覺以及其他領域的神經架構在很大程度上已被 transformer 所佔據。
不過還有許多圖像級生成模型仍然不受這一趨勢的影響,例如過去一年擴散模型在圖像生成方面取得了驚人的成果,幾乎所有這些模型都使用卷積U-Net 作為主幹。這有點令人驚訝!在過去的幾年中,深度學習的大事件一直是跨領域的 Transformer 的主導地位。 U-Net 或卷積是否有什麼特別之處使它們在擴散模型中表現得如此出色?
將 U-Net 主幹網路首次引入擴散模型的研究可追溯到 Ho 等人,這種設計模式繼承了自回歸生成模型 PixelCNN ,只是稍微進行了一些改動。而 PixelCNN 由卷積層組成,其包含許多 ResNet 的區塊。其與標準的 U-Net 相比,PixelCNN 附加的空間自註意力塊成為 transformer 中的基本元件。不同於其他人的研究,Dhariwal 和 Nichol 等人消除了 U-Net 的幾種架構選擇,例如使用自適應歸一化層為卷積層注入條件資訊和通道計數。
本文中來自UC 柏克萊的William Peebles 以及紐約大學的謝賽寧撰文《 Scalable Diffusion Models with Transformers 》,目標是揭開擴散模型中架構選擇的意義,並為未來的生成模型研究提供經驗基線。該研究表明,U-Net 歸納偏壓對擴散模型的性能不是至關重要的,並且可以輕鬆地用標準設計(如 transformer)取代。
這項發現表明,擴散模型可以從架構統一趨勢中受益,例如,擴散模型可以繼承其他領域的最佳實踐和訓練方法,保留這些模型的可擴展性、穩健性和效率等有利特性。標準化架構也將為跨領域研究開啟新的可能性。
- 論文網址:https://arxiv.org/pdf/2212.09748.pdf
- #專案網址:https://github.com/facebookresearch/DiT
- 論文首頁:https:// www.wpeebles.com/DiT
該研究專注於一類新的基於Transformer 的擴散模型:Diffusion Transformers(簡稱DiTs)。 DiTs 遵循 Vision Transformers (ViTs) 的最佳實踐,有一些小但重要的調整。 DiT 已被證明比傳統的捲積網路(例如 ResNet )具有更有效地擴展性。
具體而言,本文研究了 Transformer 在網路複雜度與樣本品質方面的擴展行為。研究表明,透過在潛在擴散模型 (LDM) 框架下建立 DiT 設計空間並對其進行基準測試,其中擴散模型在 VAE 的潛在空間內進行訓練,可以成功地用 transformer 取代 U-Net 主幹。本文進一步表明 DiT 是擴散模型的可擴展架構:網路複雜性(由 Gflops 測量)與樣本品質(由 FID 測量)之間存在很強的相關性。透過簡單地擴展 DiT 並訓練具有高容量主幹(118.6 Gflops)的 LDM,可以在類別條件 256 × 256 ImageNet 產生基準上實現 2.27 FID 的最新結果。
Diffusion Transformers
DiTs 是一種用於擴散模型的新架構,目標是盡可能忠實於標準 transformer 架構,以保留其可擴展性。 DiT 保留了 ViT 的許多最佳實踐,圖 3 顯示了完整 DiT 體系架構。
DiT 的輸入為空間表示 z(對於 256 × 256 × 3 影像,z 的形狀為 32 × 32 × 4)。 DiT 的第一層是 patchify,該層透過將每個 patch 線性嵌入到輸入中,以此將空間輸入轉換為一個 T token 序列。 patchify 之後,本文將標準的基於 ViT 頻率的位置嵌入應用於所有輸入 token。
patchify 所建立的 token T 的數量由 patch 大小超參數 p 決定。如圖 4 所示,將 p 減半將使 T 翻四倍,因此至少能使 transformer Gflops 翻四倍。本文將 p = 2,4,8 加入 DiT 設計空間。
DiT 區塊設計:在 patchify 之後,輸入 token 由一系列 transformer 區塊處理。除了雜訊影像輸入之外,擴散模型有時還會處理額外的條件資訊,例如雜訊時間步長 t、類標籤 c、自然語言等。本文探討了四種以不同方式處理條件輸入的 transformer 塊變體。這些設計對標準 ViT 塊設計進行了微小但重要的修改。所有模組的設計如圖 3 所示。
本文嘗試了四個因模型深度和寬度而異的配置:DiT-S、DiT-B、DiT-L 和 DiT-XL。這些模型配置範圍從 33M 到 675M 參數,Gflops 從 0.4 到 119 。
實驗
研究者訓練了四個最高Gflop 的DiT-XL/2 模型,每個模型使用不同的block 設計—in-context(119.4 Gflops)、cross-attention(137.6Gflops)、adaptive layer norm(adaLN,118.6Gflops)或adaLN-zero(118.6Gflops)。然後在訓練過程中測量 FID,圖 5 為結果。
擴充模型大小和 patch 大小。圖 2(左)給出了每個模型的 Gflops 和它們在 400K 訓練迭代時的 FID 概況。可以發現,增加模型大小和減少 patch 大小會對擴散模型產生相當大的改進。
圖 6(上)展示了 FID 是如何隨著模型大小的增加和 patch 大小保持不變而變化的。在四種設定中,透過使 Transformer 更深、更寬,訓練的所有階段都獲得了 FID 的明顯提升。同樣,圖 6(底部)展示了 patch 大小減少和模型大小保持不變時的 FID。研究者再次觀察到,在整個訓練過程中,透過簡單地擴大 DiT 處理的 token 數量,並保持參數的大致固定,FID 會得到相當大的改善。
圖8 中展示了FID-50K 在400K 訓練步數下與模型Gflops 的對比:
#SOTA 擴散模型256×256 ImageNet。在擴展分析之後,研究者繼續訓練最高 Gflop 模型 DiT-XL/2,步數為 7M。圖 1 展示了該模型的樣本,並與類別條件產生 SOTA 模型進行比較,表 2 中展示了結果。
當使用無分類器指導時,DiT-XL/2 優於先前所有的擴散模型,將先前由LDM 實現的3.60 的最佳FID-50K 降至2.27。如圖2(右)所示,相對於LDM-4(103.6 Gflops)這樣的潛在空間U-Net 模型來說,DiT-XL/2(118.6 Gflops)計算效率高得多,也比ADM(1120 Gflops )或ADM-U(742 Gflops)這樣的像素空間U-Net 模型效率高很多。
表 3 展示了與 SOTA 方法的比較。 XL/2 在這解析度下再次勝過先前的所有擴散模型,將 ADM 先前取得的 3.85 的最佳 FID 提高到 3.04。
更多研究細節,可參考原論文。
以上是從U-Net到DiT:Transformer技術在統治擴散模型的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DMA在C 中是指DirectMemoryAccess,直接內存訪問技術,允許硬件設備直接與內存進行數據傳輸,不需要CPU干預。 1)DMA操作高度依賴於硬件設備和驅動程序,實現方式因係統而異。 2)直接訪問內存可能帶來安全風險,需確保代碼的正確性和安全性。 3)DMA可提高性能,但使用不當可能導致系統性能下降。通過實踐和學習,可以掌握DMA的使用技巧,在高速數據傳輸和實時信號處理等場景中發揮其最大效能。

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

交易所內置量化工具包括:1. Binance(幣安):提供Binance Futures量化模塊,低手續費,支持AI輔助交易。 2. OKX(歐易):支持多賬戶管理和智能訂單路由,提供機構級風控。獨立量化策略平台有:3. 3Commas:拖拽式策略生成器,適用於多平台對沖套利。 4. Quadency:專業級算法策略庫,支持自定義風險閾值。 5. Pionex:內置16 預設策略,低交易手續費。垂直領域工具包括:6. Cryptohopper:雲端量化平台,支持150 技術指標。 7. Bitsgap:

在C 中處理高DPI顯示可以通過以下步驟實現:1)理解DPI和縮放,使用操作系統API獲取DPI信息並調整圖形輸出;2)處理跨平台兼容性,使用如SDL或Qt的跨平台圖形庫;3)進行性能優化,通過緩存、硬件加速和動態調整細節級別來提升性能;4)解決常見問題,如模糊文本和界面元素過小,通過正確應用DPI縮放來解決。

C 在實時操作系統(RTOS)編程中表現出色,提供了高效的執行效率和精確的時間管理。 1)C 通過直接操作硬件資源和高效的內存管理滿足RTOS的需求。 2)利用面向對象特性,C 可以設計靈活的任務調度系統。 3)C 支持高效的中斷處理,但需避免動態內存分配和異常處理以保證實時性。 4)模板編程和內聯函數有助於性能優化。 5)實際應用中,C 可用於實現高效的日誌系統。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。

C 中使用字符串流的主要步驟和注意事項如下:1.創建輸出字符串流並轉換數據,如將整數轉換為字符串。 2.應用於復雜數據結構的序列化,如將vector轉換為字符串。 3.注意性能問題,避免在處理大量數據時頻繁使用字符串流,可考慮使用std::string的append方法。 4.注意內存管理,避免頻繁創建和銷毀字符串流對象,可以重用或使用std::stringstream。
