Representation learning表示学习

机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜 测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法。传统的机器学习主要关注如何学习一个预测模型。一般需要首先将数据表示为一组特征(Feature),特征的表示形式可以是连续的数值、离散的符号或其他形式。然后将这些特征输入到预测模型,并输出预测结果。这类机器学习可以看作浅层学习(Shallow Learning)。浅层学习的一个重要特点是不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取

 

为了提高机器学习系统的准确率,我们就需要将输入信息转换为有效的特征,或者更一般性地称为表示(Representation)。从原始输入数据中自动地学习出有效的特征,并提高最终机器学习模型的性能的方法叫表示学习(Representation Learning).

 

传统的特征学习一般是通过人为地设计一些准则,然后根据这些准则来选取有效的特征。特征的学习是和最终预测模型的学习分开进行的,因此学习到的特征不一定可以提升最终模型的性能。

如果直接用数据的原始特征来进行预测,对机器学习模型的能力要求比较高。这些原始特征可能存在以下几种不足:1)特征比较单一,需要进行(非线性的)组合才能发挥其作用;2)特征之间冗余度比较高;3)并不是所有的特征都对预测有用;4)很多特征通常是易变的;5)特征中往往存在一些噪声。

 

一个成功的机器学习系统通常需要尝试大量的特征,称为特征工程(Feature Engineering)。但即使这样,人工设计的特征在很多任务上也不能满足需要。因此,如何让机器自动地学习出有效的特征也成为机器学习中的一项重要研究内容,称为特征学习也叫表示学习。特征学习在一定程度上也可以减少模型复杂性、缩短训练时间、提高模型泛化能力、避免过拟合等。

传统的特征学习一般是通过人为地设计一些准则,然后根据这些准则来选取有效的特征,具体又可以分为两种:特征选择和特征抽取。

 

特征提取的方法主要是通过属性间的关系,如组合不同的属性得到新的属性,这样就改变了原来的特征空间。如PCA
特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间(如Filter, Wrapper, Embedded)。

 

而在表示学习中,有两个核心问题:一是“什么是一个好的表示”;二是“如何学习到好的表示”。

什么是好的表示

一个好的表示应该具有很强的表示能力,即同样大小的向量可以表示更多信息。

一个好的表示应该使后续的学习任务变得简单,即需要包含更高层的语义信息。

一个好的表示应该具有一般性,是任务或领域独立的。

如何学到好的表示

机器学习方法的效果严重依赖于数据特征。传统的特征工程是将人们的经验,先验知识加入数据中补偿算法的不足,但是耗时耗力。AI必须理解我们的世界,要想达到这点必须使他能分辨和分离出那些隐藏于观察到的低维感知数据下面的解释因素。比如,对于概率图模型而言,一个好的表征往往使捕获观察到数据的潜在解释因素的后验分布。

 

一个好的表征的原因

(好的表征需要一些任务相关或者数据分布相关等的先验知识或假设)

  1. 先验知识(或者假设)。

显式的表征展现了很多我们现实世界中的很多一般性的经验知识,并且这些知识并不是与具体任务直接相关的。表示学习的大多数策略都会引入一些有助于学习引起变换的潜在因素的线索。这些线索或者先验信息可以帮助学习器将这些观察到的因素与其他因素分开。

 

平滑,如果x约等于y,那么f(x)约等于f(y),其中f是要学习的的函数。这个假设允许学习器从训练样本泛化到输入空间中附近的点(f(d+e) = f(d),  e is small),但是这个假设无法克服维数灾难。

多解释因子,数据是由多个潜在解释因子生成的,并且给定每一个因子的状态,大多数任务都能轻易解决。

解释因子的层次组织,高级抽象的概念能通过简单的概念层次化定义。比如,深度架构表达了我们认为任务由多个步骤完成的概念即每一步回溯到先前步骤处理之后的输出。

半监督学习,对于输入数据X和目标Y,描述X分布的部分因子再给定X的情况下能很好的解释Y。所以对于P(x)有用的信息在学习P(Y|x)时也很有用即允许共享监督学习和非监督学习之间的统计优势。

