自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系

PCA(主成分分析)原理简介

自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系_第1张图片
自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系_第2张图片
PCA将复杂事情简单化,通过降维映射和线性变换来寻找一个“方差最大”、“误差最小”变量来表征数据特征。
PCA利用降维的思想,把多指标转化为少数几个综合指标。PCA是一种简化数据集的技术,它是一个线性变换,这个变换把数据变换到一个新的坐标系统中。主成分分析经常用于减少数据集的维数,同时保持数据集的对方差贡献最大的特征,往往能够保留住数据的最重要方面的特征。

但是如果数据是非线性关系呢?不能使用坐标表示,那应该如何降低维度?

自编码器:AutoEncoder

最简单的形式自动编码器是一个神经网络,它首先尝试做两件事。
自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系_第3张图片
首先编码器将输入数据压缩到较低维度,然后解码器尝试使用较低维度的数据重新创建原始输入,换句话说,它试图反转编码过程。原始数据和输出数据的误差称为重构误差。
自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系_第4张图片
通过训练网络来最小化数据集上的重构误差,网络学会利用数据中的自然结构,找到了一个有效地低维表示。
编码器如同PCA一样,难免会迫使信息丢失,使得解码器具有不完美的信息并训练。整个网络以最小化重构错误,所以我们需要编码器和解码器一起工作以找到将输入数据压缩到较低维度的最有效方法。
我们的真实数据不是随机的,而是具有结构,这种结构意味着我们不需要完整输入空间的每个部分来表示我们的数据,
编码器的工作是从中映射它将完整的输入空间转化为有意义的较低维度。
如果是随机选取,我们就很难利用新坐标系下的输入来还原原数据。这就是为什么我们要使用自编码器。

卷积自编码器

卷积自编码器属于传统自编码器的一个特例,它使用卷积层和池化层替代了原来的全连接层。

传统自编码器一般使用的是全连接层,对于一维信号并没有什么影响,而对二维图像或视频信号,全连接层会损失空间信息,通过卷积操作,卷积自编码器能很好的保留二维信号的空间信息。
自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系_第5张图片

正则自编码器之去噪自编码器

去噪自编码器是一类接受损坏数据作为输入,并训练来预测原始未受损数据作为输出的自编码器。(相当于添加了正则项)
在将输入传递到网络之前添加噪声,因此如果它是图像,也许你添加了模糊,然后你让网络学习如何消除你刚刚增加的噪声并重建原始输入,这样重建误差就会稍微变小。
去噪自动编码器可以通过卷积层来增强,以产生更有效的结果。

如图是手写数字MNIST数据集,上面一行是添加噪音的图像,下面一行是去噪之后的结果。
自编码器(AutoEncoder) 对数据的降维和去噪 及与PCA之间的联系_第6张图片

总结

从直观上来看,自动编码器可以用于特征降维,类似主成分分析PCA,但是其相比PCA其性能更强,因为其可以学习到数据之间的非线性关系。自编码器作为特征提取器,在完成训练后,我们砍掉并丢弃解码器只使用网络的编码器部分,然后编码器将我们的原始数据转化为新的坐标系;还可以用其替换缺失值
除了进行特征降维,自动编码器学习到的新特征可以送入有监督学习模型中,所以自动编码器可以起到特征提取器的作用。举个例子,我有一张清晰图片,首先我通过编码器压缩这张图片的大小(如果展现出来可能比较模型),然后在需要解码的时候将其还原成清晰的图片。
那么此时可能会有人问了,好端端的图片为什么要压缩呢?其主要原因是:有时神经网络要接受大量的输入信息,比如输入信息是高清图片时,输入信息量可能达到上千万,让神经网络直接从上千万个信息源中学习是一件很吃力的工作。压缩使得提取出原图片中的最具代表性的信息,缩减输入信息量,再把缩减过后的信息放进神经网络学习,使得学习起来更简单轻松。
所以也可以说自编码是一种非监督学习,我们通常只会用到自编码前半部分。

你可能感兴趣的:(python项目,#学习记录,机器学习,神经网络,深度学习,python,卷积)