短文阅读3:Variational Autoencoders (VAEs)

2023-11-14


理解变分自编码器

introduction

在近几年这些深度生成模型中,有两个主要的系列脱颖而出,特别值得关注。它们分别是生成对抗网络(GANs)和变分编码器(VAEs)。
VAE是一个自动编码器,其编码的分布在训练期间被正则化,以确保其潜空间具有良好的属性,使我们能够产生一些新的数据。此外,“variational” 一词来自于统计学中的正则化和变量推理方法(variational inference)之间的密切关系。

如果说最后两句话很好地概括了VAE的概念,那么它们也会引起很多问题。

  1. 什么是自动编码器autoencoder?
  2. 什么是潜空间,为什么要对其进行正则化?
  3. 如何从VAEs生成新的数据?
  4. VAEs和variational inference之间的联系是什么?

在第一节中,我们将回顾一些关于降维和自动编码器的重要概念,这些概念对于理解VAE是很有用的。然后,在第二节,我们将说明为什么自动编码器不能用来生成新的数据,并将介绍变异自动编码器,它是自动编码器的正则化版本,使生成过程成为可能。最后,在最后一节中,我们将基于变异推理,对VAEs进行更多的数学介绍。

降维方法: PCA and Autoencoders

降维架构

首先,我们把encoder称为从 "旧特征 "表示中产生 "新特征 "表示的过程(通过选择或提取),decoder则是相反的过程。降维可以解释为数据压缩,其中encode压缩数据(从初始空间到编码空间,也称为潜空间),而decoder则解压它们。当然,根据初始数据分布、潜空间维度和编码器的定义,这种压缩可能是有损失的,也就是说,在编码过程中,一部分信息会丢失,在解码时无法恢复。
在这里插入图片描述
降维方法的主要目的是在一个给定的系列中找到最佳的编码器/解码器对。换句话说,我们要寻找的是保持最大信息量的一对,因此,在decode时具有最小的重建误差。如果我们分别表示E和D是我们所考虑的编码器和解码器系列,那么降维问题可以写为:
在这里插入图片描述
定义了输入数据 x x x和编码-解码数据 d ( e ( x ) ) d(e(x)) d(e(x))之间的重建误差度。最后注意,在下文中,我们将表示N为数据的数量, n d n_d nd为初始空间的维度, n e n_e ne为缩小(编码)空间的维度。

PCA

原理:
利用线性组合,用少数代表性较强的新指标代替原先多数的原始指标,PCA并没有选择一些特性然后丢弃其余。相反,它创建一些新特性,结果这些新特性能够很好地总结我们想要研究的对象。

如何评价PCA产生的新指标含有的信息量?

正常情况下,n个指标线性组合后会产生n个新的指标,那么我们如何选取这n个新指标?关键的选择标准就是信息量,可以想象,如果新指标所包含的原始x的信息越多,那么用该新指标进行评价,就会越接近真实的情况。
解决方法:研究表明,信息可用新指标的方差来看,方差越大,包含原始信息越多。因为一个线性变化,它的方差越大,数据越离散,代表新指标里的每个原始xi分的越开,数据越具有代表性。
而衡量一个新指标的方差大小可以根据原始指标的协方差矩阵的特征值来判断。

在这里插入图片描述
在这里插入图片描述
故我们只需求出协方差矩阵的特征值即可,再利用特征值λ也可以反解出系数矩阵Ai。
化为降维框架为:
在这里插入图片描述

问题1:什么是自动编码器autoencoder

在这里插入图片描述

从直观上看,整个自编码器架构(编码器+解码器)为数据创造了一个漏斗,确保只有信息的主要结构部分可以通过并被重构。从总体框架来看,通过梯度下降在这些网络的参数上寻找使重建误差最小的编码器和解码器。

PCA和Autoencoders之间的关系

我们首先假设我们的编码器和解码器架构都只有一层且没有激活函数(线性自动编码器)。这样的编码器和解码器就是简单的线性变换,可以用矩阵来表示。在这种情况下,我们可以看到Autoencoders与PCA的明显联系,就像PCA一样,我们正在寻找最佳的线性子空间来投射数据,并在投射时尽可能地减少信息损失。用PCA得到的编码和解码矩阵自然地定义了一种可以通过梯度下降达到的解决方案之一。事实上,可以同时用几个基础来描述同一个最佳子空间,因此,几个编码器-解码器对可以给出最佳的重建误差。此外,与PCA相反,对于线性autoencoders来说,最终得到的新特征不一定是独立的(神经网络中没有正交性约束)。

