15.1 贪心逐层无监督预训练
无监督学习在深度神经网络的复兴上起到了关键的、历史性的作用,它使研究者首次可以训练不含诸如卷积或者循环这类特殊结构的深度监督网络。我们将这一过程称为无监督预训练(unsupervised pretraining),或者更精确地,贪心逐层无监督预训练(greedy layer-wise unsupervised pretraining)。此过程是一个任务(无监督学习,尝试获取输入分布的形状)的表示如何有助于另一个任务(具有相同输入域的监督学习)的典型示例。
贪心逐层无监督预训练依赖于单层表示学习算法,例如RBM、单层自编码器、稀疏编码模型或其他学习潜在表示的模型。每一层使用无监督学习预训练,将前一层的输出作为输入,输出数据的新的表示。这个新的表示的分布(或者是和其他变量比如要预测类别的关系)有可能是更简单的,如算法15.1所示的正式表述。
算法15.1贪心逐层无监督预训练的协定。
给定如下:无监督特征学习算法使用训练集样本并返回编码器或特征函数f。原始输入数据是X,每行一个样本,并且f(1)(x)是第一阶段编码器关于X的输出。在执行精调的情况下,我们使用学习者,并使用初始函数f,输入样本X(以及在监督精调情况下关联的目标Y),并返回细调好函数。阶段数为m。
基于无监督标准的贪心逐层训练过程,早已被用来规避监督问题中深度神经网络难以联合训练多层的问题。这种方法至少可以追溯神经认知机(Fukushima,1975)。深度学习的复兴始于2006年,源于发现这种贪心学习过程能够为多层联合训练过程找到一个好的初始值,甚至可以成功训练全连接的结构(Hinton et al.,2006b;Hinton and Salakhutdinov,2006;Hinton,2006;Bengio et al.,2007d;Ranzato et al.,2007a)。在此发现之前,只有深度卷积网络或深度循环网络这类特殊结构的深度网络被认为是有可能训练的。现在我们知道训练具有全连接的深度结构时,不再需要使用贪心逐层无监督预训练,但无监督预训练是第一个成功的方法。
贪心逐层无监督预训练被称为贪心(greedy)的,是因为它是一个贪心算法(greedy algo-rithm),这意味着它独立地优化解决方案的每一个部分,每一步解决一个部分,而不是联合优化所有部分。它被称为逐层的(layer wise),是因为这些独立的解决方案是网络层。具体地,贪心逐层无监督预训练每次处理一层网络,训练第k层时保持前面的网络层不变。特别地,低层网络(最先训练的)不会在引入高层网络后进行调整。它被称为无监督(unsupervised)的,是因为每一层用无监督表示学习算法训练。然而,它也被称为预训练(pretraining),是因为它只是在联合训练算法精调(fine tune)所有层之前的第一步。在监督学习任务中,它可以被看作正则化项(在一些实验中,预训练不能降低训练误差,但能降低测试误差)和参数初始化的一种形式。
通常而言,“预训练”不仅单指预训练阶段,也指结合预训练和监督学习的两阶段学习过程。监督学习阶段可能会使用预训练阶段得到的顶层特征训练一个简单分类器,或者可能会对预训练阶段得到的整个网络进行监督精调。不管采用什么类型的监督学习算法和模型,在大多数情况下,整个训练过程几乎是相同的。虽然无监督学习算法的选择将明显影响到细节,但是大多数无监督预训练应用都遵循这一基本方法。
贪心逐层无监督预训练也能用作其他无监督学习算法的初始化,比如深度自编码器(Hin-ton and Salakhutdinov,2006)和具有很多潜变量层的概率模型。这些模型包括深度信念网络(Hinton et al.,2006b)和深度玻尔兹曼机(Salakhutdinov and Hinton,2009a)。这些深度生成模型会在第20章中讨论。
正如第8.7.4节所探讨的,我们也可以进行贪心逐层监督预训练。这是建立在训练浅层模型比深度模型更容易的前提下,而该前提似乎在一些情况下已被证实(Erhan et al.,2010)。
15.1.1 何时以及为何无监督预训练有效有效
在很多分类任务中,贪心逐层无监督预训练能够在测试误差上获得重大提升。这一观察结果始于2006年对深度神经网络的重新关注(Hinton et al.,2006b;Bengio et al.,2007d;Ranzato et al.,2007a)。然而,在很多其他问题上,无监督预训练不能带来改善,甚至还会带来明显的负面影响。Ma et al.(2015)研究了预训练对机器学习模型在化学活性预测上的影响。结果发现,平均而言预训练是有轻微负面影响的,但在有些问题上会有显著帮助。由于无监督预训练有时有效,但经常也会带来负面效果,因此很有必要了解它何时有效以及有效的原因,以确定它是否适合用于特定的任务。
首先,要注意的是这个讨论大部分都是针对贪心无监督预训练而言。还有很多其他完全不同的方法使用半监督学习来训练神经网络,比如第7.13节介绍的虚拟对抗训练。我们还可以在训练监督模型的同时训练自编码器或生成模型。这种单阶段方法的例子包括判别RBM(Larochelle and Bengio,2008b)和梯形网络(Rasmus et al.,2015),其中整体目标是两项之和(一个使用标签,另一个仅仅使用输入)。
无监督预训练结合了两种不同的想法。第一,它利用了深度神经网络对初始参数的选择,可以对模型有着显著的正则化效果(在较小程度上,可以改进优化)的想法。第二,它利用了更一般的想法——学习输入分布有助于学习从输入到输出的映射。
这两个想法都涉及机器学习算法中多个未能完全理解的部分之间复杂的相互作用。
第一个想法,即深度神经网络初始参数的选择对其性能具有很强的正则化效果,很少有关于这个想法的理解。在预训练变得流行时,在一个位置初始化模型被认为会使其接近某一个局部极小点,而不是另一个局部极小点。如今,局部极小值不再被认为是神经网络优化中的严重问题。现在我们知道标准的神经网络训练过程通常不会到达任何形式的临界点。仍然可能的是,预训练会初始化模型到一个可能不会到达的位置——例如,某种区域,其中代价函数从一个样本点到另一个样本点变化很大,而小批量只能提供噪声严重的梯度估计,或是某种区域中的Hessian矩阵条件数是病态的,梯度下降必须使用非常小的步长。然而,我们很难准确判断监督学习期间预训练参数的哪些部分应该保留。这是现代方法通常同时使用无监督学习和监督学习,而不是依序使用两个学习阶段的原因之一。除了这些复杂的方法可以让监督学习阶段保持无监督学习阶段提取的信息之外,还有一种简单的方法,固定特征提取器的参数,仅仅将监督学习作为顶层学成特征的分类器。
另一个想法有更好的理解,即学习算法可以使用无监督阶段学习的信息,在监督学习的阶段表现得更好。其基本想法是,对于无监督任务有用的一些特征对于监督学习任务也可能是有用的。例如,如果我们训练汽车和摩托车图像的生成模型,它需要知道轮子的概念,以及一张图中应该有多少个轮子。如果我们幸运的话,无监督阶段学习的轮子表示会适合于监督学习。然而我们还未能从数学、理论层面上证明,因此并不总是能够预测哪种任务能以这种形式从无监督学习中受益。这种方法的许多方面高度依赖于具体使用的模型。例如,如果我们希望在预训练特征的顶层添加线性分类器,那么(学习到的)特征必须使潜在的类别是线性可分离的。这些性质通常会在无监督学习阶段自然发生,但也并非总是如此。这是另一个监督和无监督学习同时训练更可取的原因——输出层施加的约束很自然地从一开始就包括在内。
从无监督预训练作为学习一个表示的角度来看,我们可以期望无监督预训练在初始表示较差的情况下更有效。一个重要的例子是词嵌入。使用one-hot向量表示的词并不具有很多信息,因为任意两个不同的one-hot向量之间的距离(平方L2距离都是2)都是相同的。学成的词嵌入自然会用它们彼此之间的距离来编码词之间的相似性。因此,无监督预训练在处理单词时特别有用。然而在处理图像时是不太有用的,可能是因为图像已经在一个很丰富的向量空间中,其中的距离只能提供低质量的相似性度量。
从无监督预训练作为正则化项的角度来看,我们可以期望无监督预训练在标注样本数量非常小时很有帮助。因为无监督预训练添加的信息来源于未标注数据,所以当未标注样本的数量非常大时,我们也可以期望无监督预训练的效果最好。无监督预训练的大量未标注样本和少量标注样本构成的半监督学习的优势特别明显。在2011年,无监督预训练赢得了两个国际迁移学习比赛(Mesnil et al.,2011;Goodfellow et al.,2011)。在该情景中,目标任务中标注样本的数目很少(每类几个到几十个)。这些效果也出现在被Paine et al.(2014)严格控制的实验中。
还可能涉及一些其他的因素。例如,当我们要学习的函数非常复杂时,无监督预训练可能会非常有用。无监督学习不同于权重衰减这样的正则化项,它不偏向于学习一个简单的函数,而是学习对无监督学习任务有用的特征函数。如果真实的潜在函数是复杂的,并且由输入分布的规律塑造,那么无监督学习更适合作为正则化项。
除了这些注意事项外,我们现在分析一些无监督预训练改善性能的成功示例,并解释这种改进发生的已知原因。无监督预训练通常用来改进分类器,并且从减少测试集误差的观点来看是很有意思的。然而,无监督预训练还有助于分类以外的任务,并且可以用于改进优化,而不仅仅只是作为正则化项。例如,它可以提高去噪自编码器的训练和测试重构误差(Hinton and Salakhutdinov,2006)。
Erhan et al.(2010)进行了许多实验来解释无监督预训练的几个成功原因。对训练误差和测试误差的改进都可以解释为,无监督预训练将参数引入到了其他方法可能探索不到的区域。神经网络训练是非确定性的,并且每次运行都会收敛到不同的函数。训练可以停止在梯度很小的点;也可以提前终止结束训练,以防过拟合;还可以停止在梯度很大,但由于诸如随机性或Hessian矩阵病态条件等问题难以找到合适下降方向的点。经过无监督预训练的神经网络会一致地停止在一片相同的函数空间区域,但未经过预训练的神经网络会一致地停在另一个区域。图15.1可视化了这种现象。经过预训练的网络到达的区域是较小的,这表明预训练减少了估计过程的方差,这进而又可以降低严重过拟合的风险。换言之,无监督预训练将神经网络参数初始化到它们不易逃逸的区域,并且遵循这种初始化的结果更加一致,和没有这种初始化相比,结果很差的可能性更低。
图15.1 在函数空间(并非参数空间,避免从参数向量到函数的多对一映射)不同神经网络学习轨迹的非线性映射的可视化。不同网络采用不同的随机初始化,并且有的使用了无监督预训练,有的没有。每个点对应着训练过程中一个特定时间的神经网络。经Erhan et al.(2010)许可改编此图。函数空间中的坐标是关于每组输入x和它的一个输出y的无限维向量。Erhan et al.(2010)将很多特定x的y连接起来,线性投影到高维空间中。然后他们使用Isomap(Tenenbaum et al.,2000)进行进一步的非线性投影并投到二维空间。颜色表示时间。所有的网络初始化在图15.1的中心点附近(对应的函数区域在不多数输入上具有近似均匀分布的类别y)。随着时间推移,学习将函数向外移动到预测得更好的点。当使用预训练时,训练会一致地收敛到同一个区域;而不使用预训练时,训练会收敛到另一个不重叠的区域。Isomap试图维持全局相对距离(体积因此也保持不变),因此使用预训练的模型对应的较小区域意味着,基于预训练的估计具有较小的方差
Erhan et al.(2010)也回答了何时预训练效果最好——预训练的网络越深,测试误差的均值和方差下降得越多。值得注意的是,这些实验是在训练非常深层网络的现代方法发明和流行(整流线性单元、Dropout和批标准化)之前进行的,因此对于无监督预训练与当前方法的结合,我们所知甚少。
一个重要的问题是无监督预训练是如何起到正则化项作用的。一个假设是,预训练鼓励学习算法发现那些与生成观察数据的潜在原因相关的特征。这也是启发除无监督预训练之外许多其他算法的重要思想,将会在第15.3节中进一步讨论。
与无监督学习的其他形式相比,无监督预训练的缺点是其使用了两个单独的训练阶段。很多正则化技术都具有一个优点,允许用户通过调整单一超参数的值来控制正则化的强度。无监督预训练没有一种明确的方法来调整无监督阶段正则化的强度。相反,无监督预训练有许多超参数,但其效果只能之后度量,通常难以提前预测。当我们同时执行无监督和监督学习而不使用预训练策略时,会有单个超参数(通常是附加到无监督代价的系数)控制无监督目标正则化监督模型的强度。减少该系数,总是能够可预测地获得较少正则化强度。在无监督预训练的情况下,没有一种灵活调整正则化强度的方式——要么监督模型初始化为预训练的参数,要么不是。
具有两个单独的训练阶段的另一个缺点是每个阶段都具有各自的超参数。第二阶段的性能通常不能在第一阶段期间预测,因此在第一阶段提出超参数和第二阶段根据反馈来更新之间存在较长的延迟。最通用的方法是在监督阶段使用验证集上的误差来挑选预训练阶段的超参数,如Larochelle et al.(2009)中讨论的。在实际中,有些超参数,如预训练迭代的次数,很方便在预训练阶段设定,通过无监督目标上使用提前终止策略完成。这个策略并不理想,但是在计算上比使用监督目标代价小得多。
如今,大部分算法已经不使用无监督预训练了,除了在自然语言处理领域中单词作为one-hot向量的自然表示不能传达相似性信息,并且有非常多的未标注数据集可用。在这种情况下,预训练的优点是可以对一个巨大的未标注集合(例如用包含数十亿单词的语料库)进行预训练,学习良好的表示(通常是单词,但也可以是句子),然后使用该表示或精调它,使其适合于训练集样本大幅减少的监督任务。这种方法由Collobert and Weston(2008b)、Turian et al.(2010)和Collobert et al.(2011a)开创,至今仍在使用。
基于监督学习的深度学习技术,通过Dropout或批标准化来正则化,能够在很多任务上达到人类级别的性能,但仅仅是在极大的标注数据集上。在中等大小的数据集(例如CIFAR-10和MNIST,每个类大约有5000个标注样本)上,这些技术的效果比无监督预训练更好。在极小的数据集,例如选择性剪接数据集,贝叶斯方法要优于基于无监督预训练的方法(Srivastava,2013)。由于这些原因,无监督预训练已经不如以前流行。然而,无监督预训练仍然是深度学习研究历史上的一个重要里程碑,并将继续影响当代方法。预训练的想法已经推广到监督预训练(supervised pretraining),这将在第8.7.4节中讨论,在迁移学习中这是非常常用的方法。迁移学习中的监督预训练流行(Oquab et al.,2014;Yosinski et al.,2014)于在ImageNet数据集上使用卷积网络预训练。由于这个原因,实践者们公布了这些网络训练出的参数,就像自然语言任务公布预训练的单词向量一样(Collobert et al.,2011a;Mikolov et al.,2013a)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论