Deep Learning 0.4 机器学习

Deep Learning 0.4 机器学习

学习算法

机器学习算法是一类能够从数据中学习的算法,对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习,通过经验E改进后,它在任务T上由性能度量P衡量的性能会有所提升

  • 任务T

机器学习任务定义为机器学习系统应该如何处理样本。样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征的集合。

机器学习可以分为很多类型的任务:

分类:计算机 需要制定某些输入属于k类中的哪一类。为了完成这个任务,学习算法通常会返回一个函数,将输入的向量分类到特定的类别

输入缺失分类:当输入向量的每个度量不被保证时,学习算法需要定义一个从输入向量映射到输出类别的函数。当一些输入可能丢失时,学习算法必须学习一组函数,因为每个函数对应着分类具有不同缺失输入子集的输入向量。有效地定义这样一个大集合函数的方法时学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。使用n个输入变量,我们现在可以获得2n

个不同的分类函数,但是计算机程序仅需要学习一个描述联合概率分布的函数。如在医疗诊断中的分类

回归:计算机程序需要对给定输入预测数值。如预测投保人的索赔金额

转录:机器学习系统观测一些相对非结构化表示的数据,并转录信息为离散的文本形式。如计算机程序输入一段音频波形,输出一序列音频记录中所说的英文字符或单词ID的编码

机器翻译:输入是一种语言的符号序列,计算机程序将其转化为另一种语言的符号序列

结构化输出:结构化输出的任务的输出是向量或者其他包含很多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。如映射自然语言句子到语法结构树,标注航拍照片中的道路位置。在这类任务中,输出的结构形式不需要和输入尽可能相似

异常检测:计算机程序在一组事件或对象中筛选,并标记不正常或者非典型的个体。如信用卡欺诈检测,检测是否被滥用

合成和采样:机器学习程序生成一些和训练数据相似的新样本。如视频游戏中可以自动生成大型物体或风景的纹理,而不是让艺术家手动标记每个像素

缺失值填补:算法填补输入样本中的缺失值

去噪:算法根据损坏后的样本x^预测干净的样本x,或者预测条件概率分布p(x|x^)

密度估计:机器学习算法学习函数,可以解释成样本采样空间的概率密度函数或者质量密度函数。算法需要学习预测到的数据的结构,必须知道什么情况下样本剧集出现,什么情况下不太可能出现

  • 性能度量P

机器学习算法性能的定性度量。对于分类、缺失输入分类和转录任务,我们通常度量模型的准确度,指输出正确结果的样本比率。

通常我们会关注机器学习算法在未观测数据上的性能如何,因为这将决定其在实际应用中的性能。因此我们使用测试集(test set)数据来评估系统性能,并将其与训练机器学习的训练集数据分开

  • 经验E

机器学习算法可以分为无监督(unsupervised)算法和监督(supervised)算法两类。

机器学习算法从整个数据集上获取经验,数据集是指很多样本组成的集合

无监督学习算法训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。在深度学习中,我们通常要学习生成数据集的整个概率分布,比如密度估计、合成或去噪、聚类

监督学习算法训练含有很多特征的数据集,不过数据集中的样本都有一个标签或目标。

无监督学习设计观察随机向量x\mathbf{x}的好几个样本,试图显式或隐式地学习出概率分布p(x),或者是该分布的性质;而监督学习包含观察随机向量x\mathbf{x}及其相关联的值或向量y。然后从x\mathbf{x}预测y\mathbf{y},通常是估计p(y|x)

无监督学习和监督学习之间的界限是模糊的。很多机器学习技术可以用于这两个任务。例如,概率的链式法则,对于随机向量xRn,联合分布可以分解成

p(x)=i=1np(xi|x1,,xi1)

该分解意味着我们可以将其拆分成n个监督学习问题,来解决表面上的无监督学习问题。我们求解监督学习问题p(y|x)时,也可以使用传统的无监督学习策略学习联合分布p(x,y),然后推断

p(y|x)=p(x,y)yp(x,y)

有些机器学习算法并不是训练于一个固定的数据集上,强化学习算法会和环境进行交互,所以学习系统和它的训练过程会有反馈回路。

大部分机器学习算法简单地训练于一个数据集上,数据集可以用很多不同方式来表示。数据集是样本的集合,样本是特征的集合

表示数据集的常用方法是设计矩阵(design matrix)。设计矩阵的每一行包含一个不同的样本,每一列对应不同的特征。每一个样本都能表示成向量,并且这些向量的维度相同。

在监督学习中,样本包含一个标签或目标和一组特征,通常在处理包含观测特征的设计矩阵的数据集时,我们也会提供一个标签向量。

线性回归

线性回归解决回归问题,目标是建立一个系统,将一个向量作为输入,预测标量作为输出。我们定义输出为

y^=wx\hat{y}=\mathbf{w}^\top \mathbf{x}

其中w\mathbf{w}是参数向量

参数是控制系统行为的值,我们可以将w\mathbf{w}看作一组界定每个特征如何影响预测的权重(weight)。接下来需要定义性能度量P。加入我们有m个输入样本组成的设计矩阵,不用它来训练模型,而是评估模型性能如何。我没也有每个样本对应的正确值y组成的回归目标向量。因为这个数据集只是用来评估性能,称之为测试集(test set)。我们将输入的设计矩阵记作X(test),回归目标向量记作y(test)

度量模型性能的一种方法是计算模型在测试集上的均方误差(mean squared error),表示为

MSEtest=1mi(y^(test)y(test))i2