现在,让我们假设编码器和解码器都是深度的、非线性的。在这种情况下,架构越复杂,自编码器就越能进行高维度的降维,同时保持低的重建损失。直观地说,如果我们的编码器和解码器有足够的自由度(数据量),我们可以将任何数据维度降低到1。事实上,一个具有 "无限能力 "的编码器理论上可以将我们的N个初始数据点编码为1、2、3、…直至N(或更普遍地,作为实轴上的N个整数),且解码器可以没有损失的进行反向解码。

在这里插入图片描述
然而,我们应该记住两件事。首先,在没有重建损失的情况下进行重要的降维往往是有代价的:潜空间中会缺乏可解释和可利用的结构(缺乏规则性)。第二,大多数时候,降维的最终目的不仅仅是减少数据的维度,而是在减少维度的同时,还要保留数据信息的主要部分。由于这两个原因,潜空间的维度和自编码器的 “深度”(定义压缩的程度和质量)必须根据降维的最终目的进行仔细控制和调整。

Variational Autoencoders

自动编码器在内容生成上的局限性

“自动编码器和内容生成之间有什么联系?”,一旦自动编码器被训练出来,我们就有了一个编码器和一个解码器,但仍然没有真正的方法来产生任何新的内容。乍一看,我们可能会认为,如果潜空间足够规则(在训练过程中被编码器很好地 "组织 "起来),我们可以从潜空间中随机抽取一个点,并对其进行解码以获得一个新的内容。然后,解码器将或多或少地像GANS一样行事。
在这里插入图片描述
我们可以通过解码从潜空间中随机抽出的点来生成新的数据。生成的数据的质量和相关性取决于潜空间的规则性。

然而,正如我们在上一节所讨论的,自动编码器的潜空间的正则化是一个难题,它取决于初始空间中的数据分布、潜空间的维度和编码器的结构。因此,要先验地确保编码器将以一种与我们刚才描述的生成过程相适应的方式去组织潜空间对形式是相当困难的。

问题2: 什么是潜空间,为什么要对其进行正则化?

为了说明为什么要对潜空间进行正则化,我们考虑一下前一章给出的例子,其中我们描述了一个强大的编码器和解码器,足以将任何N个初始训练数据放到实轴上(每个数据点被编码为一个实值),并在没有任何重建损失的情况下对它们进行解码。在这种情况下,自动编码器的高自由度(N-1)使得在没有信息损失的情况下进行编码和解码成为可能(尽管潜空间的维度很低),这导致了严重的过拟合,意味着潜空间的其他的点一旦被选中解码就会产生无意义的内容。如果这个一维的例子是模型自动选择的,那么我们可以知道,自动编码器的潜空间规则性问题要比这更普遍,值得特别关注。
在这里插入图片描述
不规则的潜空间使我们无法使用自动编码器来生成新内容。

这种缺乏结构的数据进入潜空间是非常正常的。事实上,在自动编码器被训练的任务中,没有任何东西可以强制得到这样的组织:自动编码器只被训练成以尽可能少的损失进行编码和解码,是不会管潜空间是如何组织的。因此,如果我们不注意架构的定义,那么在训练过程中,网络自然会利用任何过拟合的可能性来尽可能地实现其任务…除非我们明确地对其进行正则化处理。

Definition of variational autoencoders

为了能够将我们的自动编码器的解码器用于生成目的,我们必须确保潜伏空间足够规则。
获得这种规则性的一个可能的解决方案是在训练过程中引入明确的规则化。因此,正如我们在这篇文章的介绍中所提到的,变异自动编码器可以被定义为一个训练是有规律的自动编码器,以避免过拟合,并确保潜伏空间具有良好的特性,从而使生成过程得以进行。

就像标准的自动编码器一样,变异自动编码器是一个由编码器和解码器组成的结构,它被训练成最小化解码后数据和初始数据之间的重建误差。为了引入潜空间的一些规则化,我们对编码-解码过程进行了轻微的修改:我们不是将输入编码为一个单一的点,而是将其编码为潜空间的分布。然后,模型被训练如下:

  1. 输入被编码为潜空间的分布
  2. 从潜空间中抽出一个点,该点来自于该分布中。
  3. 对采样点进行解码并计算出重构误差
  4. 重构误差通过网络进行反向传播。

