最近读了Hinton在2006年发布的论文Reducing the dimensionality of data with neural networks。因此对降维方面做了一些小的总结。
降维是指在某些限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程。降维可以进一步细分为特征选择和特征检测两大方法。
特征选择:假定数据中包含大量冗余或无关变量(或称特征、属性、指标等),旨在从原有变量中找出主要变量。
例如:ISOMAP(等度量映射)、LLE(局部线形嵌入算法)
特征提取:将高维数据转化为底维数据的过程。在此过程中可能舍弃原有数据、创造新的变量。
例如:PCA(主成分分析)、LDA(线形判别分析)、Autoencoder(自编码深层神经网络)
以上是wiki给出的定义和解释。但是在民间还有一种分类方法,就是按照其降维算法本身进行分类,可以分为线形和非线性。
线形降维就是指,在降维的过程中所利用的算法是线性的,例如:PCA、ICA、LDA、因子分析等
同样的非线性降维就是指,利用非线性算法进行降维的,例如:ISOMAP、LLE、Autoencoder network
(由于降维的算法实在太多,这里只是简单的给出了一些常用的算法)
当然算法的分类不仅仅只能这样分,还有许多其他的分类,例如:监督的和非监督的等
今天这里主要是介绍一下Hinton文章中所写到的Autoencoder算法,下图是本算法的结构图:
不难看出整个算法可以分为两个部分,一个是encoder部分,一个是decoder部分。
PS:这里需要注意一下,虽然图中给出的是两个部分,8层(中间那层两边都在用)。但是实际的层数是4层。只是为了方便理解才将其展开。
首先将一下整个算法的流程:
1、对原来输入的数据(这里用x代替)通过 Restricted Boltzmann Machines (RBM,受限玻尔兹曼机),进行预处理,将降维提取数据。这里使用的是神经网络前向传播,得到一个输出z
2、对应的使用神经网络后向传播,构建反向的网络。实际的网路不变,直接反向传播数据(实际就是刚刚的逆过程)就可以了。得到一x'
3、比对x和x',构建cost function函数并调节W(即权重值)和固定参数b使得x=x'。
4、最终的一个最小的cost function函数值,之后使用这时的W和b作为参数,构建Autoencoder network。
(具体公式可以下载PPT进行查看,PPT中最后附上了运算之后的效果展示图)
编者:KJC