论文阅读报告-Learning Deep Architectures for AI

  • 作者:sdau20171754
  • 分类: 深度学习
  • 发表日期:2020-07-21 22:04:59
  • 阅读:(149)
  • 评论(0)

Learning Deep Architectures for AI阅读报告

一 内容总结

这篇文章介绍了使用深度架构的学习算法的动机,原则和优势,并为我们介绍了几种成功的深度架构学习算法,比如RBM,自编码器,以及更深层次的DBN等。文章一共分为9个部分,详细论述了这些算法的思想,数学原理,训练过程,以及如何利用一些优化的原则对这些算法进行改进,并推广到其他的算法中去。下面我将从这9个部分来详细总结文章的要点。

1 Introduction

  这一部分主要是对深层次架构学习的一个简单介绍。在这一部分中,作者举了一个对Man的图像识别的例子,介绍了抽象的概念。这里可以把Man的分类看成一个高层抽象。而低层次的抽象更直接地与特定的感知联系在一起。深度架构的学习的关注点是自动发现合适的中间抽象,从低到高的学习出层次特征。架构的深度是指在功能学习中非线性操作的组合的层次数。神经元是一种深层次结构,受神经元的启发,产生了DBN,自编码器等深层次架构的模型。这些算法都遵循了同样的原则:采用无监督学习指导过渡层的表示的训练,可以在每个层上局部的进行。深层架构的成功在于以无监督的方式学习表示,这些无监督算法可以被看作是学习将一种表示转换为另一种表示。一旦在每一层找到一个好的表示,它可以用来初始化和成功地训练一个深度神经网络的监督梯度优化。神经元还给了人们关于分布式表示的启发,可以通过中间表示跨任务的共享特征和抽象,方便多任务学习。最后作者提出了学习AI算法所要考虑的一些要求:1、能够学习复杂的高度变化的函数;2、能够在很少的人工输入中学习初级,中级和高级的抽象;3、能够从未标注的数据中学习;4、能够在多任务学习中发挥协同作用;5、拥有强大的无监督学习。我们在设计或改进算法时也应该考虑这些要求。

2 Theoretical Advantages of Deep Architectures

  这一部分通过理论结果揭示深度不足的结构的局限性,进而说明深层次架构的优势。在这一部分中,作者通过对电路复杂度的讨论,说明了深层架构可以紧凑地表示高度变化的函数,否则如果用深度不够的架构来表示就需要非常大的尺寸。(函数的高度变化是指函数分段近似,紧凑是指函数的计算元素或者自由度很少)。也就是说,很多功能,无法用浅层次的架构实现。因为架构的每个元素都可能必须被选择,从统计效率的角度看,架构的深度非常重要。

3 Local vs Non-Local Generalization

  这一部分主要讨论了浅层次架构模型的另一个缺陷:估计量在输入空间中的局部性。我们认为局部估计器不适合学习高度变化的函数,一个在输入空间中是局部性的估计器,主要利用x的邻域中的训练实例,来得到新的输入x的良好泛化。局部估计器隐式或显式地将输入空间划分为若干区域,并且需要不同的参数或自由度来解释每个区域中目标函数的可能形状。函数高度变化,所需参数的数量会很大,实现良好泛化所需的样例数量也会很大。基于局部模板匹配的架构有两个级别,第一层次包含一些模板的集合来匹配输入,一个模板单元可以输出一个值表示自由度,第二个层次用一个线性组合组合这些值,来估计想要的输出。常见的基于局部模板匹配架构的例子是内核机器(kernel machine),包括自由向量机,高斯过程机器等。可以使用 深层次架构的算法来改造核机器,为核机器学习良好的特征空间。对于高维的复杂任务,使用局部核方法时,决策面的复杂性使得模型的学习不可行。也可以认为,如果曲线有很多变化,而这些变化之间并没有通过一种潜在的规律性联系起来,那么任何学习算法都不会比输入空间中的局部估计器做得更好。

  但是,在AI任务中,变化之间往往有潜在联系,这就需要我们寻找一种更紧凑的表示方法来获得更好的泛化结果。我们可以采用分布式表示,这有助于解决维度灾难以及局部泛化的局限性。比如整数集1-n采用局部表示法可以表示成one-hot向量,如果采用分布表示法可以表示成log2n位的向量。对于相同构型,分布式表示法比起局部表示法要紧凑的多。在分布式表示中,输入由一组特性表示,这些特征不是互斥的,但是可能在统计上是独立的。这部分内容我认为可以结合自然语言问题中的词嵌入去理解,词嵌入矩阵可以理解成一种分布式表示。多层神经网络和玻尔兹曼机等被提出来,用来学习隐藏层的分布式内在表示,它们的目标是让学习算法发现构成分布式表示的特征。在多隐藏层的神经网络中,有多个分布式表示,每一层都有一个。

