首頁 > 科技週邊 > 人工智慧 > 變性自動編碼器:它們的工作方式以及為什麼重要

變性自動編碼器:它們的工作方式以及為什麼重要

Joseph Gordon-Levitt
發布: 2025-03-04 10:10:16
原創
683 人瀏覽過

隨著機器學習技術在前所未有的速度上的進步,變異自動編碼器(VAE)正在徹底改變我們處理和生成數據的方式。通過將強大的數據編碼與創新的生成能力合併,VAE提供了針對現場複雜挑戰的變革解決方案。 在本文中,我們將探討VAE,其應用程序背後的核心概念,以及如何使用Pytorch,分步。

什麼是差異自動編碼器?

自動編碼器是一種旨在學習有效數據表示的神經網絡,主要是為了減少維度或特徵學習的目的。 

>自動編碼器由兩個主要部分組成:

>

解碼器:重建此壓縮表示的原始數據。 

    自動編碼器的主要目標是最大程度地減少輸入和重建輸出之間的差異,從而學習數據的緊湊表示。
  1. >輸入變量自動編碼器(VAE),該自動編碼器(VAE)通過將概率元素納入編碼過程來擴展傳統自動編碼器框架的功能。 
  2. 標準自動編碼器映射到固定的潛在表示,VAE引入了一種概率方法,其中編碼器在潛在空間上輸出分佈,通常以多元為高斯模型。這允許VAE在解碼過程中從該分佈中進行採樣,從而產生新的數據實例。 VAE的關鍵創新在於它們通過學習結構化的連續潛在空間來生成新的高質量數據。這對於生成建模尤其重要,該建模不僅是壓縮數據,而且是創建類似於原始數據集的新數據示例。 
  3. VAE在圖像綜合,數據降解和異常檢測等任務中表現出顯著的有效性,使其成為推進機器學習模型和應用功能的相關工具。
差異自動編碼器理論背景

在本節中,我們將介紹VAE的理論背景和操作機制,為您提供以後在後面探索其應用的堅實基礎。

>讓我們從編碼器開始。編碼器是負責將輸入數據映射到潛在空間的神經網絡。與在潛在空間中產生固定點的傳統自動編碼器不同,vae中的編碼器輸出概率分佈的參數(尤其是高斯分佈的均值和差異)。這使VAE能夠有效地對數據不確定性和可變性進行建模。

>

>另一個稱為解碼器的神經網絡用於重建潛在空間表示的原始數據。給定潛在空間分佈的樣本,解碼器旨在生成與原始輸入數據相似的輸出。此過程使VAE可以通過從學習分佈中進行採樣來創建新的數據實例。

潛在空間是一個較低維的連續空間,其中輸入數據被編碼。

編碼器,解碼器和潛在空間的角色的可視化變性自動編碼器:它們的工作方式以及為什麼重要

。圖像源。

vae學會了近似的後驗分佈。目的是使此近似盡可能靠近真正的後部。

貝葉斯推斷是一種更新假設的概率估計值的方法,因為更多的證據或信息可用。在VAE中,貝葉斯推斷用於估計潛在變量的分佈。 

通過將先驗知識(先驗分佈)與觀察到的數據(可能性)整合在一起,VAE通過學習的後驗分佈來調整潛在空間表示。

貝葉斯的推斷,具有先前的分佈,後驗分佈和可能性功能。圖像源。

這是過程流程的外觀:變性自動編碼器:它們的工作方式以及為什麼重要>

