2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)

第5章 机器学习基础

官网

学习算法

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

【任务T】
机器学习可以让我们解决一些人为设计和使用确定性程序很难解决的问题。
学习过程本身不能算是任务。学习是我们所谓的获取完成任务的能力。例如,我们的目标是使机器人能够行走,那么行走便是任务。

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

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

  • 分类: 在这类任务中,计算机程序需要指定某些输入属于k类中的哪一类。分类任务中有一个任务是对象识别,其中输入是图片(通常由一组像素亮度值表示),输出是表示图片物体的数字码。目前,最好的对象识别工作正是基于深度学习的。对象识别同时也是计算机识别人脸的基本技术,可用于标记相片合辑中的人脸,有助于计算机更自然地与用户交互。
  • 输入缺失分类: 当输入向量的每个度量不被保证时,分类问题将会变得更有挑战性。这种情况在医疗诊断中经常出现,因为很多类型的医学测试是昂贵的,对身体有害的。有效地定义一个大集合函数的方法是学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。
  • 回归: 在这类任务中,计算机程序需要对给定输入预测数值。除了返回结果的形式不一样外,这类问题和分类问题是很像的。这类任务的一个示例是预测投保人的索赔金额(用于设置保险费),或者预测证券未来的价格。
  • 转录: 在这类任务中,机器学习系统观测一些相对非结构化表示的数据,并转录信息为离散的文本形式。文字图片识别,语音识别。深度学习是现代语音识别系统的重要组成部分。
  • 机器翻译:在这类任务中,输入是一种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。
  • 结构化输出:结构化输出任务的输出是向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。例如语法分析——映射自然语言句子到语法结构树,并标记树的节点为动词、名词、副词等。
  • 异常检测:在这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常或非典型的个体。信用卡欺诈检测:通过对你的购买习惯建模,信用卡公司可以检测到你的卡是否被滥用。
  • 合成和采样:在这类任务中,机器学习程序生成一些和训练数据相似的新样本。视频游戏可以自动生成大型物体或风景的纹理,而不是让艺术家手动标记每个像素。
  • 缺失值填补:在这类任务中,机器学习算法给定一个新样本 x ∈ R n x\in R^n xRn,x中某些元素xi缺失。算法必须填补这些缺失值。
  • 去噪: 在这类任务中,机器学习算法的输入是,干净样本经过未知损坏过程后得到的损坏样本。算法根据损坏后的样本预测干净的样本x,或者更一般地预测条件概率分布。
  • 密度估计或概率质量函数估计:在密度估计问题中,机器学习算法学习函数可以解释成样本采样空间的概率密度函数(如果x是连续的)或者概率质量函数(如果x是离散的)。

【性能度量P】
为了评估机器学习算法的能力,我们必须设计其性能的定量度量。通常性能度量P是特定于系统执行的任务T而言的。

对于诸如分类、缺失输入分类和转录任务,我们通常度量模型的准确率(accuracy)。准确率是指该模型输出正确结果的样本比率。
我们也可以通过错误率(errorrate)得到相同的信息。错误率是指该模型输出错误结果的样本比率。我们通常把错误率称为0−1损失的期望

对于密度估计这类任务而言,度量准确率,错误率或者其他类型的0−1损失是没有意义的。
我们必须使用不同的性能度量,使模型对每个样本都输出一个连续数值的得分。最常用的方法是输出模型在一些样本上概率对数的平均值

在密度估计中,很多最好的概率模型只能隐式地表示概率分布。在许多这类模型中,计算空间中特定点的概率是不可行的。在这些情况下,我们必须设计一个仍然对应于设计对象的替代标准,或者设计一个理想标准的良好近似。

【经验E】
根据学习过程中的不同经验,机器学习算法可以大致分类为无监督(unsupervised)算法和监督(supervised)算法。

大部分机器学习算法简单地训练于一个数据集上。数据集都是样本的集合,而样本是特征的集合。有时我们也将样本称为数据点(datapoint)。

表示数据集的常用方法是设计矩阵(design matrix)。设计矩阵的每一行包含一个不同的样本。每一列对应不同的特征。

每一个样本都能表示成向量,并且这些向量的维度相同,才能将一个数据集表示成设计矩阵。这一点并非永远可能。不同类型的异构数据需要进行处理。

无监督学习算法(unsupervised learning algorithm)。在深度学习中,我们通常要学习生成数据集的整个概率分布,显式地,比如密度估计,或是隐式地,比如合成或去噪。还有一些其他类型的无监督学习任务,例如聚类,将数据集分成相似样本的集合。

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

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

线性回归

机器学习算法定义为,通过经验以提高计算机程序在某些任务上性能的算法。
这里有一个简单的机器学习示例:线性回归。 当介绍更多有助于理解机器学习特性的概念时,会反复回顾这个示例。

顾名思义,线性回归解决回归问题。 换言之,我们的目标是建立一个系统,将向量 x ∈ R n x\in R^n xRn作为输入,预测标量 y ∈ R y\in R yR作为输出。 线性回归的输出是其输入的线性函数。 令 y ^ \hat{y} y^表示模型预测y应该取的值。 我们定义输出为
y ^ = w ⊤ x \hat{y}=w^⊤x y^=wx
其中 w ∈ R n w\in R^n wRn是参数向量。

参数是控制系统行为的值。 在这种情况下, w i w_i wi是系数,会和特征 x i x_i xi相乘之后全部相加起来。 我们可以将 w w w看作是一组决定每个特征如何影响预测的权重

  • 如果特征 x i x_i xi对应的权重 w i w_i wi是正的,那么特征的值增加,我们的预测值 y ^ \hat{y} y^也会增加。
  • 如果特征 x i x_i xi对应的权重 w i w_i wi是负的,那么特征的值增加,我们的预测值 y ^ \hat{y} y^会减少。
  • 如果特征权重的大小很大,那么它对预测有很大的影响;如果特征权重的大小是零,那么它对预测没有影响。

因此,我们可以定义任务T:通过输出 y ^ = w T x \hat{y} = w^T x y^=wTx x x x预测 y y y

接下来我们需要定义性能度量P
假设有 m m m个输入样本组成的设计矩阵,我们不用它来训练模型,而是评估模型性能如何。 我们也有每个样本对应的正确值 y y y组成的回归目标向量。 因为这个数据集只是用来评估性能,我们称之为测试集。我们将输入的设计矩阵记作 X (test) X^{\text{(test)}} X(test),回归目标向量记作 y ( test ) y^{(\text{test})} y(test)

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

假设模型在测试集的预测值为 y ^ ( test ) \hat{y}^{(\text{test})} y^(test),那么模型在测试集上的均方误差为
MSE test = 1 m ∑ i ( y ^ ( test ) − y ( test ) ) i 2 \text{MSE}_{\text{test}} = \frac{1}{m} \sum_i ( \hat{y}^{(\text{test})} - y^{(\text{test})})_i^2 MSEtest=m1i(y^(test)y(test))i2
显然, y ^ ( test ) \hat{y}^{(\text{test})} y^(test)= y ( test ) y^{(\text{test})} y(test)(也就是测试的预测结果和实际一致),那么误差为0。

根据 MSE test = 1 m ∣ ∣ y ^ ( test ) − y ( test ) ∣ ∣ 2 2 \text{MSE}_{\text{test}} = \frac{1}{m} || \hat{y}^{(\text{test})} - y^{(\text{test})}||_2^2 MSEtest=m1y^(test)y(test)22,也可以得知:当预测值和目标值之间的欧几里得距离增加时,误差也会增加。

最后是经验E
为了构建一个机器学习算法,我们需要设计一个算法,通过观察训练集 ( X ( train ) , y ( train ) ) (X^{(\text{train})},y^{(\text{train})}) (X(train),y(train))获得经验,减少均方误差 MSE test \text{MSE}_{\text{test}} MSEtest以改进权重 w w w
一种直观方式是最小化训练集上的均方误差,即 MSE train \text{MSE}_{\text{train}} MSEtrain。训练结果越精确,测试结果误差越小。

最小化均方误差MSEtrain,我们可以简单地求解其导数为0的情况。 ∇ w MSE train = 0 \nabla{w} \text{MSE}_{\text{train}} = 0 wMSEtrain=0 ⇒ ∇ w 1 m ∣ ∣ y ^ ( train ) − y ( train ) ∣ ∣ 2 2 = 0 \Rightarrow \nabla{w} \frac{1}{m} || \hat{y}^{(\text{train})} - y^{(\text{train})}||_2^2 = 0 wm1y^(train)y(train)22=0 ⇒ 1 m ∇ w ∣ ∣ X ( train ) w − y ( train ) ∣ ∣ 2 2 = 0 \Rightarrow \frac{1}{m} \nabla{w} ||X^{(\text{train})}w - y^{(\text{train})}||_2^2 = 0 m1wX(train)wy(train)22=0 ⇒ ∇ w ( X ( train ) w − y ( train ) ) T ( X ( train ) w − y ( train ) ) = 0 \Rightarrow \nabla{w} \left( X^{(\text{train})}w - y^{(\text{train})} \right)^T \left( X^{(\text{train})}w - y^{(\text{train})} \right) = 0 w(X(train)wy(train))T(X(train)wy(train))=0 ⇒ ∇ w ( w ⊤ X ( t r a i n ) ⊤ X ( t r a i n ) w − 2 w ⊤ X ( t r a i n ) ⊤ y ( t r a i n ) + y ( t r a i n ) ⊤ y ( t r a i n ) ) = 0 \Rightarrow\nabla{w}(w^⊤X^{(train)⊤}X^{(train)}w − 2w^⊤X^{(train)⊤}y^{(train)} + y^{(train)⊤}y^{(train)})=0 w(wX(train)X(train)w2wX(train)y(train)+y(train)y(train))=0 ⇒ 2 X ( t r a i n ) ⊤ X ( t r a i n ) w − 2 X ( t r a i n ) ⊤ y ( t r a i n ) = 0 \Rightarrow2X^{(train)⊤}X^{(train)}w − 2X^{(train)⊤}y^{(train)}=0 2X(train)X(train)w2X(train)y(train)=0 ⇒ w = ( X ( t r a i n ) ⊤ X ( t r a i n ) ) − 1 X ( t r a i n ) ⊤ y ( t r a i n ) \Rightarrow w=(X^{(train)⊤}X^{(train)})^{−1}X^{(train)⊤}y^{(train)} w=(X(train)X(train))1X(train)y(train)
上式给出解的系统方程被称为正规方程(normal equation),它构成了一个简单的机器学习算法。

