乐读窝

深度学习

乐读窝 > 文学理论 > 深度学习

18.2 随机最大似然和对比散度

书籍名:《深度学习》    作者:伊恩.古德费洛



实现式(18.15)的一个朴素方法是,每次需要计算梯度时,磨合随机初始化的一组马尔可夫链。当使用随机梯度下降进行学习时,这意味着马尔可夫链必须在每次梯度步骤中磨合。这种方法引导下的训练过程如算法18.1所示。内循环中磨合马尔可夫链的计算代价过高,导致这个过程在实际中是不可行的,但是这个过程是其他更加实际的近似算法的基础。

我们可以将最大化似然的MCMC方法视为在两种力之间平衡,一种力拉高数据出现时的模型分布,一种拉低模型采样出现时的模型分布。图18.1展示了这个过程。这两种力分别对应最大化和最小化log  Z。对于负相会有一些近似方法。这些近似都可以被理解为使负相更容易计算,但是也可能将其推向错误的位置。

*  *  *

算法18.1一种朴素的MCMC算法,使用梯度上升最大化具有难以计算配分函数的对数似然。

*  *  *

 设步长为一个小正数。

 设吉布斯步数k大到足以允许磨合。在小图像集上训练一个RBM大致设为100。

 while不收敛do

  从训练集中采包含m个样本{x(1),…,x(m)}的小批量。

  初始化m个样本为随机值(例如,从均匀或正态分布中采,或大致与模型边缘分布匹配的分布)。

  for  i=1  to  k  do

   for  j=1  to  m  do

   end  for

  end  for

 end  while

*  *  *

图18.1 算法18.1角度的“正相”和“负相”。(左)在正相中,我们从数据分布中采样,然后推高它们未归一化的概率。这意味着概率越高的数据点,未归一化的概率被推高得越多。(右)在负相中,我们从模型分布中采样,然后压低它们未归一化的概率。这与正相的倾向相反,给未归一化的概率处处添加了一个大常数。当数据分布和模型分布相等时,正相推高数据点和负相压低数据点的机会相等。此时,不再有任何的梯度(期望上说),训练也必须停止

因为负相涉及从模型分布中抽样,所以我们可以认为它在找模型信任度很高的点。因为负相减少了这些点的概率,它们一般被认为代表了模型不正确的信念。在文献中,它们经常被称为“幻觉”或“幻想粒子”。事实上,负相已经被作为人类和其他动物做梦的一种可能解释(Crick  and  Mitchison,1983)。这个想法是说,大脑维持着世界的概率模型,并且在醒着经历真实事件时会遵循的梯度,在睡觉时会遵循的负梯度最小化log  Z,其经历的样本采样自当前的模型。这个视角解释了具有正相和负相的大多数算法,但是它还没有被神经科学实验证明是正确的。在机器学习模型中,通常有必要同时使用正相和负相,而不是按不同时间阶段分为清醒和REM睡眠时期。正如我们将在第19.5节中看到的,一些其他机器学习算法出于其他原因从模型分布中采样,这些算法也能提供睡觉做梦的解释。

这样理解学习正相和负相的作用之后,我们设计了一个比算法18.1计算代价更低的替代算法。简单的MCMC算法的计算成本主要来自每一步的随机初始化磨合马尔可夫链。一个自然的解决方法是初始化马尔可夫链为一个非常接近模型分布的分布,从而大大减少磨合步骤。

*  *  *

算法18.2对比散度算法,使用梯度上升作为优化过程。

*  *  *

 设步长为一个小正数。

 设吉布斯步数k大到足以让从pdata初始化并从p(x;θ)采样的马尔可夫链混合。在小图像集上训练一个RBM大致设为1∼20。

 while不收敛do

  从训练集中采包含m个样本{x(1),…,x(m)}的小批量。

  for  i=1  to  m  do

  end  for

  for  i=1  to  k  do

   for  j=1  to  m  do

   end  for

  end  for



 end  while

*  *  *

对比散度(CD,或者是具有k个Gibbs步骤的CD-k)算法在每个步骤中初始化马尔可夫链为采样自数据分布中的样本(Hinton,2000,2010),如算法18.2所示。从数据分布中获取样本是计算代价最小的,因为它们已经在数据集中了。初始时,数据分布并不接近模型分布,因此负相不是非常准确。幸运的是,正相仍然可以准确地增加数据的模型概率。进行正相阶段一段时间之后,模型分布会更接近于数据分布,并且负相开始变得准确。

