深度学习——AE、VAE

news/2024/11/14 9:27:33/

🌺历史文章列表🌺

  1. 机器学习——损失函数、代价函数、KL散度
  2. 机器学习——特征工程、正则化、强化学习
  3. 机器学习——常见算法汇总
  4. 机器学习——感知机、MLP、SVM
  5. 机器学习——KNN
  6. 机器学习——贝叶斯
  7. 机器学习——决策树
  8. 机器学习——随机森林、Bagging、Boosting、集成学习
  9. 机器学习——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
  10. 机器学习——聚类算法(Kmeans、GMM-使用EM优化)
  11. 机器学习——降维

提前预读:图像生成发展起源:从VAE、VQ-VAE、扩散模型DDPM、DETR到ViT、Swin transformer


文章目录

  • 自编码器(Autoencoder, AE)
  • 变分自编码器(Variational Autoencoder, VAE)详解
    • VAE 的结构组成
    • VAE 相比 AE 的优化和改进
      • 概率分布引入
      • 重参数化技巧
      • KL 散度正则化
  • AE 与 VAE 的主要区别
  • 补充
    • 为什么需要重参数化技巧?


自编码器(Autoencoder, AE)

自编码器是一种无监督学习模型,主要用于数据的降维、特征提取或数据去噪。它由两个主要部分组成:

  1. 编码器(Encoder)将输入数据压缩成低维的隐藏表示(即编码),这一部分负责从原始数据中提取特征。假设输入是 X X X,编码器的目标是找到一种映射 f ( X ) = Z f(X) = Z f(X)=Z,其中 Z Z Z 是低维空间的表示。

  2. 解码器(Decoder)将低维的隐藏表示还原回原始数据的近似值,解码器试图从编码 Z 中重建输入 X。这一部分的映射是 g ( Z ) = X ^ g(Z) = \hat{X} g(Z)=X^,其中 X ^ \hat{X} X^是还原后的数据。

AE 的目标是让重构的 X ^ \hat{X} X^ 尽量接近输入 X X X,即最小化 重构误差(通常采用均方误差 MSE 或其他损失函数)。AE 的训练过程是基于无标签数据,通过反向传播和梯度下降来更新编码器和解码器的权重。

优点:

  • 可以用于数据降维,类似于 PCA,但更适合处理非线性数据。
  • 用于图像去噪、异常检测等任务。

缺点:

  • 学到的低维表示可能对生成新样本的能力有限,只是压缩信息,而不具备对输入数据的生成建模能力
  • 通常不适合处理概率问题,无法给出潜在变量的分布信息。

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

VAE(Variational Autoencoder) 是一种概率生成模型,它结合了自编码器(Autoencoder,AE)的结构概率分布,不仅能对输入数据进行重构,还能够生成与训练数据相似的全新样本。它的主要特点是在潜在空间中引入概率分布,使得它可以通过对潜在空间的采样来生成新数据相比于AE,VAE 引入了概率分布和生成建模,使其具备更强的生成能力。

VAE 的结构组成

VAE 与 AE 类似,也由 编码器解码器 组成,但它对编码部分做了关键的改进:

  1. 编码器(Encoder)
  • 在 AE 中,编码器直接输出一个固定的低维表示 Z Z Z,即输入数据通过一系列神经网络变换得到一个低维特征向量。

  • 在 VAE 中,编码器输出的是输入 X X X 对应的潜在变量的均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2,即输入数据被映射为一个潜在空间的分布(通常假设是正态分布)。

    数学表达式为:

    Z ∼ N ( μ ( X ) , σ 2 ( X ) ) Z \sim \mathcal{N}(\mu(X), \sigma^2(X)) ZN(μ(X),σ2(X))

    • 其中 Z 是从该正态分布中采样的潜在变量。
  1. 重参数化技巧(Reparameterization Trick):VAE 需要在潜在空间中进行采样,以便生成不同的样本。然而,采样操作本身是非确定性的,这导致无法对整个网络进行梯度传递为了让梯度能够通过随机采样传播,VAE 引入了重参数化技巧。

    重参数化技巧通过将随机变量分解为可导的确定性部分独立的随机噪声来解决这个问题,以便在训练过程中通过反向传播来优化网络参数。具体来说,它将 𝑧 表示为:

    Z = μ + σ ⋅ ϵ Z = \mu + \sigma \cdot \epsilon Z=μ+σϵ

    其中:

    • μ \mu μ σ \sigma σ编码器输出的均值和标准差(它们是可导的)。
    • ϵ ∼ N ( 0 , 1 ) \epsilon \sim \mathcal{N}(0,1) ϵN(0,1) 是一个服从标准正态分布的随机噪声

    𝑧 的生成过程可以视为一个确定性计算过程(均值和标准差)加上一个独立的随机部分,重参数化技巧确保了模型的可导性。

  • 重参数化,使得采样过程变成了以下步骤:
    • 从标准正态分布中采样噪声 ϵ。
    • 使用编码器输出的均值 𝜇和标准差 𝜎 对采样值进行线性变换,生成 Z Z Z

