花书 Deep Learning 第五章 机器学习基础

作者首先在前面推荐了两本书

一本是Murphy(2012)   Machine learning A Probabilistic Perspective 

资源在这:https://download.csdn.net/download/u013032116/9998333

还有一本是:Bishop(2006):pattern recognition and machine learning,这个原版和中译版网上都有。


5.1 学习算法

Mitchell提供了一个简洁的关于“学习”的定义,“对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指,通过经验E改进后,它在任务T上由性能度量P衡量的性能有所提升。”


5.1.1 任务T

学习是我们所谓的获取完成任务的能力。

机器学习可以解决很多类型的任务。一些非常常见的机器学习任务列举如下:

1)分类

2)输入缺失分类:当输入变量的每个度量不被保证时,分类问题将会变得更有挑战性。为了解决分类任务,学习算法只需要定义一个从输入向量映射到输出类别的函数。当一些输入可能丢失时,学习算法必须学习一组函数,而不是单个分类函数。每个函数对应着分类具有不同缺失输入子集的x。这种情况在医疗诊断中经常出现,因为很多类型的医学测试是昂贵的,对身体有害的。有效的定义这样一个大集合函数的方法是学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。使用n个输入变量,现在可以获得每个可能的缺失输入集合所需的所有2的n次方个不同的分类函数,但是计算机程序仅需要学习一个描述联合概率分布的函数。

3)回归

4)转录:在这类任务中,机器学习系统观测一些相对非结构化表示的数据,并转录信息为离散的文本形式。例如,光学字符识别要求计算机程序根据文本图片返回文字序列(ascII/unicode);或者语音识别,计算机程序输入一段音频波形,输出一系列音频记录中所说的字符或单词ID的编码。

5)机器翻译:在这类任务中,输入是一种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。

6)结构化输出:结构化输出任务的输出是向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。比如语法分析——映射自然语言句子到语法结构树,并标记树的节点为动词、名次、副词等。另一个例子是图像的像素级分割,将每一个像素分配到特定类别。在这些标注型的任务中,输出的结构形式不需要和输入尽可能相似。这类任务被称为结构化输出任务,是因为输出值之间内部紧密相关。例如,为图片添加标题的程序输出的单词必须组合成一个通顺的句子。

7)异常检测:在这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常或非典型的个体。

8)合成和采样:在这类任务中,机器学习程序生成一些和训练数据相似的新样本。我们希望采样或合成过程可以根据给定的输入生成一些特定类型的输出。比如,在语音合成任务中,我们提供书写的句子,要求程序输出这个句子语音的音频波形。这属于结构化输出任务,但是多了每个输入并非只有一个正确输出的条件,并且我们明确希望输出是多变的,这样可以使得结果更加自然和真实。

9)缺失值填补

10)去噪:算法根据损坏后的样本预测干净的样本,或者更一般地预测条件概率分布

11)密度估计或概率质量函数估计:在密度估计问题中,机器学习算法学习函数p(model),这一函数可以解释成样本采样空间的概率密度函数。要做好这样的任务,算法需要学习观测到的数据的结构。在捕获该分布后,我们可以在该分布上计算以便解决其他任务。


5.1.2 性能度量 P

对于诸如分类、缺失输入分类和转录任务,通常度量模型的准确率和错误率;对于密度估计这类任务而言,最常用的方法是输出模型在一些样本上概率对数的平均值。一般情况下,我们使用测试集数据来评估系统性能。

性能度量的选择或许看上去简单且直观,但是选择一个与系统理想表现对应的性能通常是很困难的。


5.1.3 经验 E

无监督学习算法训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。比如,生成数据集的概率密度分布,密度估计或者合成/去噪,以及聚类。

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

