# 第十一講:有關影像的生成式AI >上課筆記 * 上課影片連結 * ==**[有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理)](https://youtu.be/5H2bVEmYDNg)**== * ==**[有關影像的生成式AI (下) — 快速導讀經典影像生成方法 (VAE, Flow, Diffusion, GAN) 以及與生成的影片互動](https://youtu.be/OYN_GvAqv-A)**== --- ## 生成式 AI 與影像的關係 生成式 AI (Generative AI) 的核心是根據輸入的條件 (Condition) 生成對應的輸出。與影像相關的生成式 AI 主要可分為兩大類: ### 兩大類別 1. **以影像為輸入 (Condition)**:模型接收圖片或影片作為輸入,生成其他形式的輸出,例如根據圖片生成文字描述。 2. **以生成影像為目標**:模型接收某種條件 (如文字、草圖、聲音),生成對應的圖片或影片。 ![image](https://hackmd.io/_uploads/r1Dsp5Oeel.png) ### 本堂課重點 本課程將聚焦於**第二類**,探討如何根據給定條件生成圖片或影片的生成式 AI 技術。 --- ## 以影像為輸入的生成式 AI 範例:GPT-4o 目前如 GPT-4o 等模型已具備理解圖片的能力。 ### 功能展示 * **圖片理解與比較**:可以輸入兩張圖片,詢問模型相關問題,例如比較圖中人物的風格或推測職業。模型能根據衣著、打扮等視覺線索進行分析與推論。 * 範例:輸入兩張風格不同的李宏毅照片,GPT-4o 能評論兩者的穿著風格 (時尚 vs. 專業),並根據此推測可能的職業領域 (娛樂創意 vs. 學術技術)。![image](https://hackmd.io/_uploads/HJXSm2Oxxe.png) * **影片理解 (延伸)**:雖然範例主要展示圖片,但同類技術也可擴展至理解影片內容。 ### 模型審美與應對 * 模型經過大量 [RLHF (Reinforcement Learning from Human Feedback)](https://hackmd.io/@Jaychao2099/gen-ai-4#%E7%AC%AC%E4%B8%89%E9%9A%8E%E6%AE%B5%EF%BC%9A%E5%8F%83%E8%88%87%E5%AF%A6%E6%88%B0%EF%BC%8C%E6%89%93%E7%A3%A8%E6%8A%80%E5%B7%A7-Reinforcement-Learning-from-Human-Feedback---RLHF--%E5%9F%BA%E6%96%BC%E4%BA%BA%E9%A1%9E%E5%9B%9E%E9%A5%8B%E7%9A%84%E5%A2%9E%E5%BC%B7%E5%BC%8F%E5%AD%B8%E7%BF%92) 訓練,回答風格趨於謹慎客觀,避免主觀價值判斷 (如直接評論誰更帥)。 * 若被強迫選擇,模型仍可能基於其內部數據做出判斷,但會試圖以委婉、平衡的方式表達,兼顧各方優點。 ![image](https://hackmd.io/_uploads/HyFO7nOgge.png) --- ## 以生成影像為目標的生成式 AI 這類 AI 的目標是根據輸入條件創造出新的圖片或影片。 ### 文字生成影像:Sora <style> .two-column-layout { column-count: 2; column-gap: 10px; max-width: 100%; overflow: hidden; } </style> * **模型介紹與連結**:由 OpenAI 開發的 [Sora](https://openai.com/sora) 模型,能夠根據文字描述生成高品質的影片。目前尚未公開釋出,多數展示來自 [OpenAI 的部落格](https://openai.com/research/video-generation-models-as-world-simulators)。 * **生成範例 (驚人效果)**: * 能生成寫實或超現實的場景,例如飛翔的鯨魚、違反物理原則的杯子。 * 選擇非現實場景更能展示其創造力,而非僅從訓練資料中複製。 <div class="two-column-layout"> <video src="https://cdn.openai.com/sora/landing-page/md/014-9_20241122_1737_Whales%20Soaring%20Skyward_remix_01jdban9ykevctk8csk530rqmc.mp4.mp4" controls muted loop width=100%></video> <video src="https://cdn.openai.com/tmp/s/discussion_0.mp4" controls muted loop width=100%></video> </div> * **生成瑕疵**: * **物理不一致**:背景牆壁不自然移動。 * **物體變形/不穩定**:水生生物形態變化 (海龜變魚) 、狼幼崽數量增生、挖掘出的塑膠椅消失。 * 顯示現階段生成模型仍有其局限性。 ### 影像生成影像 將輸入影片轉換為輸出影片,有多種應用: * **影片續寫**:完成未完成的影片片段。 * **風格轉換**:改變影片風格,如黑白轉彩色 (可用於老電影修復)。 * **畫質提升**:提高低解析度影片的清晰度。 ![image](https://hackmd.io/_uploads/S19s1j_ggg.png) ### 其他輸入生成影像 * **Talking Head**: * **原理**:輸入一段錄音和一張人臉照片,生成該人說話時對應的口型與臉部動態影片。 * **應用**:可快速生成虛擬主播 (VTuber),結合大型語言模型 (LLM) 可實現全自動內容創作。 * **開源範例**:[AniPortrait](https://arxiv.org/abs/2403.17694), [Demo](https://huggingface.co/spaces/ZJYang/AniPortrait_official) ![image](https://hackmd.io/_uploads/SkudcsOexe.png) * **[ControlNet](https://arxiv.org/abs/2302.05543)**: * 允許使用多種條件控制圖像生成,例如: * 草圖 (Sketch) -> 精細圖像。 * 深度圖 (Depth map) -> 圖像。 * 邊緣圖 (Canny edge) -> 圖像。 * 人體姿勢 (Human pose) -> 對應人像。 ![未命名](https://hackmd.io/_uploads/HJs35jdlll.jpg) --- ## 影像與影片的基本構成與 AI 的表示方法 ### 圖片:像素構成 * 圖片由像素 (Pixel) 組成,像素數量越多,解析度越高,圖像越清晰。 * 例如:1024x1024 像素的圖片比 16x16 像素的圖片清晰得多。 ![image](https://hackmd.io/_uploads/BJ0Jjj_lxl.png) ### 影片:幀 (Frame) 構成 * 影片由連續的圖片 (幀) 構成。 * **幀率 (Frame Per Second, FPS)**:每秒顯示的幀數。 * 足夠高的 FPS (如 YouTube 常用的 24 FPS) 使人眼感覺畫面流暢。 * 低 FPS (如 1 FPS) 會產生卡頓感。 * 遊戲等場景可能需要更高幀率 (如 60 FPS) 以達到絲滑流暢的效果。 ![image](https://hackmd.io/_uploads/ryzrsiOxge.png) ### AI 如何看待影像:Patch 技術 現代 AI 模型通常不直接處理原始像素,而是採用基於 Patch 的表示法。 * **[圖片的 Patch 表示](https://arxiv.org/abs/2111.06377)**: 1. **Encoder (編碼器)**: * 將輸入圖片切割成多個小塊 (Patch)。 * 對每個 Patch 進行壓縮,將其轉換為一個符號 (Token) 或一個低維度向量。 * 將所有 Patch 的表示拉平成一個序列。![image](https://hackmd.io/_uploads/ByjNhi_xex.png) 2. **Decoder (解碼器)**: * 接收 Patch 序列。 * 將序列還原回完整的圖片。![image](https://hackmd.io/_uploads/BJPDhiuggx.png) * **Encoder/Decoder 進階說明 (非單純降/升解析度)**: * **Encoder/Decoder 組成**:通常是複雜的類神經網路 (如 Transformer)。 * **目標**:能在壓縮後有效還原出視覺上相似的圖片。 * Decoder 在還原時會考慮 Patch 及其鄰近 Patch 甚至全局資訊,進行複雜的重建,而不僅是簡單放大。 * 這種基於 Patch 的**特徵提取是由類神經網路自動學習的**,不同於傳統的人工設計特徵。 * **[影片的 Patch 表示](https://arxiv.org/abs/2103.15691)**: * 影片比圖片多了一個**時間維度**,因此壓縮不僅在空間維度 (高、寬) 進行,也在時間維度進行。 * **做法**: * 可能將相鄰幾幀 (Frame) 的對應位置 Patch 合併進行進一步壓縮,形成 Video Patch。 * 最終影片也被表示為一排 Patch 序列。![image](https://hackmd.io/_uploads/rkW_aoOlxe.png) * **Sora 的 Patch 技術應用**: * 根據 OpenAI 的圖示,Sora 也採用了類似的 Patch 技術,將影片通過 Encoder 轉換為包含時空資訊的 Patch 序列,再輸入到 Transformer 進行處理。 ![image](https://hackmd.io/_uploads/B1lyRidggl.png) --- ## 文字生成圖片 (Text-to-Image) 模型根據輸入的文字描述生成對應的圖片。 ### 訓練資料:圖文配對 * **需求**:需要大量「圖片」及其對應「文字描述」的配對資料。 * **[LAION 資料集](https://laion.ai/blog/laion-5b/)**: * **規模**:一個大規模的開源圖文配對資料集,最大版本包含 58 億張圖片。提供搜尋引擎供使用者探索。 * **來源**:主要從網路上爬取圖片及其附帶文字,經過濾 (如移除不當內容、低相關性配對) 後整理而成。 * **風險**:資料版權歸屬不明確。LAION 聲稱僅收集資料,不擁有版權。使用此類資料集訓練模型 (如 Stability AI 的 Stable Diffusion) 存在法律風險,已有畫家提起訴訟。OpenAI 等公司通常不公開其訓練數據來源。 ![image](https://hackmd.io/_uploads/S18mAjugee.png) ### 訓練方法:Transformer 與 Patch 生成 * **早期:Patch 接龍 (Auto-regressive)**: * 類似語言模型的文字接龍,模型根據文字和已生成的 Patch 依序生成下一個 Patch。 * 缺點:生成速度慢,圖片 Patch 數量遠超文字 Token 數量,效率不高,較少使用。 ![image](https://hackmd.io/_uploads/H1ApCj_eel.png) * **主流:平行生成 (Non-autoregressive) 與 Attention**: * **概念**:模型一次性並行生成圖片中所有位置的 Patch。 * **架構**:通常使用 Transformer。輸入文字條件和代表各 Patch 位置的指示符,同時輸出所有 Patch。 * **Attention 機制**:Transformer 內部的 Attention 機制允許每個 Patch 在生成時參考其他 Patch 的生成過程,確保生成 Patch 之間的關聯性和圖像的整體一致性。 ![image](https://hackmd.io/_uploads/Sy8Gk2Olxg.png) * **平行生成的實際做法與挑戰 (腦補問題)**: * 實際上,模型 (如 Transformer) 會同時接收所有位置 (例如 1 到 16) 的生成請求,並一次性輸出所有 16 個 Patch。 * Attention 有助於協調,但仍難完全避免「腦補 (Hallucination/Averaging)」問題:若文字描述 (如 "奔跑的狗") 對應多種可能的圖像 (哈士奇 vs. 柴犬),模型可能在不同 Patch 位置試圖繪製不同的狗,導致圖像混亂或不協調。此問題會在後續方法中進一步探討。 ### 評量方法:CLIP Score 如何量化評估生成圖片的好壞? * **人類評估**:最可靠,但耗時費力。 * **[CLIP 模型](https://arxiv.org/abs/2103.00020)**: * **原理**:訓練一個模型 (CLIP) 來判斷「圖片」和「文字描述」的匹配程度。訓練時,給予匹配的圖文對高分,不匹配的 (隨機組合的) 圖文對低分。 * **CLIP Score 應用**:將生成模型產生的圖片與輸入的文字描述一同餵給預訓練好的 CLIP 模型,得到的匹配分數即為 CLIP Score。分數越高,通常代表生成的圖片與文字描述越相關。這是目前衡量圖片生成模型性能的主流指標之一。 * **趨勢**:使用一個 AI 模型 (CLIP) 來評估另一個 AI 模型 (圖像生成模型) 的表現。 ![image](https://hackmd.io/_uploads/HJ9YJ2dlxx.png) ### 挑戰:文字難以完整描述圖像 * 「一圖勝千言」,許多視覺細節難以用文字精確捕捉。 * **範例**:嘗試用文字描述家中客廳的時鐘,即使不斷修改描述,生成的圖像與實物仍有差距。 ### 解決方案:個人化圖像生成 允許模型學習特定的物體或風格。 * **原理 (S-Star 概念)**: 1. 選擇一個**獨特、平常不使用的符號** (如 $S^*$) 來代表想客製化的特定對象 (如一個特殊雕塑)。避免使用常用詞彙 (如 "狗") 以免污染模型。 2. 提供少量 (如 3-5 張) 該對象的圖片,微調 (Fine-tune) 文字生圖模型,讓模型學習 $S^*$ 對應到這個特定對象。 3. 微調後,即可在文字指令中使用 $S^*$ 來生成包含該客製化對象的圖像。 * **應用範例 ([Textual Inversion](https://arxiv.org/abs/2208.01618), [DreamBooth](https://arxiv.org/abs/2208.12242))**: * 生成 $S^*$ 的油畫、$S^*$ 的App 圖標、$S^*$ 姿勢的 ELMO、針織版的 $S^*$。 ![未命名](https://hackmd.io/_uploads/SkE9x3_xee.jpg) --- ## 文字生成影片 (Text-to-Video) ### 基本原理:生成更多 Patch * 本質上與文字生圖類似,只是需要生成更多 Patch 來構成影片的多個幀。 * 模型 (如 Transformer) 接收文字條件,生成一個非常長的 Patch 序列,該序列通過 Decoder 還原成影片。 ### 主要挑戰:運算量爆炸 (Attention) * 影片包含大量 Patch,導致 Transformer 中的 Attention 計算量極大,使得直接生成長影片或高解析度影片非常困難。 * **計算示例**: * **假設**:1 分鐘影片、24 FPS、每幀 64x64 個 Patch。 * **總 Patch 數**:24 (FPS) \* 60 (秒) \* 64 \* 64 ≈ 6 百萬個 Patch。 * **Attention 計算量** (每個 Patch 與其他所有 Patch 計算關聯):$(6 \times 10^6)^2 = 36 \times 10^{12}$ (36 兆次) 每次 Attention 計算。 ![image](https://hackmd.io/_uploads/SyWuW3ugxg.png) ### 解決方案一:改造 Attention 機制 減少 Attention 的計算量。 * **完整 Spatio-temporal Attention (3D)**:原始方式,每個 Patch 考慮影片中所有其他 Patch (跨時間和空間),計算量為 $O(N^2)$,其中 $N$ 是總 Patch 數。 ![image](https://hackmd.io/_uploads/rJXq-huexx.png) * **簡化方案:Spatial (2D) + Temporal (1D) Attention (偽 3D)**: * **Spatial Attention (空間注意力)**:每個 Patch 只與同一幀 (Frame) 內的其他 Patch 計算 Attention。確保單幀畫面內的一致性。 * **Temporal Attention (時間注意力)**:每個 Patch 只與其他幀中相同位置的 Patch 計算 Attention。確保時間上的連貫性。 ![image](https://hackmd.io/_uploads/HJDiZ3Oxeg.png) * **結合**:將 Spatial Attention 和 Temporal Attention 交替堆疊使用,模擬 3D Attention 的效果。 ![image](https://hackmd.io/_uploads/rJpA-2dgxl.png) * **運算量比較 (千倍差距)**: * 假設條件同上 (1 分鐘, 24 FPS, 64x64 patches/frame)。 * **Spatial Attention (每幀獨立算)**:$(64 \times 64)^2 \times 1440 \approx 240$ 億次。 * **Temporal Attention (跨幀同位置算)**:$1440^2 \times (64 \times 64) \approx 85$ 億次。 * **偽 3D (兩者相加)**:約 325 億次。 * 相比於原始 3D Attention 的 36 兆次,計算量減少了約 1000 倍。這是目前影片生成模型常用的技術。 ### 解決方案二:多階段生成 (Pipeline) 將複雜的生成任務分解為多個較簡單的步驟。 * **概念**:使用一系列生成模型,每個模型負責一部分任務,逐步提升影片品質。 * **解析度提升**:先生成低解析度影片,再通過後續模型逐步提高每一幀的解析度。 * **幀率提升**:先生成低幀率影片,再通過後續模型在現有幀之間插入新的幀 (Interpolation),提高幀率。 ![image](https://hackmd.io/_uploads/ByPgQnOgel.png) * **範例:[Imagen Video](https://arxiv.org/abs/2210.02303)**: * Google 的 Imagen Video 模型採用了多階段流程: 1. 基礎模型生成極低解析度、低幀率的影片 (16x40x24, 3fps)。 2. 多個 Temporal Super-Resolution (TSR) 模型逐步提高幀率 (3->6->12->24fps)。 3. 多個 Spatial Super-Resolution (SSR) 模型逐步提高解析度 (40x24 -> ... -> 1280x768)。 * 每個階段的模型只需專注於特定任務,降低了單個模型的複雜度。 ![image](https://hackmd.io/_uploads/BJKRz2ugxe.png) --- ## 經典影像生成方法介紹 探討幾種歷史上重要且仍在使用的影像生成模型架構。 ### 核心問題:一文對多圖的學習困難 * **問題重述**:同一個文字描述 (如 "奔跑的狗") 可能對應多種非常不同的圖像 (草原哈士奇 vs. 都市柴犬)。 * **學習困境**:若訓練數據包含多種可能的輸出,模型 (如 Transformer) 會無所適從,不知道該學習生成哪一種圖像,可能導致輸出混亂或模糊 (試圖平均所有可能性)。就像老闆指令反覆 (往東又往西),員工會無所適從。 ![image](https://hackmd.io/_uploads/SJBcNZKeee.png) ### 解決思路:補充文字未描述的資訊 (腦補/Latent Variable) * **想法**:文字本身不足以確定唯一的圖像,需要額外的「隨機性」或「隱藏資訊」 (稱為 Latent Variable 或 Noise) 來決定具體生成哪種可能的圖像。 * **類比**:就像人類畫畫,除了主題 (文字描述),還需要一些靈感或隨機的細節選擇 (Latent Variable) 才能完成獨一無二的作品。 * **實現**:設計模型架構,能夠在生成過程中引入這種 Latent Variable。 ![image](https://hackmd.io/_uploads/SyG2NZKege.png) ### [Autoencoder](https://hackmd.io/@Jaychao2099/imrobot9) (AE) * **架構**: * **Encoder (編碼器)**:輸入一張圖片,將其壓縮成一個低維度的 Latent Vector (潛在向量) $z$。這個 $z$ 應該捕捉圖片中文字難以描述的關鍵資訊。 * **Decoder (解碼器)**:輸入 Latent Vector $z$ (以及可能的文字條件),嘗試重建出原始圖片。 * **訓練目標**:共同訓練 Encoder 和 Decoder,目標是讓 Decoder 重建出的圖片與 Encoder 的輸入圖片盡可能相似 (最小化重建誤差)。 * **Latent Variable**:Encoder 輸出的 $z$ 就是 Latent Variable。它不需要是人類可讀的文字,只需是模型能理解的數值向量即可。向量的不同維度可能對應圖像的不同屬性 (如狗的品種、背景等)。 ![image](https://hackmd.io/_uploads/BJ5MBZKxlg.png) ### Variational Autoencoder (VAE) * **與 AE 的關係**:VAE 是 AE 的一種變體,特別強調 Latent Space 的良好機率分佈特性 (通常是高斯分佈)。 * **訓練**:類似 AE,訓練 Encoder 和 Decoder 使輸入與輸出盡量一致。Encoder 學習將圖片映射到一個機率分佈 (均值和變異數),Decoder 從這個分佈中採樣一個 Latent Vector $z$ 來重建圖片。 ![image](https://hackmd.io/_uploads/B1ZBHWFxxe.png) * **生成方式**:在生成新圖片時: 1. 不使用 Encoder。 2. 從預先定義好的機率分佈 (如標準高斯分佈) 中隨機採樣一個 Latent Vector $z$ (相當於擲骰子決定腦補資訊)。 3. 將採樣到的 $z$ 和文字條件一起輸入 Decoder,生成圖片。 * 不同的隨機 $z$ 會導致生成不同的圖片,即使文字條件相同,解決了一文對多圖的問題。 ![image](https://hackmd.io/_uploads/rJkPrbFllx.png) > 參考:[[2016 VAE 上課影片]](https://youtu.be/8zomhgKrsmQ) ### Flow-Based Model * **與 VAE 的異同**: * **相似**:也使用 Latent Variable (Noise) $z$ 來控制生成。 * **不同**:Flow-Based Model 的 Decoder 被設計成數學上「可逆 (Invertible)」的。這意味著存在一個反函數 $f^{-1}$,可以將圖片精確地映射回 Latent Vector $z$。 ![image](https://hackmd.io/_uploads/r1GJuZKege.png) * **優點**: * 這個 Decoder 的反函數 $f^{-1}$ 直接就可以作為 Encoder 使用。 * 因此,只需要訓練一個可逆的 Decoder $f$,就同時擁有了 Encoder $f^{-1}$,無需像 VAE 那樣訓練兩個獨立的網絡。 * **Noise 的資訊性 (人臉表情操控範例)**: * Flow-Based Model (以及 VAE) 中的 Latent Vector $z$ (常稱為 Noise) 並非無意義的雜訊,而是包含了豐富的圖像資訊。 ![image](https://hackmd.io/_uploads/rki-_bYggg.png) * **實驗**: 1. 將多張臭臉照片通過 Encoder ($f^{-1}$) 得到對應的 $z$,平均這些 $z$ 得到「臭臉向量」。 2. 同樣方法得到「笑臉向量」。 3. 對於一張輸入圖片,先通過 Encoder 得到其 $z$。 4. 修改 $z$:減去「臭臉向量」,加上「笑臉向量」。 5. 將修改後的 $z'$ 輸入 Decoder ($f$),生成的圖片中人物笑容會更燦爛。![image](https://hackmd.io/_uploads/S1sGu-tgge.png) * 證明可以直接操控 Latent Variable 來編輯圖像屬性。 > 參考: > * [OpenAI - Glow: Better reversible generative models](https://openai.com/blog/glow/) > * [[2019 Flow-Based 上課影片]](https://youtu.be/uXY18nzdSsM) ### Diffusion Model 目前非常主流的生成模型架構 (Sora 也使用)。 ![image](https://hackmd.io/_uploads/SkPcFbtegl.png) * **核心概念**:通過「反覆去噪 (Denoise)」的過程生成圖片。 * **生成過程 (Reverse Process)**: 1. 從一個**完全隨機的雜訊圖像**開始。 2. 反覆使用一個 Denoise 模組 (相當於 Decoder) 數百至數千次。 3. 在每一步,Denoise 模組根據當前帶噪圖像和文字條件,預測並去除一部分雜訊,使圖像逐漸變得清晰,最終形成目標圖像。 ![image](https://hackmd.io/_uploads/BkDRtZtxeg.png) * **訓練方式 (Forward Process)**: 1. 獲取訓練資料中的**乾淨圖片**。 2. **人為地**、逐步地向圖片中添加隨機雜訊,直到圖片完全變成雜訊。這個過程稱為 Forward Process。![image](https://hackmd.io/_uploads/SkWx9WKxgg.png) 3. **訓練 Denoise 模組**:給定某一步加噪後的圖片和文字條件,讓模型學習預測出「被加上的雜訊」或者「加噪前的圖片」。![image](https://hackmd.io/_uploads/HkbUc-tleg.png) * **優點**:通常能生成品質非常高、細節豐富的圖像。 * **缺點**:生成速度較慢,因為需要多次迭代 Denoise 步驟。目前研究熱點是**如何減少迭代次數** (如 10 次、5 次甚至 1 次) 同時保持高品質。 * **[Diffusion Transformer (DiT)](https://arxiv.org/abs/2212.09748)**: * 將 Diffusion Model 的 Denoise 模組用 Transformer 架構實現。 * 處理圖像時,輸入帶噪的 Patch 序列和文字條件,Transformer 預測去噪後的 Patch 序列。 * 這個過程重複 T 次。 * Sora 的論文/部落格中暗示使用了類似 DiT 的技術。 ![image](https://hackmd.io/_uploads/BJt3pWFlgg.png) * **與 VAE/Flow 的類比**: * **Decoder**:Diffusion 的 Reverse Process (反覆去噪)。 * **Encoder**:Diffusion 的 Forward Process (人為逐步加噪),這個過程不需要訓練模型。 ![image](https://hackmd.io/_uploads/S1mZRWtlxx.png) > 參考:[[2023 Diffusion 上課影片系列]](https://youtube.com/playlist?list=PLJV_el3uVTsNi7PgekEUFsyVllAJXRsP-) ### Generative Adversarial Network (GAN) [生成對抗網路](https://hackmd.io/@Jaychao2099/imrobot7),採用與上述模型不同的哲學。 * **核心概念**:包含兩個互相競爭的網路: * **生成器 (Generator)**:試圖生成逼真的假圖片 (或影片)。 * **判別器 (Discriminator)**:試圖區分真實圖片和 Generator 生成的假圖片。 * **運作方式**: 1. **訓練 Discriminator**:給 Discriminator 看真實圖片 (來自訓練集) 和 Generator 生成的假圖片,教它區分真假 (類似 [CLIP](https://hackmd.io/@Jaychao2099/gen-ai-11#%E8%A9%95%E9%87%8F%E6%96%B9%E6%B3%95%EF%BC%9ACLIP-Score) 的訓練,但目標是判斷真偽而非圖文匹配)。通常假設真實圖片為好樣本,生成圖片為壞樣本。![image](https://hackmd.io/_uploads/Sk-uefFeel.png) 2. **訓練 Generator**:Generator 生成圖片,將其餵給 Discriminator。Generator 的目標是生成能夠「騙過」Discriminator 的圖片,即使 Discriminator 認為其生成是「真」的。Generator 根據 Discriminator 的反饋調整參數。![image](https://hackmd.io/_uploads/SJwcxMtlxl.png) 3. **交替訓練**:Generator 和 Discriminator 交替訓練,互相促進,Generator 越能生成逼真圖片,Discriminator 越能精準判別,形成對抗提升。![image](https://hackmd.io/_uploads/HkHhlfKlex.png) * **優點**: * 能**有效解決一文多圖問題**,因為 Generator 的目標不是匹配某個特定真圖,而是產生任何能讓 Discriminator 認為「好」 (逼真且符合條件) 的圖即可,沒有單一標準答案。 * 生成的圖像**通常比較銳利**。 * **是否需要 Noise 輸入?**:理論上,在有 Discriminator 指導的情況下,即使不給 Generator 輸入隨機雜訊,也可能訓練成功。但實務上多數 GAN 仍會給 Generator 輸入 Noise Vector $z$ 來增加生成的多樣性。 * **與 [RLHF](https://hackmd.io/@Jaychao2099/gen-ai-4#%E7%AC%AC%E4%B8%89%E9%9A%8E%E6%AE%B5%EF%BC%9A%E5%8F%83%E8%88%87%E5%AF%A6%E6%88%B0%EF%BC%8C%E6%89%93%E7%A3%A8%E6%8A%80%E5%B7%A7-Reinforcement-Learning-from-Human-Feedback---RLHF--%E5%9F%BA%E6%96%BC%E4%BA%BA%E9%A1%9E%E5%9B%9E%E9%A5%8B%E7%9A%84%E5%A2%9E%E5%BC%B7%E5%BC%8F%E5%AD%B8%E7%BF%92) 的類比**: * GAN 的 **Discriminator** 扮演的角色類似於 RLHF 中的 **Reward Model**,都是對生成結果進行評分。 * **主要區別**:Reward Model 的學習依賴「人類標註」的好壞評分;而 Discriminator 的學習通常基於一個簡單假設:「真實數據=好,生成數據=壞」,不需要額外的人工標註。 * **GAN 作為外掛**: * GAN 的對抗訓練機制可以被視為一種「強化」生成模型的方法。 * 它可以與 VAE、Flow-Based Model 或 Diffusion Model 結合使用。例如,可以在 VAE 的 Decoder 後面再加一個 Discriminator,用對抗損失來進一步提升生成圖片的品質和真實感。 * 範例論文: * [VAE+GAN](https://arxiv.org/abs/1512.09300) * [Flow+GAN](https://arxiv.org/abs/1705.08868) * [Diffusion+GAN](https://arxiv.org/abs/2206.02262) > 參考: > * [[2018 GAN 上課影片系列]](https://youtube.com/playlist?list=PLJV_el3uVTsMq6JEFPW35BCiOQTsoqwNw) > * [【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN)](https://hackmd.io/@Jaychao2099/imrobot7) --- ## 互動式影像生成:Genie 探索讓人類與生成影像進行即時互動的可能性。 ### 目標:即時互動與操控 * **願景**:能否像玩遊戲一樣,實時控制生成式 AI 產生的影像內容?例如,用方向鍵控制 Sora 生成影片中的人物行走路徑,創造開放世界體驗。 <div class="two-column-layout"> <video src="https://cdn.openai.com/tmp/s/title_0.mp4" controls muted loop width=100%></video> <video src="https://cdn.openai.com/tmp/s/simulation_7.mp4" controls muted loop width=100%></video> </div> ### 模型:[Genie (Generated Interactive Environments)](https://arxiv.org/abs/2402.15391) * Google 的研究,專注於生成可互動的 2D 橫向捲軸遊戲環境。 * **輸入**:當前遊戲畫面 (frame $t$) + 使用者動作 (action $t$)。 * **輸出**:下一個遊戲畫面 (frame $t+1$)。 * **運作流程**:模型根據當前畫面和玩家按下的按鈕 (如右、跳),預測並生成下一幀的畫面,實現遊戲的動態進程。 ![image](https://hackmd.io/_uploads/ByiTMfYell.png) ### 訓練挑戰:缺乏動作標籤資料 * **理想數據**:需要大量的 (frame $t$, action $t$, frame $t+1$) 三元組數據。 * **現實困境**:容易從網路上收集到大量遊戲影片 (只有 frame 序列),但很難獲知玩家在每一幀具體按下了哪個按鈕 (action)。 ![image](https://hackmd.io/_uploads/HyYLmMtlgx.png) ### 解決方案:Latent Action Model (類 Autoencoder) * **概念**:既然缺少真實動作標籤,就訓練一個模型來「推斷」可能的動作。 * **架構**: 1. **動作抽取模型 (Action Extractor)**:輸入相鄰的兩幀遊戲畫面 (frame t, frame t+1),試圖推斷出導致畫面從 t 變到 t+1 的潛在動作 (Latent Action)。 2. **畫面生成模型 (Dynamics Model)**:輸入當前畫面 (frame t) 和由動作抽取模型推斷出的 Latent Action,生成預測的下一幀畫面 (predicted frame t+1)。 3. **聯合訓練**:同時訓練這兩個模型,目標是讓畫面生成模型產生的 predicted frame t+1 與真實的 frame t+1 盡可能相似。 * 如果最終能成功重建下一幀畫面,意味著動作抽取模型可能成功推斷出了有意義的 Latent Action。 ![image](https://hackmd.io/_uploads/SJotQzFlgx.png) * **Latent Action 的發現**: * 模型學習到的 Latent Action (例如編號 1-8 的動作) 雖然沒有預先定義含義,但實驗發現它們確實對應了遊戲中一致的操控效果。 * 例如,輸入同一串 Latent Action 序列 (如 6, 6, 7, 6, 7, 6, 5, 5, 2, 7),在不同遊戲場景下,都會使角色做出類似「向右跳躍」的動作。 <div class="two-column-layout"> ![gif](https://lh3.googleusercontent.com/n6xddnxpGM2BlhuZPvDOXhNCE0xcCn_8GiXxtAZifCs_MNYH2urhLHERySJsKRm7Rq-pg4zXW0U1qKiGyEXWyl2vv7ycua_0TufDcPwGsEI-dW9MC-od7ym-IgvFAo3QGg=w1280) ![gif](https://lh4.googleusercontent.com/uFzlOIHWFi51ZFEZIvvSzDcZ-LFvzZeGBBZqrW33oVxwQLpy52KGHQcwd75JcGP06jG6GhdwT9Gutn2WNA-cpMYl5qyICFOdbrnjThwdOUkNCdxr8yKZJdXIxzNAAt4Dlg=w1280) </div> ### 應用潛力: * **即時遊戲生成**:可以將任意圖片 (如兒童塗鴉、真實照片) 作為初始畫面,利用 Genie 模型即時生成互動遊戲。 * **模擬器**:可應用於更複雜的場景,如: * **駕訓模擬**:生成開放世界的駕駛環境,使用者通過模擬方向盤與之互動,無需真實路考即可練習。與傳統賽車遊戲不同,場景可由 AI 無限生成。 --- >## 延伸閱讀 > * **[Vision-Language Modeling 綜述論文](https://arxiv.org/abs/2405.17247)** > * **[Video Diffusion Models 綜述論文](https://arxiv.org/abs/2405.03150)** > * **相關課程影片**: > * [VAE - 2016 機器學習](https://youtu.be/8zomhgKrsmQ) > * [GAN 系列 - 【2018 機器學習及其深層與結構化】](https://youtube.com/playlist?list=PLJV_el3uVTsMq6JEFPW35BCiOQTsoqwNw) > * [Flow-based - 【2019 機器學習】](https://youtu.be/uXY18nzdSsM) > * [Diffusion 系列 - 【2023 生成式 AI 導論】](https://youtube.com/playlist?list=PLJV_el3uVTsNi7PgekEUFsyVllAJXRsP-) > * [生成模型與潛在空間 (Generative Modelling in Latent Space) - by DeepMind](https://hackmd.io/@Jaychao2099/Gen-Latent-Space) --- 回[主目錄](https://hackmd.io/@Jaychao2099/aitothemoon/)