第 15 章:表示学习(Representation Learning)
15.1 贪心逐层无监督预训练(Greedy Layer-Wise Unsupervised Pretraining)
无监督学习在深度神经网络的复兴中扮演过关键的历史角色——它首次让研究者能够在不依赖卷积、循环等架构专门化的前提下训练出深度监督网络。这一过程被称为"无监督预训练",更精确地说是"贪心逐层无监督预训练"。它是"为一个任务(无监督地刻画输入分布)学到的表示"能在另一个任务(同输入域的监督学习)上有用这一现象的典型范例。
贪心逐层无监督预训练依赖一个单层表示学习算法,比如 RBM、单层自编码器、稀疏编码模型,或其他能学到潜表示的模型。每一层用无监督方法预训练,把前一层的输出当作输入,产生数据的一个新表示,期望其分布(或与类别等其它变量的关系)更简单。算法 15.1 给出了形式化描述:给定一个无监督特征学习算法 \(L\)(取训练集样本、返回一个编码器或特征函数 \(f\))、原始输入数据 \(X\)(每行一个样本)、以及阶段数 \(m\);先把 \(f\) 初始化为恒等函数,\(\tilde{X} = X\),然后对 \(k = 1, \dots, m\) 依次令 \(f^{(k)} = L(\tilde{X})\),把 \(f^{(k)}\) 复合到当前的 \(f\) 上,再把 \(\tilde{X}\) 替换为 \(f^{(k)}(\tilde{X})\);如果要做微调,最后再以 \(T(f, X, Y)\) 对整个 \(f\) 做有监督微调并返回。
基于无监督准则的贪心逐层训练过程,长期被用来绕开"为监督任务联合训练深度网络各层"这一困难。该方法至少可追溯到 Neocognitron(Fukushima, 1975)。2006 年的深度学习复兴始于一项发现:这种贪心过程可以为整个网络的联合训练找到好的初始化,并可被用来成功训练全连接架构(Hinton et al., 2006; Hinton and Salakhutdinov, 2006; Hinton, 2006; Bengio et al., 2007; Ranzato et al., 2007a)。在此之前,只有卷积网络或由循环产生深度的网络被认为可训练。如今我们知道贪心逐层预训练并不是训练全连接深度架构的必要条件,但无监督预训练是第一个成功的方法。
之所以叫"贪心",是因为它作为贪心算法,每一步只独立优化解的一个分量,而不是联合优化所有分量。之所以叫"逐层",是因为这些独立分量正是网络的层——具体地,预训练逐层进行,训练第 \(k\) 层时把前面所有层固定,下层在引入上层之后不再调整。之所以叫"无监督",是因为每层用无监督的表示学习算法训练。它同时又叫"预训练",是因为它应被视作"在联合训练算法对所有层进行微调之前"的第一步。在监督学习场景下,它可被看作一种正则化手段(一些实验中预训练降低测试误差而不降低训练误差)以及一种参数初始化方式。
实际中"预训练"一词通常不仅指预训练阶段本身,也指把预训练阶段和监督学习阶段合起来的整个两阶段协议。监督学习阶段可以是在预训练特征之上训练一个简单分类器,也可以是对整个预训练网络进行有监督的微调。无论采用哪种无监督学习算法或模型类型,绝大多数情形下整体训练方案都基本相同。算法选择会改变细节,但几乎所有无监督预训练应用都遵循同样的协议。
贪心逐层无监督预训练也可被用作其他无监督学习算法(比如深度自编码器 Hinton and Salakhutdinov, 2006,以及含多层潜变量的概率模型如深度信念网络 Hinton et al., 2006 和深度玻尔兹曼机 Salakhutdinov and Hinton, 2009a)的初始化。这些深度生成模型将在第 20 章讨论。如 8.7.4 节所述,也可以做贪心逐层有监督预训练,其前提是浅网络比深网络更易训练,这一前提已在若干场景下得到验证(Erhan et al., 2010)。
15.1.1 何时以及为何无监督预训练能奏效(When and Why Does Unsupervised Pretraining Work?)
许多任务上,贪心逐层无监督预训练能让分类任务的测试误差大幅下降。这一观察是 2006 年以来深度神经网络复兴的主要推手(Hinton et al., 2006; Bengio et al., 2007; Ranzato et al., 2007a)。但同样在很多任务上,无监督预训练或者不带来好处,或者甚至造成明显损害。Ma et al. (2015) 研究了预训练在化合物活性预测模型上的影响,发现平均而言预训练略有害,但对许多任务显著有益。鉴于无监督预训练"有时有益、常常有害",理解它何时以及为何奏效,对于判断它是否适用于一个具体任务至关重要。
首先要明确:本节讨论大多局限于贪心无监督预训练本身。还有其他完全不同的、利用神经网络做半监督学习的范式,比如 7.13 节描述的虚拟对抗训练;也可以在训练监督模型的同时训练自编码器或生成模型——这种单阶段做法的例子包括判别式 RBM(Larochelle and Bengio, 2008)以及梯形网络(Rasmus et al., 2015),它们的总目标显式地写成两项之和(一项使用标签,一项只使用输入)。
无监督预训练背后融合了两类思想。第一,它利用了"深度神经网络的初始参数选择会对模型产生显著的正则化效果"这一观点(并在较小程度上认为它能改善优化)。第二,它利用了更一般的"学习输入分布有助于学习从输入到输出的映射"这一观点。这两类思想都涉及机器学习算法多个部分之间尚未被完全理解的复杂交互。
第一种观点——"深度神经网络的初始参数选择对其性能有强正则化作用"——是理解得最差的。在预训练流行起来时,其通常被理解为"将模型初始化到某个局部极小附近,而不是另一个局部极小"。如今局部极小已不再被视为神经网络优化的严重问题,我们知道标准训练过程通常不会停在任何形式的临界点上。但仍存在这种可能:预训练把模型初始化到一块本来难以到达的区域——比如代价函数在样本间剧烈波动以至于小批梯度噪声极大,或者 Hessian 病态以至于梯度下降只能用很小的步长的区域。然而,我们对"预训练参数在监督训练阶段究竟保留了什么属性"的理解仍然有限。这是为什么现代方法更倾向于同时进行无监督和监督学习,而不是两阶段顺序进行的原因。如果不想陷入"监督阶段优化如何保留无监督阶段信息"这种复杂讨论,可以直接把特征提取器的参数冻结,再在所学特征之上加一个监督分类器即可。
第二种观点——"学习算法可以利用无监督阶段学到的信息来在监督学习阶段表现更好"——被理解得更多。其基本想法是:一些对无监督任务有用的特征,可能也对监督学习任务有用。例如,如果我们对汽车和摩托车的图像训练一个生成模型,它必须了解车轮以及"一幅图像中应当有几个轮子"的概念;幸运的话,对车轮的表示会取一种便于监督学习者使用的形式。这一点目前还没有数学理论层面的解释,因此并不总能预测哪些任务会因此受益。方法中有许多方面高度依赖于具体所用模型。例如,如果想在线性分类器之上加预训练特征,那特征必须让底层类别线性可分。这种属性经常自然出现,但并非总是如此。这又是为什么"同时进行监督和无监督学习"更可取——输出层引入的约束从一开始就被自然纳入。
从"把无监督预训练看作学习表示"的角度看,可以预期当初始表示较差时无监督预训练更有效。一个关键例子是词嵌入的使用:用 one-hot 向量表示的单词信息量很低,因为任意两个不同的 one-hot 向量之间的距离都相等(\(L_2\) 距离平方为 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 把这一现象做了可视化。预训练网络所在的区域更小,提示预训练降低了估计过程的方差,进而降低严重过拟合的风险。换句话说,无监督预训练把网络参数初始化到一个"它们出不去"的区域,从该初始化出发的结果更一致、更不容易出现极差情况。
Erhan et al. (2010) 也给出了"预训练在何时效果最好"的部分答案——对更深的网络,预训练对测试误差的均值和方差的下降最显著。需要记住的是,这些实验在现代训练极深网络的方法(ReLU、Dropout、Batch Normalization)发明和普及之前完成;因此无监督预训练与当代方法结合后的效果,了解得相对较少。
一个重要问题是:无监督预训练如何充当正则化?一种假设是:预训练鼓励学习算法去发现那些与"产生观测数据的底层原因"相关的特征。这一重要观念还启发了无监督预训练以外的其他算法,并将在 15.3 节进一步讨论。
与其它形式的无监督学习相比,无监督预训练有一个缺点:它要分两个独立的训练阶段。许多正则化策略允许用户通过调整一个超参数来控制正则化强度。无监督预训练则没有明确的方式调整"来自无监督阶段的正则化强度";取而代之的是大量超参数,它们的影响往往只能在事后衡量,并且事前难以预测。当我们同时进行无监督和监督学习(而非预训练策略)时,只有一个超参数(通常是无监督代价项的系数)决定无监督目标对监督模型的正则化强度;减小该系数即可预测性地减小正则化。在无监督预训练情形下,并没有灵活调整正则化强度的方法——要么把监督模型初始化到预训练参数,要么不初始化。
两个独立阶段的另一个缺点是:每个阶段都有自己的超参数。第二阶段的性能通常在第一阶段无法预测,于是从"提出第一阶段的超参数"到"用第二阶段反馈更新它们"之间会有很长延迟。最有原则性的做法是用监督阶段的验证集误差来选择预训练阶段的超参数,正如 Larochelle et al. (2009) 所讨论的。实践中,有些超参数(如预训练迭代数)更方便在预训练阶段就基于无监督目标的早停来设定,这并不理想但比基于监督目标廉价得多。
如今,无监督预训练在很大程度上已被弃用,自然语言处理领域除外——在 NLP 中,单词的 one-hot 表示本身不携带任何相似性信息,而极大规模的无标签集合是可得的;预训练的优势在于可以先在一个庞大的无标签语料(比如数十亿词)上预训练一次,学到一个好的表示(通常是词级、也可以是句级),然后在小得多的监督训练集上使用该表示或对其进行微调。这一路线由 Collobert and Weston (2008b)、Turian et al. (2010)、Collobert et al. (2011a) 开创,至今仍被广泛使用。
基于监督学习、以 Dropout 或 Batch Normalization 做正则化的深度学习技术,能在极大规模标注数据集上达到人类水平;但在中等规模数据集(如 CIFAR-10、MNIST,每类约 5000 标注样本)上,它们优于无监督预训练。在极小数据集(如可变剪接数据集)上,贝叶斯方法优于基于无监督预训练的方法(Srivastava, 2013)。由于这些原因,无监督预训练的流行度已下降。然而,它仍是深度学习研究史上的一个重要里程碑,并继续影响当代方法。预训练这一思想已推广到 8.7.4 节讨论的有监督预训练,成为迁移学习的一个非常常见的方法。在卷积网络(在 ImageNet 上预训练)上,有监督预训练用于迁移学习很流行(Oquab et al., 2014; Yosinski et al., 2014);研究者公开发布这些训练好的网络参数,正如预训练好的词向量被发布用于自然语言任务一样(Collobert et al., 2011a; Mikolov et al., 2013a)。
15.2 迁移学习与领域适配(Transfer Learning and Domain Adaptation)
迁移学习与领域适配指的是:在一个场景下(比如分布 \(P_1\))学到的内容,被用来改善在另一个场景(\(P_2\))下的泛化。它推广了上一节的思想——我们把表示从无监督学习任务迁移到监督学习任务。
在迁移学习中,学习者必须执行两个或更多不同任务,但假设 \(P_1\) 中解释数据变化的许多因素与 \(P_2\) 中需要刻画的变化相关。典型理解是监督学习上下文:输入相同,但目标可以不同。例如我们可能先在第一个场景学一组视觉类别(如猫和狗),再在第二个场景学另一组(如蚂蚁和黄蜂)。如果第一个场景的数据远多于 \(P_1\) 中的样本,那么这能帮助学到有用的表示,从而只从 \(P_2\) 中的极少量样本就快速泛化。许多视觉类别共享底层概念——边缘与形状、几何变化、光照变化等。一般而言,迁移学习、多任务学习(7.7 节)和领域适配,都可以通过表示学习来实现,前提是存在"对不同场景或任务有用"、对应"在多个场景中出现的底层因素"的特征。图 7.2 示意了这种情形:共享的底层与任务相关的上层。
但有时,不同任务之间共享的不是输入语义,而是输出语义。例如语音识别系统需要在输出层产出合法句子,但靠近输入的早期层可能要识别同一音素或子音素的不同变体(取决于说话者)。在这种情况下,更合理的做法是共享靠近输出的高层、同时为每个说话者做任务相关的预处理,图 15.2 给出了示意。
在领域适配的相关情形下,每个场景下的"任务"和"最优的输入-输出映射"是相同的,但输入分布略有不同。例如情感分析任务——判断一段评论表达正面还是负面情感。网上的评论来自许多类别,一个领域适配情形可能是在书籍、视频、音乐等媒体内容的顾客评论上训练的情感预测器,被用来分析消费电子(如电视、智能手机)评论。可以想象存在一个底层函数告诉人们某条评论是正面、中性还是负面,但词汇和风格在不同领域间有所差异,使得跨领域泛化更难。简单的无监督预训练(用去噪自编码器)已在情感分析的领域适配上取得极大成功(Glorot et al., 2011b)。
一个相关问题是"概念漂移",可被看作一种因数据分布随时间渐变而产生的迁移学习。概念漂移和迁移学习都可被视为多任务学习的特殊形式。短语"多任务学习"通常指监督学习任务,但更一般的迁移学习概念同样适用于无监督学习和强化学习。
在所有这些情形下,目标都是利用第一个场景的数据,提取在第二个场景的学习甚至直接预测中可能有用的信息。表示学习的核心思想是:同一个表示在两个场景中都可能有用。在两个场景中使用同一表示,能让该表示同时受益于两个任务各自的训练数据。
如前所述,无监督深度学习在迁移学习的若干机器学习竞赛中已取得成功(Mesnil et al., 2011; Goodfellow et al., 2011)。在第一个竞赛中,实验设置如下:参赛者先拿到来自第一个场景(分布 \(P_1\))的某个类别集合的数据集。他们必须用它学到一个好的特征空间(将原始输入映射到某种表示),使得在迁移场景(分布 \(P_2\))的输入上应用该变换后,线性分类器可以在极少的标注样本下训练并良好泛化。竞赛中最引人注目的发现之一是:随着架构采用越来越深的表示(纯粹在第一个场景 \(P_1\) 数据上以无监督方式学到),第二个(迁移)场景 \(P_2\) 中新类别的学习曲线显著变好。对深度表示而言,达到表观渐近泛化性能所需的迁移任务标注样本数显著减少。
迁移学习的两种极端形式是"一次学习"(one-shot learning)和"零次学习"(zero-shot learning,有时也称 zero-data learning)。一次学习只给迁移任务的一个标注样本,零次学习则根本不给出任何标注样本。
一次学习(Fei-Fei et al., 2006)之所以可能,是因为表示在第一阶段学会了清晰地把底层类别分开。在迁移学习阶段,只需要一个标注样本就能推断出"在表示空间内聚集于同一点的"许多可能测试样本的标签。其有效性取决于"与这些不变性对应的变化因素"在所学表示空间中是否已经与其它因素清晰分离,以及我们是否学会了"哪些因素在区分某些类别时重要、哪些不重要"。
作为零次学习的一个例子,考虑让学习者阅读大量文本然后去解物体识别问题。即便从未见过该物体的图像,文本若能充分描述该物体,就可能识别出该特定类别。例如在读过"猫有四条腿和尖耳朵"之后,学习者或许能猜出某张图像是猫——尽管他从未见过猫。
零数据学习(Larochelle et al., 2008)和零次学习(Palatucci et al., 2009; Socher et al., 2013b)之所以可能,是因为训练中利用了额外信息。我们可以把零数据学习场景看作包含三个随机变量:传统输入 \(x\)、传统输出/目标 \(y\)、以及描述任务的额外随机变量 \(T\)。模型被训练去估计条件分布 \(p(y \mid x, T)\),其中 \(T\) 是对模型应当执行的任务的描述。在上面"读了猫相关文本再识别猫"的例子中,输出是二值变量 \(y\),\(y=1\) 表示"是"、\(y=0\) 表示"否"。任务变量 \(T\) 表示要回答的问题,如"这张图里有没有猫"。如果有一个训练集,其无监督样本所"居住的空间"与 \(T\) 相同,那么我们或许能推断出未见过的 \(T\) 实例的含义。在"未见过猫的图像也能识别猫"的例子里,重要的是我们有含"猫有四条腿""猫有尖耳朵"等句子的无标签文本数据。
零次学习要求 \(T\) 能以允许某种泛化的方式表示——\(T\) 不能只是表示物体类别的 one-hot 码。Socher et al. (2013b) 改用学到的词嵌入对每个类别名做分布式表示。
类似的现象在机器翻译中也会出现(Klementiev et al., 2012; Mikolov et al., 2013b; Gouws et al., 2014):我们有某种语言的词,词与词之间的关系可从单语语料学到;另一方面,我们有把一种语言的词与另一种语言的词联系起来的翻译句。即便没有把语言 X 的词 A 翻译到语言 Y 的词 B 的标注样本,我们仍能泛化并猜出词 A 的翻译,因为我们学到了语言 X 词的分布式表示、语言 Y 词的分布式表示,并通过双语匹配句对训练样例在两个空间之间建立了一个(可能双向的)链接。如果三要素(两种表示以及它们之间的关系)联合学习,这种迁移会最成功。
零次学习是迁移学习的一种特殊形式。同一原理也解释了"如何做多模态学习"——在一个模态中学到一种表示,在另一个模态中学到一种表示,并学到两种模态观测对 \((x, y)\)(一个模态的 \(x\) 和另一个模态的 \(y\))之间的关系(一般是一个联合分布)(Srivastava and Salakhutdinov, 2012)。通过联合学习三组参数(从 \(x\) 到其表示、从 \(y\) 到其表示、两种表示之间的关系),一个表示中的概念被锚定到另一个表示中,反之亦然,从而可以对新的成对样本做有意义的泛化。图 15.3 给出示意。
15.3 半监督解耦因果因子(Semi-Supervised Disentangling of Causal Factors)
关于表示学习的一个重要问题是:"什么样的表示比另一种更好?"一种假设是:理想表示中,表示内的特征对应于观测数据的"底层原因",在特征空间中用不同的特征或方向对应不同的原因,从而把各原因相互解耦。这一假设推动了"先为 \(p(x)\) 找一个好表示"的做法。如果 \(y\) 是 \(x\) 最显著的原因之一,这样的表示对计算 \(p(y \mid x)\) 也可能是个好表示。该想法自 1990 年代以来一直引导着大量深度学习研究(Becker and Hinton, 1992; Hinton and Sejnowski, 1999)。关于半监督学习何时能优于纯监督学习的更多论据,可参见 Chapelle et al. (2006) 的 1.2 节。
在其他表示学习方法中,我们常常关注一个"易于建模"的表示——比如其各分量是稀疏的或相互独立的。一个能清晰分离底层因果因子的表示,不一定是一个易于建模的表示。然而,"通过无监督表示学习做半监督学习"这一假设的进一步含义是:对于许多 AI 任务,这两种属性是一致的——一旦能获得"观测背后"的解释,从其他属性中隔离出单个属性就变得容易了。具体地,若表示 \(h\) 体现了 \(x\) 背后的许多原因,且输出 \(y\) 是其中最显著的原因之一,那么从 \(h\) 预测 \(y\) 是容易的。
首先,看半监督学习会失败的情形——"对 \(p(x)\) 的无监督学习"对学 \(p(y \mid x)\) 没有帮助。例如 \(p(x)\) 是均匀分布、而我们要学 \(f(x) = \mathbb{E}[y \mid x]\) 的情形。显然,光看 \(x\) 值的训练集并不能给我们关于 \(p(y \mid x)\) 的任何信息。
接着看半监督学习能成功的一个简单例子。考虑 \(x\) 来自一个混合分布、且 \(y\) 的每个值对应一个混合分量,如图 15.4 所示。如果各混合分量彼此分得很开,那么对 \(p(x)\) 建模就恰好揭示了每个分量所在的位置,此时每类一个标注样本就足以完美学到 \(p(y \mid x)\)。但更一般地,是什么让 \(p(y \mid x)\) 和 \(p(x)\) 关联起来呢?
如果 \(y\) 与 \(x\) 的某个因果因子紧密相关,那么 \(p(x)\) 与 \(p(y \mid x)\) 会强烈关联,"试图解耦变化的底层因子"的无监督表示学习就有可能成为有效的半监督学习策略。
考虑 \(y\) 是 \(x\) 的一个因果因子,并令 \(h\) 表示所有这些因子。真实生成过程可以按照这张有向图模型来组织,\(h\) 是 \(x\) 的父节点:
于是数据的边缘概率为:
从这一简单观察可得:(从泛化的角度看)关于 \(x\) 的"最好的可能模型"就是揭示上述"真实"结构的那个——以 \(h\) 为潜变量解释 \(x\) 中的观测变化。上面讨论的"理想"表示学习因此应恢复这些潜因子。如果 \(y\) 是其中之一(或与其中之一紧密相关),那么从这种表示预测 \(y\) 就很容易。同时也看到,\(y\) 关于 \(x\) 的条件分布通过贝叶斯公式与上式中的各个分量紧密相关:
由此可知,边缘 \(p(x)\) 与条件 \(p(y \mid x)\) 紧密相关,了解前者的结构应有助于学习后者。因此,在满足这些假设的情形下,半监督学习应能提升性能。
一个重要的研究问题是:大多数观测是由极其大量的底层原因形成的。假设 \(y = h_i\),但无监督学习者并不知道是哪个 \(h_i\)。暴力解法是让无监督学习者学到一种表示——它捕获所有"较显著的"生成因子 \(h_j\) 并将其彼此解耦,从而无论 \(y\) 与哪个 \(h_i\) 相关,都能从 \(h\) 容易地预测 \(y\)。
实践中暴力解法不可行,因为不可能捕获影响观测的所有或大部分变化因子。例如,在视觉场景中,表示是否总该编码背景中最小的物体?心理学有充分记录的"人类无法察觉环境中与当前任务无关的变化"的现象——见 Simons and Levin (1998)。半监督学习的一个重要研究前沿是"在每种情形下应编码什么"。当前两种主要策略是:同时使用监督学习信号和无监督学习信号以使模型选择最相关的变化因子,或者在使用纯无监督学习时使用大得多的表示。
无监督学习中一种新兴策略是修改"哪些底层原因最显著"的定义。历史上自编码器和生成模型被训练来优化一个固定准则,通常与均方误差类似。这些固定准则决定了哪些原因被视为显著。例如,对图像像素应用均方误差,实际上规定了一种"只有当它显著改变大量像素亮度时"才显著的底层原因。当要解的任务涉及与小物体交互时,这会出问题。图 15.5 给出机器人任务的例子——自编码器未能学会编码一个小乒乓球。同一个机器人能成功与较大物体(如棒球)交互,因为它们在均方误差意义上更显著。
也可以采用其他显著性定义。例如,如果一组像素遵循一种"高度可识别"的模式,即便该模式不涉及极端的明暗,它也可以被视为高度显著。实现这种显著性定义的一种方法是最近提出的生成对抗网络(Goodfellow et al., 2014c):生成模型被训练来欺骗一个前馈分类器;前馈分类器试图将生成模型的所有样本识别为"假",将训练集的所有样本识别为"真"。在这个框架下,前馈网络能识别的任何结构化模式都高度显著。生成对抗网络将在 20.10.4 节更详细讨论。Lotter et al. (2015) 表明:用均方误差训练时,生成人头的模型常常忽略耳朵;用对抗框架训练时,模型能成功生成耳朵。因为耳朵相比周围皮肤既不特别亮也不特别暗,所以按均方误差损失不特别显著;但耳朵高度可识别的形状和位置一致意味着前馈网络能轻易学会检测它们,因此在生成对抗框架下它们高度显著。图 15.6 给出图像示例。生成对抗网络只是"确定应表示哪些因子"道路上的一步。我们期待未来研究能找到更好的方法来判断"应表示哪些因子",并发展出"根据任务不同而表示不同因子"的机制。
Schölkopf et al. (2012) 指出,学到底层因果因子的一个好处是:如果真实生成过程中 \(x\) 是果、\(y\) 是因,那么对 \(p(x \mid y)\) 建模能稳健应对 \(p(y)\) 的变化;如果因-果关系反转,则不然——按贝叶斯公式,\(p(x \mid y)\) 会随 \(p(y)\) 变化而敏感。考虑因不同领域、时序非平稳性或任务性质变化而引起的分布变化时,因果机制(宇宙的规律)保持不变,而底层原因的边缘分布则可能改变。因此,通过学习一个"试图恢复因果因子 \(h\) 和 \(p(x \mid h)\)"的生成模型,可以预期获得更好的泛化以及对各种变化的稳健性。
15.4 分布式表示(Distributed Representation)
概念的分布式表示——由许多元素组成、且各元素可被独立设置的表示——是表示学习最重要的工具之一。分布式表示之所以强大,是因为可以用 \(n\) 个有 \(k\) 种取值的特征去描述 \(k^n\) 个不同概念。整本书中我们已看到:含多个隐藏单元的神经网络和含多个潜变量的概率模型都采用了分布式表示策略。一个新的观察是:许多深度学习算法的动机是"假设隐藏单元能学到表示数据背后因果因子的特征",如 15.3 节所讨论。分布式表示与这一思路天然契合——表示空间的每个方向可对应一个不同的"底层配置变量"的取值。
分布式表示的一个例子是 \(n\) 维二元特征向量,可取 \(2^n\) 种构型,每种可能对应输入空间中的一个不同区域(如图 15.7 所示)。与之对照的是符号式表示:输入与单个符号或类别相关联。若字典中有 \(n\) 个符号,可以设想有 \(n\) 个特征检测器,每个对应一个类别的检测;此时表示空间只有 \(n\) 种可能构型,在输入空间切出 \(n\) 个区域(如图 15.8 所示)。这种符号式表示也称为 one-hot 表示,因为可用一个 \(n\) 位的二元向量(各位互斥、同时只有一位为 1)刻画。符号式表示是非分布式表示这一更广类别的特例——非分布式表示可以含许多条目,但对每个条目没有独立可控的语义。
基于非分布式表示的学习算法的例子包括:
- 聚类方法(含 k-means):每个输入点恰好被分到一类。
- k 近邻算法:每个输入关联一个或少量模板或原型样本。当 \(k>1\) 时虽然用多个值描述输入,但这些值不能被独立控制,因此不构成真正的分布式表示。
- 决策树:给定输入时只有一片叶子(以及从根到叶的路径上的节点)被激活。
- 高斯混合和专家混合:模板(聚类中心)或专家与激活度相关联。与 k 近邻相同,每个输入由多个值表示,但这些值不能轻易被独立控制。
- 使用高斯核(或类似局部核)的核机:尽管每个"支持向量"或模板样本的激活度是连续值的,仍有与高斯混合相同的问题。
- 基于 n-gram 的语言或翻译模型:上下文(符号序列)集合按后缀树结构划分;一片叶子可能对应"末尾两词是 \(w_1\) 和 \(w_2\)",每片叶子分别估计参数(可做一定共享)。
对于其中一些非分布式算法,输出并非逐片常数,而是在相邻区域之间插值。参数(或样本)数与能定义的区域数之间的关系仍是线性的。
一个重要的相关概念把分布式表示与符号式表示区分开来:通过不同概念间共享属性而产生泛化。作为纯符号,"cat" 和 "dog" 之间的距离与任何其他两个符号之间的距离相同。然而若把它们与有意义的分布式表示关联,那么关于猫的许多说法都可泛化到狗,反之亦然。例如我们的分布式表示可能含"has_fur""number_of_legs"等条目,它们在"cat"和"dog"的嵌入中取值相同。作用于词分布式表示的神经语言模型,比直接作用于 one-hot 词表示的模型泛化能力更好,如 12.4 节所述。分布式表示诱导出丰富的相似性空间,其中语义相近的概念(或输入)在距离上接近——这一性质是纯符号式表示所没有的。
什么时候、为什么在学习算法中使用分布式表示会带来统计优势?分布式表示的优势在于:当一种看起来复杂的结构能用少量参数紧凑表示时。如果传统非分布式学习算法只靠平滑性假设来泛化——即"如果 \(u \approx v\),则待学目标函数 \(f\) 满足 \(f(u) \approx f(v)\)"——则它在高维情形下会受维度灾难之苦:为了学一个在许多不同区域里反复升降的目标函数,所需样本数至少与可区分区域数相当。可以把这些区域中的每一个视为一个类别或符号:通过为每个符号(或区域)安排一个自由度,就能学到从符号到值的任意解码映射。但这并不允许我们为新区域泛化到新符号。
幸运的话,目标函数可能除平滑性外还有规律性。例如带最大池化的卷积网络能在任意位置识别物体,即便物体的空间平移在输入空间中并不对应平滑变换。
我们来看一个分布式表示学习算法的特例:通过输入的线性函数阈值化来提取二元特征。表示中每个二元特征将 \(\mathbb{R}^d\) 划分为一对半空间,如图 15.7 所示。\(n\) 个对应半空间的交集数呈指数级,决定了这种分布式表示学习者能区分的区域数。\(n\) 个超平面在 \(\mathbb{R}^d\) 中能生成多少个区域?应用 Zaslavsky (1975) 关于超平面交集的一般结果,Pascanu et al. (2014b) 表明这种二元特征表示能区分的区域数为
因此我们看到一种在输入大小上呈指数、在隐藏单元数上呈多项式的增长。
这给出了一个几何论据,解释分布式表示的泛化能力:在 \(\mathbb{R}^d\) 中有 \(n\) 个线性阈值特征、共计 \(O(n^d)\) 个参数时,可以在输入空间中明确表示 \(O(n^d)\) 个区域。相对地,如果我们不对数据做任何假设,用一个对每个区域有唯一符号、且对每个符号有独立参数去识别 \(\mathbb{R}^d\) 中相应部分的表示,那么要指定 \(O(n^d)\) 个区域就需要 \(O(n^d)\) 个样本。更一般地,对分布式表示的论据可被推广到用非线性、可能连续的提取器来提取分布式表示中每个属性的情形。论据是:如果一个含 \(k\) 个参数的参数化变换能学 \(r\) 个输入区域,且 \(k \ll r\),那么得到该表示若对目标任务有用,我们就可能以远好于非分布式设置(需要 \(O(r)\) 个样本才能得到同样的特征和把输入空间分成 \(r\) 个区域的方式)的方式泛化。用更少的参数表示模型意味着我们需要拟合的参数更少,因此需要少得多的训练样本就能良好泛化。
支持"基于分布式表示的模型泛化良好"的另一部分论据是:尽管它们能明确编码大量不同区域,它们的容量仍是有限的。例如线性阈值单元构成的神经网络的 VC 维只有 \(O(w \log w)\),其中 \(w\) 是权重数(Sontag, 1998)。这种限制源于:尽管我们可以给表示空间分配很多唯一编码,但我们既无法使用全部码空间,也无法用一个线性分类器学出"从表示空间 \(h\) 到输出 \(y\)"的任意函数。在分布式表示上用线性分类器,等于表达了一种先验——待识别的类别是"由 \(h\) 捕获的底层因果因子的线性可分函数"。我们通常希望学一些类别,如"所有绿色物体的图像"或"所有汽车的图像",但不希望学需要非线性 XOR 逻辑的类别。例如我们一般不愿把数据分成"红色汽车 + 绿色卡车"一类、"绿色汽车 + 红色卡车"另一类。
前述讨论仍较抽象,但可以被实验验证。Zhou et al. (2015) 发现:在 ImageNet 和 Places 基准数据集上训练的深度卷积网络的隐藏单元学到的特征常常是可解释的——对应人类自然会赋予的标签。实践中隐藏单元并不总是学到"有简单语言名"的东西,但有意思的是这种情形出现在最好的计算机视觉深度网络的顶层。这些特征的共同点是:我们可以想象在不必看到"所有其他特征的全部构型"的前提下学到其中每个特征。Radford et al. (2015) 演示了:生成模型可以学一种人脸图像的表示,其中表示空间的不同方向捕获不同的底层变化因子。图 15.9 表明表示空间的一个方向对应"人是男是女",另一个方向对应"是否戴眼镜"。这些特征是被自动发现的,并非事先固定。我们并不需要隐藏单元分类器的标签:只要任务需要这样的特征,对目标函数的梯度下降就会自然学到在语义上有趣的特征。我们可以学到"男性与女性的区别"或"是否戴眼镜",而无须用覆盖"其余 \(n-1\) 个特征全部取值组合"的样例去刻画这些组合。这种统计可分性正是"能泛化到训练中从未见过的人物特征新构型"的原因。
15.5 深度的指数级收益(Exponential Gains from Depth)
在 6.4.1 节中我们已看到:多层感知器是通用逼近器,并且一些函数可以被深度网络以指数级小的规模表示。模型规模缩小带来统计效率的提升。本节描述类似结果如何更一般地适用于其他带分布式隐藏表示的模型。
在 15.4 节中,我们看到一个生成模型学到人脸图像背后解释因子(包括性别和是否戴眼镜)的例子。完成该任务的生成模型基于一个深度神经网络。期待一个浅层网络(如线性网络)能学到这些抽象解释因子与图像像素之间的复杂关系是不合理的。在这项以及其他 AI 任务中,那些可以彼此近乎独立地选取、却仍对应有意义的输入的因子,更有可能是非常高层且以高度非线性方式与输入相关的。我们认为这要求深度的分布式表示,其中更高层的特征(被视为输入的函数)或因子(被视为生成原因)由多个非线性的组合得到。
在许多不同设定下已被证明:通过许多非线性的组合以及层次化重用特征的组织,可以在分布式表示带来的指数级收益之上再叠加一层指数级统计效率提升。许多网络(具有饱和非线性、布尔门、求和/乘积或 RBF 单元等)只要有一个隐藏层就可以被证明是通用逼近器。作为通用逼近器的模型族可以在足够多隐藏单元的前提下,以任意非零误差逼近一大类函数(包括所有连续函数)。然而所需隐藏单元数可能极大。关于深度架构表达能力的理论结果表明:存在这样一族函数,它能被深度为 \(k\) 的架构高效表示,却需要指数级数量的隐藏单元(相对输入大小)当深度不足时(深度为 2 或 \(k-1\))。
许多结构化概率模型只要含一层隐藏潜变量,就是概率分布的通用逼近器:受限玻尔兹曼机和深度信念网络都属此类(Le Roux and Bengio, 2008, 2010; Montúfar and Ay, 2011; Montúfar, 2014; Krause et al., 2013)。
和前馈网络一样,其他模型如概率模型上也能得到深度带来的指数级优势。和积网络(SPN, Poon and Domingos, 2011)就是其中一例——它用多项式电路计算一组随机变量上的概率分布。Delalleau and Bengio (2011) 表明:存在一些概率分布,要求 SPN 的最小深度以避免模型规模指数级膨胀。Martens and Medabalimi (2014) 进一步表明 SPN 任意两个有限深度之间都存在显著差异,且一些用于让 SPN 可处理的约束可能限制其表示能力。
另一个有趣进展是关于与卷积网络相关的深度电路族表达能力的一系列理论结果——这些结果强调:即便允许浅层电路仅"近似"深度电路所计算的函数,深度电路仍具有指数级优势(Cohen et al., 2015)。相比之下,过去的理论工作仅在"浅层电路必须精确复现"特定函数的情形下做结论。
15.6 提供线索以发现底层原因(Providing Clues to Discover Underlying Causes)
作为本章的收尾,我们回到一开始的问题:什么使一种表示比另一种更好?15.3 节首先给出的一种回答是:理想表示是能解耦"产生数据的底层变化因子"——尤其是与应用相关的那些因子——的表示。多数表示学习策略都基于"引入线索以帮助学习找到这些底层变化因子"。这些线索可帮助学习者把这些观测到的因子与其它因子分开。监督学习提供了一种非常强的线索——每个 \(x\) 伴随的标签 \(y\)——它通常直接指定了至少一个变化因子的取值。更一般地,为了利用丰富的无标签数据,表示学习还使用了关于底层因子的其他更间接的提示。这些提示采取"由学习算法设计者施加以引导学习者的隐式先验信念"的形式。诸如"没有免费午餐定理"等结果表明,正则化策略对获得良好泛化是必要的。虽然不可能找到普适的最优正则化策略,但深度学习的一个目标是找到一组相对通用的正则化策略,能广泛适用于各种 AI 任务——类似于人和动物能够解决的那些任务。
我们在此列出这些通用正则化策略。该清单明显并非穷尽,但给出了一些"如何鼓励学习算法去发现对应底层因子的特征"的具体例子。此清单最初在 Bengio et al. (2013d) 的 3.1 节引入,本节对其做了部分扩展。
- 平滑性(Smoothness):假设 \(f(x + \epsilon d) \approx f(x)\),其中 \(d\) 为单位向量、\(\epsilon\) 很小。该假设允许学习者从训练样本泛化到输入空间中邻近的点。许多机器学习算法利用了这一点,但它不足以克服维度灾难。
- 线性(Linearity):许多学习算法假设某些变量之间的关系是线性的。这允许算法在远离观测数据时做预测,但有时会导致过于极端的预测。多数不做平滑性假设的简单机器学习算法转而做线性假设。这其实是不同的假设——在高维空间中权重大线性函数可能并不平滑。参见 Goodfellow et al. (2014b) 关于线性假设局限性的进一步讨论。
- 多解释因子(Multiple explanatory factors):许多表示学习算法的动机是"假设数据由多个底层解释因子生成,且大多数任务在已知每个因子的状态时易于求解"。15.3 节描述了这种观点如何通过表示学习来推动半监督学习。学 \(p(x)\) 的结构需要学到一些对建模 \(p(y \mid x)\) 也有用的特征,因为两者都涉及同一组底层解释因子。15.4 节描述了这种观点如何推动分布式表示的使用——表示空间的不同方向对应不同的变化因子。
- 因果因子(Causal factors):模型以这种方式构造:把所学表示 \(h\) 描述的变化因子视为观测数据 \(x\) 的原因,而非反之。15.3 节讨论过,这对半监督学习有利,且当底层原因的分布变化或模型被用于新任务时,学到的模型更稳健。
- 深度,或解释因子的层次组织(Depth, or a hierarchical organization of explanatory factors):高层抽象概念可以由简单概念定义,形成层次。从另一个角度看,使用深度架构表达了我们的信念——任务应通过多步程序完成,每一步引用前一步的输出。
- 跨任务共享因子(Shared factors across tasks):在多任务情境下——多个任务对应共享同一输入 \(x\) 的不同 \(y_i\),或每个任务对应全局输入 \(x\) 的一个子集或函数 \(f^{(i)}(x)\)——假设每个 \(y_i\) 与来自公共相关因子池 \(h\) 的一个不同子集相关。因为这些子集有重叠,通过共享的中间表示 \(P(h \mid x)\) 同时学所有 \(P(y_i \mid x)\) 允许任务间共享统计强度。
- 流形(Manifolds):概率质量集中,且集中的区域是局部连通、占据很小体积的。在连续情形下,这些区域可以被低维流形近似,其维数远低于数据所在原空间。许多机器学习算法只有在这种流形上才行为合理(Goodfellow et al., 2014b)。一些机器学习算法——尤其是自编码器——尝试显式地学习流形的结构。
- 自然聚类(Natural clustering):许多机器学习算法假设输入空间中每个连通流形可被分到一类。数据可能位于许多不相连的流形上,但每个流形内的类别保持不变。这一假设启发了多种学习算法,包括切线传播、双反向传播、流形切线分类器以及对抗训练。
- 时间与空间相干性(Temporal and spatial coherence):慢特征分析及相关算法假设最重要的解释因子随时间变化缓慢,或至少"真实底层解释因子比像素值等原始观测更容易预测"。参见 13.3 节关于此方法的进一步描述。
- 稀疏性(Sparsity):多数特征在描述大多数输入时应该是不相关的——表示一张猫的图像时不需要使用检测象鼻的特征。因此合理地施加一种先验:任何可被解读为"出现"或"缺席"的特征在大多数时候应处于"缺席"状态。
- 因子依赖的简单性(Simplicity of Factor Dependencies):在好的高层表示中,因子之间通过简单依赖相互关联。最简单的情形是边缘独立 \(P(h) = \prod_i P(h_i)\),但线性依赖或浅层自编码器所捕获的依赖也是合理的假设。这在许多物理定律中可以看到——在线性预测器或对所学表示使用因式先验时也作了这一假设。
表示学习的概念把深度学习的诸多形态联系到一起。前馈网络和循环网络、自编码器和深度概率模型,都学习并利用表示。学习尽可能好的表示仍是一个令人激动的研究方向。
本章个人批注
本章是 Goodfellow 等人"理论收尾"的核心章节——它把前面各章训练算法和具体模型(卷积、循环、自编码器、玻尔兹曼机、深度生成模型)的实践,回收到"为什么它们工作"这一更一般的问题上。15.1 节作为历史回顾,让我重新审视了"无监督预训练"在 2006-2014 年间的地位:它一开始是唯一能训练全连接深度网络的方法,后来被 ReLU + Dropout + BatchNorm 取代,再后来又被有监督预训练(ImageNet)取代,迄今只在 NLP 词嵌入场景仍被广泛使用。文本中关于"现在我们知道标准训练过程通常不会停在任何形式的临界点上"这句话值得记一笔——它提示我们 2014 年后学界对"局部极小"问题的看法发生了一次大的重置。
15.3 节是最让我觉得有思想含量的一节。"理想表示解耦底层因果因子"这一假设把表示学习的目标从"工程上的性能指标"提升到"建模真实数据生成过程"。"如果 \(y\) 是 \(x\) 的因果因子之一,那么从 \(h\) 预测 \(y\) 是容易的"——这一论据在数学上只是一个简短的贝叶斯公式推导,但直觉上的穿透力极强。我尤其欣赏 Schölkopf et al. (2012) 的论据:建模 \(p(x \mid y)\) 比建模 \(p(y \mid x)\) 更稳健,因为前者只依赖于不变的因果机制。Lotter et al. (2015) 关于 MSE vs 对抗损失的"显著性定义"问题是一个微妙但重要的实践观察——同一只机器人在两种训练目标下对"小物体"的态度截然不同。
15.4 节的分布式表示理论(\(O(n^d)\) 区域数)和 15.5 节的"深度指数级收益"是经典内容,但作者的处理比较克制:他们既不打算全面综述电路复杂度文献,也不深入证明任何一个定理,而是把若干"标志性结果"(Le Roux and Bengio, Montúfar, Delalleau and Bengio, Cohen et al. 等)作为论据并列在一起。Radford et al. (2015) 的人脸"性别-眼镜"向量算术示例很直观——它把"分布式表示的解耦"这一抽象论据直接显示在了像素空间。
15.6 节给出的"通用正则化策略清单"在实践上极具价值:平滑性、线性、多因子、因果、深度、跨任务共享、流形、自然聚类、时空相干、稀疏、依赖简单性——这 11 条几乎覆盖了当代深度学习里所有"先验/归纳偏置"的设计哲学。Bengio et al. (2013d) 的原清单只有 5 条,作者加了 6 条,表明这一领域到 2016 年仍在系统化扩展。
至于本章与上下章的关系:第 14 章是自编码器——表示学习的一个具体工具族;第 16 章是结构化概率模型——是表示学习在概率图模型框架下的延伸;第 20 章深度生成模型则是 15.3 节"解耦因果因子"假设的现代实现。
与上下章的衔接(一段话)
第 15 章"表示学习"在 Goodfellow 书的整体结构中处于"实践 → 理论 → 再回归实践"的转折点。前 14 章(前言 + 2-14)讲述了深度学习的工具箱:线性代数、概率、机器学习基础、数值计算、前馈网络、正则化、优化、卷积、循环、实用方法论、各类应用、自编码器和线性因子模型。第 15 章跳出具体模型,回到"为什么这些方法能工作"的理论层面——分布式表示、深度、因果因子等先验如何为深度架构带来指数级优势。第 16-20 章则把本章的"表示"思想以新的形式接回来:第 16 章结构化概率模型是表示的概率图视角,第 20 章深度生成模型是"用神经网络建模 \(p(x)\)"的现代实现,第 18-19 章处理配分函数和近似推断——这些是第 20 章的支撑工具。换言之,本章在书中的位置相当于 14 章"具体工具"和 16-20 章"概率与生成建模"之间的一座理论桥梁;作者把它放在这里,是为了让读者在掌握足够多"工程对象"之后,能从理论层面理解它们的共同根基——这是深度学习研究中从"能跑"走向"知道为什么能跑"的关键一步。