随着机器学习和人工智能的飞速发展,即将面临数据量激增而难以控制的局面。GPU、TPU等更快的存储和处理机制虽然能够在短时间内处理大量数据,但同时也需要考虑如何在更小的空间内处理数据。这就需要引入今天讨论的主题——自编码器,这是一种允许压缩可用信息的技术。
自编码器是一种基于神经网络框架的无监督学习技术,其训练目标是将输入复制到输出。神经网络设计中会创建瓶颈,隐藏层h用于描述用于表示输入的编码。自编码器网络由三部分组成:首先,编码器压缩图像并使用编码器函数h = f(x)生成代码;然后是瓶颈,在这里有压缩后的知识表示原始输入;最后是解码器,它形成重建r = g(h)。数据在通过架构时被压缩和重构,这一过程在输入特征独立时较为复杂。然而,如果输入数据内部存在某种相关性,现有的依赖关系可以被学习并在输入被强制通过网络瓶颈时使用。
可能已经对自编码器的构想有了模糊的认识。在本节中,将加深理解。特别关注设计自编码器时需要注意的超参数。如前所述,自编码器由编码器、代码和解码器三部分组成:编码器和解码器都是简单的前馈神经网络。代码是具有选定维度的单层ANN。输入和输出层的节点数由输入数据X决定。因此,输入和输出层具有相同数量的节点,并且两者都对应于高维表示。中间隐藏层节点最少,对应于低维表示。训练过程的目标是最小化网络输入和输出之间的平方重建误差。对于学习算法,最常用的策略是反向传播。网络的初始权重对于编码器找到好的解决方案很重要。当初始权重更接近最优解时,反向传播工作更有效。已开发出许多算法来找到好的初始权重。
在训练自编码器之前,需要设置四个超参数。首先是中间层,即代码层的节点数。代码层的尺寸越小,压缩程度越高。其次是编码器和解码器架构中的层数。架构的深度可以微调至完美,并且深层架构优于外部网络。每层的节点数是需要调整的第三个超参数。通常,编码器和解码器在层结构上是对称的,编码器中每一层的节点数在达到代码层之前逐渐减少,然后在解码器架构中类似地逐渐增加。选择损失函数是第四个超参数。最常用的损失函数包括均方误差或二元交叉熵。
自编码器最重要的权衡是偏差-方差权衡。同时,自编码器架构应该很好地重建输入(减少重建误差),同时将低维表示泛化到有意义的内容。因此,为了实现这一属性,让看看为解决这一权衡而开发的不同类型的自编码器。
这些网络提供了一种引入瓶颈的替代方法,而不需要减少节点数量。它通过强制隐藏激活的稀疏性来处理权衡。它们可以添加在瓶颈上或代替瓶颈。应用稀疏正则化的两种方式是使用L1正则化和实现KL散度。不会深入数学细节,但简要概述足以满足本博客的需求。
自编码器一直被认为是具有相同输入和输出的神经网络。主要目标是在避免信息瓶颈的同时尽可能准确地复制输入。然而,设计自编码器的另一种方式是稍微扰动输入数据,但保持纯净数据作为目标输出。通过这种方法,模型不能简单地创建从输入数据到输出数据的映射,因为它们不再相似。因此,使用这种正则化选项会在输入中引入一些噪声,而自编码器被期望重建输入的清洁版本。