5種生成模型(VAE、GAN、AR、Flow 和 Diffusion)的對比梳理 + 易懂講解 + 代碼實現

目錄

1?變分自編碼器(VAE)?

1.1 概念

1.2 訓練損失

1.3 VAE 的實現

2?生成對抗網絡(GAN)?

2.1 概念

2.2 訓練損失

a. 判別器的損失函數

b. 生成器的損失函數

c. 對抗訓練的動態過程

2.3 GAN 的實現

3?自回歸模型(AR)

3.1 概念

3.2 訓練過程

a.核心思想: 用歷史預測未來

b. Transformer 的損失計算:交叉熵監督預測

c. 損失計算的具體步驟

3.2?代碼實現(Transformer-AR)?

4?流模型(Flow)?

4.1 概念

4.2 訓練過程

4.2 代碼實現(Flow)

5?擴散模型(Diffusion)?

5.1 概念

5.2 訓練過程

5.2?代碼實現(Diffusion)

6 小結


隨著Sora、diffusion、GPT等模型的大火,深度生成模型又成為了大家的焦點。

深度生成模型是一類強大的機器學習工具,它可以從輸入數據學習其潛在的分布,進而生成與訓練數據相似的新的樣本數據,它在計算機視覺、密度估計、自然語言和語音識別等領域得到成功應用, 并給無監督學習提供了良好的范式。

本文匯總了常用的深度學習模型,深入介紹其原理及應用:VAE(變分自編碼器)、GAN(生成對抗網絡)、AR(自回歸模型 如 Transformer)、Flow(流模型)和 Diffusion(擴散模型)

模型核心目標原理優點缺點應用場景
?VAE學習潛在空間分布,編碼器-解碼器生成與訓練數據相似的樣本基于變分推斷,將輸入數據映射到潛在空間的正態分布,解碼器重構數據,優化重構誤差與KL散度

訓練穩定,支持潛在空間插值;生成樣本多樣化

生成圖像模糊;KL散度約束可能導致信息丟失

數據填充、特征提取、圖像修復
?GAN通過生成器與判別器的對抗訓練,生成與真實數據難分的樣本生成器從噪聲生成假數據,判別器區分真假;兩者通過零和博弈優化,最終達到納什均衡

生成圖像細節豐富;單步推理速度快

訓練不穩定;生成多樣性不足;需精細調參

藝術創作、風格遷移、圖像超分辨率
?AR自回歸地生成序列數據,逐個預測下一個元素的概率分布基于條件概率分解(如Transformer),自注意力機制捕捉長程依賴,逐像素/逐token生成數據

建模能力強,支持長序列生成;訓練穩定

生成速度慢 (逐步采樣);高維數據計算成本高

文本生成、時序預測、圖像生成
?Flow可逆變換將簡單分布轉為復雜數據分布,實現精確概率密度估計設計可逆神經網絡層,利用變量變換公式計算數據對數似然,優化雅可比行列式。

支持精確密度估計;生成與重建可逆

高維數據下變換設計復雜;計算雅可比行列式開銷大語音合成、密度估計、圖像生成
?Diffusion通過逐步去噪過程從高斯噪聲重建數據分布,生成高質量樣本正向擴散(逐步加噪)與逆向擴散(學習去噪)結合,基于馬爾可夫鏈建模條件概率

生成質量最高;訓練穩定

推理速度慢;顯存占用高

高清圖像生成、多模態/視頻生成

1?變分自編碼器(VAE)?

1.1 概念

VAE是在自編碼器(Auto-Encoder)的基礎上,結合變分推斷(Variational Inference)和貝葉斯理論提出的一種深度生成模型。VAE的目標是學習一個能夠生成與訓練數據相似樣本的模型。它假設隱變量服從某種先驗分布(如標準正態分布),并通過編碼器將輸入數據映射到隱變量的后驗分布,再通過解碼器將隱變量還原成生成樣本。

補充

1. 先驗分布的概念

假設我們要通過身高預測體重,貝葉斯理論會要求我們先對體重有一個 "初始認知"(比如平均體重 60kg,波動范圍 ±10kg)。這個初始認知就是先驗分布,它反映了我們在看到具體數據前對某個變量的信念

2. VAE 中的先驗設計

在 VAE 中,隱變量(latent variable)z 被假設服從某種簡單分布(通常是標準正態分布 N (0,1))。這就像我們在做圖像生成任務時,先假設所有圖像的潛在特征(比如形狀、顏色)都符合 "常見特征分布"

