经典论文阅读-5:深度信念网络快速学习算法

165 阅读17分钟

一种快速学习算法:深度信念网络

论文地址:fastnc.pdf (toronto.edu)

摘要

我们展示如何使用先验补充 Complementary Priori 来减少解释性丢失问题 Explaining-away Effects。该问题会使带有多个隐藏层的全连接信念网络难以正确推断。使用先验补充,衍生出一个快速贪心算法,可一次学习一层深度有向信念网络,该网络最高两层构成无向关联记忆。该快速贪心算法被用于初始化一个慢速学习过程,使用唤醒睡眠算法的对比版本来微调权重。在微调之后,带有三个隐藏层的网络形成了一个具有良好泛化性能的模型,适应手写数字图片与其标签的分布。该模型在数字分类上的性能优于其他判别学习算法。数字的低维流形被建模在模型顶层记忆空间的低谷中,很容易通过有向连接网络探索这些低谷,显式记忆中的内容。

简介

在密集有向连接的多层信念网络中,学习过程非常困难,因为推断给定数据向量的隐藏层活动的条件分布非常难。变分方法使用简单估计来学习正确条件分布,但估计效果可能很差,尤其在最深的隐藏层。同时,变分学习算法仍需要所有参数同时训练,导致学习时间难以在参数量增加时线性增长。

我们提出一个模型,其最高两个隐藏层构成无向相关记忆,剩下隐藏层构成有向无环图。该模型能够将相关记忆中的表示转换到观测变量形式,如图片像素。该混合模型有以下良好特性。

  • 这个快速贪心算法可以找到相当好的参数集,即使在百万参数的多隐藏层深度网络中也可以快速训练。

  • 该学习算法是无监督的,可用在标签数据。通过训练出一个模型,同时生成标签和数据。

  • 有一个微调算法,可以学习优秀的生成模型,在 MNIST 数据集上的效果比判别方法更好。

  • 生成模型易于翻译深度隐藏层的分布式表示。

  • 需要形成感知的推断既快又准。

  • 学习算法是局部的。调整突触强度只取决于神经元的前后突触状态。

  • 信息传递简单,神经元只需要传递其随机二元状态。

第二节介绍补充先验的概念,它能极大地减少解释性消失现象,该现象使有向模型的推断效果变差。提出一个带有补充先验的有向信念网络的例子。

第三节展示受限玻尔兹曼机和贡献权重无限有向网络的等价关系。

第四节介绍快速贪心学习算法,能够一次学习一层,来构建多层有向网络。在使用各种限制下,该算法展示了每添加一个新层,整个生成模型的效果随之提升。该算法重复使用一些弱学习器来增强性能,这点与其他算法有一些相似之处,但层之间传递时,不再重新设置数据向量权重,而是直接传递给下一层学习器。弱学习器用来构建深度游向网络,而每个弱学习器自身是无向图模型。

第五节展示快速贪心学习算法的权重如何通过自顶向下算法来微调。这是一种唤醒睡眠算法的对比版本,不再受模式平均问题干扰 mode-average ,该问题导致唤醒睡眠算法学到效果很差的识别权重。

第六节展示网络模型在 MNIST 数据集上的模式识别性能,该模型有三个隐藏层,大约一百七十万个参数。没有任何几何知识,没有特殊预处理步骤,网络的泛化性能在一万个手写数字上只有 1.25% 的误差。该记录打破了之前反向传播网络模型的 1.5% 的误差,略好于 SVM 的 1.4%。

第七节展示该网络在没有视觉输入约束下运行时,内部发生了什么。该网络是完全生成式模型,只需从其最高层表示中生成一张图片,很容易看到模型内容。

遍览全文,我们提出由随机二元变量组成的网络,但该想法可以泛化到其他模型上。这些模型使用一些变量的对数概率,这些变量来自模型中直接相连的邻居的额外状态函数。

补充先验

解释性消失的现象导致有向信念网络难以正确推断。在密度连接网络中,隐藏层变量的后验分布是难以处理的,除了在少数情况下,如带有额外高斯噪声的混合模型或线性模型。马尔可夫链可用来对后验分布采样,但该方法非常耗时。变分方法使用更易处理的分布估计后验分布,可用来提升训练数据对数概率的下限。令人欣慰的是训练能保证变分范围的优化,即使隐藏层状态的推断不正确。但最好还是寻找某种减少解释性消失的方法,即使在隐藏层变量高度影响可见层变量的模型中。通常假设没有这种方法。

