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