自动编码器是如何知道哪些功能最突出的



自动编码器通常用于减少维数。它通过减少不必要的维数来压缩图像。它们的工作方式是将输入压缩为潜在空间表示,然后从该表示重建输出。那么,自动编码器是如何知道哪些功能最重要,哪些功能不重要。还有一个问题如何使用自动编码器来提取图像的特征就像在CNN中一样,卷积层负责提取图像的特性。在自动编码器中,如何以及哪一层提取图像的特征?

自动编码器是一个特殊的网络,它试图解决表示为x' = g(h(x))的身份问题,其中h是编码器块,g是解码器块。

潜在空间z是给定输入x的最小表达式,并且它位于网络的中间。可以明确的是,在这样的空间中存在着不同的形状,每个形状都对应于训练阶段给出的特定实例。使用你引用的CNN来支持这一点,它就像一个特征图,但实际上是一堆特征图,整个网络只有一个,而且,它根据训练过程中观察到的内容持有不同的表示。

所以,问题是压缩和解压缩是如何发生的?好吧,用于训练的数据有一个领域,每个例子都有相似之处(所有的猫都有相同的抽象品质,对山脉来说也是一样,都有共同点),因此网络学习如何将描述数据的内容组合成更小的片段,并从更小的片段(范围从0-1)中学习如何构建更大的片段。

从猫身上取同样的样本,它们都有两只耳朵、一只毛皮、两只眼睛等等,我没有提到deatils,但你可以想想这些耳朵的形状、毛皮有多大,可能还有眼睛有多大、颜色和大。想想我作为潜在空间z列出的清单,以及作为x'输出的细节。

有关更多详细信息,请参阅以下针对不同AE变体的详尽解释:https://wikidocs.net/3413.

希望这对你有所帮助。

编辑1:

如何以及哪一层提取图像的特征

其设计:

AutoEncoder是一个设计可以压缩和解压缩训练数据的网络,它根本不是一个任意的网络。

首先,它有一个沙钟的形状,这意味着下一层的神经元比编码器块中的前一层少,并且正好在"沙钟"之后;潜在空间层";它开始做相反的事情,增加解码器块中的神经元大小,直到达到输入层的大小(重建,因此是输出)。

接下来,每一层都是一个Dense层,表示每一层的所有神经元都完全插入到下一层,因此,所有特征都是从一层传递到另一层的。每个神经元的激活函数(理想情况下)是tanh,表示所有可能的输出都是[-1,1];最后,loss function倾向于均方根误差,它试图告诉重建离原始有多远。

这样做的好处是将输入张量标准化,将每个特征的平均值设置为零,这对网络学习有很大帮助,我将在下一步进行解释。

文字很便宜,让我看看反向传播

还记得隐藏层中的值是[-1,1]吗?好吧,这个范围以及权重和偏差(Wx + b)的支持使得在每一层上都有可能具有较少特征的连续组合(从-1到1的值,考虑到其中所有可能的有理数)。

使用反向传播(在loss function中支持),其想法是找到一个权重的最佳点,将域训练集(比如黑白MNIST数字、RGB Cats图像等)转换为编码层中的低维连续集(实际上很小的数字范围在[-1,1]之间),然后,在解码层中,它试图使用相同的权重(记住是沙钟形状的网络)来发射先前CCD_。

类似

把它放在一种游戏中,两个人背靠背,一个人从窗户里看,另一个人前面有一块白板。第一个人向外看,看到了一朵花,上面有所有的细节,然后说向日葵(潜在的空间),第二个人听到了,画了一朵向日葵,上面有这个人过去学到的所有颜色和细节。

请提供真实世界的样本

继续向日葵的类比,想象同样的情况,但你的输入图像(张量)有噪声(你知道,有小故障)。AutoEncoder是用高质量的图像训练的,所以它能够压缩向日葵的概念,然后重建它。故障发生了什么?网络对向日葵的颜色、形状和背景(比方说是蓝天)进行了编码,解码器对其进行了重建,小故障作为残差被留下。这是一个去噪自动编码器,是众多网络应用之一。

最新更新