重构输入和少样本学习:带卷积的自动编码器

概述
在数据集中没有标签的情况下,只有少数模型可以表现良好。卷积自动编码器是一种模型,可用于从数据集重新创建图像,创建无监督分类器和图像生成器。该模型使用编码器-瓶颈-解码器架构来了解数据集的潜在空间并重新创建图像。
介绍
为了能够学习如何重新创建数据集,模型必须了解底层潜在空间。卷积自动编码器通过应用连续卷积来压缩图像数据集中的信息。此输出将传递到 Bottleneck 层,即尽可能小的数据集表示形式。使用此压缩表示,解码器会尝试重新创建原始数据集。在重新创建过程中,压缩输出类似于一种降维过程,而重建损失可以用作分类度量。
本文探讨了创建卷积自动编码器背后的架构和方法。
什么是自动编码器?
卷积自动编码器是一种神经网络,可以通过学习输入的底层结构来减少数据中的噪声。它由三部分组成:压缩输入同时保留有用特征的编码器、选择重要特征的瓶颈和重建数据的解码器。 编码器将输入数据压缩为较低维度的表示形式,称为瓶颈或潜在空间。然后,解码器获取压缩的输入数据并尝试重建原始数据。瓶颈层负责选择最重要的特征并将它们传递给解码器。 训练自动编码器包括将原始输入数据与重建数据进行比较,并调整网络权重以最大程度地减少重建误差。
卷积自动编码器的架构图如下所示。

编码器结构
网络的编码器部分是压缩输入数据并将其传递给瓶颈层。压缩创建的知识表示形式比原始输入小得多,但具有其大部分功能。
网络的这一部分由卷积块组成,后跟池化层,这反过来又有助于创建压缩的数据表示。理想编码器的输出应与输入相同,但尺寸较小。编码器应该对输入敏感,以便重新创建它,而不是过度敏感。过度敏感会使模型完美地记住输入,然后过度拟合数据。
瓶颈层
瓶颈是自动编码器中最重要的层。此模块存储传递给解码器的压缩知识。Bottleneck 通过仅允许压缩表示的重要部分传递到解码器来限制信息流。这样做可以确保输入数据具有从中提取的最大可能信息以及找到的最有用的相关性。架构的这一部分也是防止过拟合的措施,因为它可以防止网络直接记忆输入数据。
请注意,瓶颈越小,过拟合就越小(在一定程度上)。
解码器结构
网络的这一部分是一个“解压缩器”,它试图根据其潜在属性重新创建图像。解码器从瓶颈层获取压缩信息,然后使用上采样和卷积来重建它。将解码器生成的输出与真实值进行比较,以量化网络的性能。
潜在空间结构
网络的潜在空间是它从输入数据集创建的压缩表示。这个潜在空间通常有数百个维度,很难直接可视化。更复杂的神经网络具有难以可视化的潜在空间,因此它们通常被称为黑匣子。在卷积自动编码器中,数据的表示越好,潜在空间就越丰富。这里的空间结构是一个大型张量矩阵,用于编码网络层的权重。
自动编码器的用途
卷积自动编码器架构适用于许多用例。下面将介绍其中一些。
1. 降低复杂性:
模型的编码器作为一种降维技术效果很好。例如,如果我们考虑一个图像数据集,我们可以在将每个图像提供给另一个模型之前对其进行压缩。这种压缩减少了输入值的数量,从而使模型不太可能偏向于较小的细节。因此,自动编码器有助于提高第二个模型的性能。
2. 异常检测:
自动编码器通常用于使用编码器-瓶颈-解码器架构重建基本数据。因此,如果给定样本的输出重建误差要大得多,则该样本可能是一个异常值。因此,我们可以使用重建误差来查找数据集中的异常数据点。

3. 无监督学习:
卷积自动编码器的信息压缩能力是无监督学习问题的良好开端。使用自动编码器作为降维技术可以更轻松地在没有任何标签的情况下对数据进行聚类。此聚类分析可能没有用,但可以作为许多其他解决方案的起点。

4.图像压缩:
自动编码器可用于图像压缩,方法是在图像数据集上训练网络,然后使用网络的编码器部分压缩新图像。然后,网络的解码器部分可以重建压缩图像,从而在图像质量和压缩比之间进行权衡。与传统的图像压缩方法相比,这种方法可以实现高压缩率,同时将图像质量损失降至最低。自动编码器也可用于有损图像压缩,即在压缩过程中会丢失一些信息,但仍保持整体图像质量。

什么是卷积神经网络?
CNN或卷积神经网络是深度学习的关键组成部分,它可以通过分析输入数据的示例来学习识别输入数据中的模式。CNN 通常由一个输入、多个隐藏层和一个输出组成。CNN 使用神经元组来识别模式并执行各种任务,例如识别对象、相似的分组项目和图像的单独部分。CNN 很有用,因为它们可以通过学习特征“过滤器”来理解给定大量数据的空间和时间依赖关系。复杂的CNN可以对以前计算机无法理解的大量数据进行建模。
一个简单的CNN如下所示。

卷积自动编码器是一种基于 CNN 的架构,是本文的重点。
自动编码器的实现
卷积自动编码器有一些超参数,必须在训练前进行调整。以下部分将讨论这些超参数、使用的重建损失以及简单卷积自动编码器架构的一般实现。
一个示例用例是重新创建 MNIST 数据集。下图显示了针对此类任务训练的自动编码器的输入和输出。第一行是原始输入,第二行是自动编码器的输出。在这种情况下,获得了完美的重建。

代码大小
代码大小定义为瓶颈层的大小,从而决定输入数据在解码前的压缩程度。代码大小是需要调整的最重要的超参数。
层数
卷积自动编码器与其他类型的网络类似,因为层数是一个超参数。请注意,增加层数会增加训练网络的时间。更高的模型深度也会增加推理时间。
每层节点数
此超参数控制每层的权重。通常,编码器中的节点数会减少,解码器中的节点数会增加。
重建损失
卷积自动编码器经过训练以最小化的损失函数称为重建误差。此损失函数取决于我们使用的数据类型。对于基于图像的数据,重建损失可以是 MSE、L1 或二进制交叉熵损失。
编码器
编码器可以使用一堆 2D 卷积创建,从大尺寸开始,然后慢慢减小尺寸。每个卷积后面都有一个 2D Max-Pooling 层。ReLU 激活贯穿始终。
在 Keras 中,编码器可能如下所示。
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
译码器
解码器由后跟上采样层的 2D 卷积块组成。网络的这一部分在 Keras 中如下所示。
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(16, (3, 3), activation='relu')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
结论
- 卷积自动编码器是一种强大的无监督学习技术。
- 本文详细介绍了编码器-瓶颈-解码器架构。
- 获得的重建损失是一种有价值的分类和图像生成资源。
- 本文还解释了多个用例,例如异常检测、降低复杂性等。
- 本文还提供了一个模板,用于在 Tensorflow 中实现卷积自动编码器。
更多推荐
所有评论(0)