逻辑信念网络由随机二元单元组成。当使用该网络生成数据时,处于开启状态的单元 i 的概率是其直接上级单元状态 j 的逻辑函数,单元 i 与单元 j 之间的连接具有权重 wijw_{ij}

p(si=1)=11+exp(biisjwij)p(s_i=1)=\frac{1}{1+\exp{(-b_i-\sum_i{s_jw_{ij}})}}

其中 bib_i 是当前单元的偏置项。如果逻辑信念网络只有一个隐藏层,其隐藏变量的先验分布是阶乘函数,因为其二元状态是独立选择的。通过来自数据的似然项构建非独立的后验分布。可能在第一层隐藏层之前添加额外的隐藏层,构造似然项的相反相关性的补充先验,来减少解释性消失的问题。如此一来,通过先验概率乘以似然项,我们得到的后验概率正是阶乘。补充先验的存在并不明显。使用共享权重连接构建补充先验看起来仅仅是个能使有向模型等价于无向模型的小把戏。然而,在本文后边,我们会看到这个把戏如何带我们得到一种全新的非常高效的学习算法,该算法通过逐层处理,拿更高层权重信息来更新当前层权重的方式运作。

共享权重无限有向模型

我们可以从无限有向网络中生成数据,在某一层随机设置输入,然后自顶向下传递各层变量的二元状态,直到输出层。在这方面,模型像是其他有向无环信念网络。然而,与其他模型不同的是,我们可以在所有隐藏层中采样真实的后验分布,通过拿可见层的数据向量开始,使用转移权重矩阵反过来推断每个隐藏层的阶乘分布。在每个隐藏层,我们都可以在计算上层阶乘后验分布前采样当前层阶乘后验分布。

pic1.png

由于可以从真实后验分布中采样,可计算数据对数概率的偏导数。让我们从计算生成权重 wij00w_{ij}^{00} 的偏导数开始,该权重来自隐藏层 H0H_0 的单元 jj 到可见层 V0V_0 的单元 ii 。在逻辑信念网络中,对单个数据向量 v0v^0 的最大似然学习规则是。

logp(v0)wij00=hj0(vi0v^i0)\frac{\partial{\log{p(v^0)}}}{\partial{w_{ij}^{00}}}=\langle h_j^0\cdot (v_i^0-\hat v_i^0)\rangle

其中 \langle \cdot \rangle 表示采样状态的平均值。v^i0\hat v_i^0 表示单元 i 为开启状态的概率,在可见向量是在采样隐藏状态上随机重构的情况下。

基于第一隐藏层 H0H_0 的二元状态计算第二可见层 V1V_1 的后验分布的过程与上边一样。

logp(v0)wij00=hj0(vi0vi1)\frac{\partial \log p(v^0)}{\partial w_{ij}^{00}}=\lang h_j^0 \cdot (v_i^0-v_i^1)\rang

由于权重是重复的,整个生成式权重导数可以对各层之间的权重导数求和。

logp(v0)wij00=hj0(vi0vi1)+vi1(hj0hj1)+...\frac{\partial \log p(v^0)}{\partial w_{ij}^{00}}=\lang h_j^0 \cdot (v_i^0-v_i^1)\rang+\lang v_i^1\cdot (h_j^0-h_j^1)\rang+...

受限玻尔兹曼机与对比散度学习

上一节中无限有向网络与受限玻尔兹曼机(RBM)的等价关系可能不够直观。RBM 只有一层隐藏单元,并不与其他层相连。RBM 具有无向、对称的可见单元层连接。在 RBM 中生成数据时,可以从某一层的随机状态开始,对状态执行 Gibbs 采样。每层单元的状态在收到上一层状态时同步更新。该过程持续进行,直到系统能够从平衡分布中采样才停止更新。

pic2.png

注意该数据生成过程与无限共享权重信念网络中数据生成过程一样。为了执行 RBM 最大似然学习,可利用这两种相关性的不同点。例如可见单元 i 与隐藏单元 j 之间的权重 wijw_{ij} 可用相关性 vi0hj0\lang v_i^0\cdot h_j^0\rang 表示,当数据向量来自显示单元且隐藏状态从条件分布中采样得到,该分布是阶乘的。接着,使用 Gibbs 采样,运行马尔可夫链,直到结果达到稳定分布并计算 vihj\lang v_i^\infty h_j^\infty \rang 。因此,训练数据的对数概率的梯度为。

logp(v0)wij=vi0hj0vihj\frac{\partial \log p(v^0)}{\partial w_{ij}}=\lang v_i^0\cdot h_j^0\rang - \lang v_i^\infty h_j^\infty \rang