下图是一个线性回归算法的使用示例
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第1张图片
这是一个线性回归问题,其中训练集包括十个数据点,每个数据点包含一个特征。因为只有一个特征,权重向量 w w w也只有一个要学习的参数 w 1 w_1 w1
左图我们可以观察到线性回归学习 w 1 w_1 w1(斜率),从而使得直线 y = w 1 x y =w_1x y=w1x能够尽量接近穿过所有的训练点。
右图标注的点表示由正规方程学习到的 w 1 w_1 w1的值,我们发现它可以最小化训练集上的均方误差。

值得注意的是,术语线性回归(linear regression)通常用来指稍微复杂一些,附加额外参数(截距项b)的模型: y ^ = w ⊤ x + b \hat y=w^⊤x+b y^=wx+b
显然从参数到预测的映射仍是一个线性函数,而从特征到预测的映射是一个仿射函数。【仿射函数,即最高次数为1的多项式函数。常数项为零的仿射函数称为线性函数。】

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

截距项b通常被称为仿射变换的偏置(bias)参数。这个术语的命名源自该变换的输出在没有任何输入时会偏移b。它和统计偏差中指代统计估计算法的某个量的期望估计偏离真实值的意思是不一样的。

容量、过拟合和欠拟合

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

通常情况下,训练机器学习模型时,我们可以使用某个训练集,在训练集上计算一些被称为训练误差(training error)的度量误差,目标是降低训练误差。
机器学习和优化不同的地方在于,我们也希望泛化误差(generalization error)(也被称为测试误差(test error))很低。泛化误差被定义为新输入的误差期望。这里,期望的计算基于不同的可能输入,这些输入采自系统在现实中遇到的分布。
通常,我们度量模型在训练集中分出来的测试集(test set)样本上的性能,来评估机器学习模型的泛化误差。

线性回归例子中,测试误差为 1 m ( test ) ∣ ∣ X ( test ) w − y ( test ) ∣ ∣ 2 2 \frac{1}{m^{(\text{test})}} ||X^{(\text{test})}w - y^{(\text{test})}||_2^2 m(test)1X(test)wy(test)22,它更加值得关注。

当我们只能观测到训练集时,如何才能影响测试集的性能呢?
如果训练集和测试集的数据是任意收集的,那么我们能够做的确实很有限。
如果可以对训练集和测试集数据的收集方式有些假设,那么我们能够对算法做些改进。

假设每个数据集中的样本都是彼此相互独立的(independent),并且训练集和测试集是同分布的(identically distributed),采样自相同的分布。这个假设使我们能够在单个样本的概率分布描述数据生成过程。然后相同的分布可以用来生成每一个训练样本和每一个测试样本。

我们能观察到训练误差和测试误差之间的直接联系是,随机模型训练误差的期望和该模型测试误差的期望是一样的。

假设我们有概率分布p(x,y ),从中重复采样生成训练集和测试集。对于某个固定的w,训练集误差的期望恰好和测试集误差的期望一样,这是因为这两个期望的计算都使用了相同的数据集生成过程。

使用机器学习算法时,我们采样得到训练集,然后挑选参数去降低训练集误差,然后采样得到测试集。在这个过程中,测试误差期望会大于或等于训练误差期望

决定机器学习算法效果是否好有以下因素:
(1)降低训练误差。
(2)缩小训练误差和测试误差的差距。

这两个因素对应机器学习的两个主要挑战:欠拟合(underfitting)和过拟合(overfitting)。
欠拟合是指模型不能在训练集上获得足够低的误差,而过拟合是指训练误差和测试误差之间的差距太大。
通过调整模型的容量(capacity ),我们可以控制模型是否偏向于过拟合或者欠拟合。
模型的容量是指其拟合各种函数的能力。容量低的模型可能很难拟合训练集。容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。

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

一次多项式提供了我们已经熟悉的线性回归模型,其预测如下: y ^ = b + w x \hat y=b+wx y^=b+wx
通过引入 x 2 x^2 x2作为线性回归模型的另一个特征,我们能够学习关于 x x x的二次函数模型:
y ^ = b + w 1 x + w 2 x 2 \hat y=b+w_1x+w_2x^2 y^=b+w1x+w2x2
尽管该模型输入的是二次函数,但输出仍是参数的线性函数。 因此我们仍然可以用正规方程得到模型的闭解。

我们可以继续添加 x x x的更高幂作为额外特征,例如9次多项式: y ^ = b + ∑ i = 1 9 w i x i \hat y=b+\sum_{i=1}^9w_ix^i y^=b+i=19wixi

当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数据的数量时,算法效果通常会最佳。容量不足的模型不能解决复杂任务。容量高的模型能够解决复杂的任务,但是当其容量高于任务所需时,有可能会过拟合。

下图(图1)展示了这个原理的使用情况
我们用3个模型拟合了这个训练集的样本。训练数据是通过随机抽取x然后用二次函数确定性地生成y来合成的。
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第2张图片
在图中比较了线性、二次和9次预测器拟合真实二次函数的效果。
左图用一个线性函数拟合数据会导致欠拟合——它无法捕捉数据中的曲率信息。
9次函数能够表示正确的函数,但是因为训练参数比训练样本还多,所以它也能够表示无限多个刚好穿越训练样本点的很多其他函数。我们不太可能从这很多不同的解中选出一个泛化良好的。
二次模型非常符合任务的真实结构,因此它可以很好地泛化到新数据上。

上面的方式是通过改变输入特征的数目和加入这些特征对应的参数,来改变模型的容量。还有很多方法可以改变模型的容量。

容量不仅取决于模型的选择。模型规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数。这被称为模型的表示容量(representational capacity)。在很多情况下,从这些函数中挑选出最优函数是非常困难的优化问题。实际中,学习算法不会真的找到最优函数,而仅是找到一个可以大大降低训练误差的函数。额外的限制因素,比如优化算法的不完美,意味着学习算法的有效容量(effective capacity )可能小于模型族的表示容量。

我们必须记住虽然更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然需要选择一个充分复杂的假设以达到低的训练误差。通常,当模型容量上升时,训练误差会下降,直到其渐近最小可能误差(假设误差度量有最小值)。
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第3张图片上图是容量和误差之间的典型关系。通常,泛化误差是一个关于模型容量的U形曲线函数。
在图中训练误差和测试误差表现得非常不同。
图左边,训练误差和泛化误差都非常高,这是欠拟合机制(underfitting regime)。
当我们增加容量时,训练误差减小,但是训练误差和泛化误差之间的间距却不断扩大。
最终,这个间距的大小超过了训练误差的下降,我们进入到了过拟合机制(overfitting regime),其中容量过大,超过了最优容量(optimal capacity)。

【非参数模型】
为考虑容量任意高的极端情况,我们介绍非参数(non-parametric)模型的概念。至此,我们只探讨过参数模型,例如线性回归。参数模型学习的函数在观测到新数据前,参数向量的分量个数是有限且固定的。非参数模型没有这些限制。

非参数模型最近邻回归(nearest neighbor regression),它的复杂度和训练集大小有关。不像线性回归有固定长度的向量作为权重,最近邻回归模型存储了训练集中所有的X和y。 当需要为测试点 x x x分类时,模型会查询训练集中离该点最近的点,并返回相关的回归目标。
换言之, y ^ = y i \hat{y}=y_i y^=yi其中 i = arg min ⁡ ∣ ∣ X i , : − x ∣ ∣ 2 2 i=\argmin ||X_{i,:}-x||2^2 i=argminXi,:x22

该算法也可以扩展成 L 2 L^2 L2范数以外的距离度量,例如学成距离度量。 在最近向量不唯一的情况下,如果允许算法对所有离 x x x最近的 X i , : X_{i,:} Xi,:关联的 y i y_i yi求平均,那么该算法会在任意回归数据集上达到最小可能的训练误差(如果存在两个相同的输入对应不同的输出,那么训练误差可能会大于零)。

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

训练误差和泛化误差会随训练集的大小发生变化。泛化误差的期望从不会因训练样本数目的增加而增加。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。任何模型容量小于最优容量的固定参数模型会渐近到大于贝叶斯误差的误差值。

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

我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。

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

正则化(Regularization)

正则化是一种为了减小测试误差的行为(有时候会增加训练误差)
我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。
在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,这是为了防止系数过大从而让模型变得复杂
L 1 L^1 L1 正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化。更适用于特征选择
L 2 L^2 L2 正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化。更适用于防止模型过拟合。

没有免费午餐定理暗示我们必须在特定任务上设计性能良好的机器学习算法。

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

算法的效果不仅很大程度上受影响于假设空间的函数数量,也取决于这些函数的具体形式。线性回归具有包含其输入的线性函数集的假设空间。它对于输入和输出确实接近线性相关的问题,这些线性函数是很有用的。对于完全非线性的问题它们不太有效。例如:从x预测sin(x)。

因此我们可以通过两种方式控制算法的性能,一是允许使用的函数种类,二是这些函数的数量。

可以加入权重衰减(weight decay )来修改线性回归的训练标准。带权重衰减的线性回归最小化训练集上的均方误差和正则项的和J(w),其偏好于平方L2范数较小的权重。
J ( w ) = M S E t r a i n + λ w ⊤ w J(w)=MSE_{train}+λw^⊤w J(w)=MSEtrain+λww
其中 λ \lambda λ是提前挑选的值,控制我们偏好小范数权重的程度。

  • λ = 0 \lambda =0 λ=0,我们没有任何偏好。
  • 越大的 λ \lambda λ偏好范数越小的权重。
  • 最小化 J ( w ) J(w) J(w)可以看作是拟合训练数据和偏好小权重范数之间的权衡。 这会使得解决方案的斜率较小,或是将权重放在较少的特征上。

我们可以训练具有不同 λ \lambda λ值的高次多项式回归模型,来举例说明如何通过权重衰减控制模型欠拟合或过拟合的趋势。
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第4张图片
我们使用高阶多项式回归模型来拟合图1【线性-欠拟合、二次-适当容量 和9次-过拟合 预测器拟合真实二次函数的效果】中的训练样本。
真实函数是二次的,但在这里只使用9阶多项式。我们通过改变权重衰减的量来避免高阶模型的过拟合问题。

  • 左图,当λ非常大时,我们可以强迫模型学习到一个没有斜率的函数。由于它只能表示一个常数函数,所以会导致欠拟合。
  • 中图,取一个适当的λ时,学习算法能够用一个正常的形状来恢复曲率。即使模型能够用更复杂的形状来表示函数,权重衰减也鼓励用一个带有更小参数的更简单的模型来描述它。
  • 右图,当权重衰减趋近于0(即使用Moore-Penrose伪逆来解这个带有最小正则化的欠定问题)时,这个9阶多项式会导致严重的过拟合,这和我们在图1中看到的一样。