1.2 訓練損失

VAE的訓練損失函數包括?重構損失(如均方誤差)和?KL散度(衡量潛在分布與標準正態分布的差異)

損失函數

  • 重構項:衡量解碼器重建輸入數據的能力(如均方誤差或交叉熵)
  • KL散度項:約束潛在分布?q(z∣x)?與先驗分布?p(z)(通常為標準正態分布)的相似性,平衡參數為?β(如 β-VAE)

優化目標:最大化證據下界(ELBO),同時保證潛在空間的結構化和連續性

補充

1. 損失函數的兩大核心目標

VAE 的損失函數像一個 “雙面裁判”,同時監督兩個目標:

  • 重建能力:"你生成的圖片要和原圖差不多!"(重構損失)
  • 規則意識:"你不能亂想!生成規則要符合常識!"(KL 散度)

2. 重構損失:像照鏡子的誤差

  • 作用:確保解碼器能把隱變量 z 還原成接近原圖的樣子。
  • 數學形式
    • 圖像任務常用均方誤差(MSE):計算每個像素點的誤差平方和。
    • 文本任務常用交叉熵:衡量生成分布與真實分布的差異。

3. KL 散度:用規則約束想象力

  • 作用:強制隱變量 z 的分布接近先驗(如正態分布)。
  • 數學意義
    KL 散度 = 0 時,后驗分布 q (z|x) 和先驗 p (z) 完全一致;數值越大,說明模型越 "不守規矩"。

4. β-VAE:用旋鈕調節規則強度

  • β 參數:像音量旋鈕一樣調節 KL 散度的權重。
    • β=0 時:完全不管規則,可能生成奇形怪狀的樣本(如貓的耳朵長在尾巴上)。
    • β 很大時:過于遵守規則,生成樣本千篇一律(所有貓都長一個樣)。

5. ELBO:為什么要同時優化這兩個目標?

  • ELBO 公式
    ELBO = 重構損失 - KL 散度
    (更準確的數學表達需要結合概率模型,但這里簡化理解)
  • 核心邏輯
    模型需要同時做到:
    1. 記住訓練數據的特征(重構損失小)
    2. 把這些特征壓縮到 "常識空間"(KL 散度小)
      這就像學習繪畫時,既要準確臨摹(重構),又要符合透視、比例等規則(KL 約束)。

詳細介紹:

【VAE學習筆記】全面通透地理解VAE(Variational Auto Encoder)_vae架構-CSDN博客

1.3 VAE 的實現

import torch
import torch.nn as nn
import torch.nn.functional as Fclass VAE(nn.Module):def __init__(self, input_dim=784, hidden_dim=400, latent_dim=20):super(VAE, self).__init__()# 編碼器:輸入 → 隱藏層 → 均值和方差self.encoder = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, latent_dim * 2)  # 輸出均值和對數方差)# 解碼器:潛在變量 → 隱藏層 → 重構輸入self.decoder = nn.Sequential(nn.Linear(latent_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, input_dim),nn.Sigmoid()  # 輸出像素值在[0,1]區間)def reparameterize(self, mu, log_var):"""重參數化技巧:從N(μ, σ2)采樣潛在變量z"""std = torch.exp(0.5 * log_var)  # 計算標準差eps = torch.randn_like(std)      # 生成隨機噪聲return mu + eps * std           # 返回采樣結果def forward(self, x):# 編碼:x → μ和logσ2h = self.encoder(x)mu, log_var = torch.chunk(h, 2, dim=1)  # 分割為均值和方差# 采樣潛在變量zz = self.reparameterize(mu, log_var)# 解碼:z → 重構xx_recon = self.decoder(z)return x_recon, mu, log_var# 損失函數:重構損失 + KL散度
def loss_function(x_recon, x, mu, log_var):recon_loss = F.binary_cross_entropy(x_recon, x, reduction='sum')  # 重構損失(交叉熵)kl_div = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp()) # KL散度return recon_loss + kl_div

2?生成對抗網絡(GAN)?

2.1 概念

GAN由兩部分組成:生成器(Generator)判別器(Discriminator)

  • 生成器的任務是生成盡可能接近真實數據的假數據
  • 判別器的任務是區分輸入數據是真實數據還是生成器生成的假數據
  • 二者通過相互競爭與對抗,共同進化,最終生成器能夠生成非常接近真實數據的樣本

