魔王编译

无监督训练用堆叠自编码器是否落伍?ML博士对比了8个自编码器

柏林工业大学深度学习方向博士生 Tilman Krokotsch 在多项任务中对比了 8 种自编码器的性能。

深度学习中的自编码器。图源:https://debuggercafe.com/autoencoders-in-deep-learning/

目前,很多研究者仍在使用堆叠自编码器进行无监督预训练。柏林工业大学深度学习方向博士生 Tilman Krokotsch 对此感到疑惑:堆叠自编码器难道不是算力低下时代训练深度模型的变通方案吗?现在算力相对充足了,为什么还要用?

于是,他决定在多项不同任务中对比原版深度自编码器(AE)和堆叠自编码器。

项目地址:https://github.com/tilman151/ae_bakeoff

Krokotsch 对比了原版深度自编码器所有改变潜在空间行为方式或有可能提升下游任务性能的变体,不包括应用特定的损失(如图像领域的 VGG19 损失)和编码器与解码器类型(如 LSTM vs. CNN)。最终,Krokotsch 选择了以下八种自编码器进行对比:
  • 浅层自编码器

  • 深度自编码器(原版 AE)

  • 堆叠自编码器

  • 稀疏自编码器

  • 去噪自编码器

  • 变分自编码器(VAE)

  • Beta 变分自编码器(beta-VAE)

  • 向量量化变分自编码器(vq-VAE)

Krokotsch 不仅介绍了这些自编码器的独特性,还在以下方面进行了对比:
  • 重建质量

  • 对来自潜在空间的样本的解码质量

  • 潜在空间插值质量

  • 利用 UMAP 可视化得到的潜在空间结构

  • 利用重建误差的异常检测 ROC 曲线

  • 拟合自编码器特征的线性层的分类准确率

所有自编码器均使用相同的简单架构,该架构使用全连接编解码器、批归一化和 ReLU 激活函数,输出层使用 sigmoid 激活函数。除了浅层自编码器以外,所有自编码器均具备三个编码器和解码器层。

潜在空间的维度和网络参数量基本恒定。这意味着变分自编码器比原版有更多参数,因为编码器为维度为 n 的潜在空间生成 2n 个输出。在测试过程中,每个自编码器执行两次训练运行:一次潜在空间的维度为 20,一次维度为 2。第二次训练的模型用于异常检测,第一次的模型用于其他任务。

对比测试使用的数据集为 MNIST。Krokotsch 从训练数据集中随机采样 5000 个样本作为验证集,将默认训练 / 测试分割进一步划分为训练 / 验证 / 测试分割。

接下来我们来看这些自编码器变体及其对比情况。

「参赛选手」:8 个自编码器

Krokotsch 介绍了这些自编码器的工作原理及独特性,并尝试对其性能做出一些假设。

浅层自编码器

浅层自编码器算不上真的竞争对手,因为它的能力远远落后于其他变体。在这里,它作为基线存在。

上式为浅层自编码器的重建公式,从中可以看出自编码器如何以半数学的方式重建样本 x。

浅层自编码器的特点是编码器和解码器中只有一个层。它与 PCA 的区别是在编码器中使用 ReLU 激活函数,在解码器中使用 sigmoid 函数,因此它是非线性的。

一般情况下,自编码器的默认重建损失是均方误差。而 Krokotsch 使用的是二值交叉熵 (binary cross-entropy, BCE),因为它能在初步实验中获得更美观的图像。所有自编码器均使用以下 BCE 版本:

其中 x^(i)_j 是第 i 个输入图像的第 j 个像素,x̂^(i)_j 是对应的重建。损失即汇总每张图像再基于 batch 求平均。这一决策对于变分自编码器非常重要。

深度自编码器

深度自编码器(原版自编码器)是浅层自编码器的扩大版。它们基本相同,只不过深度自编码器拥有更多层。它们的重建公式是一样的。

深度自编码器的潜在空间没有约束,因此应当能够编码最多信息。

堆叠自编码器

堆叠自编码器即通过仅训练浅层自编码器来得到深度自编码器。只不过训练方式不是端到端,而是逐层贪婪训练:首先,以第一个编码器和最后一个解码器形成一个浅层自编码器;训练完这些层之后,使用编码层编码整个数据集;然后基于第二个编码器和倒数第二个解码器层形成另一个浅层自编码器,使用编码得到的数据集训练第二个浅层自编码器;重复这一过程,直到到达最内层。最终得到的深度自编码器由许多个浅层自编码器堆叠而成。

堆叠自编码器与深度自编码器只在训练过程上存在区别,因此它们也具备相同的重建函数。堆叠自编码器的潜在空间没有约束,但是由于贪婪训练,其编码能力略差。

稀疏自编码器