更一般地,正则化一个学习函数 f ( x ; θ ) f(x;\theta) f(x;θ)的模型,我们可以给代价函数添加被称为正则化项的惩罚。 在权重衰减的例子中,正则化项是 Ω ( w ) = w T w \Omega(w) = w^T w Ω(w)=wTw

在权重衰减的示例中,通过在最小化的目标中额外增加一项,我们明确地表示了偏好权重较小的线性函数。有很多其他方法隐式或显式地表示对不同解的偏好。总而言之,这些不同的方法都被称为正则化(regularization)。

正则化是指修改学习算法,使其降低泛化误差而非训练误差。正则化是机器学习领域的中心问题之一,只有优化能够与其重要性相提并论。

深度学习中普遍的理念是大量任务(例如所有人能做的智能任务)也许都可以使用非常通用的正则化形式来有效解决。

超参数和验证集

在机器学习的上下文中,超参数(hyperparameter)是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

超参数也是一个参数,是一个未知变量,但是它不同于在训练过程中的参数,它是可以对训练得到的参数有影响的参数,需要训练者人工输入,并作出调整,以便优化训练模型的效果。

超参数:

  1. 定义关于模型的更高层次的概念,如复杂性或学习能力。
  2. 不能直接从标准模型培训过程中的数据中学习,需要预先定义。
  3. 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定

超参数的一些示例:

  1. 聚类中类的个数
  2. 话题模型中话题的数量
  3. 模型的学习率
  4. 深层神经网络隐藏层数

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

在图1所示的多项式回归示例中,有一个超参数,即多项式的次数,作为容量超参数。控制权重衰减程度的λ是另一个超参数。

有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。 更多的情况是,该选项必须是超参数,因为它不适合在训练集上学习。 这适用于控制模型容量的所有超参数。 如果在训练集上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合。
例如,相比低次多项式和正的权重衰减设定,更高次的多项式和权重衰减参数设定 λ = 0 \lambda=0 λ=0总能在训练集上更好地拟合。

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

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

用于学习参数的数据子集通常仍被称为训练集,尽管这会和整个训练过程用到的更大的数据集相混。 用于挑选超参数的数据子集被称为验证集
通常, 80 % 80\% 80%的训练数据用于训练, 20 % 20\% 20%用于验证。

由于验证集是用来”训练”超参数的,尽管验证集的误差通常会比训练集误差小,验证集会低估泛化误差。 所有超参数优化完成之后,泛化误差可能会通过测试集来估计。

【交叉验证】
将数据集分成固定的训练集和固定的测试集后,一个小规模的测试集意味着平均测试误差估计的统计不确定性,使得很难判断算法 A A A是否比算法 B B B在给定的任务上做得更好。

当数据集有十万计或者更多的样本时,这不会是一个严重的问题。 当数据集太小时,也有替代方法允许我们使用所有的样本估计平均测试误差,代价是增加了计算量。 这些过程是基于在原始数据上随机采样或分离出的不同数据集上重复训练和测试的想法。最常见的是** k k k-折交叉验证**过程。

2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第5张图片步骤如下:
第一步,不重复抽样将原始数据随机分为 k 份。
第二步,每一次挑选其中 1 份作为测试集,剩余 k-1 份作为训练集用于模型训练。
第三步,重复第二步 k 次,这样每个子集都有一次机会作为测试集,其余机会作为训练集。 在每个训练集上训练后得到一个模型,用这个模型在相应的测试集上测试,计算并保存模型的评估指标。
第四步,计算 k 组测试结果的平均值作为模型精度的估计,并作为当前 k折交叉验证下模型的性能指标。

2.优点

  • 充分利用所有数据,在数据规模较小的情况下有优势
  • 在数据量较少的情况下,能使用较少的测试数据获取可靠度更高的准确度
  • 不需要精心设计测试集,实验结果能客观代表所有数据的分布

3.缺点

  • 计算量较大,实验成本较高,业内k的经验值为10,意味着要训练十次,得到十个模型
  • k折验证法实质上是在验证模型的性能指标,对模型的选型有重要意义,但在同等计算量的情况下,对模型的性能提升不一定明显

估计、偏差和方差

【点估计】
点估计(point estimation)是用样本统计量来估计总体参数,因为样本统计量为数轴上某一点值,估计的结果也以一个点的数值表示,所以称为点估计。
点估计为一些感兴趣的量提供单个“最优”预测。一般地,感兴趣的量可以是单个参数,或是某些参数模型中的一个向量参数,例如线性回归中的权重,但是也有可能是整个函数。

点估计也可以指输入和目标变量之间关系的估计,我们将这种类型的点估计称为函数估计(或函数近似。

【偏差】
估计的偏差被定义为 bias ( θ ^ m ) = E ( θ ^ m ) − θ \text{bias}(\hat{\theta}_m) = E(\hat{\theta}_m) - \theta bias(θ^m)=E(θ^m)θ
其中期望作用在所有数据(看作是从随机变量采样得到的)上, θ \theta θ是用于定义数据生成分布的 θ \theta θ的真实值。

  • 如果 bias ( θ ^ m ) = 0 \text{bias}(\hat{\theta}_m)=0 bias(θ^m)=0,那么估计量 θ ^ m \hat{\theta}_m θ^m被称为是无偏,这意味着 E ( θ ^ m ) = θ E(\hat{\theta}_m) = \theta E(θ^m)=θ
  • 如果 lim ⁡ m → ∞ bias ( θ ^ m ) = 0 \lim_{m\to\infty} \text{bias}(\hat{\theta}m)=0 mlimbias(θ^m)=0,那么估计量 θ ^ m \hat{\theta}_m θ^m被称为是渐近无偏,这意味着 lim ⁡ m → ∞ E ( θ ^ m ) = θ \lim_{m\to\infty} E(\hat{\theta}_m) = \theta mlimE(θ^m)=θ

我们可以计算估计量的期望来决定它的偏差

例1:伯努利分布
考虑一组服从均值为 θ \theta θ的伯努利分布的独立同分布的样本 x ( 1 ) , … , x ( m ) {x^{(1)}, \dots , x^{(m)}} x(1),,x(m) P ( x ( i ) ; θ ) = θ x ( i ) ( 1 − θ ) ( 1 − x ( i ) ) P(x^{(i)};θ)=θ^{x^{(i)}}(1−θ)^{(1−x^{(i)})} P(x(i);θ)=θx(i)(1θ)(1x(i))。 这个分布中参数 θ \theta θ的常用估计量是训练样本的均值 θ ^ m = 1 m ∑ i = 1 m x ( i ) \hat{\theta}_m = \frac{1}{m} \sum_{i=1}^m x^{(i)} θ^m=m1i=1mx(i)判断这个估计量是否有偏。
把这个均值带入偏差定义公式 bias ( θ ^ m ) = E [ θ ^ m ] − θ \text{bias}(\hat{\theta}_m) = E[\hat{\theta}_m] - \theta bias(θ^m)=E[θ^m]θ = E [ 1 m ∑ i = 1 m x ( i ) ] − θ =E[\frac{1}{m} \sum_{i=1}^m x^{(i)}] - \theta =E[m1i=1mx(i)]θ = θ − θ = 0 = \theta - \theta = 0 =θθ=0
因为 bias ( θ ^ ) = 0 \text{bias}(\hat{\theta})=0 bias(θ^)=0,我们称估计 θ ^ \hat{\theta} θ^是无偏的。

例2,均值的高斯分布估计
考虑一组独立同分布的样本 x ( 1 ) , … , x ( m ) {x^{(1)}, \dots , x^{(m)}} x(1),,x(m)服从高斯分布 p ( x ( i ) ) = N ( x ( i ) ; μ , σ 2 ) p(x^{(i)}) = \mathcal{N}(x^{(i)}; \mu, \sigma^2) p(x(i))=N(x(i);μ,σ2),其中 i ∈ 1 , … , m i\in{1, \dots, m} i1,,m
高斯概率密度函数如下:
p ( x ( i ) ; μ , σ 2 ) = 1 2 π σ 2 e x p ( − 1 2 ( x ( i ) − μ ) 2 σ 2 ) p(x^{(i)};μ,σ^2)=\frac1{\sqrt{2πσ^2}} exp(−\frac12 \frac{(x^{(i)}−μ)^2}{σ^2}) p(x(i);μ,σ2)=2πσ2 1exp(21σ2(x(i)μ)2)
高斯均值参数的常用估计量被称为样本均值, μ ^ m = 1 m ∑ i = 1 m x ( i ) \hat{\mu}_m = \frac{1}{m} \sum_{i=1}^m x^{(i)} μ^m=m1i=1mx(i)判断样本均值是否有偏,我们再次带入偏差定义公式计算它的期望 bias ( μ ^ m ) = E [ μ ^ m ] − μ \text{bias} (\hat{\mu}_m) = E[ \hat{\mu}_m ] - \mu bias(μ^m)=E[μ^m]μ = E [ 1 m ∑ i = 1 m x ( i ) ] − μ = E \left[ \frac{1}{m} \sum_{i=1}^m x^{(i)} \right] - \mu =E[m1i=1mx(i)]μ = μ − μ = 0 = \mu - \mu = 0 =μμ=0 因此我们发现样本均值是高斯均值参数的无偏估计量。

例3,高斯分布方差估计
我们比较高斯分布方差参数 σ 2 \sigma^2 σ2的两个不同估计,探讨是否有一个是有偏的。
我们考虑的第一个方差估计被称为样本方差(sample variance): σ ^ m 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ^ m ) 2 \hat{\sigma}_m^2 = \frac{1}{m} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2 σ^m2=m1i=1m(x(i)μ^m)2 其中 μ ^ m \hat{\mu}_m μ^m是样本均值。 更形式地,我们对下式计算感兴趣
b i a s ( σ ^ m 2 ) = E [ σ m 2 ] − σ 2 bias(\hatσ^2_m)=E[σ^2_m]−σ^2 bias(σ^m2)=E[σm2]σ2
其中 E [ σ m 2 ] = E [ 1 m ∑ i = 1 m ( x ( i ) − μ ^ m ) 2 ] = m − 1 m σ 2 E[σ^2_m]=E \left[ \frac{1}{m} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2 \right]= \frac{m-1}{m} \sigma^2 E[σm2]=E[m1i=1m(x(i)μ^m)2]=mm1σ2
所以,样本方差 σ ^ m 2 \hatσ^2_m σ^m2的偏差 b i a s ( σ ^ m 2 ) = − σ 2 m bias(\hatσ^2_m)=-\frac {\sigma^2}m bias(σ^m2)=mσ2,有偏差。