訓練過程:

  1. 判別器接受真實數據和生成器生成的假數據,進行二分類訓練,優化其判斷真實或生成數據的能力

  2. 生成器根據判別器的反饋,嘗試生成更加真實的假數據以欺騙判別器

  3. 交替訓練判別器和生成器,直到判別器無法區分真實和生成數據,或達到預設的訓練輪數

2.2 訓練損失

a. 判別器的損失函數

  • 判別器的目標是最大化正確判斷的概率:
    • 真實樣本:輸出 1(正確識別為真)。
    • 生成樣本:輸出 0(正確識別為假)。
  • 數學表達

  • 直觀解釋: 判別器的損失是兩部分交叉熵的總和
    1. 對真實樣本判斷錯誤的懲罰(希望 log D (x) 盡可能大,所以取負號)。
    2. 對生成樣本判斷錯誤的懲罰(希望 log (1-D (G (z))) 盡可能大,同樣取負號)。

b. 生成器的損失函數

  • 生成器的目標是讓判別器誤判生成樣本為真:
    • 生成樣本:讓判別器輸出 1(即讓 D (G (z)) 趨近于 1)。
  • 數學表達

  • 直觀解釋: 生成器的損失是判別器誤判生成樣本的懲罰(希望 log D (G (z)) 盡可能大,所以取負號)。

c. 對抗訓練的動態過程

  1. 第一輪訓練

    • 生成器隨機生成低質量樣本(如模糊的人臉)。
    • 判別器輕松識別真偽,損失很低(因為正確判斷了大部分樣本)。
    • 生成器的損失很高(因為判別器幾乎都識別為假)。
  2. 第二輪訓練

    • 生成器改進造假技術(如生成更清晰的人臉)。
    • 判別器被 “迷惑”,損失上升(因為部分生成樣本被誤判為真)。
    • 生成器的損失下降(因為判別器誤判增多)。
  3. 最終平衡

    • 生成器能生成足以以假亂真的樣本。
    • 判別器無法準確區分真偽,損失趨近于理論下限(交叉熵為 log (0.5))。

為什么使用交叉熵作為損失?

  • 交叉熵的特性
    它衡量兩個概率分布的差異。當判別器對真實樣本輸出 1、生成樣本輸出 0 時,交叉熵為 0(理想狀態)。
  • 對抗的本質
    生成器希望讓判別器的輸出分布與 “全 1” 分布更接近(對生成樣本),而判別器希望讓輸出分布與 “真實標簽分布” 更接近(對真實樣本為 1,生成樣本為 0)。

2.3 GAN 的實現