为了构建一个机器学习算法,我们需要设计一个算法,通过观察训练集(X(train),y(train))获得经验,减少MSEtest以改进权重w\mathbf{w}。最小化MSEtrain,我们可以简单地求解其导数为零的情况

wMSEtrain=0

1mwX(train)wy(train)22=0

w=(X(train)X(train))1X(train)y(train)

上式给出解的系统方程被称为正规方程(normal equation),计算该式构成了一个简单的机器学习算法

线性回归通常指附加额外参数的模型,其中

y^=wx+b

从参数到预测的映射仍是一个线性函数,而从特征到预测的映射是一个仿射函数,如此扩展到仿射函数意味着模型预测的曲线仍然看起来像是一条直线,只是这条曲线没必要经过原点。

截距项b通常为仿射变换的偏置(bias)参数,这个术语的命名源自该变换的输出在没有任何输入时会偏移b

容量、过拟合和欠拟合

机器学习的主要挑战是我们的算法必须能够在先前未观测到的新输入上表现良好,而不只是在训练集上表现良好,这种能力被称为泛化(generalization)

训练机器学习模型时,我们可以使用某个训练集,在训练集上计算一些被称为训练误差的度量误差,目标是降低训练误差。同时我们也希望泛化误差很低。

通常我们度量模型在训练集中分出来的测试集样本上的性能,来评估机器学习模型的泛化误差

训练集和测试集数据通过数据集上被称为数据生成过程的概率分布生成,通常我们会做一些列被称为独立同分布假设的假设。该假设是说,每个数据集中的样本都是彼此相互独立的,并且训练集和测试集时同分布的,采样自相同的分布。我们将这个共享的潜在分布称为数据生成分布(data generating distribution),这个概率框架和独立同分布假设允许我们从数学上研究训练误差和测试误差之间的关系。

以下是决定机器学习算法效果是否好的因素

(1)降低训练误差

(2)缩小训练误差和测试误差的差距

这两个因素对应机器学习的两个主要挑战:欠拟合(underfitting)和过拟合(overfitting)。欠拟合是指模型不能再训练集上获得足够低的误差,而过拟合是指训练误差和测试误差之间的差距太大

通过调整模型的容量,我们可以控制模型是否偏向于过拟合或者欠拟合。模型的容量是指其拟合各种函数的能力,容量低的模型可能很难拟合训练集,容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质

一种控制训练算法容量的方法是选择假设空间,学习算法可以选择为解决方案的函数集。当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数据的容量时,算法效果通常会最佳。

容量不仅取决于模型的选择,模型规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数,这被称为模型的表示容量。在这些函数中挑选出最优函数时非常困难的,额外的限制因素意味着学习算法的有效容量可能小于模型族的表示容量

统计学习理论提供了量化模型容量的不同方法。其中最有名的是Vapnik-Chervonenkis维度。VC维度量二元分类器的容量,VC维定义为该分类器能够分类的训练样本的最大数目。假设存在m个不同x\mathbf{x}点的训练集,分类器可以任意地标记该m个不同的x\mathbf{x}点,VC维被定义为m的最大可能值。

为考虑容量任意高的极端情况,我们介绍非参数(non-parametric)模型的概念。非参数模型没有参数向量的分量个数有限且固定的限制。有时,非参数模型仅是一些不能实现的理论抽象。然而我们也可以设计一些实用的非参数模型,使它们的复杂度和训练集大小有关。这种算法的一个示例是最近邻回归(nearest neighbor regression)。不像线性回归有固定长度的向量作为权重,最邻近回归模型存储了训练集中所有的Xy\mathbf{y}。当需要为测试点x\mathbf{x}

分类时,模型会查询训练集中离该点最近的点,并返回相关的回归目标。最后,我们也可以将参数学习算法嵌入另一个增加参数数目的算法来创建非参数学习算法,例如我们可以想象这样一个算法,外层循环调整多项式的次数,内层循环通过线性回归学习模型

理想模型假设我们能够预先知道生成数据的真实概率分布,然而这样的模型仍然会在很多问题上发生一些错误,因为分布中仍然会有一些噪声。在监督学习中,从x\mathbf{x}y的映射可能内在是随机的,或者yy可能是其他变量的确定函数,从预先知道的真实分布p(x,y)p(\mathbf{x},y)预测而出现的误差被称为贝叶斯误差(Bayes error)

训练误差和泛化误差会随训练集的大小发生变化,泛化误差的期望不会因训练样本数目的增加而增加。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。任何模型容量小于最优容量的固定参数模型会渐进到大于贝叶斯误差的误差值。具有最优容量的模型仍然可能在训练误差和泛化误差之间存在很大的差距,在这种情况下,我们可以通过手机更多的训练样本来缩小差距。

  • 没有免费午餐定理

机器学习的免费午餐定理(no free lunch theorem)表明,在所有可能的数据生成分布上平均之后,每一个机器学习算法在未事先观测的点上都有相同的错误率。我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能

幸运的是,这些结论尽在我们考虑所有可能的数据生成分布时才成立,在真实世界应用中,如果我们对遇到的概率分布进行假设,那么可以设计在这些分布上效果良好的学习算法

这意味着我们不是要找一个通用学习算法或者绝对最好的学习算法,二十理解什么样的分布与人工智能获取经验的真实世界相关,什么样的学习算法在我们关注的数据生成分布上效果最好

  • 正则化

修改学习算法的方法,只有通过增加或减少学习算法可选假设空间的函数来增加或减少模型的容量。算法的效果不仅很大程度上受影响于假设空间的函数数量,也取决于这些函数的具体形式。