第二个是无偏样本方差(unbiased sample variance)估计: σ ~ m 2 = 1 m − 1 ∑ i = 1 m ( x ( i ) − μ ^ m ) 2 \tilde{\sigma}_m^2 = \frac{1}{m-1} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2 σ~m2=m11i=1m(x(i)μ^m)2
还是看 E [ σ m 2 ] E[σ^2_m] E[σm2]
E [ σ m 2 ] = E [ 1 m − 1 ∑ i = 1 m ( x ( i ) − μ ^ m ) 2 ] E[σ^2_m]=E[\frac{1}{m-1} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2] E[σm2]=E[m11i=1m(x(i)μ^m)2] = m m − 1 E [ σ ^ m 2 ] = \frac{m}{m-1} E[ \hat{\sigma}_m^2 ] =m1mE[σ^m2] = m m − 1 ( m − 1 m σ 2 ) = \frac{m}{m-1} \left( \frac{m-1}{m} \sigma^2 \right) =m1m(mm1σ2) = σ 2 = \sigma^2 =σ2
显然,无偏差样本方差的偏差为0。其实这个估计的名字已经告诉我们答案了。

注意:尽管无偏估计显然是令人满意的,但它并不总是“最好”的估计。

【方差和标准差】
我们有时会考虑估计量的另一个性质是它作为数据样本的函数,期望的变化程度是多少。 正如我们可以计算估计量的期望来决定它的偏差,我们也可以计算它的方差(variance): V a r ( θ ^ ) Var(\hat{θ}) Var(θ^),其中随机变量是训练集。

方差 是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。
统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。

方差的平方根被称为标准差(standard error),记作 SE ( θ ^ ) \text{SE}(\hat{\theta}) SE(θ^)

标准差(Standard Deviation) ,中文环境中又常称均方差,是方差的算术平方根。标准差能反映一个数据集的离散程度。最常使用作为统计分布程度上的测量。平均数相同的两组数据,标准差未必相同。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
既然有了方差来描述变量与均值的偏离程度,那又搞出来个标准差干什么呢?
方差与我们要处理的数据的量纲是不一致的,虽然能很好的描述数据与均值的偏离程度,但是处理结果是不符合我们的直观思维的。
举个例子:一个班级里有60个学生,平均成绩是70分,标准差是9,方差是81,成绩服从正态分布,那么我们通过方差不能直观的确定班级学生与均值到底偏离了多少分,通过标准差我们就很直观的得到学生成绩分布在[61,79]范围的概率为0.6826,即约等于下图中的34.2%*2
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第6张图片
总结:

  • 标准差是离均差平方和平均后的方根,用σ表示。标准差是方差的算术平方根
  • 均方差是数据序列与均值的关系,而均方误差是数据序列与真实值之间的关系
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

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

均值的标准差被记作 SE ( μ ^ m ) = Var [ 1 m ∑ i = 1 m x ( i ) ] = σ m \text{SE}(\hat{\mu}_m) = \sqrt{ \text{Var} \left[ \frac{1}{m} \sum_{i=1}^m x^{(i)} \right] } = \frac{\sigma}{\sqrt{m}} SE(μ^m)=Var[m1i=1mx(i)] =m σ其中 σ 2 \sigma^2 σ2是样本 x ( i ) x^{(i)} x(i)的真实方差。 标准差通常被记作 σ \sigma σ

可惜,样本方差的平方根方差无偏估计的平方根 都不是标准差的无偏估计。 这两种计算方法都倾向于低估真实的标准差,但仍用于实际中。 相较而言,方差无偏估计的平方根较少被低估。 对于较大的 m m m,这种近似非常合理。

均值的标准差在机器学习实验中非常有用。 我们通常用测试集样本的误差均值来估计泛化误差。 测试集中样本的数量决定了这个估计的精确度。 中心极限定理告诉我们均值会接近一个高斯分布,我们可以用标准差计算出真实期望落在选定区间的概率。

例:伯努利分布
回顾 P ( x ( i ) ; θ ) = θ x ( i ) ( 1 − θ ) 1 − x ( i ) P(x^{(i)}; \theta) = \theta^{x^{(i)}} (1-\theta)^{1 - x^{(i)}} P(x(i);θ)=θx(i)(1θ)1x(i))中独立同分布采样出来的一组样本 x ( 1 ) , … , x ( m ) { x^{(1)}, \dots, x^{(m)} } x(1),,x(m)
这次我们关注估计 θ ^ m = 1 m ∑ i = 1 m x ( i ) \hat{\theta}_m = \frac{1}{m} \sum_{i=1}^m x^{(i)} θ^m=m1i=1mx(i)的方差
Var ( θ ^ m ) = Var ( 1 m ∑ i = 1 m x ( i ) ) \text{Var}\left( \hat{\theta}_m \right) = \text{Var}\left( \frac{1}{m} \sum_{i=1}^m x^{(i)} \right) Var(θ^m)=Var(m1i=1mx(i)) = 1 m 2 ∑ i = 1 m Var ( x ( i ) ) = \frac{1}{m^2} \sum_{i=1}^m \text{Var} \left( x^{(i)} \right) =m21i=1mVar(x(i)) = 1 m 2 ∑ i = 1 m θ ( 1 − θ ) = \frac{1}{m^2} \sum_{i=1}^m \theta (1 - \theta) =m21i=1mθ(1θ) = 1 m 2 m θ ( 1 − θ ) = 1 m θ ( 1 − θ ) = \frac{1}{m^2} m\theta(1-\theta)= \frac{1}{m} \theta(1-\theta) =m21mθ(1θ)=m1θ(1θ)
估计量方差的下降速率是关于数据集样本数目 m m m的函数。 这是常见估计量的普遍性质。

【权衡偏差和方差以最小化均方误差】
偏差和方差度量着估计量的两个不同误差来源。

  • 偏差度量着偏离真实函数或参数的误差期望。
  • 方差度量着数据上任意特定采样可能导致的估计期望的偏差。

当我们可以在一个偏差更大的估计和一个方差更大的估计中进行选择时,会发生什么呢?我们该如何选择?
判断这种权衡最常用的方法是交叉验证。 经验上,交叉验证在真实世界的许多任务中都非常成功。 另外,我们也可以比较这些估计的均方误差(mean squared error,MSE): M S E = E [ ( θ m − θ ) 2 ] = bias ( θ ^ m ) 2 + V a r ( θ ^ m ) MSE=E[(θ^m−θ)^2]=\text{bias}(\hat{\theta}_m)^2+Var(\hat{\theta}_m) MSE=E[(θmθ)2]=bias(θ^m)2+Var(θ^m)

如上式所示,MSE估计包含了偏差方差
MSE度量着估计和真实参数 θ \theta θ之间平方误差的总体期望偏差
理想的估计具有较小的MSE或是在检查中会稍微约束它们的偏差和方差。

偏差和方差的关系和机器学习容量、欠拟合和过拟合的概念紧密相联。 用MSE度量泛化误差(偏差和方差对于泛化误差都是有意义的)时,增加容量会增加方差,降低偏差。
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第7张图片上图中,当容量增大(x轴)时,偏差(用点表示)随之减小,而方差(虚线)随之增大,使得泛化误差(加粗曲线)产生了另一种U形。如果我们沿着轴改变容量,会发现最佳容量,当容量小于最佳容量会呈现欠拟合,大于时导致过拟合。

【一致性】
目前我们已经探讨了固定大小训练集下不同估计量的性质。通常,我们也会关注训练数据增多后估计量的效果。特别地,我们希望当数据集中数据点的数量m增加时,点估计会收敛到对应参数的真实值。更形式地,我们想要 p l i m m → ∞ θ ^ m = θ plim_{m\to\infty} \hat{\theta}m = \theta plimmθ^m=θ
上式表示的条件被称为一致性(consistency )。符号 p l i m plim plim表示依概率收敛,即对于任意的 ϵ > 0 \epsilon > 0 ϵ>0,当 m → ∞ m\to\infty m时,有 P ( ∣ θ ^ m − θ ∣ > ϵ ) → 0 P(|\hat{\theta}_m - \theta| > \epsilon) \to 0 P(θ^mθ>ϵ)0

一致性有时它是指弱一致性,强一致性是指几乎必然(almost sure)从 θ ^ \hat{\theta} θ^收敛到 θ \theta θ几乎必然收敛是指当 ( p l i m m → ∞ x ( m ) = x ) = 1 (plim_{m\to\infty} x^{(m)} = x) = 1 (plimmx(m)=x)=1时,随机变量序列 x ( 1 ) x^{(1)} x(1) x ( 2 ) x^{(2)} x(2) … \dots 收敛到 x x x

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

最大似然估计

最大似然估计(maximum likelihood estimation, MLE)一种重要而普遍的求估计量的方法。最大似然法明确地使用概率模型,其目标是寻找能够以较高概率产生观察数据的系统发生树。

上文我们已经看过常用估计的定义,并分析了它们的性质。但是这些估计是从哪里来的呢?我们希望有些准则可以让我们从不同模型中得到特定函数作为好的估计,而不是猜测某些函数可能是好的估计,然后分析其偏差和方差。

最常用的准则是最大似然估计

以下参考https://blog.csdn.net/u014182497/article/details/82252456
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【补充】什么是似然,似然和概率关系是什么
在统计学中,似然函数(likelihood function,通常简写为likelihood,似然)是一个非常重要的内容,在非正式场合似然和概率(Probability)几乎是一对同义词,但是在统计学中似然和概率却是两个不同的概念。
概率是在特定环境下某件事情发生的可能性,也就是结果没有产生之前依据环境所对应的参数来预测某件事情发生的可能性,比如抛硬币,抛之前我们不知道最后是哪一面朝上,但是根据硬币的性质我们可以推测任何一面朝上的可能性均为50%,这个概率只有在抛硬币之前才是有意义的,抛完硬币后的结果便是确定的。
似然刚好相反,是在确定的结果下去推测产生这个结果的可能环境(参数),还是抛硬币的例子,假设我们随机抛掷一枚硬币1,000次,结果500次人头朝上,500次数字朝上(实际情况一般不会这么理想,这里只是举个例子),我们很容易判断这是一枚标准的硬币,两面朝上的概率均为50%,这个过程就是我们根据结果来判断这个事情本身的性质(参数),也就是似然。