最大化数据的对数概率与在数据的分布中最小化 Kullback-Leibler Divergence (KL 散度)一样。模型的最终平衡分布为 PθP_\theta^\infty 。在对比散度学习中,只运行 n 次马尔可夫链来度量第二相关性。这等于忽视来自无限网络更高层的导数。这些被忽视的导数和是第 n 层 VnV_n 的后验分布对数概率的导数,也是 KL 散度与后验分布的导数。因此,对比散度学习最小化两个 KL 散度的差异。

KL(P0Pθ)KL(PθnPθ)KL(P^0||P_\theta^\infty)-KL(P_\theta^n||P_\theta^\infty)

忽略采样噪声,该差值非负,因为使用了 Gibbs 采样来从 P0P^0 生成 PθnP_\theta^n 。Gibbs 采样通常在平衡分布上减少 KL 散度。关键是需要认识到 PθnP_\theta^n 依赖当前模型参数,改变参数也会改变该值。而 P0P^0 并不依赖模型参数。

在受限玻尔兹曼机中进行对比散度学习在实践中非常高效。各种该方法的变体也在建模拓扑图信息中获得了不同的成果。然而,该方法的高效性伴随着高代价:对比散度学习不能用在深度多层网络上,即使能达到条件均衡状态也会在深层计算时耗时过久,该网络每层具有不同参数。

一种变换表示的贪心学习算法

有效学习复杂模型的一种方式是顺序组合一组学习好的简单模型。这种强制每个模型按顺序学习的方式与之前的模型不同,数据通过每个模型后都会被改动。在增强算法中,序列中的每个模型都基于重新加权的数据进行训练,避免前边的模型出错的情况。在 PCA 的某个版本里,建模方向的差异被移除了,因此强制下一个建模方向处于正交子空间。在投影寻踪方法中,数据通过非线性扰动转换到数据空间的某个方向,以移除该方向上的非高斯性。我们贪心算法背后的思想是让序列中的每个模型接收数据的不同表示。模型对其输入向量执行非线性变换,产生用于下一个模型输入的输出向量。

下图展示了多层生成模型,顶部两层通过无向连接交互,其他层的连接有向。顶部的无向连接等价于具有无限个共享权重的更高层。层之间没有连接,同时为了便于分析,每层具有相同的单元数量。

pic3.png

学习有意义的参数矩阵 W0W_0 是有可能实现的,可以使用更高层的参数来构建 W0W_0 的复杂先验概率。一旦该参数被训练好,数据可以通过 W0TW_0^T 映射到高层的输入数据。

我们可以通过以下贪心算法构造生成模型。

  • 假设所有权重矩阵共享参数,学习 W0W_0

  • 冻结 W0W_0 且基于前一个隐藏层状态使用 W0W_0 来推断阶乘后验分布的估计,即使后续高层权重改变,意味着推断分布的不正确。

  • 保持高层权重矩阵共享,但解除 W0W_0 的共享,基于高层数据学习 RBM 模型,该数据来自原始数据的 W0TW_0^T 变换。

如果该贪心算法改变了高层权重矩阵,一定会提升生成模型性能。研究表明,基于多层生成模型的单个数据向量 v0v^0 的负对数概率取值范围受限于变分自由能。对于有向模型,v0v^0h0h^0 的能量公式为。

E(v0,h0)=[logp(h0)+logp(v0h0)]E(v^0, h^0)=-[\log p(h^0) + \log p(v^0|h^0)]

因此概率取值范围为。

