20250930 筆記,內容可能有錯,請參考來源影片。
[李宏毅機器學習2021影片](https://www.youtube.com/playlist?list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J)
今天影片內容
[【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (一) – 基本概念介紹](https://youtu.be/4OWp0wDu6Xw?si=eT8vS0BCkHfI787Vhttps://youtu.be/4OWp0wDu6Xw?si=eT8vS0BCkHfI787V)
[【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (二) – 理論介紹與WGAN](https://youtu.be/jNY1WBb8l4U?si=ofBkoYF6unUa2UrC)
[【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (三) – 生成器效能評估與條件式生成](https://youtu.be/MP0BnVH2yOo?si=ZBcSRYIhMIpeL56A)
[【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (四) – Cycle GAN](https://youtu.be/wulqhgnDr7E?si=ZNfbr0trv0CVd1dr)
### 【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (一) – 基本概念介紹 大綱
**一、 概論:將神經網路作為生成器 (Generator) 使用**
A. 傳統神經網路的功能
B. 生成器的特殊之處:輸入隨機變數 $z$
1. $z$ 的特性
2. 輸出為分佈 (Distribution)
**二、 為何需要生成器:處理非固定輸出的任務**
A. 輸出需要是分佈的原因
B. 應用實例一:影片預測 (Video Prediction)
1. 傳統方法的失敗:模糊與分裂 (兩面討好)
2. 生成器解決方案
C. 應用實例二:需要創造力的任務
1. 圖像生成 (畫紅眼睛的角色)
2. 對話生成 (聊天機器人)
**三、 生成對抗網路 (Generative Adversarial Network, GAN) 簡介**
A. GAN 的背景與命名
B. GAN 的構成要素
1. Generator (G)
2. Discriminator (D)
C. GAN 運作原理的類比:演化與對抗關係
**四、 GAN 的演算法與訓練流程 (以無條件生成為例)**
A. 無條件生成 (Unconditional Generation) 設置
B. 訓練步驟一:訓練鑑別器 (D)
C. 訓練步驟二:訓練生成器 (G)
D. 訓練循環
**五、 GAN 的成果與應用**
A. 早期訓練成果 (2017 年的動畫人臉生成)
B. 近期與高級應用
C. 潛在空間的內差 (Interpolation)
### 一、 概論:將神經網路作為生成器 (Generator) 使用
1. **傳統神經網路的功能**
* 到目前為止所學到的神經網路 (NN) 通常都是一個函數 (function),給定一個輸入 $x$,就可以輸出一個 $y$。
* NN 架構可以處理不同的 $x$(例如圖片或序列)和不同的 $Y$(例如數值、類別或序列)。
2. **生成器的特殊之處**
* 生成器 (Generator) 是將神經網路當作生成工具來使用。
* 生成網路的輸入會**加上一個隨機變數 $z$**。
* $z$ 是從某一個分佈 (distribution) 中採樣 (sample) 出來的。
* NN 會同時看 $x$ 和 $z$ 來得到輸出。
* **結合 $x$ 和 $z$ 的方法**:可以將 $x$ 和 $z$ 向量直接接起來變成一個更長的向量,或是在 $x$ 和 $z$ 長度相同時,將它們相加後作為 NN 的輸入。
* $z$ 必須是**不固定**的;每次使用這個 NN 時都會隨機生成一個 $z$。
* **$z$ 的分佈限制**:這個分佈必須夠簡單,意思是我們知道它的公式,並且能夠從中進行採樣。例如,它可以是高斯分佈 (Gaussian distribution) 或均勻分佈 (uniform distribution)。
3. **輸出為分佈 (Distribution)**
* 由於每次採樣到的 $z$ 不同,輸出的 $y$ 也會不一樣。
* 相同的 $x$ 輸入,通過複雜的 NN 轉換後,輸出的 $y$ 不再是一個單一固定的東西,而是**變成了**一個複雜的**分佈** (distribution)。
* 這種可以輸出一個分佈的 NN,我們就稱它為 **Generator**。
### 二、 為何需要生成器:處理非固定輸出的任務
1. **輸出需要是分佈的原因**
* 有時候任務要求輸出的結果不應是固定單一的。
* 更具體的說法是,當我們想找到一個函數,但**同樣的輸入有多種可能的輸出,且這些不同的輸出都是對的**,這時就需要生成模型。
2. **應用實例一:影片預測 (Video Prediction)**
* 任務:給機器一段影片,預測接下來會發生什麼事。
* 訓練資料來源:錄製人玩小精靈遊戲的畫面,可以知道給定過去的資訊,接下來會發生什麼事。
* **傳統監督式學習的問題**:如果使用傳統的 NN 方法訓練,機器預測出來的結果可能會是模糊的,而且會發生「小精靈分裂」或「消失」的錯誤現象。
* 問題根源:在訓練資料中,遇到轉角時,小精靈有時往左轉,有時往右轉,這兩種可能性同時存在。
* NN 為了減少損失,會學到「**兩面討好**」,它會找到一個輸出,這個輸出同時距離向左轉和向右轉最近,結果就是同時向左也向右轉(例如分裂),這是錯誤的。
* 生成器解決方案:讓機器的輸出是**有機率的分佈**。通過輸入 $z$,NN 輸出的分佈可以包含向左轉和向右轉的可能性。例如,如果 $z$ 是一個 50/50 的二元隨機變數,NN 可能學到 $z=1$ 時向左轉,$z=0$ 時向右轉。
3. **應用實例二:需要創造力的任務**
* 當任務需要一點「創造力」時,就需要生成模型。
* **圖像生成**:例如,要求畫一個「紅眼睛的角色」,每個人心裡想的動畫人物可能都不同(例如酷拉皮卡、輝夜),因此這時 Model 需要能輸出一個分佈。
* **對話生成**:例如,詢問聊天機器人「你知道輝夜是誰嗎?」,可能有很多種不同的答案,這也需要生成模型。
### 三、 生成對抗網路 (Generative Adversarial Network, GAN) 簡介
1. **GAN 的背景與命名**
* 生成對抗網路 (Generative Adversarial Network, GAN) 是一個非常知名的生成模型。
* GAN 於 2014 年在 NIPS 上發表。
* GAN 發展出許多變形 (GAN Zoo 收集了 500 種以上)。由於名稱眾多,甚至出現了不同技術卻使用相同縮寫字母的狀況 (例如至少有六種 SCAP)。
* 名稱的由來:「Adversarial」是對抗的意思。在最早的論文中,Generator 和 Discriminator 被視為敵人(例如假鈔製造者與警察)。儘管關係是對抗的,但也可以被視為一種合作關係。
2. **GAN 的構成要素**
* **Generator (G)**:生成器。
* 功能:產生一個高維的向量(例如 $64 \times 64 \times 3$ 的向量,整理後即為一張圖片)。
* Generator 本身是一個 Neural Network。
* **輸入**:在非條件生成 (unconditional generation) 設置下,輸入是隨機變數 $z$。
* **$z$ 的設定**:通常假設 $z$ 是從 Normal Distribution (高斯分佈) 中採樣出來的低維向量(例如 50 或 100 維)。雖然 $z$ 可以是其他簡單分佈,但選擇簡單分佈即可,因為 Generator 會將此簡單分佈對應到一個複雜分佈。
* **Discriminator (D)**:鑑別器。
* 功能:輸入一張圖片,輸出一個**數值**。
* 這個數值越大,代表輸入的圖片越像真實的二次元人物頭像。例如,真實圖片輸出 1,亂畫的圖片輸出 0.1 或 0.2。
* Discriminator 本身也是一個 Neural Network,架構完全由設計者決定 (例如圖片輸入通常會選擇 CNN)。
3. **GAN 運作原理的類比:演化與對抗關係**
* **生物演化類比**:Generator 就像枯葉蝶 (會偽裝成枯葉躲避天敵)。Discriminator 就像天敵(波波、比比鳥、大比鳥),會演化以識別枯葉蝶的偽裝。
* **訓練過程的演化**:
1. 初始 Generator (G1) 參數隨機,輸出雜訊。
2. 初始 Discriminator (D1) 學習分辨雜訊和真實圖片 (例如看有沒有眼睛)。
3. G2 調整參數,進化以「騙過 D1」(例如產出眼睛)。
4. D2 再次進化,試圖找出 G2 圖片與真實圖片的差異 (例如 G2 圖片沒有頭髮或嘴巴)。
5. G3 調整參數,試圖「騙過 D2」(例如加上嘴巴)。
* 透過 Discriminator 越來越嚴苛,Generator 產生的圖片就會越來越像真實的二次元人物。
### 四、 GAN 的演算法與訓練流程
此處以**無條件生成 (unconditional generation)** 為例,即輸入只有 $z$,沒有 $x$。
1. **初始化**
* Generator (G) 和 Discriminator (D) 都是 NN,參數需先進行初始化。
2. **訓練步驟一:訓練鑑別器 (D)**
* **固定 Generator** (G) 的參數。
* 從高斯分佈 (Gaussian distribution) 中隨機採樣一堆 $z$。
* 將 $z$ 丟給 G,G 吐出一些**假圖片** (一開始會很不像正常圖片)。
* 從真實二次元人物頭像的資料庫中採樣**真圖片**。
* **D 的訓練目標**:學習分辨真圖片與 G 產生的假圖片之間的差異。
* **實際操作**:可以將真圖片標記為 1,假圖片標記為 0。這可以當作一個分類 (Classification) 或回歸 (Regression) 問題來訓練 D。
3. **訓練步驟二:訓練生成器 (G)**
* **固定 Discriminator** (D) 的參數。
* **G 的訓練目標**:讓 G 想辦法去**騙過 D**。
* **實際操作**:
* 將 $z$ 丟給 G 產生假圖片,再將假圖片丟給 D,D 會給圖片一個分數。
* G 訓練的目標是調整 G 的參數,讓 **Discriminator 的輸出值越**大越好。
* **網路結構**:將 G 和 D 連接起來,當作一個更大的 NN 來處理。
* **參數調整**:只調整 G 的參數,**不調整**對應到 D 的部分。若調整 D 的參數(例如最後一層的 bias),整個遊戲就像被駭客攻擊,使輸出分數變得非常大。
* **訓練方法**:G 的訓練方法與訓練一般 NN 相同,使用梯度上升 (gradient ascent) 的方法,讓 G 的目標函數 (D 的輸出值) 越大越好。
4. **訓練循環**
* 反覆執行:訓練一陣子 D,然後固定 D 訓練一陣子 G。
* 每次訓練 G 之後,G 會產生更多新的圖片,再用這些圖片來訓練 D。
* 如此反覆進行,期望 D 和 G 都能做得越來越好。
### 五、 GAN 的成果與應用
1. **早期訓練成果 (以動畫人臉生成為例)**
* 訓練過程的進化紀錄 (2017 年的實驗結果):
* 更新 100 次:亂七八糟的雜訊。
* 更新 1000 次:產生了眼睛。
* 更新 2000 次:嘴巴出現。
* 更新 5000 次:開始有臉的樣子,機器學到了動畫人物要有水汪汪的大眼睛。
* 更新 1 萬次:形狀出來了,但有點模糊暈開,像水彩畫。
* 更新 2 萬次/5 萬次:逐漸細緻化。
2. **近期與高級應用**
* **StyleGAN**:可以產生非常逼真且高品質的動畫人物,甚至生成異色瞳。
* **Progressive GAN**:可以產生非常高清的真實人臉,甚至可以產生以假亂真的人臉。
* 應用實例:有新創公司被懷疑用 GAN 生成假員工照片作為頭像。
* GAN 的優勢:可以產生**沒有看過的人**。
3. **潛在空間的內插 (Interpolation)**
* GAN Generator 的輸入 $z$ 是一個向量。
* 如果對輸入的 $z$ 向量做內插 (interpolation),輸出圖片會發生**連續的變化**。
* 實例:
* 在兩個 $z$ 向量之間內插,可以讓嚴肅的男人臉部逐漸變化成笑容展開的女人。
* 將一個 $z$ 產生往左看的人臉,與另一個 $z$ 產生往右看的人臉進行內插,中間的結果不是將兩張臉疊在一起,而是得到一個**往正面看**的人。這代表機器在訓練過程中自學到了人臉旋轉的概念。
### 【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (二) – 理論介紹與WGAN 大綱
### 一、 生成對抗網路 (GAN) 的訓練目標與理論基礎
A. 訓練目標:最小化或最大化 L 函數。
B. 核心概念:讓生成的資料分佈 ($P_G$) 盡可能接近真實資料分佈 ($P_{data}$)。
C. 衡量標準:兩分佈之間的 **Divergence (差異度/距離)**。
D. GAN 遇到的困難:Divergence 難以計算。
E. GAN 的解決方案:透過 **取樣 (Sampling)** 替代直接計算。
### 二、 判別器 (Discriminator, D) 的訓練與客觀函數
A. 判別器的功能:分辨真實資料 ($P_{data}$) 與生成資料 ($P_G$)。
B. 判別器的目標:**最大化 (Maximize)** 客觀函數 (Objective Function, $B$)。
C. $B$ 函數的意義:與 **Cross Entropy** 相關,等同於訓練一個二元分類器 (Binary Classifier)。
D. 客觀函數最大值與 JS 散度 (JS Divergence) 的關係:$B$ 的最大值與 $P_G$ 和 $P_{data}$ 之間的 JS 散度有關。
E. 整體優化目標:尋找一個 Generator (G) 來 **最小化** 判別器 $D$ 能達到的最大客觀函數值(即 **Minimax** 問題)。
### 三、 傳統 GAN (基於 JS Divergence) 的問題
A. 分佈重疊性低的問題:真實資料和生成資料通常處於高維空間中的 **low dimension manifold** 上,導致 $P_G$ 與 $P_{data}$ 重疊部分極少。
B. 取樣不足的問題:即使分佈理論上重疊,取樣點不夠密也使其在實際操作中看似沒有重疊。
C. JS 散度的局限:對於兩個沒有重疊的分佈,JS 散度算出來永遠是定值 $\log 2$。
D. 訓練缺乏梯度:當 JS 散度固定為 $\log 2$ 時,Generator 無法得到有效的梯度資訊來改善生成品質。
E. 實務操作困難:判別器 $D$ 的訓練正確率很快達到 100%,導致其 Loss 失去參考意義,使訓練過程不穩定且難以監測進度。
### 四、 Wasserstein Distance 與 WGAN
A. 解決方案:替換衡量分佈相似度的方式,改用 **Wasserstein Distance (W-Distance)**。
B. W-Distance 概念:**推土機距離**。想像將分佈 P 塑造成分佈 Q 所需移動的平均最短距離。
C. W-Distance 的優勢:即使 $P_G$ 與 $P_{data}$ 沒有重疊,W-Distance 仍能提供有方向性的距離值(越近值越小),從而為 Generator 提供連續的梯度。
D. 演化類比:W-Distance 允許 Generator 採取連續的小步驟改進,而 JS Divergence則需要一步到位。
### 五、 WGAN 的公式與 1-Lipschitz 限制
A. W-Distance 的計算:計算 W-Distance 需要解一個優化問題。
B. 關鍵限制:用於計算 W-Distance 的函數 $D$(在此處是判別器/Critic)**必須是一個 1-Lipschitz 函數 (足夠平滑的函數)**。
C. 1-Lipschitz 的目的:防止判別器給予無重疊的資料無限大的分數,導致訓練無法收斂。此限制確保 $D$ 不會變化過於劇烈。
D. 實作 1-Lipschitz 限制的方法:
1. 早期方法:**權重裁剪 (Weight Clipping)**,將 $D$ 的參數限制在 $[-C, C]$ 之間。
2. 後期改進:使用 **Gradient Penalty (梯度懲罰)** 等方法來更有效地符合 1-Lipschitz 限制。
### 一、 生成對抗網路 (GAN) 的訓練目標與理論基礎
* 在訓練生成問題時,我們需要定義一個 L 函數 (Loss function),並透過梯度下降來調整參數以最小化 L 函數。
* 在生成 (Generation) 問題中,我們的目標是讓 Generator ($G$) 產生的複雜分佈 $P_G$ 盡可能接近真實資料的分佈 $P_{data}$。
* 若要衡量 $P_G$ 與 $P_{data}$ 之間的相似度,我們需要計算它們之間的 **Divergence (差異度)**。Divergence 越小,代表這兩個分佈越相近、越相似。
* 我們的目標是找到一組 Generator 參數,使 $P_G$ 與 $P_{data}$ 之間的 Divergence 越小越好。在生成問題中,L 函數就是 $P_G$ 與 $P_{data}$ 的 Divergence。
* **GAN 遇到的核心困難** 在於,對於連續分佈 (Continuous Distribution) 而言,計算像是 KL divergence 或 JS divergence 這類 Divergence 是極為複雜且難以計算的。
* GAN 採用了一個神奇的做法來繞過不知道如何計算 Divergence 的問題。它指出,即使不知道 $P_G$ 和 $P_{data}$ 實際的完整公式,**只要能夠從這兩個分佈中取樣 (sample) 出資料**,就有辦法進行計算。
* 從真實資料 ($P_{data}$) 取樣:直接隨機取出圖片即可。
* 從 Generator ($P_G$) 取樣:將簡單分佈(如常態分佈 Normal Distribution)的輸入丟入 Generator,其輸出就是從 $P_G$ 取樣出來的圖片或點。
### 二、 判別器 (Discriminator, D) 的訓練與客觀函數
* 判別器 ($D$) 是根據真實資料 (Real Data) 和生成資料 (Generated Data) 訓練出來的。
* 判別器的訓練目標是:看到真實資料就給予**較高的分數**,看到生成資料就給予**較低的分數**。
* 判別器優化過程是 **最大化 (Maximize)** 一個客觀函數 (Objective Function, $B$)。
* $B$ 的公式涉及對從 $P_{data}$ 取樣的 $Y$ 求 $D(Y)$ 的對數,以及對從 $P_G$ 取樣的 $Y$ 求 $(1-D(Y))$ 的對數。
* 希望 $B$ 越大越好,這意味著如果 $Y$ 來自 $P_{data}$,則 $D(Y)$ 應越大越好;如果 $Y$ 來自 $P_G$,則 $D(Y)$ 應越小越好。
* 這個客觀函數 (Objective Function) 實際上就是一個 **二元分類器 (Binary Classifier)** 的 Cross Entropy 的等同形式。當我們最大化這個客觀函數時,等同於最小化 Cross Entropy,就是在訓練一個分類器。
* **JS Divergence的關聯性:** 原始 GAN 論文中設計的客觀函數,經過推導後發現,當這個客觀函數達到其最大值時,這個最大值與 $P_G$ 和 $P_{data}$ 之間的 **JS Divergence** 是有關聯的。
* **直觀理解:**
* 如果 $P_G$ 與 $P_{data}$ **很相似** (Divergence 很小),資料混在一起,判別器很難區分,因此 $D$ 無法讓客觀函數達到非常大的值,最大值會比較小。
* 如果 $P_G$ 與 $P_{data}$ **很不相似** (Divergence 很大),判別器可以輕易分開兩組資料,因此 $D$ 可以將客觀函數最大值衝得很大。
* **Minimax 目標:** 既然 $D$ 最大化的 $B$ 值與 Divergence 有關,我們就可以將最小化 Divergence 的目標替換為:找到 $G$ 來 **最小化** $D$ 能達到的最大客觀函數值。
* $\min_G \max_D B(D, G)$。
### 三、 傳統 GAN (基於 JS Divergence) 的問題
* **分佈的特性:** $P_G$ 與 $P_{data}$ 在高維空間中重疊的機率極低。
* 圖像資料的分佈在高維空間中其實是極為狹窄的 Low Dimension Manifold。例如,在 2D 空間中,它們可能只是兩條線。兩條線除非重合,否則交集範圍幾乎為零。
* 即使實際上有重疊,如果取樣點不夠多、不夠密,對於判別器來說,兩組分佈也會被視為沒有重疊。
* **JS Divergence 的問題:** JS Divergence 有一個特性,對於兩個**沒有重疊**的分佈,無論它們距離多遠或多近,算出來的 Divergence 永遠都是 $\log 2$。
* 這意味著,即使 Generator 已經產生了比前一步驟更好的結果(例如 $P_G$ 離 $P_{data}$ 更近了),JS Divergence 仍然是 $\log 2$。
* **結果:** Generator 在訓練時無法感知到這些細微的進步,因為 L 函數沒有變化,導致它沒有梯度 (Gradient) 進行優化。
* **實務操作的問題:**
* 由於兩組資料(真實和生成)重疊範圍極小,判別器通常可以在訓練完後達到幾乎 **100% 的正確率**。
* 當判別器正確率總是 100% 時,其 Loss 函數提供的資訊就失去意義,無法判斷 Generator 是否有越變越好。這使得早期的 GAN 訓練被認為像是黑魔法。
### 四、 Wasserstein 距離 (W-Distance) 與 WGAN
* 為了解決 JS 散度的問題,有人提出改用其他方式來衡量兩個分佈的相似程度,例如 **Wasserstein Distance**。
* W-Distance 的概念(又稱 **Earth Mover's Distance**):想像有一台推土機 (Earth Mover),將 $P$ 這堆土挪動到 $Q$ 堆土的位置。W-Distance 即是將 $P$ 重塑成 $Q$ 所需移動的**最小平均距離**。
* 對於複雜分佈,將 $P$ 變成 $Q$ 的方法有很多種 (moving plans),W-Distance 要求找到能讓平均距離最小的那種移動方法。
* **W-Distance 的優勢:**
* 即使兩個分佈沒有重疊,W-Distance 也能提供一個連續且有方向性的距離值。
* 當 $P_G$ 稍微靠近 $P_{data}$ 時,W-Distance 就會稍微變小,這提供了 Generator 所需要的 **連續變化的梯度**。
* **演化類比:** W-Distance 就像是生物演化中的連續步驟。從最簡單的感光細胞到複雜的眼睛,中間有許多連貫的步驟。同樣地,W-Distance 允許 $P_G$ 慢慢挪動靠近 $P_{data}$,每一步的微小變化都能被衡量。
* 當使用 W-Distance 取代 Divergence 時,這種方法就稱為 **WGAN (Wasserstein GAN)**。
### 五、 WGAN 的公式與 1-Lipschitz 限制
* W-Distance 的計算涉及到一個優化問題。解這個優化問題得出的值,就是 $P_G$ 與 $P_{data}$ 的 W-Distance。
* W-Distance 的目標函數需要找到一個 $D$ 函數來最大化某一項:
* 對於從 $P_{data}$ 取樣的 $X$,其 $D(X)$ 應越大越好。
* 對於從 $P_G$ 取樣的 $X$,其 $D(X)$ 應越小越好。
* **1-Lipschitz 限制 (關鍵):** 這個 $D$ 函數不能是任意函數,它必須是一個 **1-Lipschitz 函數**。這要求 $D$ 必須是**足夠平滑的函數**,不可變化得過於劇烈。
* **為何需要 1-Lipschitz?**
* 如果沒有這個限制,當 $P_{data}$ 和 $P_G$ 沒有重疊時,判別器可以無限制地給予真實資料極大的分數,給予生成資料極小的分數。
* 加上 1-Lipschitz 限制,要求 $D$ 必須平滑。如果 $P_{data}$ 和 $P_G$ 距離很近(即使沒有重合),$D$ 的值就不能相差太多,這樣才能確保計算出來的結果是真實的 W-Distance。
* **實作 1-Lipschitz 的方法:**
* 早期 WGAN 採取了相對粗糙的 **權重裁剪 (Weight Clipping)**:如果訓練後的參數超過 $C$ 就設為 $C$,小於 $-C$ 就設為 $-C$。
* 後續有改進方法,例如 **Gradient Penalty (梯度懲罰)** (WGAN-GP),以及其他方法如 Orthogonal Regularization。
### 【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (三) – 生成器效能評估與條件式生成 大綱
**一、 GAN 訓練的本質挑戰與穩定性**
A. G 與 D 之間的相互依賴性
B. 訓練的脆弱性與 Hyperparameter 調整
**二、 GAN 在序列生成上的特例:文字生成 (Sequence GANs)**
A. 文字生成難度高的原因 (梯度消失問題)
B. 處理方法:轉為強化學習 (RL)
C. SeqGAN 的突破與訓練要素
**三、 GAN 的評估方法與核心問題**
A. 早期與特定任務評估 (人眼判斷、物體偵測)
B. 質量與多樣性的量化指標
1. Inception Score (IS)
2. Fréchet Inception Distance (FID)
C. 訓練中的核心失敗模式
1. Mode Collapse
2. Mode Dropping
3. 記憶化問題 (Memorization)
**四、 條件式生成對抗網路 (Conditional GAN)**
A. CGAN 的定義與輸入
B. CGAN 鑑別器的設計與訓練要求
C. 條件式生成的應用實例
1. 文生圖 (Text-to-Image)
2. 圖生圖 (Image-to-Image Translation, Pix2Pix)
3. 聲音轉圖像 (Sound-to-Image)
### 一、 GAN 訓練的本質挑戰與穩定性
1. **G 與 D 之間的相互依賴性**
* GAN 的訓練是自發性的、互惠的過程;G 和 D **必須互相進步才能共同成長**。
* 只要其中一者發生問題或停止訓練,另一者也會跟著停滯或變差。
* 例如,如果 Discriminator 訓練不好,無法分辨真假圖片的差異,Generator 就會失去進步的目標。反之,如果 Generator 無法產生更真實的圖片,Discriminator 也無法再進步。
2. **訓練的脆弱性**
* GAN 的互動過程是脆弱的,如果訓練過程中某一步驟的 $L$ (Loss) 沒有下降,整個訓練就有失敗的可能性。
* 訓練 GAN 仍是一個困難的任務。
### 二、 GAN 在序列生成上的特例:文字生成 (Sequence GANs)
1. **文字生成難度高的原因**
* 將 GAN 用於生成一段文字 (sequence) 是**困難**的應用。
* Generator (Decoder) 產生文字序列,Discriminator 判斷這段文字是真實的還是 G 產生的。
* **No Gradient 問題**:G 想調整參數讓 D 的輸出分數最大化,但在文字生成中做不到。
* 原因:當 Decoder 參數只有微小變化時,輸出的機率分佈 (distribution) 雖然也微小變化,但在取分數最大的 Token(例如中文字/英文字母/詞)時,**分數最大的那個 Token 並沒有改變**。
* 如果輸出 Token 不變,Discriminator 的輸出分數也就不變,導致**無法計算梯度 (gradient)**。
2. **處理方法:轉為強化學習 (RL)**
* 遇到不能使用微分的問題時,可以將其視為**強化學習 (Reinforcement Learning)** 的問題來運作。
* *新的問題*:強化學習本身就是以難訓練而聞名,GAN 也是以難訓練而聞名,兩者結合使訓練變得**極度困難**。
* 在過去很長一段時間,沒有人能用正常方法(RL 方式)成功訓練文字 GAN,通常需要先進行預訓練 (pre-training)。
3. **ScrachGAN 的突破與訓練要素**
* 一篇名為 **ScrachGAN** 的論文聲稱可以**直接從隨機的初參數**開始訓練 Generator 產生文字。
* 關鍵成功因素:
* **Hyperparameter** 的仔細調整(例如 Google 的資源)。
* 需要一個叫做 **sequence step** 的技術,沒有它則無法啟動。
* 需要非常大的 **Batch Size**,通常是上千。
* Discriminator 訓練時需要加上 **regularization**。
### 三、 GAN 的評估方法與核心問題
1. **早期與特定任務評估**
* 評估 Generator 的好壞並不容易。
* **最直覺但不可靠的方法**:依靠人眼判斷。早期的論文甚至缺乏數字評估,主要靠放幾張圖片讓人覺得結果不錯。
* **針對特定任務**:例如在作業六中,透過運行動畫人物偵測系統,看 1000 張圖片中抓到多少個人頭像來評估 Generator 的好壞。
2. **質量與多樣性的量化指標**
* 評估通常借助一個預訓練好的**圖像分類系統** C(y)。
* **品質 (Quality) 評估**:
* 將 Generator 產生的圖片丟給 C(y),C(y) 輸出一個機率分佈。
* 如果輸出的分佈**越集中**,代表 C(y) 系統越肯定它看到了什麼(例如狗或斑馬),這意味著圖片越接近真實,**品質越高**。
* **多樣性 (Diversity) 評估**:
* 丟入一堆圖片 (例如 1000 張),將 C(y) 輸出的所有分佈**平均**起來。
* 如果平均的分佈**越平坦/平均**,代表 Generator 產生的圖片多樣性 (diversity) 越高。
* **Inception Score (IS)**:結合了 Quality (集中分佈) 和 Diversity (平坦平均分佈) 的分數。但在特定任務(如動畫人臉生成)中可能不適用,因為分類器可能將所有動畫臉都判為人臉。
* **Fréchet Inception Distance (FID)**:
* 目前較常用的評估指標。
* 方法:將真實圖片與生成圖片丟入 Inception 網路,取得 **Softmax 之前的那個高維向量**(上千維)作為圖片的表示。
* 假設:假設這兩組高維向量都遵循**高斯分佈 (Gaussian distribution)**。
* 計算:計算這兩個高斯分佈之間的 **Distance**。
* 結論:**FID 越小越好**(距離越小,表示生成圖片的品質越高)。
* 限制:計算準確的 FID 需產生**大量樣本**,且高斯分佈假設不一定準確。
3. **訓練中的核心失敗模式**
* **Mode Collapse**:Generator 產生的圖片來來去去只有那幾張。
* 原因:Discriminator 存在**盲點**,Generator 學會產生某類圖片後,就永遠可以騙過 D。
* **Mode Dropping**:Generator 產生的資料分佈只涵蓋真實資料的**子集**。
* 問題:單看產生的資料,多樣性可能看起來足夠,但它缺少了真實資料中存在的其他類型(例如臉部多樣性足夠,但膚色只有偏白和偏黃)。
* Mode Dropping 比 Mode Collapse 更難被偵測。
* **記憶化問題 (Memorization)**:
* Generator 產生的圖片與訓練資料**一模一樣**。
* 雖然 FID 可能很低、分數很高,但這種模型是沒有價值的,因為它沒有產生**新的**、資料庫中沒有的圖片。
* 難點:在向量空間中比較圖片的相似度以偵測記憶化是困難的。
### 四、 條件式生成對抗網路 (Conditional GAN)
1. **Conditional GAN 的定義與輸入**
* 目標:希望能夠**操縱** Generator 的輸出。
* 輸入:Generator 接收一個 **condition $x$** 和一個**隨機變數 $z$**。
2. **Conditional GAN 鑑別器的設計與訓練要求**
* **簡單設計的失敗**:若 Discriminator 只吃 $y$ (圖片),G 會學會產生清晰的圖片,但會**完全忽略 $x$**,因為 D 根本不看 $x$。
* **Conditional GAN 的 D 設計**:Discriminator 必須同時吃 $y$ (圖片) 和 **condition $x$** 作為輸入。
* D 判斷高分的條件:圖片 $y$ 必須**品質好**,且 $y$ 必須與文字敘述 $x$ **匹配 (pair up)**。
* **訓練資料要求**:Conditional GAN 的訓練通常需要**標註的成對資料** (labeled data),例如圖片搭配文字描述。
* **D 的訓練樣本**:為了訓練好 D,除了使用真實配對 (real $y$, real $x$) 和機器生成 (fake $y$, real $x$) 外,還需要加入**故意搭配錯誤的樣本** (real $y$, *wrong* $x$)。
3. **條件式生成的應用實例**
* **文生圖 (Text-to-Image)**:輸入文字 $x$(如「紅頭髪,藍眼睛」),輸出符合條件的圖片 $y$。
* **圖生圖 (Image-to-Image Translation)**:輸入一張圖片 $x$ 產生另一張圖片 $y$。
* 應用:設計圖轉實景圖、黑白圖上色。
* 這種應用常被稱為 **Pix2Pix** (pixel-to-pixel)。
* 優勢:若單用監督式方法,結果會模糊(因為平均了多種可能性),因此需要 GAN 來產生清晰且符合條件的圖片。
* **聲音轉圖像 (Sound-to-Image)**:輸入一段聲音,Generator 想像並畫出聽到的場景。
* 資料來源:成對資料來自於網路上的大量影片(將某個畫面與對應的聲頻片段配對)。
### 五、 與其他模型的比較與監督式學習的替代方案
1. **與 VAE/Flow-based 模型的比較**
* 如果要產生**品質極高**的圖片,今天仍需要使用 **GAN**。
* VAE 或 Flow-based 模型產生的結果通常與 GAN 存在巨大差距。
* 雖然 VAE/Flow 模型在訓練難度上與 GAN **不遑多讓**(也需要平衡許多超參數),但 GAN 仍然是 2021年圖像生成領域的首選。
2. **純監督式生成 (Supervised Generation)**
* 是否能使用監督式方法,將隨機的高斯變數 $z$ 配對到圖片 $y$ 來訓練 Generator?
* 理論上可以,但如果純粹使用隨機向量訓練,結果會很差,甚至退不起來。
* 需要特殊的方法來安排這些向量,例如 **Gradient Original Network** (2017 年 7 月的論文)。
### 【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (四) – Cycle GAN 大綱
**一、 非成對 (Unpaired) 影像生成與 CycleGAN**
A. 成對與非成對資料的困境
B. 影像風格轉換 (Image Style Transfer) 的應用需求
C. 簡單 GAN 模型的不足:忽略輸入與輸出關係
D. CycleGAN 的核心機制:循環一致性 (Cycle Consistency)
E. CycleGAN 的雙向訓練與其他同類模型 (DiscoGAN, DualGAN)
**二、 序列生成 GAN (Sequence GANs) 與非監督式應用**
A. 文本生成的特殊難題:梯度消失與強化學習需求
B. 非成對文本風格轉換 (Text Style Transfer)
C. 其他非監督式序列應用 (翻譯、摘要、語音辨識)
### 一、 非成對 (Unpaired) 影像生成與 CycleGAN
1. **成對與非成對資料的困境**
* 傳統的監督式學習 (supervised learning) 需要成對的資料 (paired data) 才能訓練,即輸入 $X$ 與輸出 $Y$ 必須配對。
* 但有時候我們會有一堆 $X$ 和一堆 $Y$,但 $X$ 跟 $Y$ 是**不成對**的 (unpaired data),這也稱為 unlabeled data (沒有標註的資料)。
* 即使是像作業三或作業五提到的方法,多少還是需要**一些**成對的資料才能訓練模型。
* 在一些極端狀況下,如**影像風格轉換 (Image Style Transfer)** (將真實照片 $X$ 轉成二次元頭像 $Y$),可能**完全沒有任何成對的資料**。
2. **簡單 GAN 模型的不足**
* 假設我們想訓練一個 Generator,讓它將 $X$ domain 的圖片分佈轉為 $Y$ domain 的圖片分佈。
* 如果只套用原來的 GAN 訓練方法(輸入 $X$ 圖片,G 產生 $Y$ 圖片,D 判斷 $Y$ 圖片是否像真實 $Y$ domain 的圖片)。
* **問題**:Generator 可能學會輸出像 $Y$ domain 的圖片,但它會**將輸入的 $X$ 圖當作高維的雜訊** (noise),結果是輸出的 $Y$ 圖片與輸入的 $X$ 圖片**沒有任何特別的關係**。
3. **CycleGAN 的核心機制:循環一致性 (Cycle Consistency)**
* 為了解決 G 忽略輸入 $X$ 的問題,CycleGAN 採用一種想法,稱為 **CycleGAN**。
* **構成**:訓練**兩個 Generator**:
* $G_{X \to Y}$:將 $X$ 域的圖轉為 $Y$ 域的圖。
* $G_{Y \to X}$:將 $Y$ 域的圖還原回 $X$ 域的圖。
* **循環一致性 (Cycle Consistency)**:引入一個額外的目標。
* 要求輸入 $X$ 經過 $X \to Y \to X'$ 兩次轉換後,輸出的 $X'$ 要與原來的 $X$ **越接近越好**。
* 兩張圖片 (兩個向量) 之間的距離越小,即越像,則滿足一致性。
* **效果**:這種循環約束能**強迫** $G_{X \to Y}$ 產生的 $Y$ 圖與輸入的 $X$ 圖**至少保有一些關係**。
* CycleGAN 必須訓練雙向的循環 ($X \to Y \to X$ 以及 $Y \to X \to Y$),同時也需要訓練一個 $X$ domain 的 Discriminator ($D_X$) 和一個 $Y$ domain 的 Discriminator ($D_Y$)。
4. **CycleGAN 的理論與實務**
* **理論限制**:循環一致性似乎**無法保證**轉換後的圖片與輸入圖片看起來真的很像,因為機器可能學到一些奇怪的轉換(如左右反轉或移除眼鏡),只要能轉回原圖即可。
* **實務經驗**:在實際使用 CycleGAN 時,這樣的極端情況**沒有那麼容易出現**。實際發現,輸入跟輸出往往看起來**非常像**,只是改變了風格。
* **同類模型**:**DiscoGAN** 和 **DualGAN** 的想法與 CycleGAN 幾乎是**一模一樣**的,且由不同團隊在相近的時間 (2017 年 3 月/4 月) 提出。
### 二、 序列生成 GAN (Sequence GANs) 與非監督式應用
1. **文本生成的特殊難題**
* GAN 用於生成文字序列是**最困難**的應用 。
* **No Gradient問題**:在 Generator 產生文字時,由於參數微小變化不會改變輸出的 Token ,導致 Discriminator 的輸出分數不變,**無法計算梯度** [CH, 11]。
* **解決**:將問題視為**強化學習 (RL)** 來運作 [CH, 11]。
2. **非成對文本風格轉換 (Text Style Transfer)**
* Text Style Transfer (例如把負面句子轉成正面句子) 的做法與 CycleGAN **一模一樣**。
* 需要收集一大堆非成對的負面句子和正面句子(例如從 ptt 爬取的推文)。
* 訓練同樣需要兩個 Generator 互相轉譯,並使用 **cycle consistency** (例如負面轉正面後再轉回原來的負面)。
* **挑戰**:兩個句子之間的相似度 (距離) 怎麼計算,是一個需要研究的問題。
3. **其他非監督式序列應用**
* **文本摘要 (Summarization)**:通過非成對的長文章和摘要,讓機器學習把長的文章變成簡短的摘要。
* **非監督式翻譯 (Unsupervised Translation)**:只收集一堆英文句子和一堆中文句子,**沒有任何成對資料**,使用 Cycle 的做法,機器就可以學會翻譯。
* **非監督式語音辨識**:讓機器聽一堆聲音(沒有文字對應)和爬一堆文字(沒有聲音對應),然後用 Cycle 運作,將聲音轉成文字。
[【機器學習2021】01~02 機器學習和深度學習基本概念簡介](https://hackmd.io/@JuitingChen/SyoNXkdslx)
[【機器學習2021】03~08 機器學習任務攻略和最佳化技巧](https://hackmd.io/@JuitingChen/BJ6mXy_slg)
[【機器學習2021】09~11 CNN 和 Self attention](https://hackmd.io/@JuitingChen/r1ahLgUngl)
[【機器學習2021】12~13 Transformer](https://hackmd.io/@JuitingChen/H1tfXy_ige)
[【機器學習2021】14~17 GAN](https://hackmd.io/@JuitingChen/S1adiwvhxg)
[【機器學習2021】18~21 自監督式學習](https://hackmd.io/@JuitingChen/ryQG7J_sgl)
[【機器學習2021】22~23 Auto-encoder](https://hackmd.io/@JuitingChen/r1sLPr92ge)
[【機器學習2021】24~25 Adversarial Attack ](https://hackmd.io/@JuitingChen/HJ6jJIq3ge)
[【機器學習2021】26~28 Explainable ML 和 Domain Adaptation](https://hackmd.io/@JuitingChen/SJZzQkdslg)
[【機器學習2021】29-30 強化學習-1](https://hackmd.io/@JuitingChen/HJYziZR3gx)
[【機器學習2021】31~33 強化學習-2](https://hackmd.io/@JuitingChen/Sy5DoWA3xl)
[【機器學習2021】34~35 機器終身學習](https://hackmd.io/@JuitingChen/BytWmyuilg)
[【機器學習2021】36~37 神經網路壓縮 ](https://hackmd.io/@JuitingChen/Bk7-m1_jlx)
[【機器學習2021】37~40 Meta Learning](https://hackmd.io/@JuitingChen/SkkC6rT2gl)