最大似然估计的一般求解过程:
  (1) 写出似然函数;
  (2) 对似然函数取对数,并整理;
  (3) 求导数 ;
  (4) 解似然方程
++++++++++++++++++++++++++++++++++++++++++++++++++++++

现在考虑一组含有 m m m个样本的数据集 X = x ( 1 ) , … , x ( m ) X={ x^{(1)},\dots, x^{(m)} } X=x(1),,x(m),独立地由未知的真实数据生成分布 p data ( x ) p_{\text{data}}(x) pdata(x)生成。

p model ( x ; θ ) p_{\text{model}}( x; \theta ) pmodel(x;θ)是一族由 θ \theta θ确定在相同空间上的概率分布。 换言之, p model ( x ; θ ) p_{\text{model}}(x;\theta) pmodel(x;θ)将任意输入 x x x映射到实数来估计真实概率 p data ( x ) p_{\text{data}}(x) pdata(x)

θ \theta θ最大似然估计被定义为:
在这里插入图片描述
多个概率的乘积会因很多原因不便于计算。例如,计算中很可能会出现数值下溢。
为了得到一个便于计算的等价优化问题,我们观察到似然对数不会改变其 arg max ⁡ \argmax argmax。但是将乘积转化成了便于计算的求和形式:
在这里插入图片描述
因为当我们重新缩放代价函数时 arg max ⁡ \argmax argmax不会改变,我们可以除以 m m m得到和训练数据经验分布 p ^ data \hat{p}{\text{data}} p^data相关的期望作为准则: θ ML = arg max ⁡ θ   E x ∼ p ^ data log ⁡ p model ( x ; θ ) . . . . . . ( 式 1 ) \theta_{\text{ML}} = \underset{\theta}{\argmax} \,E_{x \sim \hat{p}{\text{data}}} \log p{\text{model}} (x; \theta)......(式1) θML=θargmaxExp^datalogpmodel(x;θ)......(1)

一种解释最大似然估计的观点是将它看作最小化训练集上的经验分布 p ^ data \hat{p}{\text{data}} p^data和模型分布之间的差异,两者之间的差异程度可以通过KL散度度量。

KL散度被定义为 D KL ( p ^ data ∣ p model ) = E x ∼ p ^ data [ log ⁡ p ^ data ( x ) − log ⁡ p model ( x ) ] D_{\text{KL}}(\hat{p}_{\text{data}} | p_{\text{model}}) = E_{x \sim \hat{p}{\text{data}}} [ \log \hat{p}_{\text{data}}(x) - \log p_{\text{model}}(x) ] DKL(p^datapmodel)=Exp^data[logp^data(x)logpmodel(x)]
左边一项仅涉及到数据生成过程,和模型无关。 这意味着当我们训练模型最小化KL散度时,我们只需要最小化 − E x ∼ p ^ data [ log ⁡ p model ( x ) ] -E_{x \sim \hat{p}{\text{data}}} [ \log p_{\text{model}}(x) ] Exp^data[logpmodel(x)],这和(式1)中最大化是相同的。

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

我们可以将最大似然看作是使模型分布尽可能地和经验分布 p ^ data \hat{p}_{\text{data}} p^data相匹配的尝试。 理想情况下,我们希望匹配真实的数据生成分布 p data p_{\text{data}} pdata,但我们没法直接知道这个分布。

虽然最优 θ \theta θ在最大化似然或是最小化KL散度时是相同的,但目标函数值是不一样的。 在软件中,我们通常将两者都称为最小化代价函数。 因此最大化似然变成了最小化负对数似然(NLL),或者等价的是最小化交叉熵。 将最大化似然看作最小化KL散度的视角在这个情况下是有帮助的,因为已知KL散度最小值是零。 当 x x x取实数时,负对数似然可以是负值。

【条件对数似然和均方误差】

最大似然估计很容易扩展到估计条件概率 P ( y ∣ x ; θ ) P(y \mid x;\theta) P(yx;θ),从而给定 x x x预测 y y y。 实际上这是最常见的情况,因为这构成了大多数监督学习的基础。

如果 X X X表示所有的输入, Y Y Y表示我们观测到的目标,那么条件最大似然估计
θ M L = a r g m a x θ P ( Y ∣ X ; θ ) \theta_{ML}=\underset{\theta}{argmax}P(Y∣X;\theta) θML=θargmaxP(YX;θ)
如果假设样本是独立同分布的,那么这可以分解成(条件对数似然,式2)
θ M L = a r g m a x θ ∑ i = 1 m l o g P ( y ( i ) ∣ x ( i ) ; θ ) \theta_{ML}=\underset{\theta}{argmax}\sum_{i=1}^mlogP(y^{(i)}∣x^{(i)};\theta) θML=θargmaxi=1mlogP(y(i)x(i);θ)

例:线性回归作为最大似然
之前,我们将线性回归作为学习从输入 x x x映射到输出 y ^ \hat{y} y^的算法。 从 x x x y ^ \hat{y} y^的映射选自最小化均方误差。 现在,我们以最大似然估计的角度重新审视线性回归。
我们现在希望模型能够得到条件概率 p ( y ∣ x ) p(y \mid x) p(yx),而不只是得到一个单独的预测 y ^ \hat{y} y^
想象有一个无限大的训练集,我们可能会观测到几个训练样本有相同的输入x但是不同的y 。现在学习算法的目标是拟合分布 p ( y ∣ x ) p(y \mid x) p(yx)到和x相匹配的不同的y。
为了得到我们之前推导出的相同的线性回归算法,我们定义 p ( y ∣ x ) = N ( y ; y ^ ( x ; w ) , σ 2 ) p(y \mid x) = \mathcal{N}(y; \hat{y}(x; w), \sigma^2) p(yx)=N(y;y^(x;w),σ2)
函数 y ^ ( x ; w ) \hat{y}(x; w) y^(x;w)预测高斯的均值。
本例中,我们假设方差是用户固定的某个常量 σ 2 \sigma^2 σ2。 这种函数形式 p ( y ∣ x ) p(y \mid x) p(yx)会使得最大似然估计得出和之前相同的学习算法。
由于假设样本是独立同分布的,条件对数似然(式2)
∑ i = 1 m l o g p ( y ( i ) ∣ x ( i ) ; θ ) \sum_{i=1}^mlogp(y^{(i)}∣x^{(i)};θ) i=1mlogp(y(i)x(i);θ) = − m l o g σ − m 2 l o g ( 2 π ) − ∑ i = 1 m ∥ y ^ ( i ) − y ( i ) ∥ 2 2 σ 2 =−mlogσ − \frac m2log(2π) − \sum_{i=1}^m \frac{∥\hat y^{(i)}−y^{(i)}∥^2}{2σ^2} =mlogσ2mlog(2π)i=1m2σ2y^(i)y(i)2
其中 y ^ ( i ) \hat{y}^{(i)} y^(i)是线性回归在第 i i i个输入 x ( i ) x^{(i)} x(i)上的输出, m m m是训练样本的数目。
对比对数似然和均方误差, MSE train = 1 m ∑ i = 1 m y ^ ( i ) − y ( i ) 2 \text{MSE}_{\text{train}} = \frac{1}{m} \sum_{i=1}^m {\hat{y}^{(i)} - y^{(i)}}^2 MSEtrain=m1i=1my^(i)y(i)2
我们立刻可以看出,最大化关于w的对数似然和最小化均方误差会得到相同的参数估计w。
但是对于相同的最优w,这两个准则有着不同的值。这验证了MSE可以用于最大似然估计。

【最大似然的性质】
最大似然估计最吸引人的地方在于,它被证明当样本数目m→∞时,就收敛率而言是最好的渐近估计。

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

  • 真实分布 p data p_{\text{data}} pdata必须在模型族 p model ( ⋅ ; θ ) p_{\text{model}}(\cdot; \theta) pmodel(;θ) 中。 否则,没有估计可以还原 p data p_{\text{data}} pdata
  • 真实分布 p data p_{\text{data}} pdata必须刚好对应一个 θ \theta θ值。 否则,最大似然估计恢复出真实分布 p data p_{\text{data}} pdata后,也不能决定数据生成过程使用哪个 θ \theta θ

统计效率通常用于有参情况的研究中(例如线性回归)。有参情况中我们的目标是估计参数值(假设有可能确定真实参数),而不是函数值。 一种度量我们和真实参数相差多少的方法是计算均方误差的期望,即计算 m m m个从数据生成分布中出来的训练样本上的估计参数和真实参数之间差值的平方。 有参均方误差估计随着 m m m的增加而减少,当 m m m较大时,表明不存在均方误差低于最大似然估计的一致估计。

因为这些原因(一致性和统计效率),最大似然通常是机器学习中的首选估计。

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

贝叶斯统计

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

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【补充】
贝叶斯统计和频率统计的区别:概率的看法不同以及对参数是固定还是随机的看法不同
频率统计

  • 认为参数是固定的,有一个确切的真值。
  • 认为总体参数是理论存在的,你不可能知道它具体的数值,只能通过大样本无限的逼近。
  • 举例:ABCD四个人打牌,频率统计认为他们赢的概率是均等的,各为1/4。

贝叶斯统计

  • 认为参数本事也是一个随机变量,可以有自己的分布,你的先验信息可以帮助你更好的得到参数的估计和分布情况,即:设立先验分布,然后不断用数据进行更新得到后验分布。
  • 认为总体参数是客观存在的,可以根据先验概率,以及手头的样本数据,直接得到总体参数以及相应的置信区间(ci)。
  • 贝叶斯估计除了考虑频率中常见的最大似然估计,还必须结合先验概率。先验信息,是优势,也可能是劣势,关键看先验定义的准确与否。
  • 举例:ABCD四个人打牌,要考虑各种条件,即在ABCD四人勾心斗角的情形下,最终各人赢的概率,这样一算定然不是1/4。

在机器学习中,贝叶斯统计和频率统计之间的根本区别在于随机性存在的位置。在频率范畴中,数据被认为是随机的,而参数(例如,均值,方差)是固定的。在贝叶斯范畴中,参数被认为是随机的而数据是固定的。这是因为相比于数据,我们更关心产生这些数据的系统(参数)。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

正如《点估计》中讨论的,频率统计的视角是真实参数θ是未知的定值,而点估计是考虑数据集上函数(可以看作随机的)的随机变量。【参数固定,数据随机】

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