例如我们可以加入权重衰减(weight decay)来修改线性回归的训练标准。带权重衰减的线性回归最小化训练集上的均方误差和正则项的和J(w),其偏好于平方L2

范数较小的权重。

J(w)=MSEtrain+λww

其中λ是提前挑选的值,控制我们偏好小范数权重的程度。当λ=0时我们没有任何偏好,越大的λ\lambda偏好范数越小的权重。最小化J(w)J(\mathbf{w})可以看作拟合训练数据和偏好小权重范数之间的平衡,这会使得解决方案的斜率较小,或是将权重放在较少的特征上。更一般地,正则化一个学习函数f(x;θ),我们可以给代价函数添加被称为正则化(regularizer)的惩罚。在权重衰减的例子中,正则化项是Ω(w)=ww

表示对函数的偏好是比增减假设空间的成员函数更一般的控制模型容量的方法。我们将去掉假设空间中的某个函数看作对不赞成这个函数的无限偏好

有很多其他方法隐式或显式地表示对不同解的偏好。这些不同的方法都被称为正则化,正则化是指修改学习算法,使其降低泛化误差而非训练误差

超参数和验证集

大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的

有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。更多的情况是,该选项必须是超参数,因为它不适合在训练集上学习。这适用于控制模型容量的所有超参数。如果在训练集上训练超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合

为了解决这个问题,我们需要一个训练算法观测不到的验证集(validation set)样本

我们将训练数据分成两个不相交的子集,其中一个用于学习参数,另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超参数

  • 交叉验证

将数据集分成固定的训练集和固定的测试集之后,如果测试集的误差很小,这将意味着平均测试误差估计的统计不确定性,使得很难判断算法A是否比算法B在给定的任务上做得更好

当数据集很大时,这不会是一个很严重的问题,但当数据集太小时,也有替代方法允许我们使用所有的样本估计平均测试误差,代价是增加了计算量。这个写过程时基于在原始数据上随机采样或分离出的不同数据集上重复训练和测试的想法。最常见的是k-折交叉验证过程。将数据集分成k个不重合的子集,测试误差可以估计为k次计算后的平均测试误差。第i次测试时,数据的第i个子集用于测试集,其他的数据用于训练集

估计、偏差和方差

  • 点估计

点估计试图为一些感兴趣的量提供单个最优预测。一般地,感兴趣的量可以是单个参数,或是某些参数模型中的一个向量参数。

为了区分参数估计和真实值,我们习惯将参数θ的点估计表示为θ^

{x(1),x(m)}

是m个独立同分布的数据点,点估计(point estimator)或统计量(statistics)是这些数据的任意函数

θ^=g(x(1),,x(m))

这个定义不要求g返回一个接近真实θ\mathbf{\theta}的值。虽然几乎所有的函数都可以称为估计量,但是一个良好的估计量的输出会接近生成训练数据的真实参数θ\mathbf{\theta}

点估计也可以指输入和目标变量之间关系的估计,我们将这种类型的点估计称为函数估计。这是我们试图从输入向量x\mathbf{x}预测变量y\mathbf{y},假设有一个函数f(x)表示y\mathbf{y}x\mathbf{x}之间的近似关系。函数估计是函数空间中的一个点估计。线性回归和多项式回归都既可以被解释为估计参数w\mathbf{w},也可以被解释为估计函数映射

  • 偏差

估计的偏差被定义为

bias(θ^m)=E(θ^m)θ

其中期望作用在所有数据上,θ\mathbf{\theta}是用于定义数据生成分布的θ,如果偏差为零,那么估计量被称为是无偏的,如果m趋于无穷时,偏差等于零,那么估计量被称为是渐进无偏的。

  • 方差和标准差

我们有时会考虑估计量的另一个性质是它作为数据样本的函数,期望的变化程度是多少。正如我们可以计算估计量的期望来决定它的偏差,我们也可以计算它的方差。估计那个量的方差就是一个方差:Var(θ^)

其中随机变量是训练集。估计量的方差或标准差告诉我们,当独立地从潜在的数据生成过程中重采样数据集时,如何期望估计的变化。正如我们希望估计的偏差减小,我们也希望其方差较小

当我们使用有限的样本计算任何统计量时,真实参数的估计都是不确定的,在这个意义下,从相同的分布得到其他样本时,他们的统计量也会不一样。任何方差估计量的期望程度是我们想量化的误差的来源

均值的标准差被记作

SE(μ^m)=Var[1mi=1mx(i)]=σm

其中σ2是样本x(i)的真实方差。可惜,样本方差的平方根和方差无偏估计的平方根都不是标准差的无偏估计,这两种计算方法都倾向于低估真实的标准差

如伯努利分布的样本均值的方差

Var(θ^m)=Var(1mi=1mx(i))

=1m2i=1mVar(x(i))

=1m2i=1mθ1θ

=1m2mθ(1θ)

=1mθ(1θ)

  • 权衡偏差和方差以最小化均方误差

偏差和方差度量着估计量的两个不同误差来源。偏差度量着真实函数或参数的误差期望,而方差度量着数据上任意特定采样可能导致的估计期望的偏差

当我们可以在一个偏差更大的估计和一个方差更大的估计中进行选择时,我们应该如何选择?

判断这种权衡最常用的方法时交叉验证,另外我们也可以比较这些估计的均方误差(mean squared error, MSE)

MSE=E[(θ^mθ)2]

=Bias(θ^m)2+Var(θ^m)