稀疏自编码器在潜码方面存在稀疏约束,潜码中每个元素的活跃概率为 p。为此在训练过程中需要为其添加辅助损失:

其中 z¯(i) 是潜码中第 i 个元素基于 batch 的平均激活值。这一损失函数对应于 p 和 z¯(i) 二项式分布之间的 KL 散度 |z| 的总和。可能存在其他实现,可以满足该稀疏约束。

为了使该稀疏损失成为可能,我们需要将潜码的范围缩放至 [0,1],以便将其理解为概率。这通过 sigmoid 激活函数完成,重建公式如下:

稀疏自编码器的完整损失结合了重建损失和稀疏损失:

在所有实验中,p 值设置为 0.25,β 值设置为 1。

去噪自编码器

去噪自编码器的潜在空间没有约束,它旨在通过对输入数据应用噪声来学习更高效的编码。去噪自编码器并未将输入数据直接馈入网络,而是添加了高斯噪声:

其中 clip 表示将输入裁剪为 [0,1],标量 β 表示噪声的方差。因此,去噪自编码器的训练方式是基于噪声输入数据重建干净样本,重建公式如下:

不过,噪声输入仅在训练过程中使用。在评估该自编码器时,使用的是原始输入数据。去噪自编码器使用的损失函数与之前的自编码器相同。在所有实验中, β 值被设置为 0.5。

变分自编码器

理论上,变分自编码器 (VAE) 与原版 AE 关联不大。但在实践中,其实现和训练均很类似。VAE 将重建解释为随机过程,使之具备不确定性。编码器不输出潜码,而是输出表示潜码概率分布参数;然后,解码器从这一分布中接收样本。默认的分布族选择是高斯 N(μ;diag⁡(Σ))。其重建公式如下:

其中 enc_μ(x) 和 enc_Σ(x) 将 x 编码为μ 和 Σ,两个编码器共享大部分参数。在实践中,单个编码器获得两个输出层而不是一个。问题在于,从分布中采样必须要具备梯度和从解码器到编码器的反向传播。解决方法叫做「重参数化」,将来自标准高斯分布的样本转换为来自被 μ 和 Σ 参数化的高斯分布的样本:

该公式的梯度与 μ 和 Σ 有关,也可以实现反向传播。

变分自编码器要求高斯分布类似于标准高斯,从而进一步约束其潜在空间。其分布参数接受 KL 散度的惩罚:

KL 散度基于 batch 求平均值。重建损失按照上文方式求平均,以保留重建损失和散度损失之间正确的比率。完整训练损失如下:

我们尽量使编码器输出标准高斯,这样就可以直接解码来自标准高斯分布的样本。这种无条件采样是 VAE 的一种独特属性,使其成为类似 GAN 的生成模型。无条件采样的公式如下:

Beta 变分自编码器(beta-VAE)

beta-VAE 是 VAE 的泛化,只改变了重建损失和散度损失之间的比率。散度损失的影响因子用标量 β 来表示,因此损失函数如下所示:

β<1 放松了对潜在空间的约束,而 β>1 则加剧了这一约束。前者会得到更好的重建结果,后者则得到更好的无条件采样。Krokotsc 在严格版本中使用了 β=2,在宽松版本中使用了 β=0.5。

向量量化变分自编码器(vq-VAE)

vq-VAE 使用均匀的类别分布来生成潜码。编码器输出中的每个元素都被该分布中的类别值取代,后者是其最近邻。这是一种量化,意味着潜在空间不再是连续的,而是离散的。

类别本身可以通过将误差平方和最小化为编码器输出来学得:

其中 z 表示编码器的输出,ẑ 表示对应的量化后潜码,sg 表示停止梯度算子(stop gradient operator)。另外,编码器输出的编码结果类似于通过误差平方和得到的类别:

这叫做 commitment 损失。KL 散度损失并非必要,因为 KL 散度是均匀类别分布的的常量。将这种损失与重建损失结合起来,得到:

实验中将 β 的值设置为 1。

由于 vq-VAE 是生成模型,我们也可以执行无条件采样。

自编码器「大乱斗」

重建质量

首先,我们来看每种自编码器对输入的重建质量。以下是不同自编码器在 MNIST 测试集中 16 张图像上的结果:

浅层自编码器无法准确重建一些测试样本。4 和 9 勉强可以辨认,一些数字则完全看不出来。其他自编码器的效果要好一些,但也并不完美:去噪自编码器会使一些细线消失;稀疏和堆叠自编码器则在重建笔画异常的数字(如 5 和第一个 9)。整体的重建结果都有一点模糊,这对于自编码器而言是正常的。vq-VAE 的重建结果没有那么模糊,其作者认为这是离散潜在空间的缘故。

不同自编码器的重建质量区别不大。下表列举了基于样本集合的二值交叉熵平均值:

不出所料,表现最差的是浅层自编码器,它缺乏捕捉 MNIST 结构的能力。原版自编码器表现不错,与稀疏自编码器和 vq-VAE 名列前茅。但稀疏自编码器和 vq-VAE 似乎并未经历潜在空间约束,而 VAE 和 beta-VAE 由于潜在空间约束获得了更高的误差。此外,VAE 中的采样过程引入了损害重建误差的噪声。

采样

该试验仅包括四个可执行无条件采样的自编码器:VAE、宽松和严格版本的 beta-VAE、vq-VAE。对每个自编码器,采样 16 个潜码并解码。对于 VAE 和 beta-VAE,从标准高斯分布中采样。而 vq-VAE 的潜码则从其学得类别中均匀采样得到。

上图中最有意义的生成样本来自严格版 beta-VAE。这是因为其训练重点放在了高斯先验上,编码器输出最接近来自标准高斯的样本,从而使得解码器成功解码采样自真正标准高斯的潜码。另外,其生成图像的变化较小,例如右侧数字既像 5 又像 6。

宽松版 beta-VAE 生成图像则更多样化,尽管可识别的图像较少。标准 VAE 的表现在二者之间。令人略感失望的是 vq-VAE,它采样的图像完全不像 MNIST 数字。

插值

插值任务展示了潜在空间区域的密集程度。Krokotsch 从测试集中编码了两个图像 2 和 7,并执行线性插值。然后将插值解码以接收新图像。如果来自插值潜码的图像能够显示有意义的数字,则类别区域之间的潜码可被自编码器高效利用。

对于所有 VAE 类型,Krokotsch 在瓶颈操作之前即执行插值。这意味着对于 VAE 和 beta-VAE,先插值高斯参数,再进行采样;对于 vq-VAE,则先插值量化

从上图中可以看到 VAE 和 beta-VAE 可以生成相对有意义的插值。其他自编码器则完全不行。

潜在空间结构

Krokotsch 利用 UMAP 算法可视化潜在空间结构,该算法可以将潜在空间缩减至二维,并保留潜码的近邻。下图展示了自编码器每个自编码器潜在空间的散点图,每个点表示测试集中一个图像的潜码,颜色表示图像中的数字。

这些图之间存在一些明显的相似性。首先,原版、堆叠、稀疏、去噪自编码器和 vq-VAE 很相似。0(蓝色)、1(橙色)、2(绿色)和 6(粉色)的簇总能得到很好地分割,因此它们与其他数字看起来区别较大。还有 4-7-9 和 3-5-8 的簇,这表明这些数字之间存在连接,如在 3 上添加两个直线可以得到 8。这些自编码器可以编码数字之间的结构相似性。

但浅层自编码器很难将数字分类为簇。VAE 和 beta-VAE 与其他不同,我们可以从中看到散度损失的影响。

分类

潜在空间图表明很多自编码器擅长将 MNIST 数字分簇,尽管它们并未接收到任何标签。那么如何利用这一点来执行 MNIST 数字分类呢?

Krokotsch 使用 20 维潜码拟合稠密分类层,该层仅在来自训练集的 550 个标注样本训练。也就是说,使用这些自编码器做半监督学习。从头训练原版编码器和分类层获得的准确率是 0.4364。下表展示了这些自编码器的改进效果:

几乎所有自编码器都基于基线有所改进,除了稀疏自编码器。去噪自编码器获得最优结果,其次是原版自编码器和 vq-VAE。去噪自编码器添加的输入噪声似乎产生了最适合分类任务的特征。

最有趣的一点是,即使浅层自编码器也能稍微提升准确率,即使它只有一层,参数也更少。这再一次表明,智能数据使用往往胜过大模型。

VAE 和 beta-VAE 再一次表明,散度损失对潜在空间的约束。稀疏自编码器的结果比基线还差,似乎是因为稀疏特征完全不适合用于分类 MNIST 数字。对于其效果,还需要在其他数据集上再进行测试。

异常检测

使用自编码器执行异常检测任务相对直接。使用训练好的模型,为测试样本计算重建损失,得到异常分数。如果样本的重建结果较好,则它可能类似于训练数据;如果重建结果较差,则样本被认为是异常值。自编码器可以利用训练数据之间的关联来学习有效的低维表示。只要这些关联出现,则测试样本就可以得到不错地重建。反之,则自编码器无法进行很好地重建。

该任务的一大挑战是找出异常分数的最优阈值。下图展示了 ROC 曲线图和曲线下面积:

浅层自编码器以 0.91 的 AUC 将其他自编码器甩在身后,紧随其后的是堆叠自编码器。而且对于不同数字和潜在空间维度而言,不同自编码器的排序是不变的。