在观察到数据前,我们将参数 θ \theta θ的已知知识表示成先验概率分布 p ( θ ) p(\theta) p(θ)(有时简单地称为”先验”)。
一般而言,机器学习实践者会选择一个相当宽泛的(即,高熵的)先验分布,反映在观测到任何数据前参数 θ \theta θ的高度不确定性。 例如,我们可能会假设先验 θ \theta θ在有限区间中均匀分布。 许多先验偏好于”更简单”的解(如小幅度的系数,或是接近常数的函数)。

相对于最大似然估计,贝叶斯估计有两个重要区别。
第一,不像最大似然方法预测时使用 θ \theta θ的点估计,贝叶斯方法使用 θ \theta θ的全分布。
第二个最大区别是由贝叶斯先验分布造成的。 先验能够影响概率质量密度朝参数空间中偏好先验的区域偏移。 实践中,先验通常表现为偏好更简单或更光滑的模型。 对贝叶斯方法的批判认为先验是人为主观判断影响预测的来源。

当训练数据很有限时,贝叶斯方法通常泛化得更好,但是当训练样本数目很大时,通常会有很大的计算代价。

例:贝叶斯线性回归
使用贝叶斯估计方法学习线性回归的参数。
在线性回归中,我们学习从输入向量 x ∈ R n x \in R^n xRn预测标量 y ∈ R y \in R yR的线性映射。 该预测由向量 w ∈ R n w \in R^n wRn参数化:
y ^ = w ⊤ x \hat y=w^⊤x y^=wx
给定一组 m m m个训练样本 ( X ( train ) , y ( train ) ) (X^{(\text{train})}, y^{(\text{train})}) (X(train),y(train)), 我们可以表示整个训练集对 y y y的预测:
y ^ ( t r a i n ) = X ( t r a i n ) w \hat y^{(train)}=X^{(train)}w y^(train)=X(train)w
表示为 y ( train ) y^{(\text{train})} y(train)上的高斯条件分布,我们得到(∝,表示与什么成正比例)
p ( y ( t r a i n ) ∣ X ( t r a i n ) , w ) = N ( y ( t r a i n ) ; X ( t r a i n ) w , I ) ∝ e x p ( − 1 2 ( y ( t r a i n ) − X ( t r a i n ) w ) ⊤ ( y ( t r a i n ) − X ( t r a i n ) w ) ) p(y^{(train)}∣X^{(train)},w)=N(y^{(train)};X^{(train)}w,I)∝exp(− \frac12(y^{(train)}−X^{(train)}w)^⊤(y^{(train)}−X^{(train)}w)) p(y(train)X(train),w)=N(y(train);X(train)w,I)exp(21(y(train)X(train)w)(y(train)X(train)w))
其中,我们根据标准的MSE公式假设 y y y上的高斯方差为 1 1 1
在下文中,为减少符号负担,我们将 ( X ( train ) , y ( train ) ) (X^{(\text{train})}, y^{(\text{train})}) (X(train),y(train))简单表示为 ( X , y ) (X, y) (X,y)

为确定模型参数向量w的后验分布,我们首先需要指定一个先验分布
先验应该反映我们对这些参数取值的信念。虽然有时将我们的先验信念表示为模型的参数很难或很不自然,但在实践中我们通常假设一个相当广泛的分布来表示θ的高度不确定性。实数值参数通常使用高斯作为先验分布
p ( w ) = N ( w ; μ 0 , Λ 0 ) ∝ e x p ( − 1 2 ( w − μ 0 ) ⊤ Λ 0 − 1 ( w − μ 0 ) ) p(w)=N(w;\mu_0,\Lambda_0)∝exp(−\frac12(w−\mu_0)^⊤\Lambda_0^{−1}(w−\mu_0)) p(w)=N(w;μ0,Λ0)exp(21(wμ0)Λ01(wμ0))
其中, μ 0 \mu_0 μ0 Λ 0 \Lambda_0 Λ0分别是先验分布的均值向量和协方差矩阵。(注:除非有理由使用协方差矩阵的特定结构,我们通常假设其为对角协方差矩阵 Λ 0 = diag ( λ 0 ) \Lambda_0=\text{diag}(\lambda_0) Λ0=diag(λ0)。)

确定好先验后,我们现在可以继续确定模型参数的后验分布
p ( w ∣ X , y ) ∝ p ( y ∣ X , w ) p ( w ) p(w∣X,y)∝p(y∣X,w)p(w) p(wX,y)p(yX,w)p(w) ∝ e x p ( − 1 2 ( y − X w ) ⊤ ( y − X w ) ) e x p ( − 1 2 ( w − μ 0 ) ⊤ Λ 0 − 1 ( w − μ 0 ) ) ∝exp(−\frac12(y−Xw)^⊤(y−Xw))exp(−\frac12(w−\mu_0)^⊤\Lambda_0^{−1}(w−\mu_0)) exp(21(yXw)(yXw))exp(21(wμ0)Λ01(wμ0)) ∝ e x p ( − 1 2 ( − 2 y ⊤ X w + w ⊤ X ⊤ X w + w ⊤ Λ 0 − 1 w − 2 μ 0 ⊤ Λ 0 − 1 w ) ) ∝exp(−\frac12(−2y^⊤Xw+w^⊤X^⊤Xw+w^⊤\Lambda_0^{−1}w−2\mu^⊤_0\Lambda_0^{−1}w)) exp(21(2yXw+wXXw+wΛ01w2μ0Λ01w))
现在我们定义 Λ m = ( X T X + Λ 0 − 1 ) − 1 \Lambda_m = (X^TX + \Lambda_0^{-1})^{-1} Λm=(XTX+Λ01)1 μ m = Λ m ( X T y + Λ 0 − 1 μ 0 ) \mu_m = \Lambda_m ( X^T y + \Lambda_0^{-1}\mu_0 ) μm=Λm(XTy+Λ01μ0)

使用这些新的变量,我们发现后验可改写为高斯分布
p ( w ∣ X , y ) ∝ e x p ( − 1 2 ( w − μ m ) ⊤ Λ m − 1 ( w − μ m ) + 1 2 μ m ⊤ Λ m − 1 μ m ) p(w∣X,y)∝exp(−\frac12(w−\mu_m)^⊤\Lambda^{−1}_m(w−μ_m)+\frac12\mu^⊤_m\Lambda^{−1}_m\mu_m) p(wX,y)exp(21(wμm)Λm1(wμm)+21μmΛm1μm) ∝ e x p ( − 1 2 ( w − μ m ) ⊤ Λ m − 1 ( w − μ m ) ) ∝exp(−\frac12(w−\mu_m)^⊤\Lambda^{−1}_m(w−\mu_m)) exp(21(wμm)Λm1(wμm))
分布的积分必须归一这个事实意味着要删去所有不包括参数向量 w w w的项。
公式 N ( x ; μ , ∑ ) = 1 ( 2 π ) n d e t ( ∑ ) ​ ​ e x p ( − 1 2 ( x − μ ) ⊤ ∑ − 1 ( x − μ ) ) N(x;μ,\sum)=\sqrt{\frac 1{(2π)^ndet(\sum)}}​ ​exp(−\frac12(x−μ)^⊤\sum^{-1}(x-\mu)) N(x;μ,)=(2π)ndet()1 exp(21(xμ)1(xμ))显示了如何标准化多元高斯分布。

检查后验分布可以让我们获得贝叶斯推断效果的一些直觉。
大多数情况下,我们设置 μ 0 = 0 \mu_0 = 0 μ0=0。 如果我们设置 Λ 0 = 1 α I \Lambda_0 = \frac{1}{\alpha}I Λ0=α1I,那么 μ m \mu_m μm w w w的估计就和频率派带权重衰减惩罚 α w T w \alpha w^Tw αwTw的线性回归的估计是一样的。
一个区别是若 α \alpha α设为 0 0 0则贝叶斯估计是未定义的——我们不能将贝叶斯学习过程初始化为一个无限宽的 w w w先验。 更重要的区别是贝叶斯估计会给出一个协方差矩阵,表示 w w w所有不同值的可能范围,而不仅是估计 μ m \mu_m μm

最大后验(MAP)估计

最大后验估计(maximum a posteriori probability estimate, 简称MAP)与最大似然估计(MLE)类似。但是,在似然函数后面多乘了一项,即“待估计参数的先验分布”。故最大后验估计可以看作规则化的最大似然估计。
MAP与MLE最大区别是MAP中加入了模型参数本身的概率分布。或者说,MLE中认为模型参数本身的概率的是均匀的,即该概率为一个固定值。

原则上,我们应该使用参数 θ \theta θ的完整贝叶斯后验分布进行预测,但单点估计常常也是需要的。

希望使用点估计的一个常见原因是,对于大多数有意义的模型而言,大多数涉及到贝叶斯后验的计算是非常棘手的,点估计提供了一个可行的近似解。 我们仍然可以让先验影响点估计的选择来利用贝叶斯方法的优点,而不是简单地回到最大似然估计。

一种能够做到这一点的合理方式是选择最大后验点估计MAP估计选择后验概率最大的点(或在 θ \theta θ是连续值的更常见情况下,概率密度最大的点)。
θ M A P = a r g m a x p θ ( θ ∣ x ) = a r g m a x θ l o g p ( x ∣ θ ) + l o g p ( θ ) θ_{MAP}=\underset θ{argmaxp}(θ∣x)=\underset θ{argmax} logp(x∣θ)+logp(θ) θMAP=θargmaxp(θx)=θargmaxlogp(xθ)+logp(θ)
上式右边的 log ⁡ p ( x ∣ θ ) \log p(x \mid \theta) logp(xθ)对应着标准的对数似然项 log ⁡ p ( θ ) \log p(\theta) logp(θ)对应着先验分布

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

MAP贝叶斯推断提供了一个直观的方法来设计复杂但可解释的正则化项。 例如,更复杂的惩罚项可以通过混合高斯分布作为先验得到,而不是一个单独的高斯分布。

监督学习算法

监督学习算法是给定一组输入x和输出y 的训练集,学习如何关联输入和输出。在许多情况下,输出y很难自动收集,必须由人来提供“监督”,不过该术语仍然适用于训练集目标可以被自动收集的情况。

【1.概率监督学习】

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

我们可以将线性回归扩展到分类情况中。 如果我们有两个类,类 0 0 0和类 1 1 1,那么我们只需要指定这两类之一的概率。 类 1 1 1的概率决定了类 0 0 0的概率,因为这两个值加起来必须等于 1 1 1

