AutoEncoders 是一个特殊的网络,它试图解决x' = g(h(x)) 表示的身份问题,其中h 是编码器块,g 是解码器块。
潜在空间z 是给定输入x 的最小表达式,它位于网络的中间。有必要澄清一下,在这样的空间中存在不同的形状,每个形状都对应于训练阶段给出的特定实例。使用您提到的 CNN 来支持这一点,它就像一个特征图,但整个网络中只有一个特征图,而且它根据训练期间观察到的内容持有不同的表示。
所以,问题是压缩和解压缩是如何发生的?好吧,用于训练的数据有一个域,每个实例都有相似之处(所有的猫都有相同的抽象特征,山也一样,都有一些共同点),因此网络学习如何将描述数据的内容拟合成更小的组合的碎片,以及从较小的碎片(范围从 0 到 1)如何构建更大的碎片。
从猫身上抽取相同的样本,它们都有两个耳朵,有一个毛皮,有两个眼睛等等,我没有提到细节,但你可以想想那些耳朵的形状,毛皮是怎么来的是并且可能那些眼睛有多大,颜色和亮度。考虑一下我作为潜在空间 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] 之间的小数字),然后,在解码层中,它尝试使用相同的权重(记住是沙钟形状网络)来发出前一个@987654337 的更高表示@组合。
类比
为了把它变成一种游戏,两个人背靠背,一个人透过窗户看,另一个人在前面有一块白板。第一个人向外看,看到一朵花的所有细节,然后说向日葵(潜在空间),第二个人听到了,并用他过去学到的所有颜色和细节画了一朵向日葵。
请提供真实世界的样本
继续用向日葵的类比,想象同样的情况,但你的输入图像(张量)有噪声(你知道,有问题)。 AutoEncoder 使用高质量图像进行训练,因此它能够压缩向日葵概念,然后对其进行重构。故障是怎么回事?网络对向日葵的颜色、形状和背景(假设是蓝天)进行编码,解码器对其进行重建,将故障作为残留物留下。而这,就是 Denoise AutoEncoder,网络的众多应用之一。