深度学习——AE、VAE

🌺历史文章列表🌺

  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.mzph.cn/bicheng/60776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数字图像处理+MATLAB】基于 Sobel 算子计算图像梯度并进行边缘增强:使用 imgradientxy 函数

引言 在图像处理中,边缘通常是图像中像素强度变化最大的地方,这种变化可以通过计算图像的梯度来量化。梯度是一个向量,它的方向指向像素强度增加最快的方向,它的大小(或者说幅度)表示像素强度增加的速度。…

建设展示型网站企业渠道用户递达

展示型网站的主要作用便是作为企业线上门户平台、信息承载形式、拓客咨询窗口、服务/产品宣传订购、其它内容/个人形式呈现等,网站发展多年,现在依然是企业线上发展的主要工具之一且有建设的必要性。 谈及整体价格,自制、定制开发、SAAS系统…

无桥Boost-PFC 双闭环控制MATLAB仿真

一、无桥Boost-PFC原理概述 无桥 Boost-PFC(Power Factor Correction,功率因数校正)的工作原理是通过特定的电路结构和控制策略,对输入电流进行校正,使其与输入电压同相位,从而提高电路的功率因数&#xf…

java访问华为网管软件iMaster NCE的北向接口时传递参数问题

上一篇文章介绍了利用《java访问华为网管软件iMaster NCE的北向接口》的一般性步骤,这里详细介绍其中一个读取性能数据的示例。原因是读取华为网管软件北向接口,完全找不到可供参考的例子。如果不需要传递什么参数,就能获取到结果&#xff0c…

深度学习之pytorch常见的学习率绘制

文章目录 0. Scope1. StepLR2. MultiStepLR3. ExponentialLR4. CosineAnnealingLR5. ReduceLROnPlateau6. CyclicLR7. OneCycleLR小结参考文献 https://blog.csdn.net/coldasice342/article/details/143435848 0. Scope 在深度学习中,学习率(Learning R…

【扩散——BFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int t 2020, off 2020; #define x first #define y second typedef pair<int, int> PII; int dx[] {0, 0, 1, -1}, dy[] {-1, 1, 0, 0}; int dist[6080][6080]; // 0映射到2020&#xff0c;2020…

Linux软件包管理与Vim编辑器使用指南

目录 一、Linux软件包管理器yum 1.什么是软件包&#xff1f; 2.什么是软件包管理器&#xff1f; 3.查看软件包 4.安装软件 ​编辑 5.卸载软件 Linux开发工具&#xff1a; 二、Linux编辑器---vim 1.vim的基本概念 (1) 正常/普通模式&#xff08;Normal mode&#xff0…

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…

数据结构--数组

一.线性和非线性 线性&#xff1a;除首尾外只有一个唯一的前驱和后继。eg&#xff1a;数组&#xff0c;链表等。 非线性&#xff1a;不是线性的就是非线性。 二.数组是什么&#xff1f; 数组是一个固定长度的存储相同数据类型的数据结构&#xff0c;数组中的元素被存储在一…

Vue的基础使用

一、为什么要学习Vue 1.前端必备技能 2.岗位多&#xff0c;绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能&#xff08;Vue2Vue3&#xff09; 二、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 构建用户界面 的 渐进式 框架…

unity单例模式的不同声明(待完善

总结&#xff1a; 这段代码实现了一个泛型单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;用于确保某个类&#xff08;由泛型参数 T 指定&#xff09;在整个应用程序中只有一个实例&#xff0c;并且在第一次访问时才创建该实例。该模式保证了该实例的全局唯一…

SpringBoot后端解决跨域问题

1.全局方式 新建一个conifg配置类&#xff0c;内容如下&#xff1a; Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")//是否发送Cookie.allowCrede…

群控系统服务端开发模式-应用开发-前端登录接口开发

一、修改验证方法 1、修改验证器 loginRules: {username: [{required: true, trigger: blur, validator: validateUsername}],password: [{required: true, trigger: blur, validator: validatePassword}],captcha_code: [{required: true, trigger: blur, validator: validat…

stream学习

Stream流 定义 Steam流&#xff0c;用于操作集合或者数组中的数据&#xff0c;大量结合了Lamda表达式的语法风格&#xff0c;代码简洁。 重点&#xff1a; 流只能收集一次 ​ 获取Stream流 Stream流要与数据源建立连接。 1.list ​ 直接调用steam()即可 // list List<Stri…

计算机三级 数据库技术

第一章 数据库应用系统开发方法 1.1 数据库应用系统生命周期 软件工程:软件工程的思想&#xff0c;即用工程的概念、原理、技术和方法对软件生产、开发的全过程进行跟踪和管理 软件开发方法:瀑布模型、快速原型模型、螺旋模型 DBAS生命周期模型 1.2 规划与分析 系统规划与定…

YOLOv11实战垃圾分类

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的特征提取能力&#xff0c;在多个图像分类任务中展现出卓越性能。本研究针对4种垃圾数据集进行训练和优化&#xff0c;该数据集包含丰富的垃圾图像样本&am…

【初阶二】认识C语言—上

【初阶二】认识C语言—上 1.数据类型2.变量3.常量4.字符串5.转义字符6.注释7.选择语句 认识C语言讲的是C语言的基础知识&#xff0c;目的是让大家认识这些知识&#xff0c;后续文章会把这些知识深入讲解&#xff0c;知识点很多&#xff0c;篇幅原因分为上下两篇 1.数据类型 每…

线性DP 区间DP C++

线性DP 题一 数字三角形 解题思路 三角形内的某个点&#xff0c;可以从这个点的左上方或右上方来到这个点&#xff0c;因此有状态转移方程&#xff1a; f[i, j] max(f[i - 1, j - 1] a[i][j], f[i - 1][j] a[i][j]) 代码实现 #include<iostream> #include<algor…

D68【python 接口自动化学习】- python基础之数据库

day68 Python执行SQL语句 学习日期&#xff1a;20241114 学习目标&#xff1a;MySQL数据库-- 137 Python执行SQL语句插入到数据库 学习笔记&#xff1a; commit提交 自动commit 总结 commit提交&#xff1a;pymysql库在执行对数据库有修改操作的行为时&#xff0c;是需要通…

【项目组件】第三方库——websocketpp

目录 第三方协议&#xff1a;websocket websocket简介 websocket特点 websocket协议切换 websocket协议格式段 websocketpp库介绍 endpoint server connection websocketpp库搭建服务器流程 基本框架实现 业务处理回调函数的实现 http_callback open_callback …