4 Neural Networks for Deep Architectures

  这一部分主要讨论了如何将深层次架构应用于神经网络,我个人认为这是这篇文章的精华部分。根据上面的讨论,训练深层次架构的神经网络非常困难,采用原始的随机初始化方法训练结果非常差。然而,我们发现如果从第一层开始用无监督学习算法对每一层进行一层接一层的训练,可以取得更好的结果。每一层可以使用RBM,也可以使用自编码器等变体。这种思想称为贪婪的分层无监督学习思想。首先用无监督学习算法训练较低的一层,为神经网络的第一层生成一组初始参数值。然后使用第一层的输出(原始输入的新表示)作为另一层的输入,并用无监督学习算法同样初始化该层。在这样初始化了许多层之后,再根据监督训练标准对整个神经网络进行微调。这种算法基于分层局部无监督准则:在每一层注入一个无监督训练信号,帮助引导该层的参数在参数空间中走向更好的区域。无监督预训练可以看成一种正则化,相当于对参数空间中允许解的区域的约束。在无监督的预训练中,较低的层次“得到了更好的优化”,小一些的顶层也足够获得较低的训练误差,并也能产生较好的泛化效果。我们可以认为无监督的预训练通过允许“更好”地调整深度架构的较低层来提升泛化能力。

无监督预训练还可以看成一种优化器。可以通过考虑在线学习的方法来验证这一点,结果表明无监督预训练不仅可以看成正则化,还可以找到最小的优化准则。但是在较低的层次上,很难进行优化,因为梯度对参数所需变化的信息变得较少。

我们相信,当单层学习算法发现了一个可捕获该层输入的统计性规律的表示形式时,在单个层次定义的无监督学习准则可用于将其参数向有利的方向移动。这样,PCA和标准ICA不太合适,因为它们对于过完备情况(这层的输出数目比输入数目多)没有意义。这样我们可以考虑ICA算法的扩展,比如RBMS和自编码器来作为无监督学习的方法。无监督学习可以帮助减少由有监督标准的梯度给出的不可靠更新方向的依赖,同时也是将问题自然为分解与不同抽象级别相关联的子问题的一种方法。除了预训练监督模型外,深层架构中的无监督学习方法还可以用来学习生成模型。生成模型可以表示成概率图模型。在概率图中,节点表示随机变量,边表示变量间的依赖,变量的联合分布可以分解成一系列的因子乘积。模型中的一些变量可以观测,另一些不可以,称为隐变量。比较早的一种生成型神经网络模型是sigmoid信念网络,是一个有向图模型,每个结点二值分布,通过sigmoid函数计算条件概率。训练采用对数似然估计法和采样的方法。DBN是对sigmoid信念网络的发展,上层采用玻尔兹曼机,是无向图模型,下面采用sigmoid信念网络,是有向图,训练采用了贪婪的逐层预训练的方法。神经网络还有一种很好的深层形式,卷积神经网络,适合于视觉任务,可以将卷积神经网络整合到RBMS和DBNS中。深层架构的神经网络还有一些变体,利用了自动编码器作为组件或监控设备。自动编码器的训练和RBMS近似,也是用到了对比散度算法。通常,自动编码器的训练比RBMS要容易一些,因此常用来代替RBMS。但是自动编码器有一个问题,可能会学习identity(重复复制输入的内容),我们可以通过加噪音,加稀疏性约束等方法解决这个问题。