任务间共享因子,当多个对应到不同变量yi的任务共享相同的输入x时,或者当每个任务关联到全局输入x的子集或者函数fi(x)时,我们会假设每个变量yi关联到来自相关因素h公共池的不同子集。因为这些子集有重叠,所以通过共享的中间表示p(h|x)来学习所有的p(yi|x)能够使任务间共享统计强度。

流行,在概率质量集中区域,可用比数据所在原始空间低得多的低维流形来近似。在一些机器学习算法中,特别使自编码器会视图显式地学习流行的结构。这里对流行做一下简单解释。流行来自于拓扑学,数学上视作一组点,每个点都有邻域。给定一个任意一个点,其流行局部看起来是欧几里得空间,可以使用欧氏距离。在流行学习中认为,我们观察到的大多数高维数据是一些低维数据在高位空间中的映射。在高维空间中数据时冗余的,大部分区域是无效输入,有意义的数据只分布在包含少数数据点的子集构成的一组流形中,有意义的变化都沿着流形的方向或者发生在切换到另一流行时。简单解释流形可以类比一张A4纸(二维的)扭曲后立起来,呈现在给人的是三维的。流形主要用于降维和特征学习。

自然聚类,不同种类的客体类别都与不同的流形有关联。精确些就是在同一个流形中,局部的变体会保留下对应类别的信息。很多机器学习算法假设输入空间中每个联通流行可以被分配到一个单独的类中。数据在许多不连通的流形上,但相同流行上数据的类别是相同的。

时空相关,时间上连续的或者空间上邻近的信息一般对应着同一个相关的内容或者从流行角度看就是在高维流行表面移动很慢。更一般的讲,不同的因子在时间或空间上不同尺度的变化对于许多类别相关的信息影响不明显。所以在捕获类别相关变量时,根据这个知识可以考虑那些使表征变化不大的因素。

稀疏性,大部分特征和大部分输入是不相关的。呈现在表示中的化就是大部分元素为0。也就是说,与输入数据x有关的因素只有一小部分。

简化因子依赖,在优秀的高级表示中,因子会通过简单的线性依赖相互关联。比如一般会在学好的表示顶层加一层线性分类器。

 

2. 分布式表示(解释因子的线性组合)

表示学习得到的低维向量是一种分布式表示,孤立的看每一维都没有明确的含义,但综合各个维度形成一个向量则能够明确表示对象的语义信息。这种想法受大脑启发,大脑通过大量神经元的激活和抑制来识别现实中的实体,但是单个神经元的激活或抑制并没有明确的含义,然而多个神经元的状态则能表示世间万物。

传统的表示方法比如one-hot编码表示会面临维度灾难,并且随着数据量的增大编码会变得稀疏。而分布式编码会复用参数,对于一个给定的输入,会有大量的特征或者隐藏单元被激活,共同表示输入信息。分布式表示的不同特征元素彼此是不相互包含的,共同参与数据特征的表示。

基于神经网络这种对离散世界的连续表示机制,人脑具备了高度的学习能力。同时,现实世界是存在层次结构的,一个对象往往由更小的对象组成。这种层次结构反映在人脑就是神经网络的层次结构。而人工神经网络的深度就是对这种层析性的体现。深度结构的优点在于可以复用特征,并且随着层数的加深,可以获取更加抽象的特征。这些获得的概念越抽象,对输入数据的局部变化越不明显。

将高维的局部表示空间映射到一个非常低维的分布式表示空间,在这个低维空间中,每个特征不再是坐标轴上的点,而是分散在整个低维空间中,这个过程也称为嵌入Embedding。

 

常见的两种表示形式

  1. 局部表示通常可以表示为one-hot 向量的形式,这种离散的表示方式具有很好的解释性,但one-hot向量的维数很高,且不能扩展且各个向量之间正交无法计算相似性。
  2. 分布式表示通常可以表示为低维的连续稠密向量,表示能力要强很多,相似度也很容易计算

 

 

3.分解引起变化的因素

一个好的表征应该能区分出引起变化的潜在因素,尤其是与当前应用或任务相关的因素。在输入数据的分布中,不同的解释因素倾向于独立的变化,只有一少部分会在真实的连续输入中一起变化。最为鲁棒的学习方式是尽可能多的分解影响因子,尽可能少的丢弃数据信息。