大致说来,无监督学习涉及观察随机向量x的好几个样本,试图显式或隐式地学习出概率分布,或者是该分布的一些有意思的性质;而监督学习包含观察随机向量x及其相关联的值或向量y,然后从x预测y,通常是估计p(y|x)。supervised learning源于这样一个视角,教员或者老师提供目标y给机器学习系统,指导它应该做什么。在unsupervised learning中,没有教员或老师,算法必须学会在没有知道的情况下理解数据。

事实上,监督学习和非监督学习之间的界限并没有那么清晰。它们可以相互转化。

传统上,人们把回归、分类或者结构化输出称为监督学习,将支持其他任务的密度估计称为无监督学习。

学习范式的其他变种也是有可能的。比如,半监督学习中,一些样本有监督目标,但其他样本没有。在多实例学习中,样本的整个集合被标记为含有或者不含邮该类的样本,但是集合中单独的样本是没有标记的。多实例学习(multiple instance learning):考虑这样一种训练数据,此数据是有标记的,标记只有两个类别,正和负。但此标记目标不是单个样本,而是一个数据包(bag)。某一个或几个数据组合在一起叫做一个bag,每个bag有自己的标记。当一个bag标记为负时,此bag中所有的标记均为负。当一个bag标记为正时,此bag中至少有一个样本为正。我们的目标是学习一个分类器,使得对新输入的样本可以给出它的正负标记。

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

当然,每一个样本都能表示成向量,并且向量的维度相同,才能将一个数据集表示成设计矩阵。这一点并非永远可能。比如,你有不同宽度和高度的照片的集合,那么不同的照片将会包含不同数量的像素。因此不是所有的照片都可以表示成相同长度的向量,我们把这种数据称为异构数据。在这种情况下,我们不会把数据集表示成m行的矩阵,而是表示成m个元素的结合:{x(1), x(2), ..., x(m)},这种表示方式意味着任意两个样本向量可以有不同的大小。

有时标签可能不止一个数。比如,如果我们想要训练语音模型来转录整个句子,那么每个句子的样本标签可能是一个单词序列。


5.1.4 线性回归

度量模型性能的一种方法是计算模型在测试集上的均方误差。为了构建一个机器学习算法,我们需要设计一个算法,通过观察训练集获得经验,减少MSE(test),来改进权重w。一种直观方式是最小化训练集上的均方误差,即MSE(train)。

