VAE学习笔记

       Variational Autoencoder(VAE)是一种深度生成模型,它结合了变分推断和神经网络的优势,用于学习数据的潜在分布,并生成新的数据样本。VAE可以看作是自编码器(Autoencoder)的一种扩展,在自编码器的基础上引入了概率模型,并通过变分推断来近似后验分布。VAE的关键创新之一是通过引入潜在变量模型,能够以概率的方式生成新的数据点。

       VAE的目标是通过神经网络生成数据,类似于传统的自编码器(AE),但是它在潜在空间中引入了概率建模。与传统AE不同,VAE假设输入数据的潜在表示是通过一个概率分布来建模的,而不是一个固定的向量。

1. 模型介绍

        VAE将数据 x 通过一个潜在变量 z 来生成,即假设每个数据样本是从一个潜在变量 z 中生成的。这个生成过程可以描述为:

  • p(x∣z)   给定潜在变量 z 时,生成数据 x 的概率分布。

  • p(z)   潜在变量的先验分布,通常取标准正态分布N(0,1)

2.VAE的核心算法

① 输入与输出
  • 输入:高维数据 x \in \mathbb{R}^{H \times W \times C}(如图像,H \times W为空间维度,C为通道数)。

  • 输出:低维潜在变量Z \in \mathbb{R}^{h \times w \times d},其中h \ll Hw \ll W

② 编码器(Encoder)的降维过程

      编码器通过卷积神经网络(CNN)逐步压缩输入数据的空间维度,具体步骤如下:

(1) 卷积与下采样(Downsampling)

  • 层结构:多个卷积层 + 激活函数(如ReLU) + 池化层(如最大池化)。

  • 目标:逐层减少空间分辨率,提取高层语义特征。

eg:

  • 输入:512×512×3

  • 操作:卷积核4×4,步长2,填充1,输出通道64

  • 输出:256×256×64

  • 激活函数:ReLU

(2) 输出潜在分布参数

  • 最终层:通过全连接层或1×1卷积生成潜在变量的均值 μμ 和方差 log⁡σ2logσ2。

    • 输入:64×64×256

    • 操作:1×1卷积核,输出通道 2d(d 为潜在空间通道数)

    •  输出:64×64×2d→ 拆分为 \mu \in \mathbb{R}^{64 \times 64 \times d}\log \sigma^2 \in \mathbb{R}^{64 \times 64 \times d}

③重参数化

从编码器输出的分布参数中采样得到潜在变量 Z,确保梯度可导:

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

  • 解释:通过引入随机噪声 ϵ,将采样过程从不可导的随机操作转换为可导的确定性计算。

④解码器(Decoder)的重建过程

        解码器通过转置卷积或上采样层逐步恢复空间分辨率:

(1) 上采样(Upsampling)

示例(潜在变量64×64×4 → 输出图像512×512×3):

第一层:

  • 输入:64×64×4
  • 操作:转置卷积核4×4,步长2,填充1,输出通道256
  • 输出:128×128×256
  • 激活函数:ReLU

第二层:

  • ......

最终层:

  • 输入:512×512×64
  • 操作:1×1卷积核,输出通道3(RGB图像)
  • 输出:512×512×3
  • 激活函数:Sigmoid(将值映射到[0,1]区间)
⑤损失函数:优化降维与重建

VAE的损失函数由两部分组成,通过反向传播优化编码器和解码器参数:

  •  重建损失:衡量输入x 与重建图像\hat{x}的差异,常用均方误差(MSE):

\mathcal{L}_{\text{recon}} = \| x - \hat{x} \|^2

  • KL散度:约束潜在分布q_\phi(Z|x)接近标准正态分布 \mathcal{N}(0, I)

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

  • 总损失:                                    \mathcal{L}_{\text{VAE}} = \mathcal{L}_{\text{recon}} + \beta \cdot \mathcal{L}_{\text{KL}}

     其中,超参数 β:平衡重建质量与潜在空间的正则化(通常 β=1)。

变分推断的详细分析:

        在VAE中,我们希望学习一个后验分布 p(z∣x),即给定数据 x,潜在变量 z 的分布。直接求解 p(z∣x)是非常困难的,因此VAE采用了变分推断的方法。

        变分推断的基本思想是通过引入一个变分分布 q(z∣x)来逼近真实的后验分布 p(z∣x),这样我们就能通过优化变分分布来间接学习潜在空间的分布。

贝叶斯公式计算后验概率:p(z|x)=\frac{p(x|z)p(z)}{p(x)}

其中:

  • p(x∣z)是似然函数,表示给定潜在变量 z 时生成数据 x 的概率;
  • p(z)是潜在变量 z 的先验分布;
  • p(x) 是数据的边际概率(或称证据),计算为:p(x)=\int p(x|z)p(z)dz

        但是,这个积分通常是非常复杂或者无法解析求解的,因此直接计算 p(z∣x) 是困难的。因此,引入一个变分分布 q(z),希望通过最小化某种“误差”来让这个变分分布尽可能接近真实的后验分布 p(z∣x)。

        于是,我们的目标就变成了:最小化 q(z) 与 p(z∣x) 之间的差异。这个差异通常使用 KL散度来度量:\mathrm{KL}(q(z)\|p(z|x))=\int q(z)\log\frac{q(z)}{p(z|x)}dz(但是KL散度又是什么呢?)

变分推断的推导过程