目前为止,所采用的方法主要是依靠数据自身,通过大量的未标注数据来学习表示以区分大量的可解释因素。这样做的话可以使在遇到复杂和富结构变体时能更加鲁棒。

 

构建深度表征(为什么构建深度表示,因为实验发现深层的效果好呗)

为了学习一种好的表示,需要构建具有一定“深度”的模型,并通过学习算法来让模型自动学习出好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测模型的准确率。表示学习的关键是构建具有一定深度的多层次特征表示。所谓“深度”是指原始数据进行非线性特征转换的次数,深度学习其主要目的是从数据中自动学习到有效的特征表示,通常需要从底层特征开始,经过多步非线性转换才能得到。深层结构的优点是可以增加特征的重用性,从而指数级地增加表示能力。

 

许多种类的只有一个隐藏层的网络都可以被视为万能的近似器。确定性前馈网络是函数的万能近似器,许多具有单个隐藏层的结构化概率模型是概率分布的万能近似器。但是在很多浅层网络例如线性网络不能学习到一些抽象解释因子和复杂的内部联系。这些解释因子很可能是高度抽象的,并且和输入呈高度非线性关系。这些因子几乎彼此独立地被抽取,但仍然对应到有意义的输入因素。因此,我们需要深度的分布式表示,需要许多非线性组合来获得较高级的特征(输入的函数)或因子(生成原因)。

 

借鉴于贪心逐层非监督预训练,构建深度表示的一个重要想法是学习一个特征层级,一次训练一层。在每一层使用非监督特征学习得到一个新的转化并与先前学习到的的转化组合在一起。这个非监督学习的每一次迭代都会给神经网络加一层权重,训练结束后可以用这些权重初始化一个深度的监督学习神经网络或者直接把得到的深度特征作为其他监督学习预测器的输入,或者会对预训练阶段得到的整个网络进行监督精调。

贪心逐层无监督预训练(greedy layer-wise unsupervised pretraining),是指一个任务(无监督学习,尝试获取输入分布的形状)的表示对另一个任务(具有相同输入域的非监督学习)有帮助。贪心逐层无监督预训练依赖于单层表示学习算法,比如RBM,单层自编码器,稀疏编码等其他学习潜在表示的模型。每一层使用无监督学习预训练,将前一层的输出作为输入,输出数据的新的表示。这个新的表示的分布可能更简单哦。

基于无监督标准的贪心逐层训练过程最早被用来规避监督学习问题中深度神经网络难以联合训练多层的问题。这种贪心学习过程可以为多层联合训练过程找到一个好的初始值。目前训练全连接的深度结构时,无需再使用贪心逐层无监督预训练,但是无监督预训练是第一个成功的方法。

贪心逐层无监督预训练,之所以贪心是因为他是一个贪心算法,每一步独立的优化解决方案的一部分,而不是联合优化所有部分。之所以逐层是因为每一次处理一层网络,训练第k层时保持前面的网络层不变。之所以无监督时因为每一层都是用无监督表示学习算法训练的。之所以叫预训练时因为整个预训练过程时在联合训练算法精调所有层之前进行的。

无监督预训练结合了两种不同的想法。其一,它利用了深度神经网络对初始参数的选择可以对模型有着显著的正则化效果的想法。其二,它利用了学习输入分布有助于学习输入到输出的映射的思想。

神经网络训练是非确定性的,每次运行都会收敛到不同的函数。而经过无监督预训练的神经网络会一致地停止在一片相同的函数空间区域,即无监督预训练将参数引入到了其他方法可能探索不到的区域。经过预训练的网络到达的区域是较小的,这表明预训练减少了估计过程的方差,这进而又可以降低严重过拟合的风险。无监督学习不同于权重衰减这种正则化项,它不偏向于学习一个简单的函数,而是学习对无监督学习任务有用的特征函数。预训练鼓励学习算法发现与生成观察数据的潜在原因相关的特征。

第二个想法较好理解,即对于无监督任务有用的特征对于监督学习任务也可能有用。学习算法可以使用无监督阶段学习的信息,在监督学习阶段表现会更好。