5 Energy-Based Models and Boltzmann Machines

  这部分主要介绍了基于能量的模型,从一般的基于能量的模型的表示出发,介绍了玻尔兹曼机,受限玻尔兹曼机模型的表示,以及如何利用吉布斯采样,对比散度等方法来训练这些模型。这一部分有大量的数学公式和原理,很难理解。基于能量的模型将一个标量能量与感兴趣的变量的配置相关联,基于能量的概率模型的概率分布往往定义为,Z是归一化因子,定义为 ,能量函数定义为若干特定项的和,这里fi函数称作expert,每个expert对应一个可满足也可不满足的约束,与expert相关联的约束表示属于一个区域。同时,我们引入隐变量y和自由能  (其实是能量在对数域中的边缘分布),然后通过对数似然估计法来求解平均的对数似然估计,结果可以写成期望差的形式(正相,负相)  ,然后再通过采样等方法训练更新参数。有时候我们可以只考虑给定x条件下y的模型,,这样可以更加高效的计算对数似然梯度。

  玻尔兹曼机器是一种特殊类型的基于能量的隐藏变量模型,是离散的二值分布,分为可见层和隐藏层,各单元之间连接。玻尔兹曼机的能量函数需要考虑5个部分,隐藏层之间的边,可见层之间的边,隐层与可见层之间的边以及两类节点。因为相同层之间相互作用,不能用之前方法计算自由能,但可以用MCMC采样方法来计算梯度的随机估计,这里每个样本x需要两个MCMC链(一个用于正相,一个用于负相),计算梯度的成本很高。RBM可以看做玻尔兹曼机的改进,同一层之间没有连接,相互独立,可以因子分解,P(h|x)和P(x|h)都可解。隐藏层和可见层之间有连边,能量函数包含3部分:隐藏层可见层之间的连边,以及两类点。RBM可以看做多重聚类,每个隐藏单元产生两个输入的划分。从RBM模型中采样有两个原因,一方面可以用于模型的学习,获得似然梯度的估计值,另一方面,可以更好的掌握分布。这里采用吉布斯采样的方法。

  直接对玻尔兹曼机进行吉布斯采样很慢,但是RBM模型带来两个好处,一方面不用对正相采样(可解),另一方面,变量(x,h)的集合可以通过两个子步骤取样得到,先给定x取h,再在给定h的情况下取新的x。K步对比散度算法(CD-k)对初始化做了一些改变,直接用训练集中的单个样本x来进行初始化,给定x取出h,再给定h取出新的x,重复这个过程,进行k步之后就停止,不管结果如何。k步对比散度算法涉及到第二次近似(第一个近似是初始化),在梯度中引入一些偏置。CD-k对应于保持收敛于对数似然梯度的级数的前k项。一种对cd-k算法的解释是它是x1附近的对数似然梯度的近似。CD-k算法构造的分布在一定程度上以x1为中心,随着k增长不断的向外扩张,直到成为模型分布。CD-k算法的 更新会减少训练点x1的自由能,增加x1的邻居的自由能。训练基于能量的模型的算法所需要做的也是使观察到的输入的能量小一些,把能量分散到别的地方去,因此,当模型在划分的错误一侧生成示例时,我们希望对模型进行惩罚,而确定划分应该向哪里移动的一个好方法是将训练示例与来自该模型的样本进行比较。如果我们已经有了一个模型,并且我们想要增加它的似然估计,那么模型把高概率样本表示放在哪里和把训练样本 放在哪里之间的对比表明了如何改变模型。

6 Greedy Layer-Wise Training of Deep Architectures

  这一部分主要介绍了DBN模型的结构和表示,重点介绍了贪婪的逐层训练的思想和原理。DBN是混合模型,最顶上两层是RBM,下面是sigmoid信念网络。概率表示为,下面我们用字母Q来表示该模型的近似后验,除了顶层的Q的后验等于P的后验(顶层是RBM),其他层Q的后验都是近似值。这里是把每一层看成一个RBM,也就是无向图可以用因子分解的方式计算,用近似。贪婪的逐层训练就是从底层开始,不断的取样,通过公式计算作为上面一层的输入,训练每一层,直到最后一层。

  自动编码器也可以用作构建块来构建一个深层架构的多层神经网络,训练方式和DBN类似,也是从第一层开始训练,把隐藏单元的输出做为下一层的输入,训练每一层,用最后一个隐藏层的输入去初始化监督算法的参数,最后再进行一个finetune微调。我们希望在这种贪婪的分层方式下进行无监督的预训练,将所有层的参数放在参数空间的一个区域中,通过局部下降可以得到一个好的局部最优值。无监督的训练信号和全局的监督信号也可以结合起来,同时作用于训练,也就是所谓的部分监督训练。