为什么这两个在其他任务中拖后腿的自编码器如此擅长异常检测呢?原因似乎在于其他任务依赖潜在空间的泛化能力。而异常检测无需泛化,至少不需要太好的泛化能力。

结论

经过对比实验后,Krokotsch 并未找出自编码器中的王者,他认为选择哪种自编码器取决于任务本身。想要基于噪声生成人脸?使用变分自编码器。图像过于模糊?试试 vq-VAE。分类任务?选择去噪自编码器。如果要做异常检测任务,或许可以尝试浅层自编码器或 PCA。有时,少即是多。

原文链接:https://debuggercafe.com/autoencoders-in-deep-learning/
入门自编码器
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

曲线拟合技术

曲线拟合(fit theory),俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合 (fitting)。

半监督学习技术

半监督学习属于无监督学习(没有任何标记的训练数据)和监督学习(完全标记的训练数据)之间。许多机器学习研究人员发现,将未标记数据与少量标记数据结合使用可以显着提高学习准确性。对于学习问题的标记数据的获取通常需要熟练的人类代理(例如转录音频片段)或物理实验(例如,确定蛋白质的3D结构或确定在特定位置处是否存在油)。因此与标签处理相关的成本可能使得完全标注的训练集不可行,而获取未标记的数据相对便宜。在这种情况下,半监督学习可能具有很大的实用价值。半监督学习对机器学习也是理论上的兴趣,也是人类学习的典范。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

高斯分布技术

正态分布是一个非常常见的连续概率分布。由于中心极限定理(Central Limit Theorem)的广泛应用,正态分布在统计学上非常重要。中心极限定理表明,由一组独立同分布,并且具有有限的数学期望和方差的随机变量X1,X2,X3,...Xn构成的平均随机变量Y近似的服从正态分布当n趋近于无穷。另外众多物理计量是由许多独立随机过程的和构成,因而往往也具有正态分布。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

变分自编码器技术

变分自编码器可用于对先验数据分布进行建模。从名字上就可以看出,它包括两部分:编码器和解码器。编码器将数据分布的高级特征映射到数据的低级表征,低级表征叫作本征向量(latent vector)。解码器吸收数据的低级表征,然后输出同样数据的高级表征。变分编码器是自动编码器的升级版本,其结构跟自动编码器是类似的,也由编码器和解码器构成。在自动编码器中,需要输入一张图片,然后将一张图片编码之后得到一个隐含向量,这比原始方法的随机取一个随机噪声更好,因为这包含着原图片的信息,然后隐含向量解码得到与原图片对应的照片。但是这样其实并不能任意生成图片,因为没有办法自己去构造隐藏向量,所以它需要通过一张图片输入编码才知道得到的隐含向量是什么,这时就可以通过变分自动编码器来解决这个问题。解决办法就是在编码过程给它增加一些限制,迫使其生成的隐含向量能够粗略的遵循一个标准正态分布,这就是其与一般的自动编码器最大的不同。这样生成一张新图片就比较容易,只需要给它一个标准正态分布的随机隐含向量,这样通过解码器就能够生成想要的图片,而不需要给它一张原始图片先编码。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

概率分布技术

概率分布(probability distribution)或简称分布,是概率论的一个概念。广义地,它指称随机变量的概率性质--当我们说概率空间中的两个随机变量具有同样的分布(或同分布)时,我们是无法用概率来区别它们的。

异常检测技术

在数据挖掘中,异常检测(英语:anomaly detection)对不符合预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。 异常也被称为离群值、新奇、噪声、偏差和例外。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

随机过程技术

在概率论概念中,随机过程是随机变量的集合。若一随机系统的样本点是随机函数,则称此函数为样本函数,这一随机系统全部样本函数的集合是一个随机过程。实际应用中,样本函数的一般定义在时间域或者空间域。随机过程的实例如股票和汇率的波动、语音信号、视频信号、体温的变化,反对法随机运动如布朗运动、随机徘徊等等。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

插值技术

数学的数值分析领域中,内插或称插值(英语:interpolation)是一种通过已知的、离散的数据点,在范围内推求新数据点的过程或方法。求解科学和工程的问题时,通常有许多数据点借由采样、实验等方法获得,这些数据可能代表了有限个数值函数,其中自变量的值。而根据这些数据,我们往往希望得到一个连续的函数(也就是曲线);或者更密集的离散方程与已知数据互相吻合,这个过程叫做拟合。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

稀疏自编码器技术

引入了稀疏性限制的自编码器

批归一化技术

批归一化(Batch Normalization,BN)由谷歌于2015年提出,是一个深度神经网络训练的技巧,它不仅可以加快模型的收敛速度,还能在一定程度上缓解深层网络中的“梯度弥散”问题,从而使得训练深层网络模型更加容易和稳定。目前BN已经成为几乎所有卷积神经网络的标配技巧了。从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

暂无评论
暂无评论~