---
# System prepended metadata

title: 第十一講：有關影像的生成式AI
tags: [機器學習, 生成式 AI, LLM]

---

# 第十一講：有關影像的生成式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/)