MSE度量着估计和真实参数θ之间平方误差的总体期望误差,MSE估计包含了偏差和方差,理想的估计具有较小的MSE偏差和方差的关系与机器学习容量、欠拟合和过拟合的概念紧密相连。用MSE度量泛化误差时,增加容量会增加方差,降低偏差。方差的增加和偏差的减小共同作用的结果是泛化误差先减小后增大

  • 一致性

我们希望当数据集中的点的数量m增加时,点估计会收敛到对应参数的真实值,更形式化地,我们想要

plimmθ^m=θ

符号plim表示依概率收敛,即对于任意的ϵ>0,当m时,有P(|θ^mθ|>ϵ)0该式表示的条件被称为一致性(consistency),一致性保证了估计量的偏差会随数据样本数目的增多而减小。

最大似然估计

我们希望有些准则可以让我们从不同模型中得到特性函数作为好的估计,而不是猜测某些函数可能是好的估计,然后分析其偏差和方差,最常用的准则是最大似然估计

考虑一组含有m个样本的数据集X={x(1),,x(m)},独立地由未知的真实数据生成分布pdata(x)生成

pmodel(x;θ)是一族由θ\mathbf{\theta}确定在相同空间上的概率分布。换言之,pmodel(x;θ)p_{model}(\mathbf{x};\mathbf{\theta})

将任意输入x\mathbf{x}映射到实数来估计真实概率pdata(x)p_{data}(\mathbf{x})

θ\mathbf{\theta}的最大似然估计被定义为

θML=argmaxθpmodel(X;θ)

=argmaxθi=1mpmodel(x(i);θ)

多个概率的乘积会因很多原因不便于计算,因此我们将乘积转化成为便于计算的求和形式

θML=argmaxθi=1mlogpmodel(x(i);θ)

因为当重新缩放代价函数argmax

不会改变,我们可以除以m得到和训练数据经验分布相关的期望作为准则

θML=argmaxθEX~p^datalogpmodel(x;θ)

一种解释最大似然估计的观点是将它看作最小化训练集上的经验分布和模型分布之间的差异,两者之间的差异程度可以通过KL散度度量,KL散度被定义为

DKL(p^datapmodel)=EX~p^data[logp^data(x)logpmodel(x)]

左边一项仅涉及数据生成过程,和模型无关,这意味着当训练模型最小化KL散度时,我们只需要最小化

EX~p^datalogpmodel(x)

最小化KL散度其实就是在最小化分布之间的交叉熵。任何一个由负对数似然组成的损失都是定义在训练集熵的经验分布和定义在模型上的概率分布之间的交叉熵。例如,均方误差是经验分布和高斯模型之间的交叉熵

  • 条件对数似然和均方误差

最大似然估计很容易扩展到估计条件概率P(y|x;θ),从而给定x\mathbf{x}预测y\mathbf{y}。这构成了大多数监督学习的基础。如果X代表了所有的输入,Y代表了我们观测到的目标,那么条件最大似然估计是

θML=argmaxθp(Y|X;θ)

如果假设样本是独立同分布的,那么该式可以分解成

θML=argmaxθpi=1m(y(i)|x(i);θ)

  • 最大似然的性质

最大似然估计最吸引人的地方在于,它被证明当样本数木趋于无穷是,就收敛率而言是最好的渐进估计

在合适的条件下,最大似然估计具有一致性,意味着训练样本数目趋向于无穷大时,参数的最大似然估计会收敛到参数的真实值,这些条件是:

(1)真实分布pdata必须在模型组pmodel(;θ)中,否则,没有估计可以还原pdatap_{data}

(2)真实分布pdatap_{data}必须刚好对应一个θ\mathbf{\theta},否则,最大似然估计恢复出真实分布pdatap_{data}后也不能决定数据生成过程中使用哪个θ\mathbf{\theta}

最大似然通常是机器学习中的首选估计方法,当样本数过小发生过拟合时,正则化策略如权重衰减可用于获得训练数据有限时方差较小的最大似然有偏版本

贝叶斯统计

至此我们已经讨论了频率派统计(frequentist statistics)方法和基于估计单一值θ\mathbf{\theta}的方法,然后基于该估计作所有值的预测。另一种方法实在做预测时会考虑所有可能的θ\mathbf{\theta},这属于贝叶斯统计的范畴

频率派视角是真实参数θ\mathbf{\theta}是未知的定值,而点估计θ^是考虑数据集上函数的随机变量

贝叶斯统计的视角完全不同,贝叶斯统计用概率反映知识状态的确定性程度。数据集能够被直接观测到,因此不是随机的。另一方面,真实参数θ\mathbf{\theta}是未知或不确定的,因此可以表示成随机变量

在观察到数据前,我们将θ\mathbf{\theta}的已知知识表示成先验概率分布(prior probability distribution),p(θ)。一般而言,机器学习实践者会选择一个相当宽泛的(高熵的)先验分布,以反应在观测到任何数据前参数θ\mathbf{\theta}的高度不确定性现在假设我们有一组数据样本{x(1),,x(m)},通过贝叶斯规则结合数据似然p(x(1),,x(m)|θ)和先验,可以恢复数据对我们关于θ\mathbf{\theta}信念的影响

p(θ|x(1),,x(m))

=p(x(1),,x(m)|θ)p(θ)p(x(1),,x(m))

在贝叶斯估计常用背景下,先验开始是相对均匀的分布或高熵的高斯分布,观测数据通常会使后验的的熵下降,并集中在参数的几个可能性很高的值