7 Variants of RBMs and Auto-Encoders

  这一部分介绍了RBMS和auto-encoder的几种变体,来对它们的效果进行改进。包括稀疏表示法(sparse autoencoder), 去噪自动编码器(Denoising Auto-Encoders,横向连接(Lateral Connections),条件RBMS(Conditional RBMs),可分解的RBMS等。

  如果要使用固定大小的表示法,那么在信息理论的意义上,稀疏表示法比非稀疏表示法更有效,它允许改变每个样本的有效比特数。为了获得良好的泛化效果,编码整个训练集所需的比特数比训练样本数小就足够了。如果我们需要将每个样本映射到一个固定长度的表示(例如PCA),一个好的解决方案是选择一个表示有足够的自由度来表示大多数样本,同时允许将固定长度的位向量压缩为较小的可变大小的代码,以用于大多数样本。我们希望我们的固定长度稀疏表示具有这样的特性:单个比特或这些比特的小子集可以被解释,即对应于输入的有意义的方面,并能捕获数据中变化的因素。第一个成功的利用表示的稀疏性的深层架构是自动编码器。其稀疏性是通过所谓的稀疏逻辑来实现的,通过这种逻辑,编码是通过一个接近饱和的逻辑来获得的,其偏移量用来保持编码显著非零的平均次数较低。还有一种用于RBMS的方法是通过一个正则项来实现的,稀疏度是用正则化项来实现的,该项会惩罚隐藏单元的预期激活与固定低水平之间的偏差。从压缩意义上,稀疏化通过在编码上进行l1惩罚实现。稀疏编码也可以看成一种解释相消,它从众多隐藏代码中选择一种配置来解释输入,不同配置相互竞争,选择一个,其他的被抵消。稀疏编码系统只参数化解码器:编码器被隐式定义为一个优化的解决方案。

  去噪自动编码器是是自动编码器的随机版本,输入随机损坏,但未损坏的输入仍然用作重建的目标。直观地说,去噪自动编码器会做两件事:尝试对输入进行编码(保存关于输入的信息),并尝试撤销随机应用于自动编码器输入的破坏过程的影响。随机破坏过程包括将一些输入(多达一半)随机设置为零。因此,去噪自动编码器目的是从非缺失之中预测缺失值,随机的选择缺失模式的子集。去噪自编码器有两个有趣的特性,它可以对应一个生成模型,同时可以很自然地帮助自己处理丢失值或多模态数据。

  RBM可以通过引入相互作用项或可见单元之间的“横向连接”来略微减少限制,这些横向连接捕获成对的依赖关系,这种方法比使用隐藏单元更容易捕获,从而节省了捕获高阶依赖所需的隐藏单元。有一种想法是用是用横向连接连接DBN的所有层次,这样的优点是隐藏单元所代表的较高层次的因子不必编码所有的局部“细节”,而下层的横向连接可以捕捉到这些细节。

  条件RBM是一种RBM的变种,一些参数不是自由的而是条件随机变量的参数化函数。将RBM推广为条件RBM允许构建深层架构,其中每一层的隐藏变量可以根据其他变量的值进行约束。可因式分解的RBM模型用来学习每个词的分布式表示。RBM权重矩阵W可以分解为两个因子,一个依赖于每个词在输入子序列中的位置t,另一个则不依赖。

8 Stochastic Variational Bounds for Joint Optimization of DBN Layers

  这一部分主要从数学意义上介绍了为什么在DBN上叠加RBM以及如何从下界意义上理解逐层贪心策略。这里我结合自己学习的其他资料来总结这一部分的思想。首先利用利用Jensen不等式,证明DBN的对数似然可以有下界,如下:

P是DBN下的概率,Q是RBM下的概率。我们想让似然梯度最大,可以看做让下界最大,根据上面的式子,应该让尽量大,第二层的初始值设置为第一层的权重,这样可以保证不会得到比原来更差的结果(个人理解),加上一层后,就不是原来的了,而是用第二层对训练(采用吉布斯采样方法,一开始取训练样本x,然后从模型中取给定x下的,把看成第二层的训练样本),这样可以得到更好的,这也说明了DBN叠加RBM层的原因。实践中,用前一层权重的转置初始化新添加的RBM也不是常见的做法。还要注意一点,如果我们持续的训练模型的顶层部分,log(P(x))不保证单调上升,下界不断增长,实际梯度可能下降。从任何参数配置开始增加第二个RBM的训练似然,并不能保证DBN似然会增加。

  我们还可以采用对全部层的联合无监督训练方法,代表算法有wake-sleep算法(分为wake phase和 sleep phase两个阶段),还可以把DBN转换成玻尔兹曼机。在从分层RBM初始化深度玻尔兹曼机时,建议将RBM权值减半。

9 Looking Forward

  这一部分主要在现有工作和方法之间建立联系,介绍如何基于连续方法的原理来处理困难的优化问题。基本思想是首先解决问题的一个更简单和更平滑的版本,然后逐渐考虑较少的平滑,直觉上认为问题的光滑版本揭示了全局的图景。这里介绍了四种方法。

  首先,贪婪的逐层预训练可以看做一第种连续的方法。在贪婪分层过程的每一步,我们从倒数第二层的参数中分离出顶层RBM的参数。通过使过程贪婪,我们在训练完前k个层次的参数后,固定它们的参数,并且只对(k+1)阶进行优化,即训练RBM。

  第二种方法是从无监督向监督过渡。在无监督的预训练后再进行有监督的微调对于深层架构非常有效。最近的研究集中在从无监督表示学习算法出发,用判别准则对表示进行微调,或将判别准则与无监督准则相结合。实际上,他们提出了从非判别准则到判别准则的平滑过渡,从而采用一种连续方法来优化判别准则。第三种方法是控制温度,相当于控制权重。高温对应于一个高度随机的系统,在极限条件下,输入是一个可分解的和均匀的分布。低温对应于一个更具确定性的系统,其中只有一小部分可能的配置是合理的。常用的控制温度技术是早停止(early stopping)。第四种方法从课程中学习,即将训练任务从简单的训练任务逐步转换为目标任务(有更难的例子)。基本思路是从小处着手,学习较容易的方面或较容易的子任务,然后逐步增加难度等级。

二 感悟与体会:

  这篇文章的作者是Yoshua Bengio,传说中的三巨头之一。通过这篇文章的阅读,我确实学习到了很多东西。首先,我对于深度学习的理解进一步加深。自己之前一直把深度学习简单的理解成深层的复杂神经网络,一提到深度学习就只是想到CNN,RNN等。这篇文章让我认识到了自己的理解的片面性,第一次让我接触到DBN,RBM,自编码器这些模型。结合其他书籍,视频的补充学习,我对这些模型的定义,表示,训练等有了一个简单的认识和了解,在这个过程中,还间接学习了概率图模型(条件随机场),吉布斯采样,对比散度等概念和方法。也让我意识到自己的知识还有很多的不足。此外,除了这些算法,我还学到了很多的设计思想方法,比如使用分布式表示,使用稀疏的方法,将无监督学习和有监督学习结合,利用独立性和因子分解来简化模型,采用连续化方法,选择最优的划分空间等等,我感觉这些思想可以扩展到很多其他算法上面去。这些思想可以帮我确定一个改进算法或者改进项目的思路,以后自己读研后,也要从这些角度来考虑自己的课题。这篇文章也给我提供了一种研究解决问题的思路,首先去发现问题,提出一个动机,然后进行假设,然后验证假设或者实现这个假设。再根据背后的思想和不足来进一步的改进和提高。在这个过程中,可以多用对比和类比的方法,从已有算法中总结共同规律。这些对于自己未来的学习和研究有很好的指导意义。


提交评论区域

您尚未登录登录后方可评论 登录 or 注册

评论列表

暂无评论
div>