当前位置: 首页 > news >正文

变分自编码器(Variational Autoencoder, VAE)

结合了自编码器概率生成模型的深度学习框架,主要用于生成新数据和学习数据的低维潜在表示。

一 VAE概念 

VAE的目标是学习数据的潜在概率分布,而非像传统的自编码器(AE)进行简单的数据压缩。

通过引入变分推断(Variational Inference),VAE能够生成与原始数据分布一致的新样本。

1.1变分推断(Variational Inference, VI)

一种用于近似复杂概率模型后验分布的机器学习方法。在贝叶斯模型中,目标是计算后验分布 $p(z | x)$.

$x$ :观测数据  

$z$:隐变量

后验分布的表达式为:

$ p(z | x) = \frac{p(x | z) p(z)}{p(x)} $

变分推断的核心:通过找到简单分布 $q(z)$ (称为变分分布),最小化其与真实后验 $p(z | x)$ 的KL散度(KL散度量化了一个概率分布 P 相对于另一个分布 Q 的“差异”或“信息损失”。):

$ q^* = \arg\min_{q \in \mathcal{Q}} \text{KL}(q(z) \parallel p(z | x)) $

生成模型:VAE属于隐变量模型(Latent Variable Model),假设数据由潜在变量 $z$ 生成,即$x = f(z)$,其中  服从特定的先$z$验分布。

二 结构组成

2.1编码器(Encoder)

作用:将输入数据 $x$ 映射到潜在空间,输出潜在变量 $z$ 的分布参数(均值和方差)。

输出:均向量 $\mu$ 和方差的对数值 $\log \sigma^2$,即  $q(z|x) \sim \mathcal{N}(\mu, \sigma^2 I)$ 。

2.2解码器(Decoder)

作用:从潜在变量 $z$  重构原始数据 $x$ ,即学习生成 $p(x|z)$

输出:重构数据 $x'$ ,通常通过伯努利或高斯分布建模。

三 变分推断与损失函数

VAE通过最大化证据下界(Evidence Lower Bound, ELBO)进行优化。ELBO由以下两部分组成:

3.1 重构损失(Reconstruction Loss)

衡量解码器重构数据的能力,等价于交叉熵(用于衡量两个概率分布之间的差异,同时也是机器学习中最常用的损失函数之一)或均方误差(MSE)。

$ \mathcal{L}_{\text{recon}} = \mathbb{E}_{z \sim q(z|x)} \left[ \log p(x|z) \right] $

3.2 KL散度(KL Divergence)

强制潜在分布   接近标准正态先验分布 $p(z)$ ,保证潜在空间的连$q(z|x)$续性。

$ \mathcal{L}_{\text{KL}} = \text{KL} \left( q(z|x) \parallel p(z) \right) $

对于高斯分布,KL散度可解析计算为:

$ \mathcal{L}_{\text{KL}} = -\frac{1}{2} \sum_{i} \left( 1 + \log \sigma_i^2 - \mu_i^2 - \sigma_i^2 \right) $

总损失函数:

$ \mathcal{L} = \mathcal{L}_{\text{recon}} + \mathcal{L}_{\text{KL}} $

四 重参数化技巧(Reparameterization Trick)

直接从分布 $\mathcal{N}(\mu, \sigma^2)$ 采样 $z$ 会导致不可导,无法反向传播。

解决方案:将采样过程分解为确定性和随机性部分:

$ z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) $

其中 $\epsilon$ 是独立噪声,确保梯度可传至编码器。

五 训练过程

输入数据 $x$ 通过编码器生成 $\mu$$\log \sigma^2$

通过重参数化采样 $z$,输入解码器生成重构数据 $x'$

计算重构损失和KL散度,反向传播优化网络参数。

六 优缺点

优点:

(1)可生成新数据,潜在空间具有连续性(插值生成平滑过渡样本)。

(2)显式建模概率分布,支持概率推断。

缺点:

(1)生成结果可能较模糊(因假设输出为高斯分布,而真实数据分布复杂)。

(2)训练难度较高,需平衡重构损失与KL散度。

 七 应用场景

图像生成(如人脸、手写数字)、数据降维与特征提取、数据去噪与补全、半监督学习

代码示例:

import torch
import torch.nn as nnclass VAE(nn.Module):def __init__(self, input_dim, latent_dim):super(VAE, self).__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(input_dim, 512),nn.ReLU(),nn.Linear(512, 2 * latent_dim)  # 输出mu和log_var)# 解码器self.decoder = nn.Sequential(nn.Linear(latent_dim, 512),nn.ReLU(),nn.Linear(512, input_dim),nn.Sigmoid())def reparameterize(self, mu, log_var):std = torch.exp(0.5 * log_var)eps = torch.randn_like(std)return mu + eps * stddef forward(self, x):h = self.encoder(x)mu, log_var = torch.chunk(h, 2, dim=-1)z = self.reparameterize(mu, log_var)x_recon = self.decoder(z)return x_recon, mu, log_var

VAE通过结合自编码器与变分推断,实现了对数据潜在分布的建模与生成。其核心在于通过KL散度约束潜在空间,并利用重参数化技巧解决梯度传递问题。

生成质量上弱于GAN,但其拥有更高的概率解释性和稳定性。

相关文章:

  • 博途软件直接寻址AMS348i读取位置值详解
  • 【C语言】19. ⾃定义类型:联合和枚举
  • 登录接口的密码进行RSA加密Java脚本
  • 牛客网NC218480统计正负数个数
  • VMware中快速安装与优化Ubuntu全攻略
  • 无人机避障——深蓝学院浙大Fast-planner学习部分(前端部分)
  • SpringBoot基础(静态资源导入)
  • 渗透测试流程-上篇
  • XBL6501/02/03在POE设备上的应用方案
  • 常用的关系性统计方法
  • 受控组件和非受控组件的适用场景分别是什么?
  • GRE作文总结和归纳
  • web第二次课后作业--设计一个注册登录系统
  • 涨薪技术|0到1学会性能测试第65课-SQL捕获阻塞事件
  • Vue3学习(组合式API——reactive()和ref()函数详解)
  • 实验5 DNS协议分析与测量
  • HttpServletRequest常用功能简介-笔记
  • SpringAOP
  • openEuler24.03 LTS下安装MySQL8.0.42
  • Linux 动态库热加载
  • 会谈时间迟迟未定、核心议题存在分歧,俄乌“土耳其谈判”一波三折
  • 上海黄浦江挡潮闸工程建设指挥部成立,组成人员名单公布
  • 秘鲁总统任命前司法部长阿拉纳为新总理
  • 蚊媒传染病、手足口病……上海疾控发布近期防病提示
  • 上海首发经济“卷”到会展业,浦东签约三个年度“首展”
  • 外交部亚洲司司长刘劲松会见印度驻华大使罗国栋