文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译

时间:2023-03-09 00:16:21
文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译

注明:本人英语水平有限,翻译不当之处,请以英文原版为准,不喜勿喷,另,本文翻译只限于学术交流,不涉及任何版权问题,若有不当侵权或其他任何除学术交流之外的问题,请留言本人,本人立刻删除,谢谢!!

本文原作者:G.E.Hinton* and R.S.Salakhutdionv

原文地址:http://www.cs.toronto.edu/~hinton/science.pdf

为了重构高维的输入向量,可以通过训练一个具有小的中间层的多层的神经网络,从而把高位数据转换成低维的代码。梯度下降法能够用于这种自动编码网络中的权值调整,但是这只有在初始权值接近于好的方法(?)时才会起到很好的作用,本文描述了一种初始权值的有效方法,该方法允许深度自动编码网络学习低维的代码(原文“code”,暂时未想好更好的表述),该方法与主成分分析方法相比在数据降维方面能有更好的效果。

数据降维有助于高维数据的分类,可视化,通信以及存储。现广泛应用的降维方法是主成分分析方法(PCA),该方法寻找数据集中方差的最大值方向,并且按照这个最大值方向坐标呈现数据(?,可查看关于PCA的解释,此处是老外的理解表述,可能不符合我们的思维方式),我们描述了一个非线性的主成分分析方法,该方法使用一个自适应的多层的编码网络,将高维的数据转化成低维的代码

,同时利用一个类似的“decode”网络将这些代码还原成原始数据。在这个“ecode”和“decode”(此处为表述清楚使用原文这两个单词)网络中开始权值都是随机产生的,他们同时训练以便将原始数据和重构数据之间的差距降到最小,其中的梯度是通过将“decode”(重构网络)和“encode”(编码网络)之间的误差反向传播的链式法则获得的(?),这整个系统叫做“autoencode”(自动编码机),如图1所示。

如果一个非线性的自动编码机具有多个隐含层(2-4层),那么优化它的权值是非常困难的,

初始权值数量过大,会使“autocode”陷入局部最小值,初始权值数量过小,开始几层的梯度变化就会很小,训练多隐含层的“autocode”就会很难实现,如果初始权值接近一个好的状况(原文“good solution”,不知是不是这个意思。。)梯度下降就会表现很好,但是找到这样一个初始权值需要一个与众不同的算法,这种算法需要一次只能学习一层的特征。(搞不懂,,难道是每层需要不同的算法??+_+)我们介绍了一个二进制的“pretraining”程序,并把它推广到了实质数据集,结果表明它适用于不同的数据集。

二进制向量整体(例如图像)可以使用一个两层的受限玻尔兹曼机来建模,该模型利用对称的权值将随机的二进像素值连接到随机的二进制特征提取器。因为RBM可见层单元的状态是可见的,所以可见层单元的像素值就相当于RBM的可见层;特征提取层就相当于隐含层,可见层和隐含层之间的联合配置(v,h)具有一个能量(?此处能量的概念来自原文“energy”,但是不知合适否),该能量是通过以下函数(1)得到的

文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译

其中vi和hi分别是第i个像素和第j个特征的二进制状态,bi和bj是它们的偏置值,wij是它们之间的权值,这个网络通过这个能量函数给每一个可能的图像分配了一个概率值,就像(8)那样。

通过调整权值和偏置来降低或者提高图像的能量,从而提高训练图像的概率值,虚构出真实的图像,对于一副给定的图像,每个特征提取器j的二进制状态hj根据σ(bj+∑iviwij)得出的概率值,被设置成1,其中σ(x)是一个逻辑函数1/[1+exp(-x)],bj是第j个偏置,vi是第i个像素的状态,wij是i和j之间的权值。一旦隐含层单元之间的二进制状态确定后,这个虚构的(层,暂且叫做层,)就根据σ(bj+∑iviwij)得到的概率值设定可见层的状态为1,其中bi是第一个偏置值。

隐含层单元的状态每更新一次,就产生虚构层(对应前面的“层”)的特征。权值的改变是通过文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译

实现的,其中ε是学习率,<vi hj>是。。。。(没理解)。在偏置方面使用了一个简单的学习规则,这个学习规则即使在它(指的应该是∆wij)不是非常遵循训练数据的梯度时也能起到很好的作用。

利用单层的二进制特征模拟图像数据集并不能起到很好的作用。在学习了一层特征提取器之后,我们可以把其中 的激活单元-也就是被被数据驱动的状态-作为第二层特征提取的输入数据。第一层的特征提取器就变成了下一层RBM的可见层单元,这样一层接着一层的学习能够在每一代中重复许多次,这表明增加一个额外层能够提高模型分配给训练数据一个更低的概率值下界,并且能够提供每一层不用减少的特征提取器的数量和正确的初始化权值。这个界(bound,不知如何翻译)不适合有少量的特征提取器的高层,但是这种一层接一层的学习算法无疑是深度自动编码机预训练权值的一个非常有效方法。每一层特征提取器都会获取本层和下一层之间强劲的,高度规则话的相关性特征,对于各种各样的数据集,这种方法是一种渐进的揭示其中低维的非线性结构的有效方法。