相对于最大似然估计,贝叶斯估计有两个重要区别。第一,不像最大似然方法预测时使用θ\mathbf{\theta}的点估计,贝叶斯方法使用θ\mathbf{\theta}的全分布。例如,在观测到m个样本后,下一个数据样本x(m+1)的预测分布如下

p(x(m+1)|x(1),,x(m))=p(x(m+1)|θ)p(θ|x(1),,x(m))dθ

这里,每个具有正概率密度的θ\mathbf{\theta}的值有助于下一个样本的预测,其中贡献由后验密度本身加权。在观测到数据集止呕,如果我们仍然非常不确定θ\mathbf{\theta}的值,那么这个不确定性会直接包含在我们所做的任何预测中

频率派方法解决给定点估计θ\mathbf{\theta}的不确定性的方法使评估方差,评估的方差评估了观测数据重新从观测数据中采样后,估计可能如何变化。对于如何合理估计不确定性这个问题,贝叶斯派的答案使积分,这往往会防止过拟合。

贝叶斯方法和最大似然方法的第二个最大区别是由贝叶斯先验分布造成的。先验能够影响概率质量密度朝参数空间中偏好先验的趋于偏移。实践中,先验通常表现为偏好更简单或更光滑的模型。对贝叶斯方法的批判认为,先验是人为主观判断影响预测的来源

  • 最大后验(MAP)估计

原则上,我们应该使用参数θ\mathbf{\theta}的完整贝叶斯后验分布进行预测,但单点估计常常也是需要的。对于大多数有意义的模型而言,大多数设计贝叶斯后验的计算是非常棘手的,点估计提供了一个可行的近似解。我们仍然可以让先验影响点估计的选择来利用贝叶斯方法的优点,而不是简单地回到最大似然估计。一种能够做到这一点的合理方式是选择最大后验(Maxium A Posteriori, MAP)点估计。MAP估计选择后验概率最大的点

θMAP=argmaxθ=argmaxθlogp(x|θ)+logp(θ)

我们可以认出logp(x|θ)对应着标准的对数似然项,logp(θ)对应着先验分布

具有高斯先验权重的MAP贝叶斯推断对应着权重衰减

正如全贝叶斯推断,MAP贝叶斯推断的优势是能够利用来自先验的信息。这些信息无法从训练数据中获得。该附加信息有助于减少最大后验点估计的方差,但是增加了偏差

许多正规化估计方法,例如权重衰减正则化的最大似然学习,可以被解释为贝叶斯推断的MAP近似。但有些正则化项可能不是一个概率分布的对数,还有些正则化项依赖于数据。

监督学习算法

监督学习算法是给定一组输入x\mathbf{x}和输出y\mathbf{y}的训练集,学习如何关联输入和输出。在许多情况下,输出y\mathbf{y}很难自动收集,必须由人来提供监督

概率监督学习

本书的大部分监督学习算法都是基于估计概率分布p(y|x)的,我们可以使用最大似然估计找到对于有参分布族p(y|x;θ)最好的参数向量θ\mathbf{\theta}

线性回归对应于分布族

p(y|x;θ)=N(y;θx,I)

通过定义一族不同的概率分布,我们可以将线性回归扩展到分类情况中

我们用于线性回归的实数正态分布是用均值参数化的。我们提供这个均值的任何值都是有效的。二元变量上的分布稍微复杂些,因为它的均值必须始终在0到1之间。解决这个问题的一种方法是使用logistic sigmond函数将线性函数的输出压缩进区间(0,1)。该值可以解释为概率

p(y=1|x;θ)=σ(θx)

这个方法称为逻辑回归(logistic regression)

线性回归中,我们能够通过求解正规方程以找到最佳权重,而逻辑回归的最佳权重没有闭解,我们必须最大化对数似然来搜索最优解,我们可以通过梯度下降算法最小化负对数似然来搜索

支持向量机

支持向量机(support vector machine, SVM)是监督学习中最有影响力的方法之一。类似于逻辑回归,这个模型也是基于线性函数wx+b的。不同于逻辑回归的是,支持向量机不输出概率,只输出类别,当wx+b\mathbf{w}^\top\mathbf{x}+b为正时,支持向量机预测属于正类,反之属于负类

支持向量机的一个重要创新是核技巧(kernel trick)。核技巧观察到许多机器学习算法都可以写成样本间点积的形式,如支持向量机中的线性函数可以重写为

wx+b=b+i=1mαixx(i)

其中,x(i)是训练样本,α是系数向量。学习算法重写为这种形式允许我们将x\mathbf{x}替换为特征函数ϕ(x)的输出,点积替换为被称为核函数(kernel function)的函数k(x,x(i))=ϕ(x)·ϕ(x(i))

使用核估计替换点积之后,我们可以使用如下函数进行预测

f(x)=b+iαik(x,x(i))

这个函数关于x\mathbf{x}是非线性的,关于ϕ(x)\phi(\mathbf{x})是线性的。αf(x)之间的关系也是线性的。核函数完全等价于用ϕ(x)\phi(\mathbf{x})预处理所有的输入,然后再新的转换空间学习线性模型

核技巧十分强大有两个原因:其一,它使我们能够使用保证有效收敛的凸优化技术来学习非线性模型。这是可能的,因为我们可以认为ϕ是固定的,仅优化α\alpha,即优化算法可以将决策函数是为不同空间中的线性函数。其二,核函数k的实现方法通常比直接构建ϕ(x)\phi(\mathbf{x})再算点积高效很多。