二元变量的均值必须始终在 0 0 0 1 1 1之间,可以使用logistic sigmoid函数将线性函数的输出压缩进区间 ( 0 , 1 ) (0,1) (0,1)。 该值可以解释为概率: p ( y = 1 ∣ x ; θ ) = σ ( θ ⊤ x ) p(y=1∣x;θ)=σ(θ^⊤x) p(y=1x;θ)=σ(θx)
这个方法被称为逻辑回归,这个名字有点奇怪,因为该模型用于分类而非回归

线性回归中,我们能够通过求解正规方程以找到最佳权重。 相比而言,逻辑回归会更困难些。 其最佳权重没有闭解。 反之,我们必须最大化对数似然来搜索最优解。 我们可以通过梯度下降算法最小化负对数似然来搜索(最佳权重)。

【2.支持向量机】

支持向量机是监督学习中最有影响力的方法之一。
类似于逻辑回归,这个模型也是基于线性函数 w T x + b w^T x + b wTx+b的。 不同于逻辑回归的是,支持向量机不输出概率,只输出类别。
w T x + b w^T x + b wTx+b为正时,支持向量机预测属于正类。 当 w T x + b w^Tx + b wTx+b为负时,支持向量机预测属于负类。

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

例如,支持向量机中的线性函数可以重写为
w ⊤ x + b = b + ∑ i = 1 m α i x ⊤ x ( i ) w^⊤x+b=b+\sum_{i=1}^mα_ix^⊤x^{(i)} wx+b=b+i=1mαixx(i)
其中, x ( i ) x^{(i)} x(i)是训练样本, α \alpha α是系数向量。

学习算法重写为这种形式允许我们将 x x x替换为特征函数 ϕ ( x ) \phi(x) ϕ(x)的输出,点积替换为被称为核函数(kernel function)的函数 k ( x , x ( i ) ) = ϕ ( x ) ⋅ ϕ ( x ( i ) ) k(x, x^{(i)}) = \phi(x)\cdot \phi(x^{(i)}) k(x,x(i))=ϕ(x)ϕ(x(i))。 运算符 ⋅ \cdot 表示类似于 ϕ ( x ) T ϕ ( x ( i ) ) \phi(x)^T \phi(x^{(i)}) ϕ(x)Tϕ(x(i))的点积。

使用核估计替换点积之后,我们可以使用如下函数进行预测
f ( x ) = b + ∑ i α i k ( x , x ( i ) ) f(x)=b+\sum_iα_ik(x,x^{(i)}) f(x)=b+iαik(x,x(i))
这个函数关于 x x x是非线性的,关于 ϕ ( x ) \phi(x) ϕ(x)是线性的。 α \alpha α f ( x ) f(x) f(x)之间的关系也是线性的。
核函数完全等价于用 ϕ ( x ) \phi(x) ϕ(x)预处理所有的输入,然后在新的转换空间学习线性模型。

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

最常用的核函数是高斯核
k ( u , v ) = N ( u − v ; 0 , σ 2 I ) k(u,v)=N(u−v;0,σ^2I) k(u,v)=N(uv;0,σ2I)
其中 N ( x ; m u , Σ ) \mathcal{N}(x; mu, \Sigma) N(x;mu,Σ)是标准正态密度。 这个核也被称为径向基函数核,因为其值沿 v v v中从 u u u向外辐射的方向减小。

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

使用核技巧的算法类别被称为核机器(kernel machine)或核方法(kernel method)。

核机器的一个主要缺点是计算决策函数的成本关于训练样本的数目是线性的。 因为第 i i i个样本贡献 α i k ( x , x ( i ) ) \alpha_i k(x, x^{(i)}) αik(x,x(i))到决策函数。
支持向量机能够通过学习主要包含零的向量 α \alpha α,以缓和这个缺点。 那么判断新样本的类别仅需要计算非零 α i \alpha_i αi对应的训练样本的核函数。 这些训练样本被称为支持向量(support vector)。

当数据集很大时,核机器的计算量也会很大。

【3.其他简单的监督学习算法】
我们已经简要介绍过另一个非概率监督学习算法,最近邻回归。 更一般地,k-最近邻是一类可用于分类或回归的技术。

作为一个非参数学习算法,k-最近邻并不局限于固定数目的参数。我们通常认为k-最近邻算法没有任何参数,而是使用训练数据的简单函数。k-近邻能达到非常高的容量。

k-最近邻的一个弱点是它不能学习出哪一个特征比其他更具识别力。

决策树(decision tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法。
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第8张图片
上图描述一个决策树如何工作的示意图。

  • 上半部分树中每个节点都选择将输入样本送到左子节点(0)或者右子节点(1)。内部的节点用圆圈表示,叶节点用方块表示。每一个节点可以用一个二值的字符串识别并对应树中的位置,这个字符串是通过给起父亲节点的字符串添加一个位元来实现的(0表示选择左或者上,1表示选择右或者下)。
  • 下半部分这个树将空间分为区域。

这个二维平面说明决策树可以分割R2。这个平面中画出了树的节点,每个内部点穿过分割线并用来给样本分类,叶节点画在样本所属区域的中心。结果是一个分块常数函数,每一个叶节点一个区域。每个叶需要至少一个训练样本来定义,所以决策树不可能用来学习一个局部极大值比训练样本数量还多的函数。

最近邻预测和决策树都有很多的局限性。

无监督学习算法

一个经典的无监督学习任务是找到数据的“最佳”表示。“最佳”可以是不同的表示,但是一般来说,是指该表示在比本身表示的信息更简单或更易访问而受到一些惩罚或限制的情况下,尽可能地保存关于x更多的信息。

有很多方式定义较简单的表示。最常见的3种包括低维表示、稀疏表示和独立表示。
低维表示尝试将x中的信息尽可能压缩在一个较小的表示中。
稀疏表示将数据集嵌入到输入项大多数为零的表示中。
独立表示试图分开数据分布中变化的来源,使得表示的维度是统计独立的。

表示的概念是深度学习核心主题之一。

1.主成分分析(principal components analysis,PCA)

线性代数中介绍过PCA。PCA是学习数据表示的无监督学习算法。

PCA学习一种比原始输入维数更低的表示。它也学习了一种元素之间彼此没有线性相关的表示。这是学习表示中元素统计独立标准的第一步。要实现完全独立性,表示学习算法也必须去掉变量间的非线性关系。

在线性代数中采用了重建原始数据的最佳一维表示(均方误差),这种表示其实对应着数据的第一个主要成分。

在这里要介绍主成分通过奇异值分解(SVD)得到。具体来说,它们是X的右奇异向量。为了说明这点,假设W是奇异值分解 X = U Σ W T X = U\Sigma W^T X=UΣWT的右奇异向量。 以 W W W作为特征向量基,我们可以得到原来的特征向量方程:
X ⊤ X = ( U Σ W ⊤ ) ⊤ U Σ W ⊤ = W Σ 2 W ⊤ X^⊤X=(UΣW^⊤)^⊤UΣW^⊤=WΣ^2W^⊤ XX=(UΣW)UΣW=WΣ2W
SVD有助于说明PCA后的 Var [ z ] \text{Var}[z] Var[z]是对角的。

当我们通过线性变换W将数据x投影到z时,得到的数据表示的协方差矩阵是对角的(即 Σ 2 Σ^2 Σ2),立刻可得z中的元素是彼此无关的。

PCA这种将数据变换为元素之间彼此不相关表示的能力是PCA的一个重要性质。

2.k-均值聚类

另外一个简单的表示学习算法是k-均值聚类。k-均值聚类算法将训练集分成k个靠近彼此的不同样本聚类。我们可以认为该算法提供了k-维的one-hot编码向量h以表示输入x。当x属于聚类i时,有h_i=1,h的其他项为零。

k k k-均值聚类提供的one-hot编码也是一种稀疏表示,因为每个输入的表示中大部分元素为零。

k k k-均值聚类初始化 k k k个不同的中心点 μ ( 1 ) , … , μ ( k ) {\mu^{(1)},\dots,\mu^{(k)}} μ(1),,μ(k),然后迭代交换两个不同的步骤直到收敛。 步骤一,每个训练样本分配到最近的中心点 μ ( i ) \mu^{(i)} μ(i)所代表的聚类 i i i。 步骤二,每一个中心点 μ ( i ) \mu^{(i)} μ(i)更新为聚类 i i i中所有训练样本 x ( j ) x^{(j)} x(j)的均值。

随机梯度下降(stochastic gradient descent,SGD)

几乎所有的深度学习算法都用到了一个非常重要的算法:随机梯度下降。 随机梯度下降是梯度下降算法的一个扩展。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【补充】https://blog.csdn.net/qq_38150441/article/details/80533891
1)什么是梯度下降?
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第9张图片
简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正的最低点。

既然是选择一个方向下山,那么这个方向怎么选?每次该怎么走?
先说选方向,在算法中是以 随机方式 给出的,这也是造成有时候走不到真正最低点的原因。
如果选定了方向,以后每走一步,都是选择最陡的方向,直到最低点。
总结起来就一句话:随机选择一个方向,然后每次迈步都选择最陡的方向,直到这个方向上能达到的最低点。

2)梯度下降是用来做什么的?
在机器学习算法中,有时候需要对原始的模型构建损失函数(刻画了模型与训练样本的匹配程度),然后通过优化算法对损失函数进行优化,以便寻找到最优的参数,使得损失函数的值最小。而在求解机器学习参数的优化算法中,使用较多的就是基于梯度下降的优化算法(Gradient Descent, GD)。

3)优缺点
优点:效率。在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,可以在很多大规模数据集上应用
缺点:求解的是局部最优值,即由于方向选择的问题,得到的结果不一定是全局最优步长选择,过小使得函数收敛速度慢,过大又容易找不到最优解。

4)梯度下降的变形形式

  • 批量梯度下降法BGD(Batch Gradient Descent):针对的是整个数据集,通过对所有的样本的计算来求解梯度的方向。
  • 小批量梯度下降法MBGD(mini-batch Gradient Descent):把数据分为若干个批,按批来更新参数。这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性
  • 随机梯度下降法SGD(stochastic gradient descent):每个数据都计算算一下损失函数,然后求梯度更新参数。

5)随机梯度下降

随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。

SGD既可以用于分类计算,也可以用于回归计算。
+++++++++++++++++++++++++++++++++++++++++++++++++++++

机器学习中反复出现的一个问题是好的泛化需要大的训练集,但大的训练集的计算代价也更大。

机器学习算法中的损失函数通常可以分解成每个样本的损失函数的总和。对于这些相加的损失函数,梯度下降计算代价是O(m)。随着训练集规模增长为数十亿的样本,计算一步梯度也会消耗相当长的时间。