在这里插入图片描述
在实践中,编码分布通常选择为正态分布,这样就可以训练编码器来学习高斯分布的平均值和协方差矩阵。之所以将输入 x x x编码为具有一定方差的分布,而不是单点,是因为它可以非常自然地表达潜空间正则化:编码器返回的分布被强制要求接近于标准正态分布。我们将在下一小节中看到,我们通过这种方式确保潜空间的局部和全局正则化(局部是由于方差控制,全局是由平均值控制)。

因此,训练VAE时最小化的损失函数是由一个 “重建项”(在最后一层)和一个 “正则项”(在潜伏层)组成的,前者倾向于使编码-解码方案的性能尽可能好,后者倾向于通过使编码器返回的分布接近于标准正态分布来规范潜空间的组织。该正则化项表示为返回的分布与标准高斯分布之间的KL散度,并将在下一节进一步论证。我们可以注意到,两个高斯分布之间的KL散度有一个简化的形式,可以直接用这两个分布的平均值和协方差矩阵来表示。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Intuitions about the regularisation

为了使生成过程成为可能,人们期望从潜伏空间中获得的规律性可以通过两个主要属性来表达:连续性(潜伏空间中两个相近的点一旦被解码就不应该得到两个完全不同的内容)和完整性(对于一个选定的分布,从潜伏空间采样的一个点一旦被解码就应该得到 "有意义的 "内容)。
若VAE仅仅将输入编码为分布而不是简单的点,并不足以确保连续性和完整性。如果没有一个定义明确的正则化项,模型可以学会 "忽略 "返回分布的事实(返回之前举例的一条直线)为了使其重构误差最小化,其行为就会与经典的自动编码器一样(导致过度拟合),它会返回具有微小方差的分布或直接返回平均值的分布。
因此,为了避免这些影响,我们必须对编码器返回的分布的协方差矩阵和平均值进行正则化。在实践中,这种正则化是通过强制要求分布接近标准正态分布(居中和缩小)来实现的。这样,我们就要求协方差矩阵接近于同一性,以防止分布相同,同时要求平均值接近于0,以防止编码后的分布彼此之间相差太远。
在这里插入图片描述
有了这个正则化项,我们就可以防止模型在潜空间中对数据进行远距离编码,并尽可能地鼓励返回的分布 “重叠”,从而满足预期的连续性和完整性条件。当然,对于任何正则化项来说,这都是以训练数据上较高的重构误差为代价的。然而,重重构误差和KL散度之间的权衡是可以调整的,我们将在下一节看到平衡的表达是如何从我们的正式推导中自然产生的。

在结束本小节时,我们可以看到,通过正则化获得的连续性和完整性倾向于在潜空间编码的信息上创造一个 “梯度”。例如,潜空间的一个点位于两个来自不同训练样本的编码分布的平均值之间,它应该被解码为介于给出第一个分布的数据和给出第二个分布的数据之间的东西,因为它可能在两种情况下都被自动编码器采样了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

短文阅读3:Variational Autoencoders (VAEs) 的相关文章