当然,CD仍然是真实负相的一个近似。CD未能定性地实现真实负相的主要原因是,它不能抑制远离真实训练样本的高概率区域。这些区域在模型上具有高概率,但是在数据生成区域上具有低概率,被称为虚假模态(spurious  modes)。图18.2解释了这种现象发生的原因。基本上,除非k非常大,模型分布中远离数据分布的峰值不会被使用训练数据初始化的马尔可夫链访问到。

Carreira-Perpiñan  and  Hinton(2005)实验上证明CD估计偏向于RBM和完全可见的玻尔兹曼机,因为它会收敛到与最大似然估计不同的点。他们认为,由于偏差较小,CD可以作为一种计算代价低的方式来初始化模型,之后可以通过计算代价高的MCMC方法进行精调。Bengio  and  Delalleau(2009)表明,CD可以被理解为去掉了正确MCMC梯度更新中的最小项,这解释了偏差的由来。

在训练诸如RBM的浅层网络时CD是很有用的。反过来,这些可以堆叠起来初始化更深的模型,如DBN或DBM。但是CD并不直接有助于训练更深的模型。这是因为在给定可见单元样本的情况下,很难获得隐藏单元的样本。由于隐藏单元不包括在数据中,所以使用训练点初始化无法解决这个问题。即使我们使用数据初始化可见单元,我们仍然需要磨合在给定这些可见单元的隐藏单元条件分布上采样的马尔可夫链。
图18.2 一个虚假模态。说明对比散度(算法18.2)的负相为何无法抑制虚假模态的例子。一个虚假模态指的是一个在模型分布中出现数据分布中却不存在的模式。由于对比散度从数据点中初始化它的马尔可夫链然后仅仅运行了几步马尔可夫链,不太可能到达模型中离数据点较远的模式。这意味着从模型中采样时,我们有时候会得到一些与数据并不相似的样本。这也意味着由于在这些模式上浪费了一些概率质量,模型很难把较高的概率质量集中于正确的模式上。出于可视化的目的,这个图使用了某种程度上更加简单的距离的概念——在的数轴上虚假模态与正确的模式有很大的距离。这对应着基于局部移动上的单个变量x的马尔可夫链。对于大部分深度概率模型来说,马尔可夫链是基于Gibbs采样的,并且对于单个变量产生非局部的移动但是无法同时移动所有的变量。对于这些问题来说,考虑编辑距离比欧式距离通常更好。然而,高维空间的编辑距离很难在二维空间作图展示

CD算法可以被理解为惩罚某类模型,这类模型的马尔可夫链会快速改变来自数据的输入。这意味着使用CD训练从某种程度上说类似于训练自编码器。即使CD估计比一些其他训练方法具有更大偏差,但是它有助于预训练之后会堆叠起来的浅层模型。这是因为堆栈中最早的模型会受激励复制更多的信息到其潜变量,使其可用于随后的模型。这应该更多地被认为是CD训练中经常可利用的副产品,而不是主要的设计优势。

Sutskever  and  Tieleman(2010)表明,CD的更新方向不是任何函数的梯度。这使得CD可能存在永久循环的情况,但在实践中这并不是一个严重的问题。

另一个解决CD中许多问题的不同策略是,在每个梯度步骤中初始化马尔可夫链为先前梯度步骤的状态值。这个方法首先被应用数学和统计学社群发现,命名为随机最大似然(SML)(Younes,1998),后来又在深度学习社群中以名称持续性对比散度(PCD,或者每个更新中具有k个Gibbs步骤的PCD-k)被独立地重新发现(Tieleman,2008)。具体可以参考算法18.3。这种方法的基本思想是,只要随机梯度算法得到的步长很小,那么前一步骤的模型将类似于当前步骤的模型。因此,来自先前模型分布的样本将非常接近来自当前模型分布的客观样本,用这些样本初始化的马尔可夫链将不需要花费很多时间来完成混合。