术语线性回归通常用来指稍微复杂一些,附加额外参数(截距项b)的模型。因此从参数到预测的映射仍然是一个线性函数,而从特征到预测的映射是一个仿射函数。(线性函数是过原点的仿射函数


5.2 容量、过拟合和欠拟合

机器学习的主要挑战是算法必须能够在先前未观测到的数据上表现良好,并非只是在训练集上表现良好。在先前尚未观测到的数据上表现良好的能力,我们称为泛化能力。

优化:训练误差尽可能小。机器学习:训练误差和泛化误差都很小。

机器学习和优化不同的地方在于,我们也希望泛化误差(测试误差)很小。泛化误差被定义为新输入的误差期望。

一般,我们度量模型在测试集样本上的性能,来评估机器学习模型的泛化误差。

在独立同分布假设下,训练误差和测试误差之间的直接联系是,二者误差期望相同。

在使用机器学习算法时,我们通常的做法是,采样得到训练集,然后挑选参数去降低训练集误差,然后采样得到测试集。在这一过程中,测试误差期望会大于或等于训练误差期望。决定机器学习算法效果是否好有两个因素:(1)降低训练误差;(2)缩小训练误差和测试误差的差距,它们分别对应着机器学习的两个挑战,欠拟合和过拟合,前者是指模型在训练集上没有获得足够低的误差,后者是指训练误差和测试误差之间差距过大。

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

一种控制训练算法容量的方法是选择假设空间,即学习算法可以选择为解决方案的函数集。比如,线性回归算法将关于其输入的所有线性函数作为假设空间,而GLM得假设空间包括多项式函数,而非仅仅包括线性函数,这种做法增加了模型的容量。

容量高的模型能够解决复杂的任务,但是当其容量高于任务所需时,有可能会过拟合。

当训练参数的个数比训练样本还多时,模型能够表示成无限多个刚好穿越训练样本点的很多其他函数。我们不太可能从很多不同的解中寻找出一个泛化良好的。

事实上,还有很多方法可以改变模型的容量。容量不仅取决于模型的选择。模型规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数,这被称为模型的表示容量。实际中,学习算法不会真的找到最优函数,而仅仅是找到一个可以大大降低训练误差的函数。额外的限制因素,比如优化算法的不完美,意味着学习算法的有效容量可能小于模型族的表示容量。

所谓“奥卡姆剃刀”,即在同样能够解释已知观测现象的假设中,我们应该选择“最简单”的那一个。

统计学习理论提供了量化模型容量的不同方法。其中最有名的是,VC维。它定义为该分类器能够分类的训练样本的最大数目。

训练误差和测试误差之间差异的上界随着模型容量增长而增长(模型容量越大训练误差越小,训练误差越大),但随着训练样本增多而下降。

虽然更简单的函数更可能泛华,但我们仍然需要选择一个充分复杂的假设以达到低的训练误差。通常,模型容量上升时,训练误差会随之减小,直到接近最小可能误差。通常,泛化误差是一个关于模型容量的U形曲线函数。

我们可以设计一些实用的非参数模型,使他们的复杂度和训练集大小有关。这种算法的一个示例是最近邻回归(nearest neighbour regression),不像线性回归有固定长度的向量作为权重(线性回归中一般存储的是模型权重),最近邻回归模型存储了训练集中所有的X和y。当需要为测试集x分类时,模型会查询训练集中距离该点最近的点,并返回相关的回归目标。如果允许算法对所有离x最近的X关联的y求平均,那么该算法会在人已回归数据及上达到最小可能的训练误差。

最后,我们也可以将参数学习算法嵌入另一个增加参数数目的算法来创建费拿书学习算法。比如,想想这样一个算法,外层循环调整多项式次数,内层循环通过线性回归学习模型(for i in range(多项式次数): 学习线性回归模型)。

从预先知道的真实分布p(x,y)预测而出现的误差被称为贝叶斯误差。

训练误差和泛化误差会随着训练集的大小发生变化。泛化误差的期望不会随着训练集数目的增加而增加。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。

需要注意的是,具有最有容量的模型仍然有可能在训练误差和泛化误差之间存在很大的差距。在这种情况下,我们可以收集更多的训练样本来缩小差距。


5.2.1 没有免费午餐定理

机器学习保证找到一个在所关注的大多数样本上可能正确的规则。

对于二次模型来说,当训练集增加时,训练误差也随之增大,这是因为训练集越大的数据越难拟合,因为此时模型容量已经确定了。同时,测试误差随之减小,因为关于训练数据的不正确的假设越来越少。二次模型的容量不足以解决这个问题,因此它的测试误差趋近于一个较高的值。最优容量点处的测试误差趋近于贝叶斯误差。训练误差可以低于贝叶斯误差,因为训练算法有能力记住训练集中特定的样本。当训练集趋向于无穷大时,任何固定容量的模型(这里指二次模型)的训练误差都至少增加到贝叶斯误差。当训练集大小增大时,模型的最优容量也随之增大。最优容量达到能捕捉到模型复杂度时就不再随之增长。

“没有免费午餐定理”表明,在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上有相同的错误率。换言之,在某种意义上,没有一个机器学习算法总是比其他的要好。

这意味着,机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法,而是理解什么样的分布与人工智能获取经验的“真实世界”相关,以及什么样的学习算法在我们关注的数据生成分布上效果好。


5.2.2 正则化

到目前为止,我们讨论修改学习算法的方法,只有通过增加或减少学习算法可选假设空间的函数来增加或减少模型的容量。比如线性回归中,增加或减少多项式次数。

算法的效果不仅很大程度上受影响于假设空间的函数数量,也取决于这些函数的具体形式。因此我们可以通过两种方式控制算法的性能,一是允许使用的函数种类,二是这些函数的数量(即模型容量)。

正则化是指修改学习算法,使其降低泛化误差而非训练误差。比如dropout,因为增加正则项似乎并没有对训练误差有什么影响。

没有免费午餐的定理已经表明没有最优的学习算法,特别是没有最优的正则化表达式。因此,我们必须选择一个非常适合我们所需要解决任务的正则化形式。深度学习中普遍的理念是大量任务也许都可以使用非常通用的正则化形式来有效解决。


5.3 超参数和验证集

超参数的值不是通过算法本身学习出来的。

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

为了解决这个问题,我们需要一个训练算法观测不到的验证集。

我们总是从训练数据中构建验证集。我们将训练数据分为两个不相交的子集。其中一个用于学习参数,另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超参数(!)。用于学习参数的数据子集通常仍被称为训练集,用于挑选参数的数据子集被称为验证集。通常,80%的训练集用于训练,20%的训练集用于验证。由于验证集是用来“训练”超参数的,尽管验证集的误差通常会比训练集的误差小,验证集会低估泛化误差。

5.3.1 交叉验证
将数据分成固定的训练集和测试集之后,如果测试集的误差很小,这将是有问题的。一个小规模的测试集意味着平均测试误差估计的统计不确定性,使得很难判断哪个算法在给定任务上表现更好。
当数据集太小时,也有替代方法允许我们使用所有的样本估计平均误差,代价是增加了计算量。
这些过程是基于在原始数据上随机采样或分理出的不同数据集上重复训练和测试的想法。
比如将数据集分成k个不重合的自己。测试误差可以估计为k次计算后的平均测试误差。在第i次测试时,数据的第i个子集用于测试集,其他的数据用于训练集。


算法如下:
Define KFoldXV(D, A, L, k):
Require: D为给定数据集,其中元素为Z(i)
Require: A为学习算法,可视为一个函数(可使用数据集作为输入,输出一个学好的函数)
Require: L为损失函数,可视为来自学好的函数f,将样本Z(i)属于D映射到R中标量的函数
Require: k为折数
  将D分为k个互斥子集Di,它们的并集为D
  for i from 1 to k do
      fi = A(D\Di)
      for z(j) in D(i) do
          ej = L(fi, Z(j))
      end for
  end for
  Return e
  
5.4 估计、偏差和方差
5.4.4 权衡偏差和方差以最小化均方误差
偏差和方差度量着估计量的两个不同误差来源。偏差度量着偏离真是函数或参数的误差期望,而方差度量着数据上任意特定采样可能导致的估计期望的偏差。
判断这种权衡最常用的方法是交叉验证。经验上,交叉验证在真实世界的许多任务中都非常成功。另外,我们也可以比较这些估计的均方误差。
理想的估计具有较小的MSE或是在检查中稍微约束它们的偏差和方差。
用MSE度量泛化误差(偏差和方差对于泛化误差都是有意义的)时,增加容量会增加方差,降低偏差。


5.4.5 一致性
一致性保证了估计量的偏差会随数据样本数目的增多而减少。然而,反过来是不正确的,渐进无偏并不意味着一致性。


5.5 最大似然估计
一种解释最大似然估计的观点是将它看作最小化训练集上的经验分布\hat{p}(data)和模型分布之间的差异,两者之间的差异程度可以通过KL散度度量。
最小化KL散度其实就是在最小化分布之间的交叉熵。任何一个由负对数似然组成的损失都是定义在训练集上的经验分布和定义在模型上的概率分布之间的交叉熵。


5.5.2 最大似然的性质
在合适的条件下,最大似然估计具有一致性。这些条件是:
1.真实分布p(data)必须在p(model)模型族中。否则,没有估计可以还原p(data)
2.真实分布p(data)必须刚好对应一个\theta值。否则,最大似然估计恢复出真是分布p(data)后,也不能决定数据生成过程使用哪个\theta

当样本数目小到发生过拟合时,正则化策略如权重衰减可用于获得训练数据有限时方差较小的最大似然有偏版本


5.6 贝叶斯统计
思想:在做预测时考虑所有的\theta
一般而言,机器学习实践者会选择一个相当宽泛的(即,高熵的)先验分布,以反应在观测到任何数据前参数\theta的高度不确定性。
在贝叶斯估计常用的情境下,先验开始是相对均匀的分布或者高熵的高斯分布,观测数据通常会使后验的熵下降,并集中在参数的几个可能性很高的值
相对于最大似然估计,贝叶斯估计有两个重要区别。第一,不想ML方法预测时用\theta的点估计,贝叶斯方法使用\theta的全分布。每个具有正常概率密度的\theta的值有助于下一个样本的预测,其中贡献由后验密度本身加权,在观测到数据集[x(1), ..., x(m)]之后,如果我们仍然很不确定\theta的值,那么这个不确定性会直接包含在我们所做的任何预测中。
贝叶斯和ML的第二个最大区别是由贝叶斯先验分布造成的。先验能够影响概率质量密度函数朝参数空间中偏好先验的区域偏移。
当训练数据很有限时,贝叶斯方法通常泛化得很好,但是当训练样本数目很大时,通常会有很大的计算代价。


5.6.1 最大后验(MAP)估计
希望使用点估计的一个原因是,对于大多数有意义的模型而言,大多数设计贝叶斯后验的计算是非常棘手得,点估计提供了一个可行得近似解。
而MAP的计算中只需要使用到,log(p(x|\theta))和log(p(\theta))
正如全贝叶斯推断,MAP贝叶斯推断得优势是能够利用来自先验的信息,这些信息无法从训练数据中获得。该附加信息有利于减少最大后验点估计的方差(相比于ML估计)。然而,这个优点的代价是增加了偏差。
许多正规化估计方法,例如权重衰减正则化的最大似然学习,可以被解释为贝叶斯推断的MAP近似。

MAP贝叶斯推断提供了一个直观的方法来设计复杂但可解释的正则化项。


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


5.8.2 k-means聚类
k-means聚类方法将训练集分成k个靠近彼此的不同样本聚类。因此可以认为该算法提供了k维的one-hot编码向量h以表示输入x。当x属于聚类i时,由hi=1,h的其他项为0.
oen-hot编码是稀疏表示的一个极端示例,丢失了很多分布式表示的优点。one-hot编码仍然有一些统计优点,也具有计算上的优势,因为整个表示可以用一个单独的整数表示。
k-means聚类初始化k个不同的中心点{mu1, mu2, ... muk},然后迭代交换两个不同的步骤直到收敛。步骤一,每个训练样本分配到最近的中心点mu(i)所代表的聚类i。步骤二,每一个中心点mu(i)更新为聚类i中所有训练样本x(j)的均值。
关于聚类的一个问题是,聚类本身是病态的。这是说没有单一的标准去度量聚类的数据在真实世界中的效果如何。
以上问题说明了一些我们可能更偏好于分布式表示的原因。目前我们并不清楚什么是最好的分布式表示,但是多个属性减少了算法去猜测我们关心哪一个属性的负担,允许我们通过比较很多属性而非测试一个单一属性来细粒度地度量相似性。
以词为例,如果有100个词,相当于100个棋子,如果用one-hot表示,需要建立100维的空间。但现在只需要一个二维空间,在里面划分很多格子,然后把棋子(词)放在不同格子上,格子坐标代表了相应棋子(词)向量表示。




5.9 随机梯度下降
机器学习中反复出现的一个问题是好的泛化需要大量的训练集,而大量的训练集的计算代价也更大。
随机梯度下降的核心是,梯度是期望。期望可以使用小规模的样本近似估计。具体而言,在算法的每一步,从训练集中均匀地抽出小批量样本,小批量样本的数目m'通常是一个相对较小的数,从一到几百。重要的是,当训练集m增大时,m‘通常是固定的。
优化算法不一定能保证在合理时间内达到一个局部极小值,但是它通常能使得代价函数达到一个很小的值,并且是有用的。
随机梯度下降在深度学习领域之外有很多重要的应用。它是在大规模数据上训练大型线性模型的主要方法。对于固定大小的模型,每一步随机梯度下降更新的计算量不取决于训练集m的大小。在实际中,当训练集大小增大时,我们通常会选择更大规模的模型,但这并非是必须的。达到收敛所需要的更新次数通常随着训练集的增大而增大。但是,当m趋向于无穷大时,继续增加m不会增加模型达到可能的最优测试误差所需要的时间。从这点来看,我们可以认为用SGD训练模型的渐进代价是关于m的函数的O(1)级别。

深度学习在工业界受到了更多的关注,因为它提供了一种训练大数据集上的非线性模型的可扩展方式。


5.11 促使深度学习发展的挑战

5.11.1 维数灾难

所谓维数灾难,就是因为在高维空间中参数配置数目远大于样本数目,大部分配置没有相关的样本。


5.11.2 局部不变性和平滑正则化

目的:为了更好地泛化,机器学习算法需要由先验信息引导应该学习什么类型的函数。

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

假设学习函数为f*,对于大多数设置x和小变动/epsilon,都满足条件f*(x) /approximate f*(x+/epsilon)。即,如果我们知道对应输入x的答案(例如,x是一个有标签的训练样本),那么该答案对于x的邻域应该也适用。如果在有些邻域中我们有好几个答案,那么我们可以组合它们(通过某种形式的平均或插值法)以产生一个尽可能和大多数答案一致的答案。

一类重要的核函数是局部核,其核函数k(u,v)在u=v时很大,当u和v距离拉大时而减小。局部核可以看作执行模版匹配的相思函数。

只要在要学习的展示函数的峰值和谷值处有足够多的样本,那么平滑性假设和相关的无参数学习算法的效果都非常好。

一些其他的机器学习方法往往会提出更强的、针对特定问题的假设。但是通常,神经网络不会包含这些很强的假设,因此神经网络可以泛化到更广泛的各种结构中。深度学习的核心思想是假设数据由因素或者特征组合产生,这些因素或特征可能来自一个层次结构的多个层级。


5.11.3 流形学习

主要思想:将高维数据映射到低维,使得该低维数据能够反应高维数据的某些本质结构特征。流形学习的前提是有一种假设,即某些高维数据实际是一种低维的流形结构嵌入到高维空间中。流形学习的目的是将其映射回高维空间中,反应其本质。

流形(manifold)指连接在一起的区域。流形学习算法通过一个假设来克服障碍,该假设认为n维诗书空间中大部分区域都是无效的输入,有意义的输入只分布在包含少量数据点的子集构成测一组流形中,而学习函数的输出中,有意义的变化都沿着流形的方向或仅发生在我们切换到另一流形时。关键假设仍然时概率质量高度集中。

第一个支持流形假设的观察是现实生活中的图像、文本、声音的概率分布都是高度集中的。

当然,集中地概率分布不足以说明数据位于一个相当小的流形中。还必须确保,所遇到的样本和其他样本相互连接,每个样本被其他高度相似的样本包围,而这些高度相似的样本可以通过变换来遍历该流形得到。

支持流形假设的第二个论点是,我们至少能够非正式地想象这些邻域和变换。比如,在图像中,我们当然会认为有很多可能的变换仍然允许我们描绘出图片空间的流形:我们可以逐渐变暗或变量光泽、逐步移动或旋转图中对象、逐渐改变对象表面的颜色等。

猜你喜欢

转载自blog.csdn.net/weixin_40516558/article/details/79819377