輸入數據x 被饋入編碼器,該代碼器輸出了潛在空間分佈的參數 q(z ^> q(z ^>μ

μσ>σσ
    2 2
  1. >潛在變量z 是從分佈q(z k x)採樣的,使用諸如重新聚集技巧之類的技術。
  2. 採樣z 通過解碼器傳遞以產生重建的數據,該數據應與原始輸入
  3. x
  4. 差異自動編碼器與傳統自動編碼器 讓我們研究VAE的差異和優勢,而不是傳統的自動編碼器。 架構比較
  5. 如前所述,傳統的自動編碼器由一個編碼網絡組成,該網絡將輸入數據
x

映射到固定的,較低維的潛在空間表示 z

。此過程是確定性的,這意味著每個輸入都被編碼為潛在空間中的特定點。 

然後,解碼器網絡從該固定的潛在表示中重建原始數據,以最大程度地減少輸入及其重建之間的差異。 

>傳統自動​​編碼器的潛在空間是輸入數據的壓縮表示,而無需任何概率建模,這限制了它們生成新的,不同數據的能力,因為它們缺乏處理不確定性的機制。

變性自動編碼器:它們的工作方式以及為什麼重要

自動編碼器體系結構。作者

的圖像 vaes將概率元素引入編碼過程。也就是說,VAE中的編碼器將輸入數據映射到潛在變量上的概率分佈,通常以平均值

μ

和方差σσ> 2

變性自動編碼器:它們的工作方式以及為什麼重要

此方法將每個輸入編碼為一個分佈而不是單個點,添加了一層可變性和不確定性。 在傳統自動編碼器中的確定性映射與VAE中的概率編碼和採樣。

>這種結構差異強調了VAE如何通過稱為KL Divergence的術語結合正則化,從而塑造了持續且結構良好的潛在空間。 

正規化引入顯著提高了生成的樣品的質量和連貫性,超過了傳統自動編碼器的能力。

>變異自動編碼器體系結構。作者

的圖像

應用程序比較

與傳統的自動編碼器相比,VAES的概率性質大大擴展了其應用範圍。相反,傳統的自動編碼器在確定性數據表示足夠的應用中非常有效。  >讓我們看一下每個應用程序的一些應用程序,以更好地將這一點帶回家。 VAES的應用

  • 生成建模。 VAE的核心優勢在於它們能夠生成與培訓數據相似但與任何特定實例不同的新數據樣本的能力。例如,在圖像合成中,VAE可以創建類似於訓練集但具有變化的新圖像,使其可用於創建新藝術品,生成逼真的面孔或在時尚和建築中生成新設計等任務。 >
  • >異常檢測。通過學習正常數據的分佈,VAE可以將與此分佈的偏差確定為異常。這在諸如欺詐檢測,網絡安全和預測維護之類的應用中特別有用。
  • 數據插補和降解。 VAE的一個強項之一是重建具有缺失或嘈雜零件的數據。通過從學習的潛在分佈中取樣,他們能夠預測和填充缺失值或從損壞的數據中刪除噪聲。這使它們在諸如醫學成像之類的應用程序中很有價值,在醫學成像中,準確的數據重建至關重要,或者在恢復損壞的音頻和視覺數據中。
  • 半監督的學習。
  • 在半監督的學習方案中,VAE可以通過使用潛在的空間來捕獲基本數據結構,從而改善分類器的性能,從而用有限的標記數據來增強學習過程。
  • 潛在的空間操縱。 VAE提供了一個結構化且連續的潛在空間,可以針對各種應用進行操縱。例如,在圖像編輯中,可以通過導航潛在空間來調整特定功能(例如照明或面部表情)。此功能在創意產業中特別有用,用於修改和增強圖像和視頻。 >
  • >傳統自動​​編碼器的應用
  • 維度降低
。傳統的自動編碼器被廣泛用於降低數據的維度。通過將數據編碼為較低維的潛在空間,然後重建它,它們可以捕獲數據的最重要功能。這在諸如數據可視化之類的方案中很有用,其中高維數據需要投影到兩個或三個維度,以及其他機器學習模型的預處理步驟,以提高性能並降低計算成本。 通過訓練編碼器捕獲輸入數據的基本方面,可以將潛在表示作為緊湊的特徵向量,以用於分類,聚類和回歸。這在諸如圖像識別之類的應用中特別有益,在圖像識別中,潛在空間可以揭示重要的視覺模式。
  • > denoising。 傳統的自動編碼器可以通過學習從嘈雜版本重建清潔輸入來有效地確定數據。此應用程序在諸如圖像處理之類的方案中很有價值,其中從圖像中刪除噪聲可以提高視覺質量,並在信號處理中可以提高音頻信號的清晰度。 與原始的高維數據相比,緊湊的潛在向量可以更有效地存儲或傳輸
  • >
  • 數據壓縮。這在圖像和視頻壓縮等應用中特別有用。 >
  • >圖像重建和內置。
  • 傳統自動​​編碼器可用於重建圖像的缺失部分。在圖像插圖中,對自動編碼器進行了訓練,可以根據周圍像素提供的上下文填充圖像的缺失或損壞區域。這在計算機視覺和數字恢復等領域很有用。 >
  • 序列學習。
  • 自動編碼器可以適應使用經常性或卷積層處理順序數據。它們可以捕獲時間依賴性和模式,使其可用於文本生成,語音綜合和財務預測等應用。 > 變異自動編碼器的類型
  • VAE已演變為各種專業形式,以應對機器學習中的不同挑戰和應用。在本節中,我們將研究最突出的類型,強調用例,優勢和局限性。  

    有條件的變異自動編碼器

    條件變分自動編碼器(CVAE)是一種專門的VAE形式,可以通過對其他信息進行調節來增強生成過程。 

    vae通過將其他信息(稱為 c )合併到編碼器和解碼器網絡中,從而成為有條件的。此條件信息可以是任何相關數據,例如類標籤,屬性或其他上下文數據。

    CVAE模型結構。圖像源。 CVAE的用例包括:

    變性自動編碼器:它們的工作方式以及為什麼重要受控數據生成。例如,在圖像生成中,CVAE可以根據給定標籤或描述創建特定對像或場景的圖像。

    圖像到圖像翻譯。 CVAE可以在維護特定屬性的同時將圖像從一個域轉換為另一個域。例如,它們可用於將黑白圖像翻譯成彩色圖像或將草圖轉換為逼真的照片。

    >文本生成。 CVAE可以生成以特定的提示或主題為條件的文本,使其可用於故事生成,聊天機器人響應和個性化內容創建等任務。 >

    優點和缺點是:

    • 對生成的數據的控制
    • 更精細
    • 改進的表示學習
    • 增加過度擬合的風險

    其他變體

    >散開的變分自動編碼器(通常稱為βvaes)是另一種類型的專業VAE。他們的目的是學習潛在表示,每個維度都會捕獲數據中差異的獨特而解釋的因素。這是通過用高參數β修改原始VAE物鏡來實現的,該β平衡了重建損失和KL差異項。

    beta-vaes的利弊:

    • 提高了潛在因素的可解釋性。
    • 增強了操縱生成數據的單個特徵的能力。
    • 需要仔細調整β參數。
    • 如果術語之間的平衡不是最佳的,則
    • 的重建質量可能會導致較差的重建質量。
    • VAE的另一個變體是對抗自動編碼器(AAE)。 AAE將VAE框架與來自生成對抗網絡(GAN)的對抗訓練原則相結合。附加的鑑別器網絡可確保潛在表示與先前的分佈匹配,從而增強了模型的生成功能。
    • aaes的優點和缺點:

    生成高質量和現實的數據樣本。

    有效地正規化潛在空間。
    • 增加了由於對抗分量而引起的訓練複雜性。
    • 訓練穩定性的潛在問題,類似於gans。
    • 現在,我們將查看另外兩個變異自動編碼器的擴展。
    • >第一個是差異自動編碼器(VRAES)。 VRAE通過將復發性神經網絡(RNN)納入編碼器和解碼器網絡,將VAE框架擴展到順序數據。這允許VRAE捕獲時間依賴性和模型順序模式。
    • >
    vraes的優缺點:

    有效地處理時間序列數據和順序模式。

    在語音綜合,音樂生成和預測時間序列的應用中有用。

    > 由於模型的複發性質,
      較高的計算要求。
    • >
    • 我們將檢查的最後一個變體是層次變化自動編碼器(HVAE)。 HVAE引入了以分層結構排列的潛在變量的多層,該變量使模型可以捕獲數據中更複雜的依賴關係和抽象。 
    • hvaes的優點和缺點:
    能夠用層次結構對複雜的數據分佈進行建模。

    提供更具表現力的潛在表示。

    增加了模型的複雜性和計算成本。

    • >使用Pytorch
    • 實現差異自動編碼器 在本節中,我們將使用pytorch實施一個簡單的變分自動編碼器(VAE)。

      1。設置環境

      要實現VAE,我們需要使用必要的庫和工具來建立我們的Python環境。我們將使用的庫是:

      • > pytorch
      • > torchvision
      • matplotlib
      • numpy

      這是安裝以下庫的代碼:

    pip install torch torchvision matplotlib numpy
    登入後複製

    2。實施

    >讓我們逐步瀏覽VAE的實現。首先,我們必須導入庫:

    import torch 
    import torch.nn as nn 
    import torch.optim as optim 
    from torchvision import datasets, transforms 
    from torch.utils.data import DataLoader 
    import matplotlib.pyplot as plt 
    import numpy as np
    登入後複製
    接下來,我們必須定義編碼器,解碼器和VAE。這是代碼:

    class Encoder(nn.Module):
        def __init__(self, input_dim, hidden_dim, latent_dim):
            super(Encoder, self).__init__()
            self.fc1 = nn.Linear(input_dim, hidden_dim)
            self.fc_mu = nn.Linear(hidden_dim, latent_dim)
            self.fc_logvar = nn.Linear(hidden_dim, latent_dim)
            
        def forward(self, x):
            h = torch.relu(self.fc1(x))
            mu = self.fc_mu(h)
            logvar = self.fc_logvar(h)
            return mu, logvar
    class Decoder(nn.Module):
        def __init__(self, latent_dim, hidden_dim, output_dim):
            super(Decoder, self).__init__()
            self.fc1 = nn.Linear(latent_dim, hidden_dim)
            self.fc2 = nn.Linear(hidden_dim, output_dim)
            
        def forward(self, z):
            h = torch.relu(self.fc1(z))
            x_hat = torch.sigmoid(self.fc2(h))
            return x_hat
    class VAE(nn.Module):
        def __init__(self, input_dim, hidden_dim, latent_dim):
            super(VAE, self).__init__()
            self.encoder = Encoder(input_dim, hidden_dim, latent_dim)
            self.decoder = Decoder(latent_dim, hidden_dim, input_dim)
            
        def forward(self, x):
            mu, logvar = self.encoder(x)
            std = torch.exp(0.5 * logvar)
            eps = torch.randn_like(std)
            z = mu + eps * std
            x_hat = self.decoder(z)
            return x_hat, mu, logvar
    登入後複製
    >我們還必須定義損失函數。 VAE的損失函數包括重建損失和KL差異損失。這就是它在pytorch中的外觀:

    def loss_function(x, x_hat, mu, logvar):
        BCE = nn.functional.binary_cross_entropy(x_hat, x, reduction='sum')
        KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
        return BCE + KLD
    登入後複製
    要訓練VAE,我們將加載MNIST數據集,定義優化器並訓練模型。

    # Hyperparameters
    input_dim = 784
    hidden_dim = 400
    latent_dim = 20
    lr = 1e-3
    batch_size = 128
    epochs = 10
    # Data loader
    transform = transforms.Compose([transforms.ToTensor(), transforms.Lambda(lambda x: x.view(-1))])
    train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
    train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    # Model, optimizer
    vae = VAE(input_dim, hidden_dim, latent_dim)
    optimizer = optim.Adam(vae.parameters(), lr=lr)
    # Training loop
    vae.train()
    for epoch in range(epochs):
        train_loss = 0
        for x, _ in train_loader:
            x = x.view(-1, input_dim)
            optimizer.zero_grad()
            x_hat, mu, logvar = vae(x)
            loss = loss_function(x, x_hat, mu, logvar)
            loss.backward()
            train_loss += loss.item()
            optimizer.step()
        
        print(f"Epoch {epoch + 1}, Loss: {train_loss / len(train_loader.dataset)}")
    登入後複製
    3。測試和評估模型

    訓練後,我們可以通過可視化重建的輸出和生成的樣品來評估VAE。

    這是代碼:

    # visualizing reconstructed outputs
    vae.eval()
    with torch.no_grad():
        x, _ = next(iter(train_loader))
        x = x.view(-1, input_dim)
        x_hat, _, _ = vae(x)
        x = x.view(-1, 28, 28)
        x_hat = x_hat.view(-1, 28, 28)
        
        fig, axs = plt.subplots(2, 10, figsize=(15, 3))
        for i in range(10):
            axs[0, i].imshow(x[i].cpu().numpy(), cmap='gray')
            axs[1, i].imshow(x_hat[i].cpu().numpy(), cmap='gray')
            axs[0, i].axis('off')
            axs[1, i].axis('off')
        plt.show()
    #visualizing generated samples
    with torch.no_grad():
        z = torch.randn(10, latent_dim)
        sample = vae.decoder(z)
        sample = sample.view(-1, 28, 28)
        
        fig, axs = plt.subplots(1, 10, figsize=(15, 3))
        for i in range(10):
            axs[i].imshow(sample[i].cpu().numpy(), cmap='gray')
            axs[i].axis('off')
        plt.show()
    登入後複製

    變性自動編碼器:它們的工作方式以及為什麼重要輸出的可視化。第一行是原始的MNIST數據,中間行是重建的輸出,最後一行是生成的樣本 - 作者圖片。

    變異自動編碼器的挑戰和解決方案

    >差異自動編碼器(VAE)是生成建模的有力工具,但它們還面臨一些挑戰和局限性,可能會影響其性能。讓我們討論其中的一些,並提供緩解策略。

    模式崩潰

    >這是一種現象,即VAE無法捕獲數據分佈的全部多樣性。結果是生成的樣本,僅代表數據分佈的幾個模式(不同的區域),同時忽略其他模式。這導致生成的輸出缺乏多樣性。 

    模式崩潰是由以下方式造成的:

    較差的潛在空間探索:如果在培訓期間沒有充分探索潛在空間,則該模型只能學會從幾個地區生成樣品。

    >不足的培訓數據:有限或無代表性的培訓數據可能會導致模型過度擬合特定模式。
    • 通過使用以下方式可以減輕
    • 模式崩潰
      • 正則化技術:使用輟學和批次歸一化等技術可以幫助改善概括並減少模式崩潰。 >
      • 改進的培訓算法:重要的加權自動編碼器(IWAE)可以提供更好的梯度估計並改善潛在的空間探索。
      • 非信息潛在空間
      在某些情況下,VAE學到的潛在空間可能會變得不信息,在這種情況下,該模型沒有有效地使用潛在變量來捕獲輸入數據的有意義的特徵。這可能導致產生的樣品和重建質量較差。

      >

      這通常是由於以下原因而發生的:

      >

      >不平衡的損失組成部分:重建損失與KL差異之間的權衡可能不平衡,導致潛在變量被忽略。

        後倒塌:編碼器學會了輸出非常接近先驗的後驗分佈,從而導致潛在空間中的信息丟失。
      • 可以通過利用熱身策略來固定
      • 非信息潛在空間,這涉及在訓練過程中逐漸增加KL差異的重量,或直接修改損失函數中KL差異項的重量。 
      • 訓練不穩定性

      訓練VAE有時可能是不穩定的,而損失函數發生振盪或分歧。這可能使得獲得收斂並獲得訓練有素的模型變得困難。

      發生這種情況的原因是:

      >

      複雜的損失格局:VAE損失函數結合了重建和正則化項,導致了複雜的優化景觀。

      >超參數敏感性:VAE對選擇超參數的選擇敏感,例如學習率,KL差異的重量和神經網絡的體系結構。

        >減輕訓練不穩定性的步驟涉及:
      • 謹慎的超參數調整:系統探索超參數可以幫助尋找穩定的培訓配置。
      高級優化器:使用Adam等自適應學習率優化器可以幫助更有效地瀏覽複雜的損失景觀。

        >計算成本
      • 訓練VAE,尤其是使用大型且複雜的數據集的VAE,在計算上可能很昂貴。這是由於需要通過隨機層進行採樣和反向傳播。
      • >
      • 高計算成本的原因包括:

      大型網絡:編碼器和解碼器網絡可能會變得大而深層,從而增加了計算負擔。

      >潛在空間採樣:從潛在空間採樣並通過這些樣品計算梯度可以增加計算成本。

      這些是一些緩解措施:
        • 模型簡化:降低編碼器和解碼器網絡的複雜性可以幫助降低計算成本。
        • >有效的採樣技術:使用更有效的採樣方法或近似方法可以減少計算負載。
        • 結論
        事實證明,

        變量自動編碼器(VAE)是機器學習和數據生成領域的開創性進步。 

        通過將概率元素引入傳統的自動編碼器框架中,VAE可以生成新的高質量數據,並提供一個更具結構化和連續的潛在空間。從生成建模和異常檢測到數據插圖和半監督學習,這種獨特的功能已經開闢了廣泛的應用程序。 在本文中,我們涵蓋了變異自動編碼器,不同類型,如何在Pytorch中實施VAE的基礎,以及與VAES合作時的挑戰和解決方案。

        查看這些資源以繼續您的學習:

        >與Keras

        的深度學習介紹

        python中的TensorFlow簡介

        pytorch vs tensorflow vs keras
        • 變形金剛的工作方式:變壓器體系結構的詳細探索
        • > FAQS
        • >自動編碼器和差異自動編碼器有什麼區別?

        >>>自動編碼器是一個神經網絡,將輸入數據壓縮到較低維的潛在空間中,然後重建它,然後將其映射,將每個輸入映射到該空間中的固定點。差異自動編碼器(VAE)通過將輸入編碼為潛在空間(通常是高斯)來擴展這一點。這種概率方法允許VAE從潛在分佈中進行採樣,從而能夠生成新的,多樣化的數據實例並更好地建模數據可變性。

        >

        >使用什麼VAE是什麼原因?

        變化自動編碼器(VAE)用於生成新的高質量數據樣本,使其在圖像合成和數據增強的應用中具有價值。它們還用於異常檢測中,通過重建缺失或損壞的數據來確定與學習數據分佈的偏差以及數據降低和歸納。

        >變異自動編碼器的好處是什麼?

        VAEs generate diverse and high-quality data samples by learning a continuous and structured latent space.它們還提高了數據表示方面的魯棒性並能夠有效處理不確定性,這在諸如異常檢測,數據降解和半監督的學習等任務中特別有用。 >

        為什麼要使用vae而不是自動量工具?

        變化自動編碼器(VAE)提供了一種概率方法來編碼,使它們可以通過建模連續的遠距離空間分佈來生成多樣的和新穎的數據樣本。與提供固定潛在表示形式的傳統自動編碼器不同,VAE可以增強數據生成功能,並且可以更好地處理數據中的不確定性和可變性。

        >變異自動編碼器的弊端是什麼?

        變異自動編碼器(VAE)可能會遭受模式崩潰等問題,在這些問題中,它們無法捕獲數據分佈的全部多樣性,從而導致生成較少的樣品。此外,與甘斯(例如甘斯)相比,它們可能會產生模糊或更少的詳細輸出,並且他們的培訓在計算上可能是強度且不穩定的。立即開始 變性自動編碼器:它們的工作方式以及為什麼重要 >>>>>

    以上是變性自動編碼器:它們的工作方式以及為什麼重要的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板