因为每个马尔可夫链在整个学习过程中不断更新,而不是在每个梯度步骤中重新开始,马尔可夫链可以自由探索很远,以找到模型的所有峰值。因此,SML比CD更不容易形成具有虚假模态的模型。此外,因为可以存储所有采样变量的状态,无论是可见的还是潜在的,SML为隐藏单元和可见单元都提供了初始值。CD只能为可见单元提供初始化,因此深度模型需要进行磨合步骤。SML能够高效地训练深度模型。Marlin  et  al.(2010)将SML与本章中提出的许多其他标准方法进行比较。他们发现,SML在RBM上得到了最佳的测试集对数似然,并且如果RBM的隐藏单元被用作SVM分类器的特征,那么SML会得到最好的分类精度。

*  *  *

算法18.3随机最大似然/持续性对比散度算法,使用梯度上升作为优化过程。

*  *  *

 设步长为一个小正数。

 设吉布斯步数k大到足以让从采样的马尔可夫链磨合(从采自p(x;θ)的样本开始)。在小图像集上训练一个RBM大致设为1,对于更复杂的模型如深度玻尔兹曼机可能要设为5∼50。

 初始化m个样本为随机值(例如,从均匀或正态分布中采,或大致与模型边缘分布匹配的分布)。

 while不收敛do

  从训练集中采包含m个样本{x(1),…,x(m)}的小批量。

  for  i=1  to  k  do

   for  j=1  to  m  do

   end  for

  end  for



 end  while

*  *  *

在k太小或太大时,随机梯度算法移动模型的速率比马尔可夫链在迭代步中混合更快,此时SML容易变得不准确。不幸的是,这些值的容许范围高度依赖于具体问题。现在还没有方法能够正式地测试马尔可夫链是否能够在迭代步骤之间成功混合。主观地,如果对于Gibbs步骤数目而言学习率太大的话,那么梯度步骤中负相采样的方差会比不同马尔可夫链中负相采样的方差更大。例如,一个MNIST模型在一个步骤中只采样得到了7。然后学习过程将会极大降低7对应的峰值,在下一个步骤中,模型可能会只采样得到9。

从使用SML训练的模型中评估采样必须非常小心。在模型训练完之后,有必要从一个随机起点初始化的新马尔可夫链抽取样本。用于训练的连续负相链中的样本受到了模型最近几个版本的影响,会使模型看起来具有比其实际更大的容量。

Berglund  and  Raiko(2013)进行了实验来检验由CD和SML进行梯度估计带来的偏差和方差。结果证明CD比基于精确采样的估计具有更低的方差。而SML有更高的方差。CD方差低的原因是,其在正相和负相中使用了相同的训练点。如果从不同的训练点来初始化负相,那么方差会比基于精确采样的估计的方差更大。

所有基于MCMC从模型中抽取样本的方法在原则上几乎可以与MCMC的任何变体一起使用。这意味着诸如SML这样的技术可以使用第17章中描述的任何增强MCMC的技术(例如并行回火)来加以改进(Desjardins  et  al.,2010;Cho  et  al.,2010b)。

一种在学习期间加速混合的方法是,不改变蒙特卡罗采样技术,而是改变模型的参数化和代价函数。快速持续性对比散度(fast  persistent  contrastive  divergence),或者FPCD(Tieleman  and  Hinton,2009)使用如下表达式去替换传统模型的参数θ

现在的参数是以前的两倍多,将其逐个相加以定义原始模型的参数。快速复制参数可以使用更大的学习率来训练,从而使其快速响应学习的负相,并促使马尔可夫链探索新的区域。这能够使马尔可夫链快速混合,尽管这种效应只会发生在学习期间快速权重可以自由改变的时候。通常,在短时间地将快速权重设为大值并保持足够长时间,使马尔可夫链改变峰值之后,我们会对快速权重使用显著的权重衰减,促使它们收敛到较小的值。

本节介绍的基于MCMC的方法,一个关键优点是它们提供了log  Z梯度的估计,因此我们可以从本质上将问题分解为和log  Z两块。然后可以使用任何其他的方法来处理(x),只需将我们的负相梯度加到其他方法的梯度中。特别地,这意味着正相可以使用那些仅提供下限的方法。然而,本章介绍处理log  Z的大多数其他方法都和基于边界的正相方法是不兼容的。