在某些情况下,ϕ(x)\phi(\mathbf{x})甚至可以是无限维的,对于普通的显式方法而言,这将是无限的计算代价。在很多情况下,即使ϕ(x)\phi(\mathbf{x})是难算的,k(x,x)却会是一个关于x\mathbf{x}非线性的、易算的函数

最常用的核函数是高斯核(Gaussian kernel)

k(u,v)=N(uv;0,σ2I)

其中N(x;μ,Σ)是标准正态密度。这个核也被称为径向基函数(radial basis function)核,因为其值沿v中从u向外辐射的方向减小。高斯核对应于无限维空间中的点积

我们可以认为高斯核再执行一种模板匹配(template matching)。训练标签y相关的训练样本x\mathbf{x}变成了类别y的模板。当测试点xx\mathbf{x}的欧几里得距离很小,对应的高斯核相应很大时,表明x\mathbf{x}’和模板x\mathbf{x}非常相似。该模型进而会赋予相对应的训练标签y较大的权重。总的来说,预测将会组合很多这种通过训练样本相似度加权的训练标签

核机器的一个主要缺点是计算决策函数的成本关于训练样本的数目是线性的。支持向量机能够通过学习主要包含零的向量α,以缓和这个缺点。那么判断新样本的类别只需要计算非零的αi对应的训练样本的核函数,这些训练样本被称为支持向量(support machine)

其他简单的监督学习算法

k-最近邻是一类可用于分类或回归的技术。它并不局限于固定数目的参数。在测试阶段我们希望在新的测试输入x\mathbf{x}上产生y,我们需要在训练数据X上找到x\mathbf{x}的k-最近邻。它的高容量使其在训练样本数目大时能够获得较高的精度,然而,它的计算成本很高,另外在训练集较小时泛化能力很差。它的一个弱点是它不能学习出哪一个特征比其他更具识别力,小训练集上的输出将会非常随机

