Reducing the Dimensionality of Data with Neural Networks——使用神经网络降低数据维度
G. E. Hinton and R. R. Salakhutdinov
通过训练一个具有小的中间层的多层神经网络去重构高维输入向量,可以将高维数据转化为低维编码。在这种“自动编码器(autoencoder)”网络中,梯度下降可以用来微调(fine-tuning)权值,但是只有在初始权值接近一个好的解时才有效(work well)。我们描述了一种初始化权值的有效方法,这种方法允许深度自编码器网络去学习低维编码,作为一种减少数据维度的工具,这种方法优于主成分分析。
降低维度有助于高维数据的分类、可视化、通信和存储。一种简单而被广泛使用的方法是PCA(principal components analysis),它通过寻找数据集的方差最大的方向并用每个方向上的坐标表示每个数据点。我们描述了一种PCA的非线性推广,它使用自适应的多层“编码器”网络将高维数据转换为低维代码,并使用类似的“解码器”网络从代码中恢复数据。从编码器和解码器两个网络的随机权值开始,通过最小化原始数据与重构数据之间的差异,同时训练两个网络。使用链式法则反向传播误差倒数,先通过解码器网络,然后通过编码器网络,很容易获得所需梯度。这个系统叫作“自编码器”。
在拥有多个隐藏层(2-4)的非线性自编码器中,权重的优化比较困难。当初始权值较大时,自动编码器通常会发现较差的局部极小值(local minima);当初始值较小时,早期层的梯度会很小,因此训练隐藏层较多的自动编码器是不可行的。如果初始权值接近一个好的解,梯度下降(gradient descent)就能很好的工作,但是找到这样的初始值需要一种非常不同的算法,即每次学习一层特征。我们介绍了二进制数据的预训练(pretraining)过程,并将其推广到实值数据,并证明了该方法适用于各种数据集。
二值向量的集合(例如,图像)可以使用一种称为受限玻尔兹曼机(RBM)(restricted Boltzmann machine)的双层网络来建模,其中随机的二值像素通过对称加权连接到随机的二值特征检测器。可见单元和隐单元的连接构形(v, h)的能量为:
其中vi和hj是像素i和特征j的二进制状态,bi和bj是它们的偏差,wij是它们之间的权重。网络通过这个能量函数为每一个可能的图像分配一个概率。通过调整权值和偏差可以提高训练图像的概率,从而降低训练图像的能量,提高相似图像的能量,虚构的图像(confabulated images)是网络更喜欢的真实数据。给定一个训练图像,每个特征检测器的二进制状态hj用概率公式σ(bj+∑i(viwij))设其为1,其中 σ (x)是逻辑函数(logistic function )1 /[ 1+exp(−x)],bj是j的偏置,vi是像素i的状态,wij是i和j之间的权重。
一旦隐藏单元选定二进制状态,通过将每个 vi 以概率σ(bj+∑j(hjwij))设为1,产生“虚构”图像,其中 bi 是 i 的偏差。隐藏单位的状态会再次更新,这样它们就代表了虚构的特征。权重变化量由:
其中ε是学习率(learning rate),⟨vihj⟩data是当特征检测器被数据驱动时,像素 i 和特征检测器 j 同时出现的时间的分数,⟨vihj⟩recon是虚构的对应分数。同样学习规则的简化版用于偏差。即使它不完全遵循训练数据的对数概率的梯度,学习工作也很好。
在一组图像中建立模型结构的最佳方式不是建立一个单独的二进制特征层。在学习了一层特征检测器之后,我们可以将它们的活动(当它们被数据驱动时)作为学习第二层特征的数据。然后,第一层特征检测器成为学习下一个RBM的可见单元。这种逐层学习(layer-by-layer learning)可以根据需要重复多次。结果表明,在每层特征检测器数目不减少且其权重正确初始化的情况下,增加一个额外层总是改善了模型分配给训练数据的日志概率的下界。当较高层次的特征检测器较少时,这个界限并不适用,但是逐层学习算法仍然是一种用来预训练深度自动编码器权重的有效方法。每一层的特征捕获强烈的,高阶相关性之间的活动单位在层下面。每一层特征都能捕捉下一层单元活动之间的高阶强相关性。对于广泛的、各种各样的数据集,这是一个逐步揭示低维,非线性结构的有效方法。
在对多层特征检测器进行预训练后,对模型进行“展开”(unfold)[(图1),生成最初使用相同权值的编码器和解码器网络。然后,全局微调阶段用确定性的实值概率代替随机活动,并通过整个自动编码器使用反向传播来微调权值以实现最优重构。
图1预训练包括学习一堆受限玻尔兹曼机器(rbm),每台机器只有一层特征检测器。学习到的一个RBM的特性激活被用作堆栈中训练下一个RBM的“数据”。在预训练之后,RBM被“展开”以创建一个深度自动编码器,然后使用误差导数的反向传播进行微调。
对于连续数据,一级RBM(first-level RBM)的隐藏单元保持二进制,而可见单元被带高斯噪声的线性单元取代。如果这个噪声有单位方差,对隐藏单位的随机更新规则保持不变,而对可见单位i的更新规则是用单位方差和均值bi+∑j(hj*wij)从高斯样本中采样。
在我们所有的实验里,每个RBM的可见单位都有实值活动,对logistic units(逻辑单元?)来说,实值活动范围在[0,1]之间。在训练更高级别RBM时,可见单元被设置为前一RBM中隐藏单元的激活概率,但除了最上面 RBM外,其他所有RBM的隐藏单元都具有随机二进制值。顶部RBM的隐藏单元具有随机实值状态,其均值由RBM的逻辑可见单元的输入确定。这使得低维编码可以很好地利用连续变量,并便于与PCA进行比较。预训练和微调的细节可以在(8)中找到。
为了证明我们的预训练算法允许我们有效地微调深度网络,我们在包含“曲线”图像的合成数据集上训练了一个非常深度的自动编码器,这些图像是由二维空间中随机选择的三个点生成的(8)]。对于这个数据集,它们真正的内在维数是已知的,同时像素强度和用于生成它们的6个数字之间的关系是高度非线性的。由于像素强度在0到1之间且是非高斯的,所以我们在自动编码器中使用逻辑输出单元,并且学习的微调阶段最小化(minimized)了交叉熵误差(cross-entropy error):
pi是像素i的强度,p^i是重建后像素i的强度。
自动编码器由一个大小为(28×28)-400-200-100-50-25-6的编码器和一个对称解码器组成。编码层中的6个单元是线性(linear)单元,其他单元都是逻辑(logistic)单元。该网络在20000张图片上进行了训练,并在10000张新图片上进行了测试。自动编码器发现了如何将每一幅784像素的图像转换为六个实数,并且几乎可以完美地重建图像(图2A)。PCA给出了较差的重建。在没有预训练的情况下,即使经过长时间的微调,深度自动编码器仍然会重建训练数据的平均值。在数据和编码之间只有一个隐藏层的浅层自动编码器可以在不进行预训练的情况下进行学习,但是预训练大大减少了他们的总训练时间。当参数数量相同时,深度自编码器对测试数据的重构误差比浅层自编码器低,但随着参数数量的增加,这种优势消失了。
接下来,我们使用784-1000 -500-250-30自动编码器为MNIST训练集中的所有手写数字提取编码。我们用于预训练和微调的Matlab代码见(8)。同样,除了代码层中的30个线性单元外,其他单元都是逻辑单元。在对所有60000张训练图像进行微调后,自动编码器在10000张新图像上进行了测试,并产生了比PCA更好的重构效果(图2B)。与前两个主要组件相比,二维自动编码器产生了更好的数据可视化(图3)
我们还使用带有线性输入单元的625-2000-1000-500-30的自动编码器来发现来自“Olivetti人脸数据集的灰度图像补丁”的30维编码。自动编码器明显优于PCA(图2C)
逐层预训练也可以用于分类和回归。在一个广泛使用的MNIST手写数字识别任务中,对于随机初始化的反向传播,报道的最佳错误率为1.6%,对于支持向量机,报道的最佳错误率为1.4%。在784-500-500-2000-10网络中逐层预训练后,使用最陡下降(steepest descent)和较小学习率的反向传播达到了1.2%。预训练有助于泛化(generalization),因为它确保权重中的大部分信息来自于对图像的建模。标签中非常有限的信息仅用于轻微调整通过预训练找到的权重。
自20世纪80年代以来,通过深度自编码器的反向传播对于非线性降维是非常有效的,前提是计算机足够快,数据集足够大,初始权值足够接近一个好的解决方案。这三个条件现在都满足了。与非参数方法不同的是,自动编码器在数据和编码空间之间给出了两个方向的映射,它们可以应用于非常大的数据集,因为预训练和微调在时间和空间上都随着训练案例的数量线性缩放。
文章出处登录后可见!