AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
43/100 第五週:📌 生成對抗網路 GAN
43.損失函數與訓練技巧 🎯 抓住平衡,避免模式崩潰!
______________________________________
🎯 單元導讀:
GAN(生成對抗網路)的成功訓練極度仰賴「損失函數設計」與「穩定訓練技巧」。
如果兩個對手失衡,就可能導致整個訓練過程崩潰,無法產出有意義的結果。
本單元將說明 GAN 的基本損失函數、常見問題(如模式崩潰),以及業界常用的訓練穩定化技巧。
________________________________________
🔢 一、GAN 的基本損失函數(Minimax Loss)
GAN 透過「極小極大博弈」進行訓練:
在生成對抗網路(GAN)中,生成器與判別器透過極小極大的對抗訓練機制彼此博弈:生成器試圖產生以假亂真的資料以欺騙判別器,而判別器則致力於識破生成器產出的假資料。這場對抗以基本的 Minimax 損失函數為核心,公式中一部分鼓勵判別器正確辨識真實資料,另一部分則懲罰其誤判生成資料。訓練過程中,兩者輪流優化,最終理想狀態是判別器無法區分真假資料(輸出接近 0.5)。雖然這種原始結構概念清晰,但實務上可能導致訓練不穩定,因此後續如 WGAN、LSGAN 等改良版本被提出以提升訓練效率與穩定性。
________________________________________
🧮 二、實務中的兩種替代寫法
由於原始 GAN 的 Minimax Loss 在訓練早期容易出現梯度消失或收斂不穩定的問題,研究者提出了兩種常見且實用的替代損失設計:
1️⃣ 非飽和損失(Non-saturating Loss)
🎯 目的:避免生成器在初期訓練時獲得過小的梯度,讓學習更穩定。
🔧 改法:
原始生成器目標: max(G) log D(G(z))
改寫為非飽和版本(通常效果更好):min(G) - log D(G(z))
原始生成器的目標是讓生成的資料被判別器判為真,但在訓練初期容易遇到梯度消失,導致生成器學不動。為了解決這個問題,改採非飽和損失的設計,重新調整訓練目標,使即使在判別器很強的情況下,生成器仍能獲得有效的學習訊號,提升整體訓練穩定性與生成效果。
📌 說明:這種寫法鼓勵生成器直接最大化判別器對假圖的「真實信心」,實作時更容易優化,不容易出現梯度過小的情況。
2️⃣ 最小平方損失(Least Squares GAN,LSGAN)
🎯 目的:減少生成圖與真實圖在判別器輸出空間的距離,使生成圖更逼真。
🔧 損失設計:
判別器損失:1/2(D(x)−1) ^2 + 1/2( D(G(z))) ^2
生成器損失:1/2( D(G(z)) -1) ^2
這組損失函數來自 Least Squares GAN(LSGAN),以平方誤差取代原始 GAN 的交叉熵,讓訓練更穩定。判別器的目標是讓真實資料的輸出接近 1、假資料的輸出接近 0;而生成器則希望讓假資料的輸出也接近 1,以騙過判別器。透過這種方式,避免了梯度消失問題,提升了生成品質與訓練效果。
📌 說明:LSGAN 不再用 log 機率,而是讓判別器輸出靠近 1(真)或 0(假),用最小平方差來衡量真假區分,訓練過程更穩定,生成結果品質也常較平滑自然。
________________________________________
⚠️ 三、訓練常見問題與對應技巧
📉 問題一:模式崩潰(Mode Collapse)
現象:
生成器只學會產出一小部分固定模式(如一直生出同一張臉),失去多樣性。
解法:
• 增加模型多樣性監控
• 使用 Mini-batch Discrimination:判別器學會識別樣本間差異
• 使用 Unrolled GAN 或 WGAN
________________________________________
📈 問題二:訓練不穩定、震盪
現象:
生成器與判別器互相壓制,訓練過程震盪或收斂困難。
解法:
• 使用 Gradient Penalty 或 Spectral Normalization
• 調整 學習率(lr):D 通常學習率可略高於 G
• 使用 Label Smoothing:將真實標籤設為 0.9 而非 1,增加彈性
________________________________________
問題三:梯度消失問題(Vanishing Gradient Problem)
現象:
生成器梯度幾乎為 0,無法更新。
解法:
• 調整訓練頻率(如 G:D = 1:5)
讓判別器不要訓練得太快,避免壓制生成器,平衡兩者的學習進度。
例如:判別器訓練 5 次後,生成器才訓練 1 次。
• 使用 Wasserstein GAN(WGAN)
將原本的交叉熵損失改為 Wasserstein 距離(又稱 Earth Mover 距離),提供穩定且連續的梯度,即使生成器性能很差時也能學習。
此外,WGAN 引入「權重裁剪」或「gradient penalty」以確保 Lipschitz 條件成立,有助於解決梯度消失與模式崩壞問題。
不再使用 Sigmoid,讓判別器輸出為實數,有助於穩定學習。
________________________________________
📋 四、訓練技巧總整理表
技巧名稱 用途說明
非飽和損失 解決梯度消失問題
Label Smoothing 緩解過擬合、提升泛化力
Gradient Penalty 強化平滑性與穩定性,防止梯度爆炸
Wasserstein 距離 改善收斂品質與樣本多樣性
Spectral Normalization 協助收斂,改善訓練不穩
________________________________________
🔚 五、小結與啟示
• GAN 的訓練是一場「精準控制與策略博弈」的過程。
• 損失函數的選擇與訓練穩定化技巧,決定模型是否能有效學習。
• 學會抓住平衡點,是讓 GAN 跨入真實世界應用的關鍵。
________________________________________
💬 問題討論:
1. 你認為「判別器強」比較好,還是「生成器強」比較好?為什麼?
🔁 答案:兩者需平衡。
判別器太強 → 生成器學不到
生成器太強 → 判別器無效
📌 勢均力敵才能推動彼此成長。
2. 在面對模式崩潰時,你會採用哪種策略優先處理?
✅ 優先策略:使用 WGAN 或 Minibatch Discrimination
WGAN 提供穩定梯度
Minibatch Discrimination 增加樣本多樣性
3. 如果你要設計一個訓練穩定又快速的 GAN,你會怎麼組合以上技巧?
📦 推薦組合:
• WGAN-GP 架構
• 非飽和損失
• 訓練比例 G:D = 1:5
• Adam 優化器(β₁ = 0.5)
• 加入 BatchNorm、Dropout 穩定學習