图 1:自动编码器的一般架构。
一般来说,我们希望自编码器能够很好地重建输入。同时,它还应该创建一个有用且有意义的潜在表示 (图 1 中编码器部分的输出)。例如,手写数字上的潜在特征可以是写每个数字所需的行数,或者每条线的角度以及它们之间的连接方式。
学习如何写数字不需要学习输入图像中每个像素的灰度值。人们也不会通过用灰色值填充像素来学习写作。在学习的过程中,我们提取基本的信息,这些信息可以帮助我们解决问题(例如写数字)。这种潜在表示法(如何写出每个数字)对于各种任务(例如可用于分类或聚类的实例特征提取)仅仅理解数据集的基本特征都非常有用。
在大多数经典架构中,编码器和解码器都是神经网络(这是本文将详细讨论的内容) ,因为它们可以很容易地用现有的软件库(TensorFlow 或 PyTorch)进行训练。一般来说,编码器可以写成一个函数 g,这个函数取决于一些参数
其中 h_i ∈ R^q (潜在特征表示)是图 1 中编码器块在输入 x_i 上求值时的输出。注意 g: R^n → R^q。
解码器(以及用
表示的网络输出)可以作为潜在特征的第二个通用函数 f 写入
其中,