自动编码器如何知道哪些特征最突出?

How do autoencoders came to know that which features are most salient?

自动编码器通常用于减少维数。它通过减少不必要的维数来压缩图像。 .它们的工作原理是将输入压缩为潜在的 space 表示,然后从该表示中重构输出。那么,自动编码器是如何知道哪些特征最需要保留,哪些不重要而应该舍弃。 还有一个问题是 自动编码器如何用于提取图像的特征就像在CNN中一样,卷积层负责提取图像的特征。在自动编码器中,如何以及哪一层提取图像的特征?

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

潜在 space z 是给定输入 x 的最小表达式,它位于网络的中间。澄清一下 space 中存在不同的形状是有效的,每个形状都对应于训练阶段给出的特定实例。使用您推荐的 CNN 来支持这一点,它就像一个特征图,而不是网络中的一堆特征图,只有一个,而且它根据训练期间观察到的内容持有不同的表示。

所以,问题是压缩和解压是怎么发生的?好吧,用于训练的数据有一个域,每个实例都有相似之处(所有的猫都具有相同的抽象品质,山也一样,都有一些共同点),因此网络学习如何将描述数据的内容适应更小的组合的碎片,以及从较小的碎片(范围为 0-1)如何构建更大的碎片。

从猫身上取同样的样本,它们都有两只耳朵,有毛,有两只眼睛等等,我没有提到细节,但你可以想想那些耳朵的形状,毛皮,可能那些眼睛有多大,颜色和亮度。考虑一下我作为潜在 space z 和细节作为 x' 输出的清单。

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

希望对您有所帮助。

编辑 1:

如何提取图像的特征,在哪一层提取?

其设计:

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

首先,它具有沙钟的形状,这意味着下一层的神经元数量少于编码器块中的前一层,并且紧接在“潜在 space 层”之后通过增加解码器块中的神经元大小开始做相反的事情,直到它达到输入层的大小(重建,因此输出)。

接下来,每一层都是一个Dense层,也就是说每一层的所有神经元都完全插入到下一层,所以,所有的特征都从一层到另一层。每个神经元的激活函数(理想情况下)是 tanh 表示所有可能的输出都是 [-1,1] 情况下;最后,loss function 往往是 均方根误差 ,它试图说明重建与原始的差距。

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

话不多说,给我看看反向传播

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

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

类比

为了把它变成一种游戏,两个人背靠背,一个人看着window,另一个人面前有一块白板。第一个向外看,看到一朵花的所有细节,然后说向日葵(潜在 space),第二个人听到那个,然后用那个人过去学到的所有颜色和细节画一朵向日葵。

请提供真实样本

继续用向日葵做类比,想象同样的情况,但是你的输入图像(张量)有噪声(你知道的,毛刺)。 AutoEncoder 使用高质量图像进行训练,因此它能够压缩向日葵概念,然后重建它。故障是怎么回事?网络对向日葵的颜色、形状和背景(假设是蓝天)进行了编码,解码器对其进行了重构,故障被作为残差留下。而这个,就是Denoise AutoEncoder,网络的众多应用之一。