首页 > 科技周边 > 人工智能 > 变性自动编码器:它们的工作方式以及为什么重要

变性自动编码器:它们的工作方式以及为什么重要

Joseph Gordon-Levitt
发布: 2025-03-04 10:10:16
原创
681 人浏览过

随着机器学习技术在前所未有的速度上的进步,变异自动编码器(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
    作者最新文章
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板