logp(v0)allh0Q(h0v0)[logp(h0)+log(p(v0h0)]allh0Q(h0v0)logQ(h0v0)\log p(v^0) \geq \sum_{all-h^0}Q(h^0|v^0)[\log p(h^0)+\log (p(v^0|h^0)]-\sum_{all-h^0}Q(h^0|v^0)\log Q(h^0|v^0)

当所有权重矩阵共享时,由数据向量乘以 W0TW_0^T 产生的阶乘分布是真实后验分布。因此在贪心算法第二步,logp(v0)\log p(v^0) 等于边界值。冻结参数后,边界的导数等于下式的导数。

allh0Q(h0v0)logp(h0)\sum_{all-h^0}Q(h^0|v^0)\log p(h^0)

因此最大化高层权重的边界值,等价于在 h0h^0 以概率 Q(h0v0)Q(h^0|v^0) 产生的条件下最大化数据集的对数概率。

该贪心算法明显可以递归使用,因此即使我们使用完整的最大似然玻尔兹曼机学习算法来学习共享权重集合,接着解除低层权重共享,我们也能够一次学习一层参数,保证不会减少数据在模型的对数概率下限。实际上,我们用对比散度学习代替最大似然玻尔兹曼机学习算法,因为它更快且效果更好。

为了保证生成模型的多层效果被贪心学习算法提升,可将模型的各层大小设置相同,因此高层参数可以初始化为低层已被学习到的参数。当然,同样的贪心算法也能用在各层大小不同的模型上。

自顶向下反向拟合

一次学习一层的权重矩阵很高效,但不是最优的。一旦高层权重被学习到,对低层来说,其权重既不是最优的,其推断效果也不是最好的。贪心算法子优化过程于如 boosting 的监督方法来说是相对无害的。标签数据通常很稀缺,每个标签只对参数做了一点点约束,因此过拟合通常出现频率高于欠拟合。但退回去重新训练模型可能带来的是害处而不是好处。然而,我们可以在无监督方法上使用大规模无标签数据集,可能具有非常高维的表示,因此给模型参数提供更多约束。欠拟合因此成了严重的问题,该问题可以用一系列回拟合 back-fitting 阶段来缓解,在这些阶段中首先学习权重,然后使用学到的权重来修正拟合过程。

当使用贪心算法,给每层参数学好初始值后,我们接触用于识别的权重的共享,但保留每层后验分布必须通过阶乘分布来估计的限制,这样每层变量可以关于给定的低层变量条件独立。一种唤醒睡眠算法的变体可用来使高层权重影响低层权重。在上传 Up-Pass 阶段,识别权重自底向上传递使用,随机挑选每一个隐藏层变量的状态。有向连接的生成权重使用最大似然学习规则调整。顶层无向连接的权重像以前一样通过顶层 RBM 学习倒数第二层的后验分布。

下行阶段 Down-Pass 始于顶层相关记忆的状态,使用自顶向下生成连接来随机激活每个低层。在该阶段,顶层无向连接与生成的有向连接不变,只有自底向上识别权重被改变。这等价于唤醒睡眠算法的睡眠阶段,如果关联记忆在初始化下行阶段前允许被设置到其均衡分布。但是如果关联记忆是通过上行阶段初始化的,那么运行在下行阶段之前,对其运行几轮 Gibbs 采样,这是一种唤醒睡眠算法对比形式,可减少从关联记忆的均衡分布中采样的需要。这种对比形式也适用于睡眠阶段的其他问题。它确保了学到的识别参数生成的表示与真实数据相似,也帮助减少模式平均的问题。如果给定一个特殊的数据向量,当前识别权重经常选择特定模式而忽视其他模式,下行阶段也不会尝试修改识别权重来覆盖其他模式,即不会像睡眠阶段里使用纯粹返祖处理。纯粹返祖处理需要使用延长的 Gibbs 采样从顶层关联记忆中获取均衡采样。通过使用顶层关联记忆,也能减少唤醒阶段的问题:独立顶层单元似乎需要返祖处理,但也意味着变分估计在顶层参数效果上非常差。

MNIST 数据集上的性能

进入神经网络的脑海

为了从模型中生成样本,我们在顶层关联记忆上使用替代 Gibbs 采样,直到马尔可夫链收敛到均衡分布。接着使用该分布上的采样作为下层的输入,通过下行阶段从生成连接中生成图片。如果在 Gibbs 采样中强制标签单元到某类上,我们可以看到模型的某类条件分布下的图片。我们也可以初始化顶部两层的状态,通过提供一个随机二元图作为输入。

pic4.png

上图可看到模型的脑海内容,使用单词 mind 并不是某种隐喻。我们相信心灵状态只是某种假象,外部世界的高维表示才是真实感知的构成组件。

总结

我们展示了一次学习一层深度、紧密连接的信念网络的可能性。该方法假设学习低层时,高层不存在。但该假设与使用简单阶乘估计替换难以处理的后验分布不兼容。为了使用这些有效的估计,我们需要让真实后验分布尽可能接近阶乘分布。因此,不再是忽略高层,我们假设其存在且具有共享参数,该参数的复杂先验能使后验更接近阶乘。这等价于使用对比散度高效学习无向模型。也可视为受限变分学习。

学习完每层后,其权重与高层权重解除共享。当高层权重变化时,低层先验不再变得复杂,因此其真实后验分布不再是阶乘,使用生成权重的转置来推断也不再正确。不过,我们可以使用变分边界来展示如何适应高层权重以提升整个生成模型效果。

为了演示我们快速贪心学习算法的能力,我们使用它来初始化更慢微调算法的权重,来学习一个生成数字图片的非常好的模型。这表示使用该贪心算法进行微调更适合大型深度网络和大规模训练数据集。