class Generator(nn.Module):"""生成器:從噪聲生成圖像"""def __init__(self, noise_dim=100, output_dim=784):super(Generator, self).__init__()self.model = nn.Sequential(nn.Linear(noise_dim, 256),nn.ReLU(),nn.Linear(256, 512),nn.ReLU(),nn.Linear(512, output_dim),nn.Tanh()  # 輸出范圍[-1,1],需在數據預處理時歸一化)def forward(self, z):return self.model(z).view(-1, 1, 28, 28)  # 輸出形狀為(B, 1, 28, 28)class Discriminator(nn.Module):"""判別器:區分真實圖像與生成圖像"""def __init__(self, input_dim=784):super(Discriminator, self).__init__()self.model = nn.Sequential(nn.Linear(input_dim, 512),nn.LeakyReLU(0.2),nn.Linear(512, 256),nn.LeakyReLU(0.2),nn.Linear(256, 1),nn.Sigmoid()  # 輸出概率值)def forward(self, x):x = x.view(-1, 784)  # 展平輸入return self.model(x)# 訓練循環示例(簡化版)
def train_gan():G = Generator()D = Discriminator()criterion = nn.BCELoss()# 交替優化生成器和判別器for real_images, _ in dataloader:# 訓練判別器real_labels = torch.ones(real_images.size(0), 1)fake_labels = torch.zeros(real_images.size(0), 1)# 判別器對真實圖像的損失real_loss = criterion(D(real_images), real_labels)# 生成假圖像并計算判別器損失z = torch.randn(real_images.size(0), 100)fake_images = G(z)fake_loss = criterion(D(fake_images.detach()), fake_labels)d_loss = real_loss + fake_loss# 反向傳播更新判別器d_loss.backward()optimizer_D.step()# 訓練生成器g_loss = criterion(D(fake_images), real_labels)  # 欺騙判別器g_loss.backward()optimizer_G.step()

3?自回歸模型(AR)

3.1 概念

算法原理:自回歸模型是一種基于序列數據的生成模型,它通過預測序列中下一個元素的值來生成數據。給定一個序列(x_1, x_2, ..., x_n),自回歸模型試圖學習條件概率分布(P(x_t | x_{t-1}, ..., x_1)),其中(t)表示序列的當前位置。AR模型可以通過循環神經網絡(RNN)Transformer 等結構實現。

如下以 Transformer 為例解析。

在深度學習的早期階段,卷積神經網絡(CNN)在圖像識別和自然語言處理領域取得了顯著的成功。然而,隨著任務復雜度的增加,序列到序列(Seq2Seq)模型和循環神經網絡(RNN)成為處理序列數據的常用方法。盡管RNN及其變體在某些任務上表現良好,但它們在處理長序列時容易遇到梯度消失和模型退化問題。為了解決這些問題,Transformer模型被提出。而后的GPT、Bert等大模型都是基于Transformer實現了卓越的性能!

3.2 訓練過程

a.核心思想: 用歷史預測未來

自回歸模型的核心是根據過去的輸出預測未來的輸出。例如:

  • 語言模型:根據 “今天天氣” 預測下一個詞 “很” 或 “熱”。
  • 時間序列預測:根據過去 10 天的股價預測第 11 天的股價。

Transformer 作為自回歸模型: 它通過注意力機制捕捉序列中每個位置與之前所有位置的依賴關系,最終輸出每個位置的預測概率分布。

b. Transformer 的損失計算:交叉熵監督預測

  • 輸入與輸出的關系
    • 輸入序列:例如句子 “我喜歡”。
    • 目標序列:將輸入右移一位,得到 “喜歡天”(假設任務是補全句子)。
    • 模型目標:對每個位置,預測下一個詞的概率分布。
  • 損失函數的數學表達

  • 直觀解釋: 交叉熵損失衡量模型預測的概率分布與真實標簽的差異。 例如:若真實詞是 “天”,而模型預測 “天” 的概率為 0.8,則貢獻的損失是?\(-\log(0.8) \approx 0.223\)。

c. 損失計算的具體步驟

  • (1) 嵌入與位置編碼

    • 將輸入詞(如 “我”“喜”“歡”)轉換為向量,并添加位置信息。
  • (2) 因果掩碼(Causal Masking)

    • 在自注意力計算時,屏蔽未來信息。例如:預測 “歡” 時,只能看到 “我” 和 “喜”,看不到 “天”。
  • (3) 多頭注意力與前饋網絡
    • 通過注意力機制整合歷史信息,生成每個位置的預測向量。
  • (4) 輸出層與概率分布

    • 將預測向量映射到詞表的概率分布(如 10000 個詞的 softmax 輸出)。
  • (5) 計算損失

    • 對比每個位置的預測概率與真實詞的 one-hot 編碼,累加交叉熵。

為什么使用交叉熵?

  • 分類問題的天然選擇:每個位置的預測是多分類任務(選擇詞表中的一個詞)

直觀案例:生成句子 “我喜歡晴天”

  • 輸入序列:["我", "喜", "歡"]
  • 目標序列:["喜", "歡", "晴"]
  • 損失計算
    1. 預測第一個位置(“我”)的下一個詞 “喜”,若正確則損失低
    2. 預測第二個位置(“喜”)的下一個詞 “歡”,若正確則繼續
    3. 預測第三個位置(“歡”)的下一個詞 “晴”,若錯誤則貢獻高損失

訓練中的優化技巧

  • 掩碼填充(Padding Mask):忽略輸入中的無效填充符號(如 “<pad>”)
  • 學習率調度:使用 warm-up 策略避免初始訓練時的不穩定
  • 梯度裁剪:防止長序列反向傳播時的梯度爆炸

與 VAE/GAN 損失的對比

模型損失類型監督方式
VAE重構損失 + KL 散度無監督(僅輸入數據)
GAN對抗損失(交叉熵 / 其他)無監督(僅輸入數據)
Transformer交叉熵(自回歸監督)有監督(需目標序列)
詳細解讀: 注意力機制 → Transformer+位置編碼(掩碼softmax - 查詢-鍵-值(Query-Key-Value,QKV)模式的理解)-CSDN博客

3.2?代碼實現(Transformer-AR)?

class TransformerAR(nn.Module):"""基于Transformer的自回歸圖像生成模型(Pixel Transformer)"""def __init__(self, vocab_size=256, embed_dim=128, num_heads=4, num_layers=3):super(TransformerAR, self).__init__()# 輸入:圖像展平為序列(如28x28 → 784像素)self.embedding = nn.Embedding(vocab_size, embed_dim)self.positional_enc = nn.Parameter(torch.randn(784, embed_dim))  # 位置編碼# Transformer編碼器(僅解碼模式)encoder_layer = nn.TransformerEncoderLayer(d_model=embed_dim, nhead=num_heads, dim_feedforward=512)self.transformer = nn.TransformerEncoder(encoder_layer, num_layers)# 輸出層:預測每個像素的概率分布self.fc = nn.Linear(embed_dim, vocab_size)def forward(self, x):# x形狀:(B, seq_len) 每個位置是像素值(0-255)x = self.embedding(x) + self.positional_enc  # 嵌入 + 位置編碼# 自注意力掩碼(防止看到未來信息)mask = torch.triu(torch.ones(784, 784), diagonal=1).bool()# Transformer處理out = self.transformer(x, mask=mask)# 預測每個像素的分布logits = self.fc(out)return logits# 生成示例(逐像素生成)
def generate(self, start_token, max_len=784):generated = start_tokenfor _ in range(max_len):logits = self(generated)next_pixel = torch.multinomial(F.softmax(logits[:, -1, :], dim=-1), 1)generated = torch.cat([generated, next_pixel], dim=1)return generated

4?流模型(Flow)?

4.1 概念

算法原理:流模型是一種基于可逆變換的深度生成模型。它通過一系列可逆的變換,將簡單分布(如均勻分布或正態分布)轉換為復雜的數據分布。

核心思想:用 “可逆魔法” 轉換分布 流模型就像一個 “數據變形大師”,它的核心是可逆變換。想象你有一團標準形狀的橡皮泥(簡單分布,如正態分布),通過一系列可逆向操作的手法(比如拉伸、折疊,但隨時能恢復原狀),把它捏成跟真實數據(如圖像、語音)分布一樣復雜的形狀。這種 “既能變形,又能變回去” 的特性,就是流模型的關鍵 —— 通過可逆函數,讓簡單分布 “流動” 成復雜數據分布。

生成過程類比:假設真實數據是 “貓咪圖片” 的分布,流模型先從簡單的正態分布中采樣一個向量z(像隨機選一塊標準形狀的橡皮泥),然后通過生成器G的一系列可逆變換(比如調整顏色、輪廓等操作),把z變成一張貓咪圖片x。因為變換可逆,未來也能通過反向操作,從貓咪圖片還原出最初的z。

4.2 訓練過程

這里直接放豆包對圖中損失函數的解讀

4.2 代碼實現(Flow)

class FlowModel(nn.Module):"""基于RealNVP的可逆流模型"""def __init__(self, input_dim=784, hidden_dim=512):super(FlowModel, self).__init__()# 定義可逆變換的參數網絡self.scale_net = nn.Sequential(nn.Linear(input_dim//2, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, input_dim//2))self.shift_net = nn.Sequential(nn.Linear(input_dim//2, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, input_dim//2))def forward(self, x):# 分割輸入為兩部分(x1和x2)x1, x2 = x.chunk(2, dim=1)# 計算縮放和偏移參數s = self.scale_net(x1)t = self.shift_net(x1)# 變換x2z2 = x2 * torch.exp(s) + t# 合并結果并計算對數行列式z = torch.cat([x1, z2], dim=1)log_det = s.sum(dim=1)  # 行列式的對數return z, log_detdef inverse(self, z):# 逆變換:從潛在變量恢復輸入z1, z2 = z.chunk(2, dim=1)s = self.scale_net(z1)t = self.shift_net(z1)x2 = (z2 - t) * torch.exp(-s)x = torch.cat([z1, x2], dim=1)return x# 損失函數:負對數似然
def flow_loss(z, log_det):prior_logprob = -0.5 * (z ?** 2).sum(dim=1)  # 標準高斯先驗return (-prior_logprob - log_det).mean()

5?擴散模型(Diffusion)?

5.1 概念

Diffusion Model(擴散模型)是一類深度生成模型,它的靈感來源于物理學中的擴散過程。與傳統的生成模型(如VAE、GAN)不同,Diffusion Model通過模擬數據從隨機噪聲逐漸擴散到目標數據的過程來生成數據。這種模型在圖像生成、文本生成和音頻生成等領域都有出色的表現。

a. 核心思想:模擬 “破壞 - 修復” 的物理過程

  • 擴散模型的靈感來自物理擴散現象,比如墨水滴入水中逐漸擴散
  • 它把這個過程用在數據生成里,分兩個階段:
    • 正向擴散(破壞):給干凈數據(如圖像)逐步加噪聲,讓數據從清晰變模糊,最后接近純噪聲(類似照片被雨水慢慢沖毀)
    • 反向擴散(修復):從純噪聲出發,一步步去除噪聲,恢復成清晰數據(類似修復老照片)通過學習這個過程,模型就能掌握數據的生成規律

b. 與其他模型的區別

  • 傳統生成模型(如 VAE、GAN)直接學習生成數據,而擴散模型像 “數據偵探”,通過拆解 “數據如何被噪聲破壞” 的過程,反向學會 “如何從噪聲還原數據”,生成的內容往往更細膩真實

5.2 訓練過程

聲。

圖中損失函數的核心是衡量 “預測噪聲” 與 “真實噪聲” 的差距,常用均方誤差(MSE):

  • 邏輯:在正向擴散中,模型知道每個時間步加了多少真實噪聲。訓練時,U-net 根據帶噪樣本預測噪聲,損失函數要求預測值盡可能接近真實噪聲。就像教孩子 “找不同”,每次對比預測結果和真實答案,錯得越多,損失越大,模型就會調整參數減少錯誤。
  • 作用:通過最小化損失,U-net 學會分析帶噪數據的特征,最終在反向擴散時,能用預測的噪聲逐步還原出清晰數據。

?詳細介紹:

超詳細的擴散模型(Diffusion Models)原理+代碼 - 知乎

5.2?代碼實現(Diffusion)

class DiffusionModel(nn.Module):"""基于UNet的擴散模型"""def __init__(self, image_size=28, channels=1):super(DiffusionModel, self).__init__()# 定義噪聲預測網絡(簡化版UNet)self.net = nn.Sequential(nn.Conv2d(channels, 64, 3, padding=1),nn.ReLU(),nn.Conv2d(64, 64, 3, padding=1),nn.ReLU(),nn.Conv2d(64, channels, 3, padding=1))# 噪聲調度參數self.num_steps = 1000self.betas = torch.linspace(1e-4, 0.02, self.num_steps)self.alphas = 1 - self.betasself.alpha_bars = torch.cumprod(self.alphas, dim=0)def forward(self, x, t):"""預測噪聲ε"""return self.net(x)def train_step(self, x0):# 隨機選擇時間步tt = torch.randint(0, self.num_steps, (x0.size(0),))# 計算加噪后的xtsqrt_alpha_bar = torch.sqrt(self.alpha_bars[t]).view(-1, 1, 1, 1)sqrt_one_minus_alpha_bar = torch.sqrt(1 - self.alpha_bars[t]).view(-1, 1, 1, 1)epsilon = torch.randn_like(x0)xt = sqrt_alpha_bar * x0 + sqrt_one_minus_alpha_bar * epsilon# 預測噪聲并計算損失epsilon_pred = self(xt, t)loss = F.mse_loss(epsilon_pred, epsilon)return lossdef sample(self, num_samples=16):"""從噪聲逐步生成圖像"""xt = torch.randn(num_samples, 1, 28, 28)for t in reversed(range(self.num_steps)):# 逐步去噪epsilon_pred = self(xt, t)xt = (xt - self.betas[t] * epsilon_pred) / torch.sqrt(self.alphas[t])if t > 0:xt += torch.sqrt(self.betas[t]) * torch.randn_like(xt)return xt

6 小結

最后,簡單回顧一下已經簡單介紹過的5種常見的深度學習模型:

VAE(變分自編碼器)、GAN(生成對抗網絡)、AR(自回歸模型 如 Transformer)、Flow(流模型)和 Diffusion(擴散模型)

我們可以看到不同模型的優缺點和適用場景:

  • VAEGAN是兩種常用的深度生成模型,分別基于貝葉斯概率理論和對抗訓練來生成樣本
  • AR模型則適用于處理具有時序依賴關系的數據,如序列數據
  • Flow模型和Diffusion模型在生成樣本上具有較好的穩定性和多樣性,但需要較高的計算成本

最后提供一些潛在的問題和方法:

研究方向?核心問題?技術路徑?典型應用場景
?混合架構融合單一模型難以兼顧生成質量與推理速度? Diffusion-GAN混合(擴散模型生成質量+GAN推理速度)
? VAE-Transformer(壓縮編碼+序列建模)
? 流模型與自回歸模型聯立訓練
? 高保真圖像實時生成
? 長視頻時序一致性優化
?輕量化大模型部署資源消耗過高? 知識蒸餾(教師-學生模型遷移)
? 隱式神經表示(INR參數化生成)
? 稀疏注意力機制與量化壓縮
? 移動端AI繪圖APP
? 邊緣計算設備實時生成
?物理約束嵌入生成內容違反現實物理規律? 剛體動力學方程約束(牛頓力學+生成器)
? 流體力學PDE求解器集成
? 符號邏輯引導的潛在空間優化
? 科學模擬(氣象/材料)
? 機器人訓練環境生成

部分參考:

數據派THU:必知!5大深度生成模型!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73489.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

印刷電路板 (PCB) 的影響何時重要?在模擬環境中導航

我和我的同事們經常被問到關于 PCB 效應的相同問題&#xff0c;例如&#xff1a; 仿真何時需要 PCB 效果&#xff1f; 為什么時域仿真需要 PCB 效應&#xff1f; 當 PCB 效應必須包含在仿真中時&#xff0c;頻率是否重要&#xff1f; 設計人員應該在多大程度上關注 VRM 模型中包…

2024跨境電商挑戰:AI反檢測技術在避免封號中的作用

2024跨境電商挑戰&#xff1a;AI反檢測技術在避免封號中的作用 跨境電商的浪潮席卷全球&#xff0c;為商家打開了通往世界各地的大門。然而&#xff0c;隨著平臺監管的加強&#xff0c;合規性問題成為商家不得不面對的挑戰。在電商平臺的嚴格監控下&#xff0c;任何違規行為都…

QML控件 - Text

在 QML 中&#xff0c;Text 組件是用于顯示文本的核心元素&#xff0c;支持豐富的文本樣式、布局和交互功能。以下是 完整指南 和常見用法示例&#xff1a; 1. 基礎用法 import QtQuick 2.15Text {text: "Hello, QML!" // 顯示文本內容font.pixelSize: 20 // 字體…

網絡運維學習筆記(DeepSeek優化版) 024 HCIP-Datacom OSPF域內路由計算

文章目錄 OSPF域內路由計算&#xff1a;單區域的路由計算一、OSPF單區域路由計算原理二、1類LSA詳解2.1 1類LSA的作用與結構2.2 1類LSA的四種鏈路類型 三、OSPF路由表生成驗證3.1 查看LSDB3.2 查看OSPF路由表3.3 查看全局路由表 四、2類LSA詳解4.1 2類LSA的作用與生成條件4.2 2…

HTML5 SVG:圖形繪制的現代標準

HTML5 SVG:圖形繪制的現代標準 引言 隨著互聯網技術的發展,網頁的交互性和美觀性日益受到重視。HTML5 SVG作為一種強大的圖形繪制技術,在網頁設計中發揮著重要作用。本文將深入探討HTML5 SVG的原理、應用場景以及如何在實際項目中運用。 一、HTML5 SVG簡介 1.1 什么是SV…

多智能體融合(Multi-Agent Fusion)

多智能體融合&#xff08;Multi-Agent Fusion&#xff09;是指在多智能體系統&#xff08;MAS, Multi-Agent System&#xff09;中&#xff0c;多個智能體&#xff08;Agent&#xff09;通過協作、競爭或共享信息&#xff0c;實現全局最優的智能決策和任務執行。該方法廣泛應用…

[學習筆記]NC工具安裝及使用

工具簡介 Netcat&#xff08;簡稱 nc&#xff09;是一款強大的命令行網絡工具&#xff0c;被稱作瑞士軍刀&#xff0c;用來在兩臺機器之間建立 TCP/UDP 連接&#xff0c;并通過標準的輸入輸出進行數據的讀寫&#xff0c;大家也可以使用Nmap&#xff08;增強版nc工具&#xff0…

SvelteKit 最新中文文檔教程(11)—— 部署 Netlify 和 Vercel

前言 Svelte&#xff0c;一個語法簡潔、入門容易&#xff0c;面向未來的前端框架。 從 Svelte 誕生之初&#xff0c;就備受開發者的喜愛&#xff0c;根據統計&#xff0c;從 2019 年到 2024 年&#xff0c;連續 6 年一直是開發者最感興趣的前端框架 No.1&#xff1a; Svelte …

計算機等級4級數據庫工程師(筆記1)

數據依賴&#xff08;2&#xff09;&#xff1a;多值依賴 進程&#xff08;4&#xff09;&#xff1a;PCB 內存管理&#xff08;3&#xff09; 文件管理&#xff08;3&#xff09; 關系模型中數據的物理結構是一張二維表&#xff08;錯&#xff09; 在用戶看來&#xff0c;…

pod 不允許改哪些字段?

在 Kubernetes 中&#xff0c;Pod 是一種不可變的資源對象。這意味著一旦 Pod 被創建&#xff0c;其中的一些字段是無法修改的。如果你需要對這些不可變字段進行更改&#xff0c;通常的做法是刪除舊的 Pod 并創建一個新的 Pod。 以下是一些在 Pod 中不可修改的關鍵字段&#x…

量子計算的黎明:從理論到現實的突破之旅

在科技發展的浩瀚星空中&#xff0c;量子計算如同一顆璀璨的新星&#xff0c;正逐漸照亮人類探索未知領域的道路。從最初的理論構想&#xff0c;到如今實驗室中的初步實現&#xff0c;量子計算正經歷著一場從夢想到現實的華麗蛻變。這場變革不僅挑戰了我們對計算本質的理解&…

【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典

更新日期&#xff1a;2025年3月26日。 Github 倉庫&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 倉庫&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引 一、SerializableDictionary可序列化字典1.使用SerializableDictionary2.實現思路 二、Serializ…

二叉樹練習

102. 二叉樹的層序遍歷 - 力扣&#xff08;LeetCode&#xff09; 使用隊列進行層序遍歷。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.v…

深入了解 Git Merge:用法、類型與合并沖突處理

文章目錄 深入了解 Git Merge&#xff1a;用法、類型與合并沖突處理一、Git Merge 是什么&#xff1f;二、Git Merge 的工作流程四、Git Merge 的類型1. Fast-forward Merge&#xff08;快進合并&#xff09;2. Three-way Merge&#xff08;三方合并&#xff09; 四、Git Merge…

DeepSeek助力Vue開發:打造絲滑的鍵盤快捷鍵

DeepSeek助力Vue開發&#xff1a;打造絲滑的鍵盤快捷鍵 大家好&#xff0c;給大家分享一篇文章&#xff01;并提供具體代碼實現幫助大家深入理解&#xff0c;徹底掌握&#xff01;如果能幫助到大家或給大家一些靈感和啟發&#xff0c;歡迎收藏關注。&#x1f495;&#x1f495;…

FreeRTOS 隊列結構體 xQUEUE 深度解析

一、核心成員與功能設計 FreeRTOS 的隊列結構體 xQUEUE 是任務間通信&#xff08;IPC&#xff09;的核心數據結構&#xff0c;通過統一的設計支持隊列、信號量、互斥量等多種同步機制。其設計體現了 ?**"數據拷貝 結構復用"** 的理念&#xff0c;兼顧輕量化與擴展…

斜對角線的應用

引入 題目描述 經典應用&#xff1a;八皇后問題 dg和udg數組的解釋 對角線 d g [ u i ] d g [ u i ] dg[ui]dg[ui] dg[ui]dg[ui]&#xff0c;反對角線 u d g [ n ? u i ] u d g [ n ? u i ] udg[n?ui]udg[n?ui] udg[n?ui]udg[n?ui]中的下標 u i ui ui和 n ? …

簡單聊聊Oracle和MySQL數據庫的區別和使用場景

對于IT的技術人員&#xff0c;MySQL是非常熟悉的開源數據庫&#xff0c;在各個行業被廣泛應用。但是對于Oracle數據庫&#xff0c;很多專業的IT從業人員不太了解&#xff0c;今天就來聊一聊Oracle和MySQL的一些區別。 1. 使用場景 首先MySQL是在各種IT公司或者非IT公司廣泛應用…

STM32學習筆記之存儲器映射(原理篇)

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

mapbox V3 新特性,添加三維球鷹眼圖控件

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??mapbox-gl-globe-minimap 三維球體鷹眼…