通过最大化证据下界(ELBO)来最小化KL散度。

  • 根据贝叶斯公式,数据的对数似然可以表示为:
  • \log p(x)=\log\int p(x,z)dz=\log\int p(x|z)p(z)dz
  • 我们引入变分分布 q(z) 来近似后验 p(z∣x)(这个不等式又是怎么来的?)
  • \log p(x)=\log\int\frac{q(z)}{q(z)}p(x|z)p(z)dz\geq\int q(z)\log\left(\frac{p(x|z)p(z)}{q(z)}\right)dz
  • 于是,得到了证据下界(ELBO):(虽然但是为什么正号变负号了?)
  • \int q(z)\log\left(\frac{p(x|z)p(z)}{q(z)}\right)dz=\int q(z)\log\left(p(x|z)\right)dz+\int q(z)\log\left(\frac{p(z)}{q(z)}\right)dz

  • \mathcal{L}(q)=\mathbb{E}_{q(z)}\left[\log p(x|z)\right]-\mathrm{KL}(q(z)\|p(z))

ELBO有两部分:

  • 第一项\mathbb{E}_{q(z)}\left[\log p(x|z)\right]是重构误差,表示通过 z 生成 x 的质量。
  • 第二项 \operatorname{KL}(q(z)\|p(z))是KL散度,表示变分分布 q(z) 和先验 p(z) 之间的差异

VAE的训练目标就是最大化这个ELBO,即最小化KL散度和最大化重构误差。

    Jensen不等式

    Jensen不等式是一种关于凸函数(或凹函数)的不等式,它表明对于一个凸函数 f,如果我们有一个随机变量 X,那么

    f(\mathbb{E}[X])\geq \mathbb{E}[f(X)]

    3. 训练过程

            训练过程中,通过最小化损失函数来优化编码器和解码器的参数。这相当于最大化ELBO,从而优化模型使得生成的数据尽可能接近真实数据。

    • 前向传播:输入数据 x,通过编码器和解码器生成 \hat{x}
    • 计算损失:计算重构误差和KL散度,得到总损失。
    • 反向传播:通过反向传播算法更新编码器和解码器的参数 ϕ 和 θ。
    • 迭代训练:重复上述步骤,直到模型收敛。
        ①编码器(Encoder)

            编码器 q(z∣x) 将输入数据 x 映射到潜在空间中。与传统AE不同,编码器不会输出一个固定的向量,而是输出潜在变量的分布参数,通常是均值 μ(x)和方差 σ(x) 的一对向量。假设潜在变量 z 的分布是一个高斯分布,编码器输出的是这个高斯分布的参数:q(z|x)=\mathcal{N}(z;\mu(x),\sigma^2(x))

        ②重参数化技巧

            直接从高斯分布中采样会导致不连续性,无法进行梯度计算。通过引入一个随机变量 ϵ,使得采样过程可微,从而可以通过梯度下降法进行优化(为什么这样就可以优化呢?)

     z = \mu(x) + \sigma(x) \cdot \epsilon

            其中,ϵ∼N(0,I),这样可以保证 z 的采样是可微的,从而支持通过梯度下降进行优化。

    为什么这样做可以优化?

            解决了梯度计算的问题:尽管 z 是随机的,但 z 的计算(即 z=μ(x)+σ(x)⋅ϵ)可以看作是输入 x 和一个与 x 无关的随机变量 ϵ 的函数。

            在这个过程中,ϵ 是一个固定的随机变量(在每次训练中都会重新采样),而 μ(x) 和 σ(x) 是与神经网络的参数相关的,可以通过网络的前向传播计算得到。因此,采样操作变成了一个 连续可微的过程,这使得我们能够通过反向传播来计算梯度,并优化神经网络的参数。

        ③解码器(Decoder)

            解码器 p(x∣z) 接受从潜在空间中采样得到的 z,然后生成数据 x 的分布。通常我们假设解码器输出的是数据的条件概率分布,比如对于图像数据,解码器可能会输出像素的高斯分布。

        ④损失函数

    VAE的损失函数由两部分组成:

    • 重构误差:度量输入数据 x 和生成数据 \hat{x}之间的差异,通常使用均方误差(MSE)或交叉熵损失。
    • KL散度:度量编码器的变分分布 q(z∣x) 与先验分布 p(z) 之间的差异,通常是高斯分布之间的KL散度。

    VAE的总体损失函数是:

    \mathcal{L}(\theta, \phi; x) = - \mathbb{E}_{q(z|x)}[\log p(x|z)] + \text{KL}(q(z|x) \| p(z))

    其中:

    • θ和 ϕ分别是解码器和编码器的参数。
    • 第一个项是重构误差,表示生成数据与输入数据之间的相似度。
    • 第二项是KL散度,表示潜在空间分布与先验分布之间的差异。

      4.应用

              图像生成、图像修复与去噪、数据压缩与降维、异常检测、文本生成与建模、药物发现与分子生成、语音处理、推荐系统、多模态学习、强化学习、医学图像分析、艺术创作、时间序列分析、半监督学习........

      在stable diffusion中的作用:

      (1)VAE应用过程

      • 编码器E_\phi 将图像 x \in \mathbb{R}^{H \times W \times 3} 压缩到潜在空间Z = E_\phi(x) \in \mathbb{R}^{h \times w \times d},典型压缩比 \frac{H}{h} = 8

      • 解码器 D_\psi解码器D_\psi将潜在变量 Z 还原为图像\hat{x} = D_\psi(Z)。 

      (2) 数学目标:变分下界(ELBO)

      VAE的损失函数为:\mathcal{L}_{\text{VAE}} = \mathbb{E}_{Z \sim E_\phi(x)} [\log D_\psi(Z)] - \beta \cdot D_{\text{KL}}(E_\phi(x) \| \mathcal{N}(0, I))

      (3) 在Stable Diffusion中的作用

      • 降维加速:将512x512图像压缩为64x64潜在变量,减少扩散过程的计算量(内存和计算量降低约64倍)。

      • 连续性保证:潜在空间的平滑性使扩散过程更稳定,避免像素空间的高频噪声干扰。

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值