自编码器如何知道哪些特征是最重要的?

自编码器通常用于降低维度。它通过减少不必要的维度来压缩图像。它们的工作原理是将输入压缩成潜在空间表示,然后从这个表示中重建输出。那么,自编码器如何知道哪些特征是最重要的需要保留,哪些是不重要的可以丢弃呢?还有一个问题是,自编码器如何像CNN中的卷积层那样用于提取图像特征?在自编码器中,哪一层以及如何提取图像特征?


回答:

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

潜在空间z是给定输入x的最小表达,它位于网络的中间。需要明确的是,在这样的空间中存在不同的形状,每个形状对应于训练阶段给定的某个实例。使用你提到的CNN来支持这一点,这就像一个特征图,但不是网络中一系列的特征图,而只有一个,并且它根据训练期间观察到的内容持有不同的表示。

那么,压缩和解压缩是如何发生的呢?训练数据有一个领域,每个实例都有相似性(所有的猫都有相同的抽象品质,山也是如此,所有的山都有某些共同点),因此网络学会了如何将描述数据的内容压缩成更小的组合,并从这些更小的组合(范围从0到1)中构建更大的组合。

以猫为例,所有的猫都有两只耳朵,有毛,有两只眼睛等等,我没有提到细节,但你可以考虑这些耳朵的形状,毛的质地,可能还有眼睛的大小,颜色和亮度。把我说的那一列视为潜在空间z,细节视为x'输出。

有关更多细节,请参阅此关于不同AE变体的详尽解释:https://wikidocs.net/3413

希望这对你有帮助。

编辑1:

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

其设计:

自编码器是一种网络,其设计使得可以压缩和解压缩训练数据,绝不是一个任意的网络。

首先,它有一个沙漏形状,这意味着在编码块中下一层的神经元比前一层少,而在“潜在空间层”之后,它开始做相反的事情,通过在解码块中增加神经元的大小,直到达到输入层的尺寸(因此是重建,即输出)。

其次,每一层都是一个Dense层,这意味着每一层的所有神经元都完全连接到下一层,因此,所有特征都从一层传递到另一层。每个神经元的激活函数(理想情况下)是tanh,这意味着所有可能的输出都在[-1,1]范围内;最后,损失函数往往是均方根误差,它试图说明重建与原始数据的差距有多大。

一个额外的好处是将输入张量标准化,将每个特征的均值设为零,这大大帮助网络学习,我将在下面解释。

言语空洞,让我看看反向传播

记得隐藏层的值在[-1,1]范围内吗?这个范围以及权重和偏置的支持(Wx + b)使得每一层都可以连续组合更少的特征(从-1到1的所有可能的有理数)。

通过反向传播(由损失函数支持),目标是找到一组合适的权重,将训练集的领域(比如黑白MNIST数字,RGB猫图像等)转换成编码层中的低维连续集(非常小的数字,范围在[-1,1]之间),然后,在解码层中,它试图使用相同的权重(记住这是一个沙漏形状的网络)来发出前一个[-1,1]组合的更高表示。

一个类比

为了把这个变成一种游戏,两个人背靠背,一个人透过窗户看,另一个人面前有一块白板。第一个人向外看,看到一朵花的所有细节,说向日葵(潜在空间),第二个人听到这个,就画出一朵向日葵,带有那个人过去学到的所有颜色和细节。

请给我一个现实世界的例子

继续向日葵的类比,想象同样的情况,但你的输入图像(张量)有噪声(你知道的,出现故障)。自编码器是用高质量图像训练的,所以它能够压缩向日葵的概念,然后重建它。噪声怎么样了?网络编码了向日葵的颜色、形状和背景(假设是蓝天),解码器重建了它,噪声作为残留被抛在后面。这就是去噪自编码器,网络的众多应用之一。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注