随机推荐

  • 记录下今晚软件测试遇到的大题

    方法如下 测试用例设计方法之边界值分析方法 51Testing软件测试网 软件测试用例分析 习题完美整合版 搜档网 下面是选择排序的程序 其中datalist是数据表 它有两个数据成员 一是元素类型为Element的数组V 另一个是数组大小
  • 安装VS2019 提示 Visual C++ 2015-2019 x64 redistributable安装失败

    最近安装VS2019和UE4的时候总是弹出提示框 忘记截图了 找了张类似的 点击OK之后会弹出下面的对话框 度娘给出茫茫多的解决方案 大部分都是说缺少vc 2015或者vc 2017的相应库 需要先安装低版本库 试了大半天都不能解决 吐血
  • React Native-自定义组件之Slider

    一 背景 最近在进行原生模块改造RN的时候需要用到一个定制的可拖动进度条 但发现react native自带的Slider仅仅是在iOS平台上支持 所以决定自己来定制一个 二 设计思路 组合基础组件和View和Image 搭配PanResp
  • v-model数据绑定到对象的小技巧

    在前面写了v model obj a 后 下面的对象内不用写a这个属性 直接用空对象abj js这类弱语言 会自动将a这个属性set到obj的对象中去 例如 前面绑定了对象中的属性 在后面写对象的时候 可以不写对象属性 直接写一个空对象 在
  • 脑电特征中的微分熵(DE)计算

    最近参加了一个脑电相关的竞赛 其中有一个赛道是情绪识别 根据脑电数据将情绪进行4分类 查了一些文献 使用了包括时域 频域 空间域的一些特征 最后发现微分熵作为特征的分类效果最好 相关参考文献整理下载 https download csdn
  • vcruntime140.dll丢失的解决方法,vcruntime140.dll下载安装教程

    文件vcruntime140 dll需要在电脑打开一个浏览器才能下载顶部输入 dll修复程序 site 按下键盘的回车键打开 然后点击进入下载dll文件安装包 dll文件安装包下载需要点击解压 然后把解压好的文件点击打开 开始安装丢失的vc
  • android 复制文件速度,memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升

    memcpy是C C 的一个标准函数 原型void memcpy void dest const void src size t n 用于从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 neon是
  • 华为OD机试真题B卷 Java 实现【字符串分隔】,附详细解题思路

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA 真题 A卷 B卷 刷的越多 抽
  • 如何使用Blender建3D汉字(保姆级别的详细)

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于建模的学习笔记 本篇是如何使用Blender建3D汉字 这是这个专栏的第一篇 因为不知道把这篇放到哪里 就开了个新的 如何使用Blender建3D汉字 就这种的 如果是的话可以接着往下
  • 计算机科学和PYTHON编程导论_15_概率与分布

    随机程序 掷骰子 import random def rollDie 返回一个1 6的随机整数 return random choice 1 2 3 4 5 6 def rollN n result for i in range n res
  • Matlab回归分析

    线性回归 在实际中 对于情况较复杂的实际问题 因素不易化简 作用机理不详 可直接使用数据组建模 寻找简单的因果变量之间的数量关系 从而对未知的情形作预报 这样组建的模型为拟合模型 拟合模型的组建主要是处理好观测数据的误差 使用数学表达式从数
  • 用gdb.attach()在gdb下断点但没停下的情况及解决办法

    在python中 如果导入了pwntools 就可以使用里面的gdb attach io 的命令来下断点 但是这一次鼠鼠遇到了一个情况就是下了断点 但是仍然无法在断点处开始运行 奇奇怪怪 这是我的攻击脚本 我们运行一下 可以看到其实已经运行
  • Python入门--with语句

    with语句 上下文管理器 with语句可以自动管理上下文资源 不论什么原因跳出with块 都能确保文件的正确关闭 以此来达到释放资源的目的 with open 上下文管理器 with open a txt r as file as起个别名
  • Unity3d-游戏中的小地图制作

    方法一 利用NGJ MiniMap插件 1 导入该插件后 在Mesh Version gt Prefabs中 将NJG MiniMap 2D 拖入到场景中 2 在Hierarchy中点击MiniMap 位于NJG MiniMap 2D gt
  • inc si指令的作用_到底什么是链接,它起到了什么作用?

    几十年以前 计算机刚刚诞生 人们编写程序时 将所有的代码都写在同一个源文件中 经过长期的积累 程序包含了数百万行的代码 以至于人们无法维护这个程序了 于是人们开始寻找新的方法 迫切地希望将程序源代码分散到多个文件中 一个文件一个模块 以便更
  • 如何 debug (调试) maven 插件?

    用惯了 IntelliJ IDEA debug 功能 你知道如何在 IntelliJ IDEA 上调试 maven 插件吗 哈哈哈 那就是这篇文章准没错了 1 准备源码 准备你想要进行 debug 的 maven 插件的源代码 我这里以 m
  • ARM常用汇编指令

    目录 一 汇编基本语法 1 汇编指令的最典型书写模式 二 常用汇编指令 1 push压栈指令 2 pop出栈指令 3 sub指令 4 add指令 5 movs数据传输指令 6 str指令 7 ldr指令 8 bl指令 9 MOVW指令 10
  • C++不定参数,模板函数,模板类详解附实例

    前言 在 C 中 有时我们在写一个函数时并不知道参数的数量和类型 这时需要用到不定参数 模板函数 正文 不定参数 不定参数怎么表示 对于不定参数的表示 就是三个点 注意是英文的点 那么我们在正常使用时函数参数写成这样 funtionType
  • Python 容器序列切片

    视频版教程 Python3零基础7天入门实战视频教程 序列是指内容连续且有序的一类数据容器 前面学的列表 元组 字符串都是序列 并且支持下标索引 切片是指从一个序列中 取出一个子序列 语法 序列 起始下标 结束下标 步长 返回一个新的序列
  • 短文阅读3:Variational Autoencoders (VAEs)

    深度生成网络 VAEs introduction 降维方法 PCA and Autoencoders 降维架构 PCA 问题1 什么是自动编码器autoencoder PCA和Autoencoders之间的关系 Variational Au