在“深度学习”系列中,我们不会看到如何使用深度学习来解决端到端的复杂问题,就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术,以及一些示例和应用程序。
1、引言
上次(Autoencoders - Deep Learning bits #1),我们已经了解了什么是自动编码器(autoencoders),以及它们时如何工作的。今天,我们将看到它们如何以一些非常酷的方式帮助我们将数据可视化。为此,我们将使用**卷积自编码器架构(Convolutional AutoEncoder architecture,CAE)**处理图像。
① 什么是潜在空间?
自动编码器由两个组件组成,这里有一个快速提示。编码器(encoder)将来自高维输入的数据带到瓶颈层(bottleneck layer),那里的神经元数量最少。然后,解码器接受这个编码输入并将其转换回原始输入形状—在我们的例子中是图像。潜在空间是数据位于瓶颈层的空间。

卷积编码器-解码器架构
潜在空间包含图像的压缩表示(compressed representation),这是解码器允许使用的唯一信息,以尽可能忠实地重建输入。为了表现良好,网络必须学会在瓶颈层中提取最相关的特征。
让我们看看我们能做什么!
2、数据
我们将研究可能是最著名的计算机视觉手写数字的MNIST数据集。为了多样性,我通常更喜欢使用不太传统的数据集,但MNIST对于我们今天要做的事情来说真的很方便。
注意:尽管MNIST可视化在互联网上很常见,但本文中的图像是100%由代码生成的,因此您可以将这些技术用于您自己的模型。

MNIST是一个有28×28个手写数字图像的标记数据集。
3、基线—自动编码器的性能
为了理解编码器能够从输入中提取什么样的特征,我们可以首先看一下重建的图像。
注意:在这篇文章中,瓶颈层只有32个单元,这是一些非常非常残酷的维数缩减。如果它是一张图像,它甚至不会是6×6像素。

每个数字都显示在其模糊的重建旁边。
我们可以看到,自动编码器成功地重建了数字。重建是模糊的,因为输入在瓶颈层被压缩。我们需要查看验证样本的原因是为了确保我们没有过度拟合训练集。
这是训练过程动画:
每一步重建训练样本(左)和验证样本(右)。
4、t-SNE 可视化
① 什么是t-SNE?
在处理数据集时,我们要做的第一件事是一种有意义的方式将数据可视化。在我们的例子中,图像(或像素)空间有784维(28×28×1),我们显然无法绘制它。我们面临的挑战是将所有这些维度压缩成我们可以掌握的2D或3D形式。
这就是t-SNE,一种将高维空间映射到2D或3D空间的算法,同时试图保持点之间距离不变。我们将使用这种技术来绘制我们数据集的嵌入,首先直接从图像空间,然后从较小的潜在空间。
注意:t-SNE比它的近亲PCA和ICA更适合于可视化。
② 投影像素空间(Projecting the pixel space)
让我们从绘制数据集(来自图像空间)的t-SNE嵌入开始,看看它是什么样子。
来自验证集的图像空间表示的t-SNE投影。
我们已经可以看到一些数字大致聚集在一起。这是因为数据集非常简单,我们可以使用简单的启发式像素对样本进行分类。看看数字8、5、7和3是如何没有聚类的,这是因为它们都是由相同的像素组成的,只有微小的变化才能区分它们。
对于更复杂的数据,如RGB图像,唯一的聚类将是相同颜色的图像。
③ 投影潜在空间(Projecting the latent space)
我们知道潜在空间包含了一个比像素空间更简单的图像表示,所以我们可以希望t-SNE能给出一个有趣的潜在空间的二维投影。