---
# System prepended metadata

title: Gan 的 Loss

---

# Gan 的 Loss
## Loss的部分:
生成對抗網絡（GANs）的核心概念，是建立一個兩個角色(生成器、鑑別器)之間的對抗

### 1. 經典的公式:

- $\min_G \max_D \, \mathbb{E}_{X \sim P_{\text{data}}} \left[ \log D(x) \right] + \mathbb{E}_{Z \sim P_z} \left[ \log (1 - D(G(z))) \right]$

- 說明:
    - $(X \sim P_{\text{data}})$: 真實數據 𝑥 屬於 數據集的distribution $P_{data}$ 
    - $(Z \sim P_z)$: 噪聲 𝑧 屬於 distribution $P_{z}$，通常遵守 normal distribution或uniform
distribution
    - $\min_G \max_D:$  表示這是一個「最小-最大」遊戲
        - min G：對生成器 𝐺 最小化
        - max D：對判別器 𝐷 進行最大化
    - $\mathbb{E}_{x \sim P_{\text{data}}} \left[ \log D(x) \right]$: 
        - 這一項是對真實數據 𝑥 的期望值；
        - 判別器希望對真實樣本𝑥的輸出 𝐷(𝑥)越接近1越好（因為1表示真實樣本）。
    - $\mathbb{E}_{z \sim P_z} \left[ \log (1 - D(G(z))) \right]$:
        - 這一項是對噪聲 𝑧 的期望值
        - 是噪聲通過生成器𝐺，且判別器𝐷 對假樣本𝐺(𝑧)的輸出值的期望。
        - 判別器希望對生成樣本𝐺(𝑧)的輸出 𝐷(𝐺(𝑧))越接近0越好（因為0表示假樣本）。
    -  $\log$ 函數將數值壓縮到較小的範圍，避免極大或極小的數值
        - 當 𝐷(𝑥)接近 0 或 1 時，$\log D(x)$ 和 $\log (1 - D(G(z)))$ 都可以提供穩定的梯度訊息。

#### 實際的公式:
鑑別器的損失函數
- $L_D = - (\mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log (1 - D(G(z))])$
    - 鑑別器的目標是最大化其正確識別真實數據和生成數據的能力
    - 將其寫成負期望值是為了轉換最大化問題為最小化問題

生成器的損失函數:
- $L_G = - \mathbb{E}_{z \sim p_z}[\log D(G(z))]$
    - 生成器的目標是使鑑別器對生成數據的預測最大化，即使得 𝐷(𝐺(𝑧))接近於1


### 2. 用 BCEloss 實現(Binary Cross-Entropy, 二元交叉熵)
GAN中的鑑別器損失實際上可以被視為二元交叉熵損失的擴展:

- $L_{\text{BCE}} = - \left( y \log(p) + (1 - y) \log(1 - p) \right)$

    - 𝑦是真實標籤（0 或 1）
    - 𝑝是預測概率。

- 對於真實數據：令 𝑦=1（表示真實數據）
    - $L_{\text{BCE}}=- \log(D(x))$

- 對於生成數據：令 𝑦=0（表示生成數據）
    - $L_{\text{BCE}}=- \log (1 - D(G(z))$

使得 GAN 的訓練過程可以通過優化 BCE Loss 的方式進行。

### 3. 損失函數的變體: WGAN (Wasserstein Gan)
1. 損失函數的調整:
    - 直接度量了(真實數據分佈、生成數據分佈)之間的“距離”
    - 不使用 sigmoid 作為激活函數(就是在算式中拿掉Log)，用意是直接對數據的實數評分，而不是在預測概率，
    - 最大化判別器的損失函數 (這就是所謂分布間的距離)
        - $L_D = \mathbb{E}_{x \sim P_{data}}[D(x)] - \mathbb{E}_{z \sim P_z}[D(G(z))]$

    - 最小化生成器的損失函數
        - $L_G = -\mathbb{E}_{z \sim P_z}[D(G(z))]$
2. 引入K-Lipschitz 條件:

- 在 WGAN 中，為了確保 Wasserstein 距離的正確計算判別器 (使𝐷(𝑥)滿足 K-Lipschitz 條件)，通常需要對其權重進行裁剪（weight clipping），將權重限制在某個範圍內，例如 [-0.01, 0.01]。

- 以下是K-Lipschitz的定義:
    - K-Lipschitz 條件是數學中關於函數連續性的一種性質
    - 對於一個函數 $( f: \mathbb{R}^n \rightarrow \mathbb{R} )$，如果存在一個常數 $( K \geq 0 )$，使得對於所有 $( x, y \in \mathbb{R}^n )$，都有：
    $$
    |f(x) - f(y)| \leq K \|x - y\|
    $$那麼這個函數被稱為是 K-Lipschitz 連續的。
    
3. WGAN的優點:
    - 確保平滑性: 對輸入的變化不過於敏感，從而提高訓練的穩定性。