决策树(decision tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法。决策树的每个节点斗鱼输入空间的一个区域相关联没并且内部节点继续将区域分成子节点下的子区域(通常使用坐标轴拆分区域)。空间由此细分成不重叠的区域,叶节点和输入区域之间形成一一对应的关系。每个叶节点将其输入区域的每个点映射到相同的输出

无监督学习算法

无监督算法只处理特征,不操作监督信号。监督和无监督算法那之间的区别没有规范严格的定义,因为没有客观的判断你来区分监督者提供的值是特征还是目标。通俗的说,无监督学习的大多数尝试是指从不需要人为注释的样本的分布中抽取信息。该术语通常与密度估计相关,学习从分布中采样、学习从分布中去噪、寻找数据分布的流形或是将数据中相关的样品聚类

一个经典的无监督学习学习任务是找到数据的最佳表示,通常是指该表示在比本身表示的信息更简单或更易访问而受到一些惩罚或限制的情况下,尽可能保存关于x\mathbf{x}的更多信息

有很多方式定义简单的表示。常见的包括低维表示、稀疏表示和独立表示。低维表示尝试将x\mathbf{x}中的信息尽可能压缩在一个较小的表示中。稀疏表示将数据集嵌入到输入项大多数为零的表示中,稀疏表示通常用于需要增加表示维数的情况,使得大部分为零的表示不会丢失很多信息。独立表示试图分开数据分布中的来源,使得表示的维度是统计独立的

主成分分析

PCA算法提供一种压缩数据的方式,我们也可以将PCA视为学习数据表示的无监督学习算法。PCA学习是一种比原始输入维数更低的表示,它也学习了一种元素之间彼此没有线性相关的表示,这是学习表示中元素统计独立标准的第一步。要实现完全独立性,表示学习算法也必须去掉变量间的非线性关系。

假设有一个m×n的设计矩阵X\mathbf{X}E(x)=0。若非如此,通过预处理步骤使所有样本减去均值,数据可以容易地中心化

x\mathbf{x}对应的无偏样本协方差矩阵给定如下

Var[x]=1m1XX

PCA通过线性变换找到一个Var[z]使对角矩阵的表示z=Wx

我们已知设计矩阵X\mathbf{X}的主成分由XX的特征向量给定,从这个角度,我们有XX=WΛW

其中W是变换矩阵,Λ是特征值对角矩阵

本节中,我们会探索主成分的另一种推导,主成分也可以通过奇异值分解得到。具体来说,他们是X的右奇异向量。为了说明这点,假设W\mathbf{W}是奇异值分解的右奇异向量X=UΣ2W的右奇异向量。以W\mathbf{W}作为特征向量基,我们可以得到原来的特征向量方程

XX=(UΣW)UΣW=WΣ2W

使用X\mathbf{X}的SVD分解,X\mathbf{X}的方差可以表示为

Var[x]=1m1XXVar[\mathbf{x}]=\frac{1}{m-1}\mathbf{X}^\top\mathbf{X}

=1m1WΣ2W

其中,我们使用UU=I,因为根据奇异值的定义矩阵U是正交的。者表明z

的协方差满足对角的要求

Var[z]=1m1ZZ

=1m1WXXW

=1m1WWΣ2WW

=1m1Σ2

其中再次使用SVD的定义有WW=I

以上分析指明当我们通过线性变换W\mathbf{W}将数据x\mathbf{x}投影到z\mathbf{z}时,得到的数据表示的协方差矩阵是对角的(Σ2),立刻可得z\mathbf{z}中的元素是彼此无关的

PCA这种将数据变换为元素之间彼此不相关便是的能力是PCA的一个重要性质。它是消除数据中未知变化因素的简单表示示例。在PCA中,这个消除是通过寻找输入控件的一个旋转(由W\mathbf{W}确定),使得方差的主坐标和z\mathbf{z}相关的新表示空间的基对齐

虽然相关性是数据元素间依赖关系的一个重要范畴,但我们对于能够消除更复杂形式的特征依赖的表示学习也很感兴趣。对此,我们需要比简单线性变换更强的工具

k-均值聚类

k-均值聚类算法将训练集分成k个靠近彼此的不同样本聚类。因此我们可以认为该算法提供了k维的one-hot编码向量h以表示输入x\mathbf{x}

k-均值聚类算法提供的one-hot编码也是一种稀疏表示,因为每个输入的表示中大部分元素为零。one-hot编码是稀疏表示的一个极端示例,丢失了很多分布式表示的优点。one-hot编码仍然有一些统计优点(自然地传达了相同聚类中的样本彼此相似的观点),也具有计算上的优势,因为整个表示可以用一个单独的整数表示

k-均值聚类初始化k个不同的中心点,然后迭代交换两个不同的步骤直到收敛。步骤一,每个训练样本分配到最近的中心点所代表的聚类i。步骤二,每一个中心点更新为聚类i中所有训练样本的均值

聚类问题本身是 病态的。没有单一的标准去度量聚类的数据在真实世界中的效果如何。我们可以度量聚类的性质,例如类中元素到类中心点的欧几里得距离的均值。这使我们可以判断从聚类分配中重建训练数据的效果如何。然而我们不知道聚类的性质是否很好的对应到真实世界的性质。另外,可能有很多不同的聚类都能很好地对应到现实世界的某些属性

这个问题说明了一些我们可能更偏好于分布式表示(相对于one-hot表示而言)的原因,分布式表示可以对每个物体赋予多个属性,允许我们通过比较很多属性而被测试一个单一属性来细粒度地度量相似性

随机梯度下降

随机梯度下降(stochastic gradient descent, SGD)使梯度下降算法的一个扩展。机器学习中反复出现的一个问题是好的泛化需要大的训练集,但大的训练集的计算代价也更大

机器学习算法中的代价函数通常可以分解成每个样本代价函数的综合,例如训练数据的负对数条件似然可以写成

J(θ)=Ex,y~p^dataL(x,y,θ=1mi=1mL(x(i),y(i),θ))

其中L是每个样本的损失L(x,y,θ)=logp(y|x;θ)

对于这些相加的代价函数,梯度下降需要计算

θJ(θ)=1mi=1mθL(x(i),y(i),θ)

这个运算的计算代价是O(m)。随着训练集规模增长维数十亿的样本,计算一步梯度也会消耗相当长的时间

随机梯度下降的核心是,梯度是期望。期望可以使用小规模的样本近似估计。

在算法的每一步,我们从训练集中均匀抽取一小批量(minibatch)样本,在批量的数目m通常是一个相对较小的数,从一到几百。重要的是,当训练集大小m增长时,mm’通常是固定的

梯度的估计可以表示成

g=1mθi=1mL(x(i),y(i),θ)

使用来自小批量的样本,然后随机梯度下降算法使用如下的梯度下降估计

θθϵg

其中,ϵ是学习率

随机梯度下降在深度学习之外有很多重要的应用。它是在大规模数据上训练大型线性模型的主要方法。对于固定大小的模型,每一步随机梯度下降更新的计算量不取决于训练集的大小m,在实践中,当训练集大小增长时,我们通常会使用一个更大的模型,达到收敛所需的更新次数通常会随训练集规模增大而增加。然而,当m趋向于无穷大时,该模型最终会在随机梯度下降抽样完训练集上的所有样本之前收敛到可能的最优测试误差。继续增加m不会延长到达模型可能的最优测试误差时间。从这点上看,我们可以认为用SGD训练模型的渐进代价是关于m的函数的O(1)级别

在深度学习兴起之前,学习非线性模型的主要方法是结合核技巧的线性模型,很多核学习算法需要构建一个m×m的矩阵Gi,j=k(x(i),x(j))。构建这个矩阵的计算量是O(m2)。当数据量是几十亿个样本时,这个计算量是不能接受的

构建机器学习算法

几乎所有的深度学习算法都可以被描述为一个相当简单的配方:特定的数据集、代价函数、优化过程和模型

意识到可以替换独立于其他组件的大多数组件,因此我们能得到很多不同的算法

通常代价函数至少含有一项使学习过程进行统计估计的成分,最常见的代价函数是负对数似然,最小化代价函数导致的最大似然估计

代价函数也可能含有附加项,如正则化项,例如我们可以将权重衰减加到线性回归的代价函数中

如果我们将该模型变成非线性的,那么大多数代价函数不再能通过闭解优化。这就要求我们选择一个迭代数值优化过程,如梯度下降

组合模型、代价和优化算法来构建学习算法的配方同时适用于监督学习和无监督学习

在某些情况下,我们不能实际计算代价函数,这种情况下,只要由近似其梯度的方法,那么我们仍然可以使用迭代数值优化近似最小化目标

促使深度学习发展的挑战

促使深度学习发展的一部分原因是传统学习算法在人工智能中的核心问题,如语音识别或者对象识别问题上的泛化能力不足

本节介绍为何处理高维数据时在新样本上泛化特别困难,以及为何在传统机器学习中实现泛化的机制不适合学习高维空间中复杂的函数。这些空间经常涉及巨大的计算代价,深度学习旨在克服这些以及其他一些难题

维数灾难

当数据的维数很高时,很多机器学习问题变得相当困难。这种现象被称为维数灾难(curse of dimensionality)。一组变量不同的可能配置数量会随着变量数目的增加而指数集增长

由维数灾难带来的一个挑战是统计挑战,统计挑战产生于x\mathbf{x}的可能配置数目远大于训练样本的数目。在高维空间中参数配置数目远大于样本数目,大部分配置没有相关的样本,许多传统机器学习算法知识简单地假设在一个新点的输出应大致和最接近的训练点的输出相同

局部不变性和平滑正则化

为了更好地泛化,机器学习算法需要由先验信念引导应该学习什么类型的函数。先验信念直接影响函数本身,而仅仅通过他们对函数的影响来间接改变参数。此外,先验信念还间接地体现在选择一些偏好某类函数的算法,尽管这些偏好并没有通过我们对不同函数置信程度的概率分布表现出来

其中使用最广泛的隐式先验是平滑先验(smoothness prior),或局部不变性先验(local constancy prior)。这个先验表明我们学习的函数不应在小区域内发生很大的变化

许多简单算法完全依赖于此先验达到良好的泛化,其结果是不能推广去解决人工智能级别任务中的统计挑战。我们将介绍深度学习如何引入额外的先验去降低复杂任务中的泛化误差,这里,我们解释为什么仅依靠平滑先验不足以应对这类任务

有许多不同的方法来显式或隐式地表示学习函数应该具有光滑或局部不变的先验。所有满足这些不同的方法都旨在鼓励学习过程能够学习出f*(x),对于大多数设置x\mathbf{x}和小变动ϵ\epsilon,都满足条件

f*(x)f*(x+ε)

换言之,如果我们知道对应输入x\mathbf{x}的答案(例如,x\mathbf{x}是个由标签的训练样本),那么该答案对于x\mathbf{x}的邻域应该也适用。如果在有些邻域中我们有好几个答案,那么我们可以组合它们以产生一个尽可能和大多数输入一致的答案

虽然k-最近邻算法复制了附近训练样本的输出,大部分核机器也是在和附近训练样本相关的训练集上输出上插值。一类重要的核函数是局部核(local kernel),其核函数k(u,v)u=v时很大。局部核可以看作执行模板匹配的相似函数,用于度量测试样本和每个训练样本有多么相似

决策树也有平滑学习的局限性,因为它将输入空间分成和叶节点一样多的区间,并在每个区间使用单独的参数。如果目标函数需要至少拥有n个叶节点的数才能精确表示,那么至少需要n个训练样本去拟合。需要几倍于n的样本去达到预测输出上的某种统计置信度

有没有什么方法能够表示区间数目比训练样本数目还多的复杂函数?显然,只是假设函数的平滑性不能做到这点。在高维空间中,即使是非常平滑的函数,也会在不同维度上有不同的变化方式。如果函数在不同的区间中表现不一样,那么就非常难用一组训练样本去刻画函数。是否可以有效地表示复杂的函数以及所估计的函数是否可以很好地泛化到新的输入,答案是有的。只要我们通过额外假设生成数据的分布来建立区域间的依赖关系,那么O(k)个样本足以描述多入O(2k)的大量区间。通过这种方式,我们确实能够做到非局部的泛化。为了利用这些优势,许多不同的深度学习算法都提出了一种适用于多种AI任务的隐式或显式的假设。

流形学习

流形(manifold)指连接在一起的区域。数学上,它指一组点,且每个点都有其邻域。给定一个任意的点,其流形局部看起来像是欧几里得空间。日常生活中,我们将地球视为二维平面,但实际上他是三维空间中的球状流形

每个点周围邻域的定义暗示着存在变换能够从一个位置移动到其邻域位置。

机器学习倾向于更松散地定义一组点,只需要考虑少数潜入在高维空间中地自由度或维数就能很好地近似。每一维都对应着局部的变化方向。

如果我们希望机器学习算法学习整个Rn上有趣变化的函数,那么很多机器学习问题看上去都是无望的。流形学习算法通过一个假设来客服这个障碍,该假设认为RnR^n中大部分区域都是无效的输入,有意义的输入只分布在包含少量数据点的子集构成的一组流形中。而学习函数的输出中,有意义的变化都沿着流形的方向或仅发生在我们切换到另一流形时。流形学习最初用于连续数值和无监督学习的环境,尽管这个概率集中的想法也能够泛化到离散数据和监督学习下:关键假设仍然是概率质量高度集中

第一个支持流形假设的观察是显式生活中的图像、文本、声音的概率分布都是高度集中的。均匀的噪声从来不会与这类领域的结构化输入类似。

当然,集中的概率分布不足以说明数据位于一个相当小的流形中。我们还必须确保,所遇到的样本和其他样本相互连接,每个样本被其他高度相似的样本包围,而这些高度相似的样本可以通过变换来遍历该流形得到。支持流形假设的第二个观点是,我们至少能够非正式地想象这些邻域和变换。在图像中,我们当然会认为有很多可能的变换仍然允许我们描绘出图片空间的流形:我们可以逐渐变暗或变亮,逐步移动或旋转图中对象等。在大多数应用中很有可能会涉及多个流形,例如人脸图像的流形不太可能连接到猫脸图像的流形。

当数据位于低维流形中时,使用流形中的坐标而非RnR^n中的坐标表示机器学习数据更为自然。日常生活中,我们可以认为道路是嵌入在三维空间中的一维流形。我们用一维道路中的地址号码确定地址,而非三维空间中的坐标。提取流形具有挑战性,但是很有希望改进很多机器学习算法

发表评论