如今,大部分算法已经不再使用无监督预训练了,除了在自然语言处理领域中,单词作为one-hot向量表示无法传达相似性信息,并且有非常多的未标注数据集可用。在这种情况下,预训练的优点是可以对一个巨大的未标注数据集进行预训练,学习良好的表示,然后使用该表示或者精调它,使其适合于训练集样本大幅减少的监督任务。

 

单层的学习模块(并非某个或某种模型,是一个只有一个隐藏层或者隐变量层的组件)

(说深层特征为甚转到单层的学习模块?因为单层模块是基础,概率图与计算图在深度模型上差异逐渐变小,目前研究重点放在了单层的贪心学习modules和单层models类型的相似性上。)

表示学习的发展主要发展为两派:概率图模型和神经网络。一个深度模型被描述为概率图还是神经网络的主要差别在于它的层级结构被解释为描述概率图的还是描述计算图的。简单解释就是隐藏单元被解释为随机变量还是计算节点。

两个领域都关注于单层的贪心学习模块和单层模型类型间的相似性。比如,受限玻尔兹曼机RBM属于概率派,自动编码器属于神经网络这边。RBM通过引导式的原则(score matching)来训练模型而自动编码器是正则化的重构目标来训练的。另外一个联系是,计算模型计算表示的计算图可以对应到概率模型的推断过程。随着深度的加深,二者的差异越来越小了。

接下来送概率,自编码和流学习的角度来思考一个典型的非监督单层表征学习算法PCA。

  1. 概率视角看,如概率PCA,因子分析和传统的多变量高斯分布(协方差矩阵的主要的特征向量是主成分)
  2. PCA学到的表示和基础的线性自编码器基本一致。
  3. PCA也可以视作线性流学习的简单线性转化,即在输入空间密度集中区域附近刻画了一个低维的区域。

 

概率模型(引入因变量h,认为h是观测数据x发生原因)

(其实引入隐变量的原因是简化计算,简化依赖关系。把输入数据间的复杂依赖简化为只与h由依赖关系,否则计算量就太大了)

从概率的视角看,特征学习可以看作给定观察数据找到一组描述一个概率分布的隐随机变量。特征值可以理解为推断过程的结果,以确定给定数据的潜在变量的概率分布p(h | x)即后验分布。参数学习就是基于训练数据最大化似然函数学习模型的参数。

 

有向图模型

有向的因变量模型分别参数化条件似然p(x | h)和先验分布p(h)来构建来联合分布即p(x,h) = p(h)p(x | h)。

有向模型的一个重要属性就是迁移解释(explaining away)。即一个与事件独立的原因(先验)在给定观测数据下可以变得非独立。隐式因子模型也可以叫做隐式因果模型,其中h解释为观测数据x发生的原因。

小栗子,“假如你在度假,此时家里的警铃报警了,你会第一时间想到家里遭贼了。但是你随后听广播说你家附近地震了。如果你事先知道地震的话,你就可以很大程度上觉得警报响不是因为家里进贼了“。这个小故事中,把两个完全不相干的事即入室盗窃和地震通过警报这一事件联系在一起。这种相关性是手动引入的,这样就实现了用一个事件的观察信息解释另外一个事件。

最后,要计算特征表示即找到h的后验分布,计算量会非常大。而迁移解释保证可以找到一个略次的后验也可以提供一些有用的信息。

稀疏编码(sparse coding)是迁移解释一个非常好的例子,即使在一个过完备的字典中,稀疏编码使用MAP推断过程寻找h时,可以找到最适合的基并给其他的赋0尽管它们和输入有较高的相关性。

 

无向图模型

无向图模型也叫马尔可夫随机场,通过一组非归一化的非负最大团势函数的乘积参数化联合概率P(x, h)。玻尔兹曼机的能量函数通过玻尔兹曼分布确定了在关于x,h的概率分布。即

但是,一般情况下,玻尔兹曼机的推断过程时难以计算的。而受限玻尔兹曼机通过约束节点间的交互使推断成为可能。即,RBM的特征表示可以表示为一组后验边缘分布P(hi | x)。

 

学习一个从输入直接到表示的参数化映射