随机梯度下降的核心是,梯度是期望。 期望可使用小规模的样本近似估计。 具体而言,在算法的每一步,我们从训练集中均匀抽出一小批量(minibatch)样本 B = x ( 1 ) , … , x ( m ’ ) B={x^{(1)},\dots,x^{(m’)}} B=x(1),,x(m)。 小批量的数目 m ’ m’ m通常是一个相对较小的数,从一到几百。 重要的是,当训练集大小 m m m增长时, m ’ m’ m通常是固定的。 我们可能在拟合几十亿的样本时,每次更新计算只用到几百个样本。

SGD训练模型的渐近代价是关于m的函数的O(1)级别。

构建机器学习算法

几乎所有的深度学习算法都由以下部分组成:特定的数据集、代价函数(损失函数)、优化过程和模型。

例如,(监督学习)线性回归算法由以下部分组成

  • X X X y y y构成的数据集
  • 代价函数(损失函数) J ( w , b ) = − E x , y ∼ p ^ data log ⁡ p model ( y ∣ x ) J(w, b) = -E_{x,y\sim\hat{p}{\text{data}}} \log p_{\text{model}} (y \mid x) J(w,b)=Ex,yp^datalogpmodel(yx)
  • 模型是 p model ( y ∣ x ) = N ( y ; x T w + b , 1 ) p_{\text{model}} (y \mid x) = \mathcal{N}(y; x^T w + b, 1) pmodel(yx)=N(y;xTw+b,1)
  • 在大多数情况下,优化算法可以定义为求解代价函数梯度为零的正规方程。

替换独立于其他组件的大多数组件,我们就能得到很多不同的算法。

通常代价函数至少含有一项使学习过程进行统计估计的成分。 最常见的代价函数是负对数似然,最小化代价函数导致的最大似然估计
代价函数也可能含有附加项,如正则化项。 例如,我们可以将权重衰减加到线性回归的代价函数中 J ( w , b ) = λ ∣ ∣ w ∣ ∣ 2 2 − E x , y ∼ p ^ data log ⁡ p model ( y ∣ x ) J(w, b) = \lambda ||{w}||_2^2 - E_{x,y\sim \hat{p}_{\text{data}}} \log p_{\text{model}} (y \mid x) J(w,b)=λw22Ex,yp^datalogpmodel(yx)该优化仍然有闭解。

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

组合模型、代价(损失)和优化算法来构建学习算法同时适用于监督学习和无监督学习。 线性回归示例说明了如何适用于监督学习的。

无监督学习时,我们需要定义一个只包含 X X X的数据集、一个合适的无监督代价(损失)和一个模型。
例如,(无监督学习)通过指定如下损失函数可以得到PCA(主成分分析)的第一个主向量
J ( w ) = E x ∼ p d a t a ∥ x − r ( x ; w ) ∥ 2 2 J(w)=E_{x∼p^data}∥x−r(x;w)∥^2_2 J(w)=Expdataxr(x;w)22
模型定义为重构函数 r ( x ) = w T x w r(x) = w^Txw r(x)=wTxw,并且 w w w有范数为 1 1 1的限制。

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

有些模型,如决策树或 k k k-均值,需要特殊的优化,因为它们的代价函数有平坦的区域, 使其不适合通过基于梯度的优化去最小化。

促使深度学习发展的挑战

简单机器学习算法不能成功解决人工智能中的核心问题,如语音识别或者对象识别。
深度学习发展动机的一部分原因是传统学习算法在这类人工智能问题上泛化(机器在新数据面前的预测水平)能力不足。

本节将介绍

  • 为何处理高维数据时在新样本上泛化特别困难
  • 为何在传统机器学习中实现泛化的机制不适合学习高维空间中复杂的函数。

这些空间经常涉及巨大的计算代价。 深度学习旨在克服这些以及其他一些难题。

【1.维数灾难】
当数据的维数很高时,很多机器学习问题变得相当困难, 这种现象被称为维数灾难
由维数灾难带来的一个挑战是统计挑战。
2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)_第10张图片如上图所示,我们假设输入空间如图所示被分成网格。低维时,我们可以用由数据占据的少量网格去描述这个空间。泛化(机器在新数据面前的预测水平)到新数据点时,通过检测和新输入在相同网格中的训练样本,我们可以判断如何处理新数据点。
当数据的相关维度增大时(从左向右),我们感兴趣的配置数目会随之指数级增长。

  • 左图在一维的例子中,我们用一个变量来区分所感兴趣的仅仅10个区域。当每个区域都有足够的样本数时(图中每个样本对应了一个细胞),学习算法能够轻易地泛化得很好。泛化的一个直接方法是估计目标函数在每个区域的值(可能是在相邻区域之间插值)。
  • 中图在二维情况下,对每个变量区分10个不同的值更加困难。我们需要追踪10×10=100个区域,至少需要很多样本来覆盖所有的区域。
  • 右图三维情况下,区域数量增加到了 1 0 3 10^3 103=1000,至少需要那么多的样本。

对于需要区分的d维以及ν个值来说,我们需要O(νd)个区域和样本。这就是维数灾难的一个示例。

局部不变性和平滑正则化

补充:机器学习中的先验、后验和似然

为了更好地泛化,机器学习算法需要由先验信念引导应该学习什么类型的函数。
此前,我们已经看到过由模型参数的概率分布形成的先验。 通俗地讲,我们也可以说先验信念没有直接影响函数本身,而仅仅通过它们对函数的影响来间接改变参数。 此外,我们还能通俗地说,先验信念还间接地体现在选择一些偏好某类函数的算法,尽管这些偏好并没有通过我们对不同函数置信程度的概率分布表现出来(也许根本没法表现)。

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

许多简单算法完全依赖于此先验达到良好的泛化,但是仅仅依靠平滑先验不足解决人工智能级别任务中的统计挑战。必须在深度学习如何引入额外的(显式或隐式的)先验去降低复杂任务中的泛化误差。

有许多不同的方法来显式或隐式地表示学习函数应该具有光滑或局部不变的先验。 所有这些不同的方法都旨在鼓励学习过程能够学习出函数 f ∗ f^* f,对于大多数设置 x x x和小变动 ϵ \epsilon ϵ,都满足条件 f ∗ ( x ) ≈ f ∗ ( x + ϵ ) f^*(x) \approx f^*(x + \epsilon) f(x)f(x+ϵ)换言之,如果我们知道对应输入 x x x的答案(例如, x x x是个有标签的训练样本),那么该答案对于 x x x的邻域应该也适用。 如果在有些邻域中我们有几个好答案,那么我们可以组合它们(通过某种形式的平均或插值法)以产生一个尽可能和大多数输入一致的答案。

局部不变方法的一个极端例子是 k k k-最近邻系列的学习算法。 当一个区域里的所有点 x x x在训练集中的 k k k个最近邻是一样的,那么对这些点的预测也是一样的。 当 k = 1 k=1 k=1时,不同区域的数目不会比训练样本还多。

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

最近邻算法:每个训练样本仅仅能告诉学习者如何在其周围的相邻区域泛化

有没有什么方法能表示区间数目比训练样本数目还多的复杂函数?
显然,只是假设函数的平滑性不能做到这点。

例如,想象目标函数作用在西洋跳棋盘上。
棋盘包含许多变化,但只有一个简单的结构。 想象一下,如果训练样本数目远小于棋盘上的黑白方块数目,那么会发生什么。 基于局部泛化和平滑性或局部不变性先验,如果新点和某个训练样本位于相同的棋盘方块中,那么我们能够保证正确地预测新点的颜色。 但如果新点所在的方块没有训练样本,学习器不一定能举一反三。 如果仅依靠这个先验,一个样本只能告诉我们它所在的方块的颜色。 获得整个棋盘颜色的唯一方法是其上的每个方块至少要有一个样本。

只要在要学习的真实函数的峰值和谷值处有足够多的样本,那么平滑性假设和相关的无参数学习算法的效果都非常好。 当要学习的函数足够平滑,并且只在少数几维变化,这样做一般没问题。 在高维空间中,即使是非常平滑的函数,也会在不同维度上有不同的变化方式。

如何有效地表示复杂的函数以及所估计的函数是否可以很好地泛化到新的输入, 关键观点是,只要我们通过额外假设生成数据的分布来建立区域间的依赖关系,那么 O ( k ) O(k) O(k)个样本足以描述多如 O ( 2 k ) O(2^k) O(2k)的大量区间。

一些其他的机器学习方法往往会提出更强的,针对特定问题的假设。 例如,假设目标函数是周期性的,我们很容易解决棋盘问题。 通常,神经网络不会包含这些很强的(针对特定任务的)假设,因此神经网络可以泛化到更广泛的各种结构中。

深度学习的核心思想是假设数据由因素或特征组合产生,这些因素或特征可能来自一个层次结构的多个层级。 许多其他类似的通用假设进一步提高了深度学习算法。 这些很温和的假设允许了样本数目和可区分区间数目之间的指数增益。 深度的分布式表示带来的指数增益有效地解决了维数灾难带来的挑战。

【2.流形学习】
流形是一个机器学习中很多想法内在的重要概念。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【补充】https://www.zhihu.com/question/24015486

流形学习的观点是认为,我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。

流形学习的作用
第一个方面。高维空间有冗余,低维空间没冗余。也就是说,流形可以作为一种数据降维的方式。
第二个方面,流形能够刻画数据的本质。也就是说。既然学习到了“将数据从高维空间降维到低维空间,还能不损失信息”的映射,那这个映射能够输入原始数据,输出数据更本质的特征(就像压缩一样,用更少的数据能尽可能多地表示原始数据)。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

每个点周围邻域的定义暗示着存在变换能够从一个位置移动到其邻域位置。 例如在地球表面这个流形中,我们可以朝东南西北走。

尽管术语”流形”有正式的数学定义,但是机器学习倾向于更松散地定义一组点,只需要考虑少数嵌入在高维空间中的自由度或维数就能很好地近似。 每一维都对应着局部的变化方向。

数据位于低维流形的假设并不总是对的或者有用的。我们认为在人工智能的一些场景中,如涉及处理图像、声音或者文本时,流形假设至少是近似对的。这个假设的支持证据包含两类观察结果。

第一个支持流形假设的观察是现实生活中的图像、文本、声音的概率分布都是高度集中的。 均匀的噪声从来不会与这类领域的结构化输入类似。
均匀地随机抽取字母来生成文件,几乎不可能得到有意义的英语文档。因为大部分字母长序列不对应着自然语言序列: 自然语言序列的分布只占了字母序列的总空间里非常小的一部分。

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

你可能感兴趣的:(深度学习,IT)