在预训练特征提取器的许多层以后,这个模型就被展开成一个编码器和解码器,编码器和解码器的初始化就使用相同的权值。全部的微调状态就会通过实际的确定概率来来代替原来随机的激活状态,并且为了优化重构,这个微调会在整个自动编码机中使用反向传播来微调权值。

对于连续数据,RBM第一层的隐含层单元仍然是二进制的,但是其中的可见层是通过带有高斯噪声的线性单元产生的,  如果高斯噪声具有单位方差,那么隐含层单元的随机更新规则仍然是相同的,并且可见层单元i的更新来自于带有单位方差和bi+∑jhjwij均值的高斯样本(??)。

在本文的所有实验中,每一个RBM的可见层单元都是真实值逻辑单元,(?)值的大小在区间[0,1]之间。但是训练高层次的RBM时,可见层单元的状态是根据上一层的RBM隐含层单元的激活概率来设置激活状态的,与之相反的是,每一个RBM的隐含层单元除了顶层的那一个之外,都有随机的二进制值。顶层的RBM单元是随机的真实值,这些数值来自于一个单位方差高斯变量(?),这些变量的均值由RBM的逻辑可见层单元输入决定。这允许低维的代码好好利用连续变量并且能够和PCA进行对比。关于预训练和微调的细节可以在(8)中找到。

为了展示本文的预训练算法和微调网络,本文训练了一个非常深的自动编码机,该编码机运行在一个合成的数据集上,这个数据集包含的是由三个随机点产生的二维曲线(不知对否)。这个数据集的维数是知道的,并且每一个像素的强度和六个数字(?)之间是非线性的关系。像素强度限制在[0,1]之间,并且是非高斯分布的,因此,我们在自动编码机使用logistic输出,微调学习过程(?)使交叉熵误差最小,交叉熵误差是

文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译

其中的Pi是第i个像素的强度, 文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译是重构的第i个像素的强度。

该自动编码机由大小分别为(28*28)-400-200-100-50-25-6的不同层组成,重构编码机也是同样对称构成。这六个编码层都是线性的,除此之外其他的都是logistic的。网络中的训练图像有20000张,测试图像有10000张,该自动编码机把784维的像素转变成6个真实的数字(numbers,感觉翻译的不好,),通过这6个数字就能得到近乎完美的重构。PCA的重构与之相比还是较差的。如果没有预训练,即使经过长时间的训练,这个深度自动编码机总是重构训练数据的平均值。在数据和代码之间只有一个隐含层的浅层的自动编码机也能用来学习,但是预训练能够减少总的训练时间。当它们的参数数量相同的时候,深度自动编码机比浅层的网络在测试集数据上能产生更低的重构误差,但是随着参数个数的增加,这种优势会消失。

下一步,我们使用784-1000-500-250-30自动编码机对所有MNIST手写数字训练集的图像进行编码提取。我们用于预训练和微调的MATLAB代码可以在(8)中获得。所有的单元都是logistic类型,除了在代码层中的30个线性单元。自动编码机经过60000张训练图像的微调之后,在10000张新的测试图像上的重构效果比PCA还要好。一个二维的自动编码机比两个主成分的可视化效果还要好。

我们还是用分别有625-2000-1000-500-30个线性输入单元的自动编码机来探究灰度图像的30个维度的编码(?)这些灰度图像来自Olivetti人脸数据库。结果显示(译者加)自动编码机性能优于PCA。

当把文本作为训练集时,自动编码机能够产生快速检索的代码。本文把804414篇新闻报道表示成一个向量,其中的元素是2000个常见的词根的文档概率(?),用其中的一半来训练一个2000-500-250-125-10的自动编码机,训练中使用多分类交叉熵误差函数文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译对网络进行微调。其中的是个输出单元是线性的,剩余的隐含层单元是logisti的。 当使用余弦函数cos来衡量两个代码(?)之间的相似度时,自动编码机明显优于潜在语义分析(LSA),该算法是基于PCA的一个著名的文本检索算法。同时,自动编码机也优于局部嵌入映射(local linear embedding),该算法是一种非线性降维算法。

Layer-by-layer pretraining同样能够用来分类和回归,在广泛使用的MNIST手写数字识别任务上,有据可查的报道是,随机初始化反向传播算法的最好错误率为1.6%,支持向量机为1.4%。然而通过对784-500-500-2000-10的一个网络进行预训练,反向传播算法使用梯度下降法和一个小的学习率得到的错误率为1.2%。预训练确保了权重的大部分信息来自于建模的图像,因此自动编码机具有更好的泛化能力(generalization,?)。有限的标签信息,仅仅用来微调预训练得到权值。

显而易见,如果上世纪80年代能够满足计算机速度做够快,数据集足够大,初始化权值足够接近好的解决方法(?),利用深度自动编码机实现的反向传播算法将会是非线性降维的一个非常有效的方法。现在这三个条件都满足啦。与非参数统计方法不同的是,自动编码机在数据和代码空间上都给出了一个方向映射,它能够使用在非常大的数据集上,因为预训练和微调的时间和空间规模(复杂度)都是和训练数据呈线性关系的。

THE END!!20150716 14:10