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

变分自编码器(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,但其拥有更高的概率解释性和稳定性。

http://www.xdnf.cn/news/6578.html

相关文章:

  • GDB的使用
  • TCSVT投稿记录
  • JAVA学习-练习试用Java实现“语音识别的基础 :如使用MFCC特征提取和简单的分类器”
  • Python 类变量与实例变量完全指南:区别、使用场景及常见陷阱
  • Vue 3中ref
  • 实验6 电子邮件
  • 【Java学习笔记】【第一阶段项目实践】零钱通(面向过程版本)
  • Vue3学习(组合式API——生命周期函数基础)
  • 分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现
  • 抢购Python代码示例与技术解析
  • 1C:ENTERPRISE 8.3 实用开发者指南-示例和标准技术(Session1-Session3)
  • 《模版初阶》
  • matlab多项式
  • 【unity游戏开发——编辑器扩展】EditorGUIUtility提供一些 EditorGUI 相关的其他辅助API
  • 车载诊断架构 ---车载总线对于功能寻址的处理策略
  • 北京孙河傲云源墅:限量典藏的主城墅居臻品
  • 3.3 掌握RDD分区
  • 密码学刷题小记录
  • 一物一码赋能智能制造:MES如何实现生产全流程数字化追溯
  • JAVA单元测试、反射
  • 在ubuntu系统中将vue3的打包文件dist 部署nginx 并且配置ssl证书 以https方式访问
  • 2025年5月15日
  • 广度和深度优先搜索(BFS和DFS)
  • Ubuntu20.04下如何源码编译Carla,使用UE4源码开跑,踩坑集合
  • Secs/Gem第七讲(基于secs4net项目的ChatGpt介绍)
  • 驱动-Linux定时-timer_list
  • ollama 重命名模型
  • 每日一道leetcode(新学数据结构版)
  • CISA 备考通关经验及回忆题分享
  • 1:OpenCV—图像基础