---
# System prepended metadata

title: '【2023 生成式AI】19~22 Diffusion Model 原理剖析 '
tags: [生成式AI]

---

20251023筆記 內容可能有錯誤，請參考原始影片 


[李宏毅【機器學習 2023】(生成式 AI)](https://www.youtube.com/playlist?list=PLJV_el3uVTsOePyfmkfivYZ7Rqr2nMk3W)

今日影片
[【生成式AI】Diffusion Model 原理剖析 (1/4) (optional)](https://youtu.be/ifCDXFdeaaM?si=SavB__a1d8c38jZN)

[【生成式AI】Diffusion Model 原理剖析 (2/4) (optional)](https://youtu.be/73qwu77ZsTM?si=9R8pW1F73NZtv6Ms)

[【生成式AI】Diffusion Model 原理剖析 (3/4) (optional)](https://youtu.be/m6qchXTx6wA?si=wsncD3iluX9ofZXd)

[【生成式AI】Diffusion Model 原理剖析 (4/4) (optional)](https://youtu.be/67_M2qP5ssY?si=wf7mdZHm22r8WIYF)


今天筆記內容的數學公式錯誤很多僅供參考。


### 【生成式AI】Diffusion Model 原理剖析 (1/4) (optional)大綱

1.  **Diffusion Model 的基礎概念與運作流程**
    *   順向過程（Forward Process）：加雜訊。
    *   反向過程（Reverse Process）：去雜訊 (Denoising)。
    *   與 VAE (Variational Autoencoder) 的類比。
2.  **Diffusion Model 的訓練演算法詳解**
    *   訓練步驟：取樣乾淨圖 $x_0$、時間步 $t$、和雜訊 $\epsilon$。
    *   加雜訊與混合過程：透過 $\alpha_t$ 參數混合 $x_0$ 與 $\epsilon$ 得到 $x_t$。
    *   學習目標：訓練 Noise Net ($\epsilon_{\theta}$) 預測混入的雜訊 $\epsilon$。
3.  **實際演算法與想像中概念的差異**
    *   想像中：雜訊逐步添加和去除。
    *   實際操作：雜訊是一次性直接混入。
4.  **圖像生成過程（反向過程）**
    *   從純雜訊 $x_T$ 開始。
    *   迭代去雜訊的複雜公式。
    *   演算法中的玄機：在去雜訊過程中，需要額外加入新的雜訊。

---


### 一、 Diffusion Model 的基礎概念與 VAE 類比

*   **基本概念：** Diffusion Model 的概念非常直觀，包含兩個主要過程：順向過程和反向過程。
    *   **順向過程 (Forward Process)：** 將雜訊 (noise) 加入圖像中，直到原圖完全看不出來。
    *   **反向過程 (Reverse Process) / 去雜訊 (Denoising)：** 從一個完全是雜訊的圖像開始，每次迭代圖像會逐漸顯現出來，最終產生完整的圖像。
*   **與 VAE 的比較：** Diffusion Model 與 VAE 非常相似。
    *   **VAE 結構：** VAE 包含一個 `encoder` 將圖像壓縮成潛在表示，以及一個 `decoder` 將潛在表示還原為圖像。
    *   **Diffusion Model 的類比：**
        *   **加雜訊的過程 (Forward Process)** 可以被視為 VAE 的 `encoder`。
        *   這個 `encoder` 不是一個神經網路學習出來的，而是**固定好**的，不需要人為設計。
        *   透過加 $N$ 步雜訊，圖像變成只含有雜訊的物件，這個只含雜訊的圖像就相當於 VAE 中的潛在表示。
        *   **去雜訊的過程 (Reverse Process)** 相當於 VAE 裡面的 `decoder`。

### 二、 訓練演算法 (Training Algorithm)
![image](https://hackmd.io/_uploads/HyReKzSCgx.png)

*   **演算法簡介：** Diffusion Model 的原始演算法非常簡單，在原始文件上只有兩張圖來描述。
*   **訓練步驟（重複執行直到收斂）：**
    1.  **取樣乾淨圖像 $x_0$：** 從資料庫中抽取一張圖像 $x_0$，它代表乾淨的、要真正生成的圖像。
    2.  **取樣時間步 $t$：** 從 1 到 $T$（大 $T$ 數）之間隨機選取一個整數 $t$。
    3.  **取樣雜訊 $\epsilon$：** 從一個標準常態分佈中取樣 $\epsilon$。
        *   該常態分佈的平均值為 0，每個維度的變異數 (variance) 皆為 1。
        *   $\epsilon$ 的大小與 $x_0$ 相同，但內容全部都是雜訊。
    4.  **混合 $x_0$ 與 $\epsilon$ 得到 $x_t$ (Forward Step)：** 這是最複雜的一行。
        *   通過事先設定好的參數序列 $\alpha_1$ 到 $\alpha_T$，將 $x_0$ 和 $\epsilon$ 按比例混合，得到有雜訊的圖 $x_t$。
        *   公式為：$x_t = x_0 \times \sqrt{\alpha_t} + \epsilon \times \sqrt{1 - \alpha_t}$。
        *   **參數 $\alpha_t$ 的意義：** $\alpha_t$ 通常設計為由大到小。當 $t$ 越大，$\alpha_t$ 越小。
        *   $\alpha_t$ 越小，表示原圖 $x_0$ 佔的比重越少，雜訊 $\epsilon$ 佔的比重越多。因此，$t$ 越大，代表雜訊加得越兇、越多。
    5.  **訓練 Noise Predictor ($\epsilon_{\theta}$)：** 接下來的任務是訓練一個 Noise Net (雜訊預測器)，用 $\epsilon_{\theta}$ 表示。
        *   Noise Net 接受有雜訊的圖 $x_t$ 和時間步 $t$ 作為輸入。
        *   Noise Net 的輸出是預測的混入雜訊 $\epsilon_{\theta}$。
    6.  **設定學習目標：** 學習目標是讓 Noise Predictor 預測出的雜訊 $\epsilon_{\theta}$ 盡可能接近當初抽樣出來並與 $x_0$ 混合的那個雜訊 $\epsilon$。

### 三、 概念與實際訓練演算法的差異

*   **概念上的差異：** 實際執行的演算法與先前課程中講述的或想像中的運作方式有所不同。
    *   **想像中：** 雜訊是 **一點一點** 逐步加進去的。每次訓練時，是把有雜訊的圖當作輸入，還原成 **沒有那麼雜訊** 的圖。
    *   **實際演算法：** 訓練時，雜訊**並沒有一步一步**地加進去，而是**一次性**地把雜訊直接混入乾淨的圖 $x_0$。
    *   實際演算法訓練的目標是：輸入有雜訊的圖 $x_t$ 和時間步 $t$，預測**直接混入的那個雜訊** $\epsilon$。
    *   因此，雜訊的添加和去雜訊 (Denoise) 在實際演算法中都不是多步操作，而是**一次到位**。

### 四、 圖像生成過程（Reverse Process）
![image](https://hackmd.io/_uploads/S1scKGBAxg.png)

*   **初始步驟：** 生成圖像的過程從取樣一個純粹都是雜訊的樣本 $x_T$ 開始。
*   **迭代去雜訊：** 模型從 $T$ 開始，逐步運行反向過程 (Reverse Process)，將雜訊去除。
*   **核心操作：** 在每一步迭代中，目標是從 $x_t$ 得到 $x_{t-1}$。
    *   首先將 $x_t$ 當作輸入丟給 Noise Predictor，得到預測的雜訊 $\epsilon_{\theta}$。
    *   $x_{t-1}$ 的計算涉及一個複雜的公式，它包含了 $x_t$ 減去一項與 $\epsilon_{\theta}$ 相關的常數 (該常數取決於 $t$)。
    *   具體而言，公式的項包括：$x_t$ 減去 $\epsilon_{\theta}$ 乘以 $\frac{1-\alpha_t}{\sqrt{1-\alpha_t}}$。
*   **演算法中的玄機（額外加雜訊）：** 在得到 $x_{t-1}$ 的過程中，演算法還要求再取樣一個雜訊 $z$ (乘以常數 $\sigma_t$)，並將這個雜訊**加到**圖像裡面，得到最終的 $x_{t-1}$。
    *   這意味著在去雜訊的過程中，又額外加入了一個雜訊。
    *   儘管這看起來很奇怪，但可以選擇不進行這個額外加雜訊的步驟，直接按照演算法來操作。

### 【生成式AI】Diffusion Model 原理剖析 (2/4) (optional)大綱

1.  **影像生成模型的共同目標**
    *   將簡單分佈（如高斯分佈）透過神經網路轉換成複雜的目標分佈。
    *   目標是讓生成的圖像分佈 $P_{\theta}$ 盡可能接近真實數據分佈 $P_{data}$。
2.  **衡量分佈接近度的方法：最大似然估計 (Maximum Likelihood Estimation)**
    *   操作：從 $P_{data}$ 取樣數據，尋找能最大化這些數據被模型 $P_{\theta}$ 產生的機率的參數 $\theta$。
    *   數學等價性：最大化對數似然性等價於**最小化 $P_{data}$ 與 $P_{\theta}$ 之間的 KL 散度 (Kullback-Leibler Divergence)**。
3.  **VAE (Variational Autoencoder) 的理論基礎**
    *   問題：直接計算 $P_{\theta}(X)$（圖像 $X$ 被生成的機率）是複雜且難以想像的（非高斯分佈）。
    *   解決方案：透過變分下界（ELBO, Evidence Lower Bound）來間接最小化目標。
4.  **Diffusion Model 的似然性公式**
    *   Diffusion Model (DDPM) 產生 $X_0$ 的機率 $P_{\theta}(X_0)$ 寫成對所有中間步驟 $X_1$ 到 $X_T$ 的複雜積分。
    *   **核心假設：** DDPM 的去雜訊（反向）過程中的分佈 $P(X_{t-1}|X_t)$ 被假設為**高斯分佈**。
    *   DDPM 與 VAE 的數學形式極其相似，只是將 VAE 的潛在變數 $Z$ 替換成 $X_1$ 到 $X_T$ 的序列。

---


### 一、 影像生成模型的共同目標
![image](https://hackmd.io/_uploads/Hycp5MB0xe.png)

*   **本質目標：** 影像生成模型的本質目標是將一個簡單的分佈 (Simple Distribution) 轉換成一個複雜的分佈。
    *   **輸入 (Input)：** 通常是一個簡單分佈，例如標準常態分佈 (Normal Distribution)，平均值為 0，每個維度的變異數為 1。從這個分佈中取樣出一個向量 $Z$ (或稱為 $Z_{input}$)。
    *   **轉換 (Transformation)：** 透過一個神經網路 $G$ (以 $G(Z)$ 表示) 進行轉換。
    *   **輸出 (Output)：** 輸出是一堆圖像，它們共同形成一個非常複雜的分佈 $P_{\theta}$。
*   **期望結果：** 期望找到一個神經網路 $G$ (或參數 $\theta$)，使生成的圖像分佈 $P_{\theta}$ 與真實圖像的數據分佈 $P_{data}$ **越接近越好**。
*   **條件生成 (Conditioning)：** 雖然常見的應用是加上條件 $C$（如文字敘述），生成 $P_{\theta}(X|C)$，但在原理上與無條件生成沒有本質差異，因此在數學推導中常假設沒有條件 $C$，以簡化數學表達。

### 二、 最大似然估計 (MLE)
![image](https://hackmd.io/_uploads/SJEzsfS0xg.png)

*   **定義：** 多數影像生成模型（如 VAE 和 Diffusion Model）都採用最大似然估計 (Maximum Likelihood Estimation) 來量化「越接近越好」這件事。
*   **操作流程：**
    1.  從真實數據分佈 $P_{data}$ 中取樣一堆訓練資料 $X_1$ 到 $X_m$。
    2.  假設模型 $P_{\theta}$ 可以計算產生每一張 $X_i$ 的機率。
    3.  目標是尋找一組參數 $\theta$，使這些被取樣到的圖像 $X_1$ 到 $X_m$ 被 $P_{\theta}$ **產生的機率最高**。
*   **目標函數 (Objective Function)：** 需要最大化 (Maximize) $\theta$，使得 $P_{\theta}(X_1, X_2, \dots, X_m) = \prod_{i=1}^{m} P_{\theta}(X_i)$ 達到最大。
    *   通常對此目標函數取 $\log$ 處理：$\text{maximize } \sum_{i=1}^{m} \log P_{\theta}(X_i)$。

### 三、 MLE 與 KL 散度的等價性![image](https://hackmd.io/_uploads/B1YeszS0xe.png)


*   最大化 $\sum \log P_{\theta}(X_i)$ 這個目標，等同於計算 $X$ 從 $P_{data}$ 中取樣的期望值 $E_{X \sim P_{data}} [\log P_{\theta}(X)]$。
*   通過數學轉換（加入與 $\theta$ 無關的項 $E_{X \sim P_{data}} [\log P_{data}(X)]$），可以證明最大化對數似然性等價於**最小化 $P_{data}$ 與 $P_{\theta}$ 之間的 KL 散度**。
    *   **KL 散度 (Kullback-Leibler Divergence)：** 是一種衡量兩個分佈 $P_{data}$ 和 $P_{\theta}$ **不相似程度**的量度方式。
    *   $D_{KL}(P_{data} || P_{\theta}) = \int P_{data}(X) \log \frac{P_{data}(X)}{P_{\theta}(X)} dX$。
    *   KL 散度越小，表示兩個分佈越相似。
*   因此，所有影像生成模型（如 Diffusion Model 和 VAE）的共同目標都是**最大化似然性**，這等價於**最小化分佈之間的散度**。

### 四、 VAE 中的下界 (Lower Bound)

![image](https://hackmd.io/_uploads/H1mIhMHAle.png)

![image](https://hackmd.io/_uploads/HkyN3zB0eg.png)

*   **問題：** 直接計算 $P_{\theta}(x) = \int P(Z)P_{\theta} (X|Z) dZ$ 是不可行的，因為真實分佈 $P_{\theta}$ 非常複雜，無法簡單計算出某張圖 $X$ 在此分佈下被產生的機率。
*   **VAE 假設：** VAE 假設如果給定潛在變數 $Z$，圖像 $X$ 的分佈 $P(X|Z)$ 是高斯分佈。
*   **變分下界 (ELBO)：** VAE 實際上並不是直接最小化 $\log P(X)$，而是最小化一個 $\log P(X)$ 的變分下界 $L$。
    *   數學推導中，引入了一個任意的分佈 $q(Z|X)$。
    *   最終 $\log P_{\theta}(X)$ 被拆解成兩項：一項是 $q(Z|X)$ 與 $P(Z|X)$ 之間的 KL 散度 $D_{KL}(q(Z|X) || P(Z|X))$，另一項是 $L$。
    *   由於 KL 散度恆大於等於零，因此 $L \le \log P(X)$。透過最大化 $L$，模型期望能最大化 $\log P(X)$。

### 五、 Diffusion Model 的似然性與高斯假設
![image](https://hackmd.io/_uploads/S1FzTzH0xl.png)


*   **DDPM 似然性公式：** 在 Diffusion Model 中，生成圖像 $X_0$ 的機率 $P_{\theta}(X_0)$ 是透過反向過程 (Reverse Process) 鏈式相乘和積分計算的。
    *   $P_{\theta}(X_0) = \int P(X_T) P(X_{T-1}|X_T) \dots P(X_0|X_1) dX_1 \dots dX_T$。
    *   $P(X_T)$ 代表純粹雜訊的起始分佈。
    *   $P(X_{t-1}|X_t)$ 代表每一步的去雜訊過程（由模型參數 $\theta$ 決定）。
*   **高斯假設：** 為了使這個複雜的積分可解，**Diffusion Model 假設了反向過程中的所有條件機率分佈 $P(X_{t-1}|X_t)$ 都是高斯分佈**。
    *   雖然這個高斯假設對於複雜的圖像生成來說可能過於簡化，但它是模型能夠運作的關鍵。
*   **與 VAE 的相似性：** Diffusion Model 實際上也是最大化 $\log P_{\theta}(X_0)$ 的下界。
![image](https://hackmd.io/_uploads/BJGEpMB0gg.png)

    *   DDPM 的推導結構（ELBO 的分解）與 VAE **形式上幾乎一模一樣**。
    *   DDPM 將 VAE 中的潛在變數 $Z$ 替換成了 $X_1$ 到 $X_T$ 的序列。
    *   VAE 的 $q(Z|X)$ 變成了 DDPM 的順向加雜訊過程 $q(X_1:X_T|X_0)$。
    *   DDPM 需要計算 $q(X_t|X_{t-1})$（順向加雜訊）和 $P_{\theta}(X_{t-1}|X_t)$（反向去雜訊）的機率。
### 【生成式AI】Diffusion Model 原理剖析 (3/4) (optional)大綱


1.  **順向過程 $q$ 的數學表達**
    *   定義 $\beta_t$ 為事先設定的超參數，控制每一步加雜訊的大小。
    *   順向過程 $q(X_t|X_{t-1})$ 被定義為高斯分佈。
2.  **一步到位計算 $q(X_t|X_0)$**
    *   利用高斯分佈的特性，多步加雜訊可以等效於一步完成。
    *   引入 $\alpha_t$ 與 $\bar{\alpha}_t$ 符號來簡化 $X_t$ 與 $X_0$ 之間的關係。
3.  **變分下界 (ELBO) 的分解與簡化**
    *   最小化 ELBO 的目標等價於最小化幾個 KL 散度項。
    *   無關參數的項 ($D_{KL}(q(X_T|X_0) || P(X_T))$) 可以被忽略。
4.  **解決核心 KL 散度項**
    *   目標是最小化 $D_{KL}(q(X_{t-1}|X_t, X_0) || P_{\theta}(X_{t-1}|X_t))$。
    *   透過貝氏定理 (Bayes' Theorem) 計算出 $q(X_{t-1}|X_t, X_0)$ 的分佈，結果仍為高斯分佈，其平均值是 $X_0$ 與 $X_t$ 的內插。
    *   **訓練目標：** 讓模型預測的平均值（由 $P_{\theta}$ 決定）趨近於固定目標 $q$ 的平均值。
5.  **最終訓練目標：預測雜訊**
    *   將 $X_0$ 替換成 $X_t$ 與雜訊 $\epsilon$ 的函數。
    *   數學推導證明，模型最終只需要訓練來預測混入 $X_t$ 中的那個雜訊 $\epsilon$。
6.  **超參數 $\alpha/\beta$ 的處理**
    *   $\alpha$ 和 $\beta$ 通常是事先設定的固定值，不是透過網路學習出來的。

---


### 一、 順向過程 $q$ 的數學結構

![image](https://hackmd.io/_uploads/rJMB3twCgg.png)


*   **單步關係 $q(X_t|X_{t-1})$：** 在 Diffusion Model (DDPM) 中，圖像 $X_t$ 與前一步 $X_{t-1}$ 的關係是固定的。
    *   公式定義為：$X_t = X_{t-1} \cdot \sqrt{1 - \beta_t} + \epsilon \cdot \sqrt{\beta_t}$。
    *   其中，$\epsilon$ 是從平均值為 0、變異數為 1 的高斯分佈 (Gaussian distribution) 中取樣出來的雜訊。
    *   **$\beta$ 參數：** $\beta_1$ 到 $\beta_T$ 是一串事先定好的數值，它們代表在每一步中要加入雜訊的大小。$\beta_t$ 就像超參數 (hyperparameter)，可以調整。
*   **分佈特性：** 由於 $X_t$ 是由 $X_{t-1}$（一個定值）與高斯雜訊 $\epsilon$ 線性組合而成，因此 $q(X_t|X_{t-1})$ 仍然是一個高斯分佈。
    *   平均值 (mean) 為 $\sqrt{1 - \beta_t} \cdot X_{t-1}$。
    *   變異數 (variance) 則由 $\beta_t$ 決定。

### 二、 一步到位計算 $q(X_t|X_0)$
![image](https://hackmd.io/_uploads/Sy1KpMrRxl.png)
*   **問題：** 雖然 $q(X_t|X_0)$ 可以透過 $X_0 \to X_1 \to X_2 \to \dots \to X_t$ 的鏈式過程來計算，但這涉及 $T$ 次取樣和運算。
*   **直接計算：** 利用高斯分佈的線性疊加特性，可以證明從 $X_0$ 到 $X_t$ 的過程可以一步到位。
    *   從高斯分佈取樣兩次，並乘上不同的權重相加，等同於只取樣一次，但乘上另一個組合權重。
*   **符號簡化：** 為了簡化表達，引入新的符號：
    *   $\alpha_t = 1 - \beta_t$。
    *   $\bar{\alpha}_t = \alpha_1 \cdot \alpha_2 \cdot \dots \cdot \alpha_t$ (累積乘積)。
*   **最終關係式 $X_t|X_0$：** $X_t$ 與 $X_0$ 之間的關係可以直接寫成：
    *   $X_t = X_0 \cdot \sqrt{\bar{\alpha}_t} + \text{Noise} \cdot \sqrt{1 - \bar{\alpha}_t}$。
*   **意義：** 這代表當只需要 $X_t$ 的分佈，給定 $X_0$ 時，你不需要 $T$ 步取樣，只需做一次取樣 $X_t$ 即可。這省去了 $T$ 次取樣的時間。

### 三、 變分下界 (ELBO) 的分解與簡化![image](https://hackmd.io/_uploads/SkG03KPCle.png)

![image](https://hackmd.io/_uploads/BJunpzrAxe.png)

*   Diffusion Model 的訓練目標是最大化 $\log P_{\theta}(X_0)$ 的變分下界 (Lower Bound, L)。
*   經過一系列推導，下界 $L$ 被拆分為三個主要項：
    1.  $L_0$ (與 $q(X_1|X_0)$ 相關的項)。
    2.  $L_T = {KL}(q(X_T|X_0) || P(X_T))$。
    3.  $L_{t>0}$ (包含 $\sum_{t=2}^T Eq(xt|x0)[KL(q(X_{t-1}|X_t, X_0) || P(X_{t-1}|X_t))]$ 的求和項)。
*   **忽略項 $L_T$：**
    *   $L_T$ 這一項可以被忽略，因為它**與網路參數 $\theta$ 無關**。
    *   $P(X_T)$ 是從高斯分佈取樣的純雜訊，網路無法影響。
    *   $q(X_T|X_0)$ 是固定的 Diffusion 順向過程，與網路訓練無關。
*   因此，訓練只需要關注最小化 $L_0$ 和 $L_{t>0}$ 的 KL 散度項。

### 四、 核心 KL 散度項的求解與最小化
![image](https://hackmd.io/_uploads/Hy0a6GH0lx.png)
![image](https://hackmd.io/_uploads/Byo0pzB0lg.png)

*   **核心目標：** 最小化 ${KL}(q(X_{t-1}|X_t, X_0) || P_{\theta}(X_{t-1}|X_t))$。
    *   $P_{\theta}(X_{t-1}|X_t)$ 是由網路參數 $\theta$ 控制的去雜訊過程。
    *   $q(X_{t-1}|X_t, X_0)$ 是固定好的目標分佈。
*   **計算目標分佈 $q(X_{t-1}|X_t, X_0)$：**
    *   這項的含義是：給定乾淨的圖像 $X_0$ 和加雜訊到 $t$ 步的 $X_t$，中間一步 $X_{t-1}$ 的分佈是什麼？
    *   透過貝氏定理 (Bayes' Theorem) 和機率分解， $q(X_{t-1}|X_t, X_0)$ 可以被分解成三個已知項的組合：$q(X_t|X_{t-1})$, $q(X_{t-1}|X_0)$, 和 $q(X_t|X_0)$。
    *   由於這三項都是高斯分佈，經過複雜的代數推導後，可以證明 $q(X_{t-1}|X_t, X_0)$ 仍然是高斯分佈。
    *   該高斯分佈的平均值 $\mu_q$ 是 $X_0$ 和 $X_t$ 的某種權重內插 (interpolation)。
*   **最小化 KL 散度：**
    *   $q(X_{t-1}|X_t, X_0)$ 的平均值 $\mu_q$ 和變異數 $\Sigma_q$ 都是固定、不能動的。
    *   模型 $P_{\theta}(X_{t-1}|X_t)$ 也被假設為高斯分佈，且通常其變異數 $\Sigma_{\theta}$ 被固定（不考慮網路預測變異數）。
    *   因此，要讓這兩個高斯分佈 $q$ 和 $P_{\theta}$ 越接近越好，唯一的策略就是讓它們的**平均值 $\mu_q$ 和 $\mu_{\theta}$ 越接近越好**。
    *   實際操作中，就是訓練網路，讓 $P_{\theta}(X_{t-1}|X_t)$ 的平均值（由 Denoise Model 輸出）去逼近 $q(X_{t-1}|X_t, X_0)$ 的固定平均值。

### 五、 訓練目標簡化：預測雜訊 $\epsilon$


![image](https://hackmd.io/_uploads/BkdFRFvCel.png)

![image](https://hackmd.io/_uploads/BJKy0fB0lg.png)

*   $q(X_{t-1}|X_t, X_0)$ 的平均值 $\mu_q$ 雖然是 $X_0$ 和 $X_t$ 的內插，但 $X_0$ 對網路來說是不可知的。
*   利用 $X_t$ 與 $X_0$ 的一步到位關係式，我們可以將 $X_0$ 表示為 $X_t$ 和雜訊 $\epsilon$ 的函數。
*   將這個 $X_0$ 替換進 $\mu_q$ 的公式中，經過代數運算後，最終推導結果顯示：
    *   Denoise Model 真正需要預測的目標，只與 $\epsilon$（當初混入的雜訊）有關。
    *   **結論：** 網路的輸出（預測的平均值）只須用來預測**混入 $X_t$ 中的那個雜訊 $\epsilon$**。所有的 $\alpha_t$, $\bar{\alpha}_t$ 等項都是常數，只需計算即可。
    *   這個簡化使得訓練演算法變得非常簡單，與我們在概念上討論的訓練流程一致：訓練網路 $D_{\theta}(X_t, t)$ 去預測 $\epsilon$。

### 六、 $\alpha$ 和 $\beta$ 參數的設置

*   $\alpha$ 和 $\beta$ 在 Diffusion Model 中被視為事先設定好的超參數 (hyper parameter)。
*   DDPN (原始論文) 曾嘗試學習 $\alpha/\beta$，但發現效果沒有更好，因此決定不學習這些參數。
*   通常 $\beta$ 會被設定為從一個小的值線性增加到一個大的值。
*   後續有論文如 Improved DDPN 試圖找出更好的 $\beta$ 安排方式 。
### 【生成式AI】Diffusion Model 原理剖析 (4/4) (optional)大綱

1.  **影像生成中的抽樣與最大機率選擇**
    *   為何在生成時不選機率最大的輸出（Argmax）。
    *   在語言模型中，Argmax 導致結果單調。
    *   Diffusion Model 反向過程需加入額外雜訊的原因。
2.  **Diffusion Model 在不同模態的應用挑戰**
    *   語音：與圖像應用相似。
    *   文字：面臨離散數據問題，解決方案是加雜訊於嵌入層（Embedding）或使用其他雜訊機制。
3.  **Diffusion Model 成功的關鍵**
    *   將 Auto-regressive 模型的高品質優勢融入 Non-Auto-regressive 結構。
    *   透過迭代式的去遮罩（Masking）方法，實現 **Re-progressive** 生成。

---


### 一、 影像生成中的抽樣與最大機率選擇
![image](https://hackmd.io/_uploads/ry5-AzBAxl.png)
*   **採樣與取定（Argmax）的差異：** 在生成過程中，模型通常是透過從一個分佈中抽樣（Sample）來決定下一個輸出，而非直接選取機率最高的結果（取定/Argmax）。
*   **在語言模型上的案例：** 這個問題在語言模型（如 GPT）中早已被探討。如果模型每次都選擇機率最大的詞彙，輸出的文章雖然符合語法，但會缺乏多樣性或有趣的表達。 這是因為機率最大的詞彙往往是最中間、最無聊的詞彙，但在寫文章時，有時人們會選擇機率不是最大的詞彙來增加創意。
*   **Diffusion Model 反向過程的玄機：** 在 Diffusion Model 的圖像生成過程（反向過程）中，除了計算圖像 $X_{t-1}$ 的平均值外，演算法還要求**額外加入一個新的雜訊**。
    *   雖然這看起來與去雜訊（Denoising）的直觀概念相悖，但在實際操作中，為了達到更好的生成結果和多樣性，需要這個額外的雜訊（即在每次生成時也進行抽樣）。

### 二、 Diffusion Model 在不同模態的應用挑戰

*   **語音應用：** Diffusion Model 的概念可以應用於語音合成 或語音轉換等領域。 在語音上，它將一維的語音波形或梅爾頻譜 (Mel-spectrogram) 視為類似圖像的特徵，並對其進行 Diffusion 處理，基本原理與圖像上的應用相似。
*   **文字應用面臨的挑戰：** Diffusion Model 很難直接應用於文字或其他離散資料。
    *   **原因：** 文字是離散的詞彙 (Tokens)，不像連續的像素值或語音特徵。你無法對離散的文字加高斯雜訊，並期望它們最終變成純高斯分佈。
    *   **解決方案——潛在空間與嵌入層：** 為了繞過離散數據的限制，解決方案通常是**不將雜訊加在文字本身**，而是將文字轉換成連續的**嵌入層 (Embedding)** 或**潛在向量**，然後在這些連續的數值空間上執行 Diffusion。 知名的 Latent Diffusion Model 就是採用了這個概念。
    *   **解決方案——其他雜訊類型：** 另一個系列的方法是使用其他種類的雜訊，例如，使用遮罩 (Mask) 來取代高斯雜訊。這些模型會將 $X_T$（最終狀態）視為完全被遮罩的序列，然後透過迭代來逐漸去遮罩，將其恢復成 $X_0$（乾淨的文字）。

### 三、 Diffusion Model 成功的關鍵：結合 Auto-regressive Model 與 Non-Auto-regressive Model 的優勢

*   **模型融合：** Diffusion Model 成功的根本原因之一，可能在於它將 **Auto-regressive Model** 的優勢（如能產生高品質、高多樣性的結果）融入了 **Non-Auto-regressive Model** 的架構中。
*   **Auto-regressive Model 的缺點：** 傳統的 Auto-regressive Model 模型（如早期的 GPT）在生成圖片時，需要逐個像素或逐個 Token 依序生成，導致速度非常慢，生成過程非常耗時。
*   **DDPM 的迭代與效率：** DDPM 雖然是迭代模型，但它利用其結構優勢，能夠將 Auto-regressive Model 模型的高品質特性帶入，並且只需較少的迭代次數就能產生與 Auto-regressive Model 模型一樣好的結果，大大提升了生成效率。
*   **Masked Prediction Model 例子：**
    *   訓練時是將圖片的部分 Token 替換成 `[MASK]`，訓練模型將其還原（去遮罩）。
    *   **生成流程 (Re-progressive)：** 生成圖像時，從一個所有 Token 都是 `[MASK]` 的狀態開始，輸入 Decoder 進行預測。模型會預測所有 Token 的機率，並保留那些信賴度分數最高的 Token；信賴度低的則被**重新遮罩 (Re-mask)**。
    *   這種透過迭代和不斷修正的方式，被稱為 **Re-progressive** 的生成方法，它利用了 Auto-regressive Model 的優勢來克服一次性（一次到位）Non-Auto-regressive Model 模型難以決定多樣性結果的問題，從而解決了模型在生成多種可能性時難以起決定作用的困境。


---
其他課程

[【2023 生成式AI】01~03 ChatGPT 原理剖析](https://hackmd.io/@JuitingChen/SyUtDmaalx)
[【2023 生成式AI】04~06 文字冒險和機器學習原理](https://hackmd.io/@JuitingChen/S1wwdXa6ge)
[【2023 生成式AI】07~08 生成式學習策略和可使用工具的AI](https://hackmd.io/@JuitingChen/BJPQtQpagx)
[【2023生成式AI】09~11 Finetuning vs. Prompting](https://hackmd.io/@JuitingChen/H15otQpael)
[【2023生成式AI】12~15 大模型 + 大資料 = 神奇結果？](https://hackmd.io/@JuitingChen/rJ1Gi7a6le)
[【2023生成式AI】16~18 圖像生成模型 和 Stable Diffusion、DALL-E、Imagen 背後共同的套路](https://hackmd.io/@JuitingChen/HJnB2QTagg)
[【2023 生成式AI】19~22 Diffusion Model 原理剖析 ](https://hackmd.io/@JuitingChen/SyBx6mp6xe)
[【2023生成式AI】23~25 低成本復刻ChatGPT、ChatGPT自我反省、AI村莊](https://hackmd.io/@JuitingChen/r10hAsrCxe)
[【2023生成式AI】26~27  用語言模型來解釋語言模型](https://hackmd.io/@JuitingChen/SJ0aYiwAeg)
[【2023生成式AI】28~30 FrugalGPT 用省錢的方式來使用 ChatGPT](https://hackmd.io/@JuitingChen/rypFqnPRll)