重参数化技巧 将采样过程改写为可微分的部分(编码器输出的均值和标准差)和不可微的标准正态噪声之和,使得梯度能够通过随机采样传播。这使得 VAE 可以在训练过程中通过反向传播对编码器和解码器进行优化。

在VAE 中,采样是必不可少,用于在潜在空间中生成新的样本,这个过程是不确定的
在AE中,编码器将输入数据压缩到潜在空间,生成一个固定的潜在表示(通常是一个固定维度的向量)。解码器随后利用这个潜在表示重构出原始数据。这一过程是确定性的不需要在潜在空间中进行采样

  1. 解码器(Decoder):解码器部分与 AE 相似,接收潜在变量 Z Z Z,然后将其映射回原始数据空间,生成与输入数据相似的重构数据 X ^ \hat{X} X^

  2. 损失函数
    VAE 的损失函数不仅包含重构误差,还引入了 KL 散度,用于衡量潜在分布与先验分布(通常是标准正态分布之间的差异)。

    • 重构损失(Reconstruction Loss):度量解码器重构输入的能力。与 AE 类似,VAE 也通过最小化输入数据与重构数据之间的误差来训练模型。常用的重构损失是均方误差MSE)或交叉熵损失(CE),根据具体数据类型选择。

    • KL 散度(Kullback-Leibler Divergence, KL Divergence)衡量编码器输出的潜在分布 q ( Z ∣ X ) q(Z|X) q(ZX)指定的先验分布(通常假设是标准正态分布)之间的差异鼓励潜在空间分布接近于先验分布,从而使得模型能够从该潜在空间进行采样生成新数据。

    • 总损失函数
      L VAE = E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] − D K L ( q ( z ∣ x ) ∥ p ( z ) ) \mathcal{L}_{\text{VAE}} = \mathbb{E}_{q(z|x)}\left[\log p(x|z)\right] - D_{KL}\left(q(z|x) \parallel p(z)\right) LVAE=Eq(zx)[logp(xz)]DKL(q(zx)p(z))
      其中:

      • E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] \mathbb{E}_{q(z|x)}\left[\log p(x|z)\right] Eq(zx)[logp(xz)]重构误差项。鼓励解码器生成尽可能与输入数据相似的样本。
      • D K L ( q ( z ∣ x ) ∥ p ( z ) ) D_{KL}\left(q(z|x) \parallel p(z)\right) DKL(q(zx)p(z))KL 散度项。确保潜在空间结构化和生成的多样性。

VAE 相比 AE 的优化和改进

VAE 在 AE 的基础上进行了几个重要的优化和改进,其目的在于增强模型的生成能力,并为潜在空间提供更好的结构:

概率分布引入

AE 直接将输入映射到一个固定的低维表示,不能很好地表达数据之间的变异性。VAE 改进了这一点,编码器输出的是潜在空间的均值和方差,潜在空间中的每一个点都代表了数据的一个可能变体,使得该模型具有生成多样性。

优化目的:引入概率分布后,模型能够通过在潜在空间中进行随机采样生成多样化的样本,而不仅仅是对输入数据的压缩和重构

重参数化技巧

由于潜在变量是通过从分布中采样得到的,普通的 AE 无法通过采样过程来传递梯度,导致无法直接训练生成模型。VAE 通过引入重参数化技巧,使得采样过程可以通过梯度下降优化模型

优化目的:通过重参数化,VAE 可以对潜在分布进行更好的学习和优化,进而提高生成数据的质量

KL 散度正则化

AE 只关注数据重构,容易导致潜在空间缺乏结构,导致生成新数据时效果较差。VAE 通过最小化编码分布先验分布的 KL 散度,使得潜在空间有更好的组织结构。这样的正则化项迫使潜在空间接近标准正态分布,从而确保从潜在空间中采样能够生成合理的新样本。

优化目的:通过 KL 散度的引入,VAE 不仅可以对训练数据进行重构,还可以生成与训练数据分布一致的新样本,潜在空间更具结构化,生成效果更好。

AE 与 VAE 的主要区别

AE 和 VAE 在结构、目的和优化方式上存在多个重要区别:

特性AEVAE
编码器输出固定的低维向量(确定性的表示)隐藏变量的均值 (\mu) 和方差 (\sigma^2)(表示潜在空间的分布
潜在空间没有明确的分布假设假设潜在空间遵循某种概率分布(通常为正态分布)
解码器从固定低维向量生成输入数据的近似从潜在变量的分布中采样,再通过解码器生成输入数据的近似
损失函数仅有重构损失,最小化输入数据与重构数据的差异重构损失 + KL 散度,既保证数据重构效果,又保证潜在空间的分布合理
目的数据降维、特征提取或数据去噪生成新数据(如图像生成、文本生成等),同时保留对输入数据的重构能力
生成新数据的能力无法直接生成新数据可以通过在潜在空间中采样生成与训练数据相似的全新数据

补充

为什么需要重参数化技巧?

在这里插入图片描述
直接从这个分布中采样的过程是随机的,因此梯度无法传播回编码器,导致模型无法进行端到端训练。

为了解决这个问题,重参数化技巧采样过程重新表示为一个确定性计算,从而使整个网络能够进行端到端的梯度传递和优化。

重参数化技巧的核心思想是将随机变量 ( z ) 表示为:
在这里插入图片描述
这样,采样过程可以分解为两个部分:

  1. 确定性部分 μ(x) 和 σ(x):编码器生成的均值和标准差,这两个部分是可导的,能够传递梯度。
  2. 随机性部分 ϵ:标准正态分布的噪声,它与模型参数无关,独立于编码器的计算。

通过这种分解,我们可以将原本不可导的采样过程变为一个可导的操作,使得整个网络可以通过反向传播训练。


http://www.ppmy.cn/news/1546591.html

相关文章

sql表的约束练习题

1. 如何创建一个包含非空约束的表? A. CREATE TABLE t01(id integer, name text, score numeric); B. CREATE TABLE t01(id integer NOT NULL, name text, score numeric); C. CREATE TABLE t01(id integer UNIQUE, name text, score numeric); D. CREA…

装杯 之 Linux指令【补充篇】

“生活就像海洋,只有意志坚强的人,才能到达彼岸” ---马克思 目录 1.grep指令 ​编辑 2.zip/unzip指令 3.tar指令(重要):打包/解包,不打开它,直接看内容 4.bc指令 5.uname 指令 1.grep…

YOLOv8改进 | 利用YOLOv8进行视频划定区域目标统计计数

简介 本项目旨在利用YOLOv8算法来实现视频中划定区域目标的统计计数。YOLOv8是一种目标检测算法,能够实现实时目标检测和定位。视频划定区域目标统计计数是指在一个视频中,对于指定的区域,统计出该区域内出现的目标物体数量。 该项目的工作流程如下:首先,利用YOLOv8算法…

hive表批量造数据

目录 1 . 使用 INSERT INTO 从已有表批量插入数据2. 使用 INSERT OVERWRITE 从文件或目录导入数据3. 使用 Hive 中的 SELECT 语句生成数据4. 使用 RAND() 或 UUID() 生成随机数据5. 使用 hive 的自定义 UDF 生成批量数据6. 使用 Python 脚本结合 Hive 进行数据生成7. 使用 hive…

硬件---4电感---基本概念与特性

一电感是什么 1电感的概念 电感就是一根导线加一个磁性原料。生活中,所有由线圈组成的器件都是电感。 如下图,常见的电感封装,有裸露的也有贴片的。 二电感的基本特性 1流过电感的电流不能发生突变 注意和电容的区别,一个是…

SQL面试题——飞猪SQL面试 重点用户

飞猪SQL面试题—重点用户 在一些场景中我们经常听到这样的一些描述,例如20%的用户贡献了80%的销售额,或者是20%的人拥有着80%的财富,你知道这样的数据是怎么算出来的吗 数据如下,uid 是用户的id ,amount是用户的消费金额 |uid|amount| ---…

深度学习——权重初始化、评估指标、梯度消失和梯度爆炸

文章目录 🌺深度学习面试八股汇总🌺权重初始化零初始化 (Zero Initialization)随机初始化 (Random Initialization)Xavier 初始化(Glorot 初始化)He 初始化正交初始化(Orthogonal Initialization)预训练模型…

Oracle Or子句

OR是Oracle中的逻辑运算符 Oracle OR运算符语法 OR运算符组合了布尔表达式,如果其中一个表达式为真(true),则返回true。以下是OR运算符的语法: expression_1 OR expression_2下表显示了OR运算符在true,false和NULL值之间的结果。…