在概率模型中,学习到的表示是直接与隐变量相关的,具体是在给定观测变量后与隐变量的后验分布相关。但是这些后验分布一般很难计算随着大量层之间的交互。并且这些后验并不是一个简单的可以直接拿来用的特征向量,所以还需要后续的采样或者其他操作比如计算隐变量的期望或者边缘密度来找到最有可能的特征值。所以我们很需要一种可以直接在最后提取确定性的特征值的方法。

自编码器定义了一种可以直接提取特征的函数f,对于每个给定的输入x都会得到对应的特征向量或者表示h = f(x)。这个函数叫做编码器。自编码器中还有另外一个函数部分叫做解码器,它建立一个从特征空间到输入空间的映射即重建输入。与概率模型显式定义概率分布不同,自编码器通过参数化编码器和解码器,在重建任务上同时训练两个部分使重建误差尽可能的小。为了避免获得恒等式,还需要引入正则化项(稀疏编码器,去噪自编码器等)。

自动编码器的编码与解码部分一般都是用多层感知机实现,如果编码器与解码器都使用sigmod非线性转化,则编码与解码两个部分可以分别看作二分RBM的p(h | v), p(v | h)过程。

 

流形学习角度看表示学习

表示学习的另一个重要角度就是基于流形的几何概念。流形学习假设现实中我们观察到的高维数据是低维数据在高维的映射。对于表示在流形学习中的理解,我们可以思考一个流形,他是输入空间的一个变化,可以在学到的表示中被反应出来或被获取到(通过对输入空间的变化得到一个流形)。流形学习注重的是数据的拓扑结构,变化方向等。所以流形的一些正切方向会被很好的观察到而正交与流形的则会被忽略。所以首要的无监督学习任务可以视作对数据支持(data-supporting)的流形的结构建模。相应的表示可以用嵌入的流形上的坐标系来表示。这个话理解起来比较绕口,其实类似于PCA降维,找到主要的成分,用这些留下来的成分联合表示要学习的特征。流形学习的主要思想还是借鉴拓扑学中流形的概念即一组周围连续的点,把高维的数据理解为低维的流形结构,相当于做了降维的操作。比如,一个三位的球面,在立体的空间中我们看到是三维的,但是它毕竟是个面,我们可以从流形空间的角度理解就是把它展开成二维的流形(球面,注意欧式空间里二维的是一个平面,这里是在流式空间中描述的),使用经纬度就可以表示这个球面,这样就相当于做了降维,而保留下来的这两个维度完全可以在高维空间上重现这个球面,这样其实就做到的特征的学习。这里留下的两个维度也就是流形的方向或者坐标基。

基于这种几何视角的大量算法采用一种基于训练集最近图的非参数化算法。这些非参数化的方法中,每个高纬度的数据点都有自己对应的低维表示坐标,这些低维的表示都已经在原始的输入空间优化过了,近邻图的特定属性都最好的保留了下来。但是这些方法是非参数化的,无法表示新的数据。因此,参数化的方法的研究非常必要。再者,也可以在不考虑最近邻信息的情况下学习到一个流形(比如正则自编码器和PCA)。沿着一个线性流形,切面处处相同,但是在非线性流形中,流形的切面会随着沿着流形的移动而改变。在非线性表示算法中,当输入数据在流形上变化时,很容易考虑表示上的局部变化。局部切面空间,沿着流形方向,也可以捕获局部的合法转换。

 

构建不变式(invariant)

我们知道整合一些领域内的先验知识对机器学习很有帮助。但是目前的算法主要只考虑的是对高维数据的一般化的归纳偏执,这使得这些算法可以处理任何高纬度的问题。因此,我们一般会更倾向于输入数据最基础的领域知识。

构建不变特征的目的是消除表示对当前任务不具信息性的数据中的方差方向的敏感性。构建不变特征的过程可以看作由两个步骤组成。首先,恢复用于数据的低级特征。其次,将这些低层特征的子集集合在一起,形成高层不变特征。

 

参考

  1. 神经网络与深度学习 邱锡鹏
  2. 深度学习. Lan Goodfellow et.al
  3. Bengio, et al. "Representation Learning: A Review and New Perspectives." IEEE Transactions on Pattern Analysis & Machine Intelligence 35.8(2013):1798-1828.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

siyan985

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值