擴散模型(Diffusion Model)是近年來生成式深度學習中非常重要的一類模型。與生成對抗網絡(GAN)通過“生成器—判別器”的對抗訓練生成樣本不同,擴散模型采用另一種思路:先把真實數據逐步加噪聲,直到它接近純隨機噪聲;再訓練神經網絡學習反向去噪過程,從隨機噪聲一步步還原出清晰樣本。
擴散模型的核心思想可以概括為:
? 前向過程:把真實數據逐步加噪,變成接近純噪聲的數據
? 反向過程:訓練模型逐步去噪,從噪聲還原出真實樣本
例如,在圖像生成任務中,擴散模型可以從一張隨機噪聲圖開始,經過多步去噪,逐漸生成一張清晰圖像。文本生成圖像、圖像編輯、圖像修復、超分辨率等任務,都可以在擴散模型框架下實現。
一、為什么需要擴散模型
生成模型的目標,是學習真實數據分布,并生成新的樣本。
在 GAN 中,生成器直接把隨機噪聲映射為圖像:
其中:
? z 表示隨機噪聲
? G 表示生成器
? x? 表示生成樣本
這種方式很直接,但訓練中需要同時平衡生成器和判別器。若判別器過強,生成器可能難以學習;若生成器只學會少數典型樣本,又可能出現模式崩塌。
![]()
圖 1:從 GAN 到擴散模型
擴散模型換了一種思路。
它不要求模型一步從噪聲生成完整圖像,而是把生成過程拆成很多小步驟:
純噪聲 → 稍微清晰一點 → 更清晰一點 → 接近真實圖像 → 清晰圖像
從直觀角度看,擴散模型更像是在學習:如何一步一步把噪聲擦掉。
這種思想帶來幾個好處:
? 訓練目標相對穩定
? 不需要判別器進行對抗訓練
? 生成樣本多樣性較好
? 可以自然支持圖像編輯、修復和條件生成
? 生成過程具有較清晰的概率建模解釋
當然,擴散模型也有代價。由于生成時通常需要多步迭代去噪,采樣速度往往比 GAN 慢。因此,如何提高采樣效率,是擴散模型的重要研究方向之一。
二、擴散模型的基本結構
擴散模型通常包含兩個過程:
? 前向擴散過程
? 反向去噪過程
![]()
圖 2:擴散模型的基本結構
1、前向擴散:逐步加入噪聲
前向擴散過程從真實樣本 x? 開始,逐步向其中加入高斯噪聲,得到一系列越來越模糊、越來越接近純噪聲的中間狀態:
x? → x? → x? → ... → x? → ... → x_T
其中:
? x? 表示真實數據,例如一張真實圖像
? x? 表示第 t 步加噪后的數據
? x_T 表示接近純噪聲的數據
? T 表示總擴散步數
在圖像任務中,x? 是清晰圖像;隨著 t 增大,圖像逐漸被噪聲覆蓋;當 t 足夠大時,x_T 看起來幾乎就是隨機噪聲。
可以簡單理解為:
前向擴散 = 有控制地破壞數據
2、反向去噪:逐步還原數據
反向去噪過程則從隨機噪聲 x_T 開始,逐步去除噪聲,最終生成清晰樣本:
x_T → x_{T-1} → ... → x? → ... → x? → x?
這個反向過程不是人工寫死的,而是由神經網絡學習出來的。
模型在訓練時學習:給定帶噪圖像 x? 和時間步 t,預測其中的噪聲成分; 然后在生成時根據預測噪聲一步步修正圖像,使它越來越接近真實數據。
可以簡單理解為:
反向去噪 = 學會逐步修復數據
3、噪聲預測網絡
擴散模型中常用一個神經網絡來預測噪聲。這個網絡通常記為:
其中:
? εθ 表示由參數 θ 控制的噪聲預測網絡
? x? 表示第 t 步的帶噪數據
? t 表示時間步
? εθ(x?,t) 表示模型預測出的噪聲
在圖像擴散模型中,噪聲預測網絡常用 結構。U-Net 能夠同時利用局部細節和多尺度語義信息,因此非常適合圖像去噪任務。
不過,為了理解擴散模型的基本原理,本文后面的 PyTorch 示例會使用一個簡化網絡完成 MNIST 風格圖像去噪與生成演示。
三、前向加噪過程
擴散模型的前向過程,是一個固定的、無需學習的加噪過程。它按照預設的噪聲強度表,在每一步向數據中加入少量噪聲。
![]()
圖 3:前向擴散過程:從清晰圖像到純噪聲
常見寫法是:
其中:
? q(x?|x???) 表示從 x??? 生成 x? 的前向加噪分布
? β? 表示第 t 步加入噪聲的強度
? I 表示單位矩陣
? N 表示高斯分布
? √(1 ? β?)x??? 表示保留一部分上一時刻的數據
? β?I 表示加入的高斯噪聲方差
從直觀角度看,每一步都做兩件事:
? 保留一部分原始信息
? 加入一部分隨機噪聲
為了簡化公式,通常定義:
并定義累計乘積:
其中:
? α? 表示第 t 步保留信號的比例
? α?? 表示從第 1 步到第 t 步累計保留的信號比例
? ∏ 表示連乘
一個非常重要的性質是:可以直接從 x? 采樣得到任意時間步的 x?,而不必真的一步一步加噪。
公式為:
其中:
? x? 表示原始真實樣本
? x? 表示第 t 步的帶噪樣本
? α?? 表示累計保留信號比例
? ε 表示從標準正態分布采樣的噪聲
? √α??x? 表示保留下來的原始信號
? √(1 ? α??)ε 表示加入的噪聲部分
這條公式非常關鍵。它說明訓練時可以隨機選擇一個時間步 t,直接把真實圖像 x? 加噪成 x?,然后讓模型學習預測其中的噪聲 ε。
四、反向去噪過程
前向過程是已知的加噪過程,反向過程則是需要學習的去噪過程。
![]()
圖 4:反向去噪過程:從隨機噪聲到清晰圖像
理想情況下,如果我們知道每一步如何從 x? 還原到 x???,就可以從純噪聲 x_T 開始,一步步生成清晰樣本。
反向過程可以寫成:
其中:
? pθ(x???|x?) 表示模型學習到的反向去噪分布
? θ 表示神經網絡參數
? x? 表示當前帶噪樣本
? x??? 表示去噪一步后的樣本
實際訓練中,常見做法不是讓模型直接預測 x???,而是讓模型預測前向過程中加入的噪聲 ε:
其中:
? ε 表示真實加入的噪聲
? εθ(x?,t) 表示模型預測的噪聲
? ≈ 表示希望二者盡量接近
為什么預測噪聲有用?
因為如果模型知道 x? 中有多少噪聲,就可以從 x? 中減去這部分噪聲,得到更干凈的樣本估計。
可以簡單理解為:模型不是直接畫出圖像,而是學習判斷“這張圖里哪些部分是噪聲”。
生成時,模型會重復執行:
預測噪聲 → 去掉一部分噪聲 → 得到更清晰的圖像
直到從 x_T 逐步得到 x?。
五、擴散模型的訓練目標
擴散模型的訓練目標可以非常簡潔地表達為:讓模型預測的噪聲接近真實加入的噪聲。
![]()
圖 5:擴散模型的訓練目標:預測噪聲
訓練時,從真實圖像 x? 中采樣一個批次,再隨機采樣時間步 t 和噪聲 ε,構造帶噪圖像 x?:
然后讓模型預測噪聲:
其中:
? ε? 表示模型預測的噪聲
? ε 表示真實加入的噪聲
? εθ 表示噪聲預測網絡
常用損失函數是均方誤差:
其中:
? L 表示訓練損失
? E 表示對樣本、時間步和噪聲取期望
? ε 表示真實噪聲
? εθ(x?,t) 表示模型預測噪聲
? || · ||2 表示平方誤差
從機器學習角度看,擴散模型訓練本質上是一個監督學習問題:
? 輸入:帶噪圖像 x? 和時間步 t
? 目標:真實噪聲 ε
? 模型:預測噪聲 εθ(x?,t)
? 損失:預測噪聲與真實噪聲之間的均方誤差
這也是擴散模型訓練相對穩定的重要原因:它不像 GAN 那樣需要同時平衡生成器和判別器,而是直接優化一個噪聲預測目標。
六、擴散模型的采樣過程
訓練完成后,擴散模型可以從隨機噪聲開始生成樣本。
![]()
圖 6:擴散模型的采樣過程
采樣過程大致如下:
1. 從標準正態分布采樣 x_T
2. 從 t = T 開始倒序迭代
3. 用模型預測當前圖像中的噪聲
4. 根據預測噪聲計算 x_{t-1}
5. 重復直到得到 x_0
可以用偽代碼表示為:
其中:
? x 初始為隨機噪聲
? model(x,t) 表示噪聲預測網絡
? denoise_step 表示一次反向去噪更新
? T 表示擴散步數
擴散模型生成圖像的過程通常是逐步細化的:
→ 清晰圖像這與 GAN 的“一步生成”不同。GAN 通常直接從 z 輸出圖像,而擴散模型通常需要多步采樣。
因此,擴散模型的主要優勢和代價也很清楚:
? 優勢:訓練穩定,生成質量高,多樣性好
? 代價:采樣通常較慢,需要多步迭代
七、PyTorch 實現:簡化版擴散模型生成手寫數字
下面使用 PyTorch 構建一個簡化版擴散模型,用于理解擴散模型的基本訓練流程。
![]()
圖 7:擴散模型生成手寫數字的訓練與采樣流程
為了突出核心思想,示例使用 MNIST 手寫數字數據集,并用一個簡單的卷積網絡預測噪聲。真實高質量擴散模型通常會使用 U-Net、注意力機制和更復雜的噪聲調度方法。
1、導入庫
這里使用:
? DataLoader 按批量讀取數據
? torchvision.datasets 加載 MNIST 數據集
? torchvision.transforms 處理圖像
2、設置超參數
其中,T 表示擴散總步數。
為了讓示例運行更輕量,這里使用 T = 200。真實擴散模型中,擴散步數可能更大。
3、準備 MNIST 數據集
這里把 MNIST 圖像歸一化到大致 ?1 到 1 的范圍,便于和高斯噪聲配合。
4、定義噪聲調度表
擴散模型需要為每個時間步設置噪聲強度 β?。這里使用簡單的線性調度:
其中:
? betas 表示每一步加入噪聲的強度
? alphas 表示每一步保留信號的比例
? alpha_bars 表示累計保留信號比例
對應前文公式中的:
5、實現前向加噪函數
根據公式:
實現前向加噪函數:
其中:
? x0 表示真實圖像
? t 表示每張圖像對應的隨機時間步
? noise 表示真實加入的噪聲
? xt 表示加噪后的圖像
這里的 t 是一個批量向量,因此 alpha_bars[t] 會為每個樣本取出對應時間步的 α??。
6、定義時間嵌入
噪聲預測網絡不僅需要看到帶噪圖像 x?,還需要知道當前時間步 t。因為不同 t 對應不同噪聲強度。
為了簡化實現,可以使用一個嵌入層把時間步 t 轉換為向量:
其中:
? T 表示時間步總數
? embed_dim 表示時間嵌入維度
? embedding(t) 把整數時間步轉換為向量
真實擴散模型中,常用正弦時間嵌入或更復雜的時間編碼方式。這里使用 nn.Embedding 是為了方便初學者理解。
7、定義噪聲預測網絡
下面定義一個簡化卷積網絡,用于預測噪聲:
這個網絡的輸入包括:
? 帶噪圖像 x?
? 時間步 t 的嵌入表示
輸出是:與 x? 形狀相同的噪聲預測圖。也就是說,模型要為每個像素位置預測噪聲值。
創建模型:
這里使用 MSELoss,因為訓練目標是讓預測噪聲接近真實噪聲。
8、訓練擴散模型
訓練流程如下:
這段代碼體現了擴散模型訓練的核心閉環:
真實圖像 → 隨機時間步 → 加噪得到 x? → 模型預測噪聲 → 計算 MSE → 反向傳播 → 更新參數
其中:
? t 是隨機采樣的時間步
? add_noise() 負責構造帶噪圖像
? model(xt,t) 預測噪聲
? loss 衡量預測噪聲和真實噪聲之間的差距
9、簡化采樣函數
訓練完成后,可以從隨機噪聲開始逐步去噪。
下面給出一個簡化采樣函數:
這個采樣過程從隨機噪聲開始,按時間步倒序更新。每一步都用模型預測噪聲,并根據預測結果修正當前圖像。
需要注意:這是教學版簡化實現,目的是幫助理解擴散模型的基本流程。真實高質量擴散模型會使用更精細的反向方差設置、噪聲調度、U-Net 結構和更復雜的采樣器。
10、生成并顯示圖像
如果模型訓練足夠,生成圖像會逐漸呈現 MNIST 手寫數字的形狀。
八、擴散模型的適用場景、局限與擴展方向
擴散模型是當前生成式深度學習中的重要模型之一,尤其在圖像生成、圖像編輯和多模態生成任務中具有重要影響。
![]()
圖 8:擴散模型的適用場景、局限與擴展方向
1、適用場景
擴散模型常用于:
? 圖像生成
? 文本生成圖像
? 圖像修復
? 圖像超分辨率
? 圖像編輯
? 風格遷移
? 視頻生成
? 三維內容生成
其中,文本生成圖像是擴散模型最具代表性的應用方向之一。模型可以在文本條件的引導下,從噪聲逐步生成符合描述的圖像。
2、主要優勢
擴散模型的主要優勢包括:
? 訓練過程相對穩定
? 生成樣本質量高
? 樣本多樣性較好
? 不容易出現 GAN 式模式崩塌
? 易于結合條件信息進行可控生成
? 具有較清晰的逐步去噪解釋
擴散模型的思想非常直觀:先學習如何去噪,再通過不斷去噪完成生成。
3、主要局限
擴散模型也有明顯局限:
? 采樣通常較慢
? 訓練和推理計算成本較高
? 高質量圖像生成通常需要復雜網絡結構
? 對噪聲調度、采樣器和條件控制方式較敏感
? 生成過程多步迭代,不如 GAN 一步生成直接
因此,擴散模型雖然生成質量很強,但在實際應用中仍然需要考慮效率、成本和部署難度。
4、擴展方向
從基礎擴散模型出發,可以繼續學習:
? DDPM:去噪擴散概率模型
? DDIM:更高效的確定性采樣方法
? Latent Diffusion:在潛空間中進行擴散,降低計算成本
? Stable Diffusion:基于潛空間擴散的大規模文本生成圖像模型
? Classifier Guidance:用分類器引導生成方向
? Classifier-Free Guidance:無需單獨分類器的條件引導方法
? ControlNet:通過邊緣、姿態、深度圖等條件控制生成結果
這些模型和技術都可以從一個基本問題出發理解:如何更高效、更可控地從噪聲生成高質量數據?
小結
擴散模型通過“前向加噪—反向去噪”的方式學習數據生成過程。訓練時,模型學習預測加入到真實樣本中的噪聲;生成時,模型從隨機噪聲出發,逐步去噪得到清晰樣本。擴散模型訓練穩定、生成質量高、多樣性好,是理解現代圖像生成和多模態生成模型的重要基礎。
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.