深度学习是机器学习的一个特定分支,想要充分理解深度学习,必须对机器学习的基本原理有深刻的理解。本章将探讨一些机器学习的重要原理,如果已经掌握相关知识,可跳过前面部分直接前往5.11节。
在本章中,首先介绍学习算法的定义。接下来探讨学习存在哪些挑战。后续会讲解参数的设置,算法的分类组合等相关知识。最后,给出一个学习算法的示例。
1、学习算法
机器学习算法是一种能能够从数据中学习的算法。通常将它定义为:对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指——通过经验E改进后,它在任务T上由性能度量P衡量的性能会有所提升。
1.1、任务T
机器学习可以解决一些人为设计和使用确定性程序很难解决的问题。学习过程本身不能算是任务,学习是我们所谓的获取完成任务的能力。
机器学习的任务通常定义为:机器学习系统应该如何处理样本。样本是指从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征的集合。通常会将样本表示成一个向量
x
∈
R
n
\bm{x}\in\R^n
x∈Rn,向量的每一个元素
x
i
x_i
xi表示一个特征。
机器学习可以解决很多类型的任务,常见的有:
- 分类:在这类任务中,计算机程序需要指定某些输入属于 k k k类中的哪一类。为了完成任务,学习算法通常会返回一个函数 f : R n → { 1 , … , k } f:\R^n\rarr\{1,\dots,k\} f:Rn→{1,…,k}。当 y = f ( x ) y=f(\bm{x}) y=f(x)时,模型将向量 x \bm{x} x所代表的输入分类到数字码 y y y所代表的类别。还有一些分类输出的是不同类别的概率分布。具体的应用比如图片中物体识别,人脸识别等。
- 输入缺失分类:在这类任务中,输入向量的每个度量无法保证,学习算法只需要定义一个从输入向量映射到输出类别的函数。当一些输入可能丢失时,学习算法必须学习一组函数,每个函数对应着分类不同缺失输入子集的 x \bm{x} x。有效定义这样一个函数集合的方法是学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。假设采用 n n n个输入变量,则可以获得每个可能的缺失输入集合所需的所有 2 n 2^n 2n个不同的分类函数,但在计算机程序中,仅需要学习一个描述联合概率分布的函数。另外,其它任务也可以推广到输入缺失的情况。
- 回归:在这类任务中,计算机程序需要对给定输入预测数值。学习算法需要输出函数 f : R n → R f:\R^n\rarr\R f:Rn→R。除了返回结果的形式不一样外,它和分类问题是很像的。具体的应用比如投保金额索赔,证券预测等。
- 转录:在这类任务中,机器学习系统观测一些非结构化表示的数据,并转录信息为离散的文本形式。常见应用有字符识别,语音识别等。
- 机器翻译:在这类任务中,输入是种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。通常适用于自然语言。
- 结构化输出:结构化输出任务的输出是向量或者其它包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。这是一个很大的范畴,它包括了很多其它任务,如转录和机器翻译等。具体的应用如语法分析,图像分割,看图说话等。
- 异常检测:在这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常或非典型的个体。常见应用比如信用卡欺诈检测等。
- 合成和采样:在这类任务中,计算机程序生成一些和训练数据相似的新样本。它在媒体应用中非常有用。比如视频处理,语音合成等。
- 缺失值填补:在这类任务中,机器学习算法给定一个新样本 x ∈ R n \bm{x}\in\R^n x∈Rn, x \bm{x} x中某些元素 x i x_i xi缺失,算法必须填补这些缺失信息。
- 去噪:在这类任务中,机器学习算法输入的是干净样本 x ∈ R n \bm{x}\in\R^n x∈Rn经过损坏过程后得到的损坏样本 x ~ ∈ R n \tilde{\bm{x}}\in\R^n x~∈Rn。算法根据损坏后的样本 x ~ \tilde{\bm{x}} x~预测干净的样本 x \bm{x} x,或者更一般的预测条件概率分布 p ( x ∣ x ~ ) p(\bm{x}|\tilde{\bm{x}}) p(x∣x~)。
- 密度估计或概率质量函数估计:在密度估计问题中,机器学习算法学习函数 p model : R n → R p_{\text{model}}:\R^n\rarr\R pmodel:Rn→R,其中 p model ( x ) p_{\text{model}}(\bm{x}) pmodel(x)是样本采样空间的概率密度函数或概率质量函数。大多数任务需要学习算法至少能隐式的捕获观测数据的概率分布结构,而密度估计可以显式的捕获该分布。在实际情况中,密度估计并不能解决所有问题,很多情况下 p ( x ) p(\bm{x}) p(x)是难以计算的。
此外,还有很同类型或其它类型的机器学习任务未在此列举。
1.2、性能度量P
通常,性能度量P是特定于系统执行的任务T而言的,其作用是为了评估完成该任务的机器学习算法的性能。比如分类任务,可以度量准确率和错误率。但是对于密度估计这类任务,度量准确率与错误率没有意义,常的是输出模型在样本上的概率对数的平均值。
另外,会更加关注机器学习算法在未观测数据上的性能如何,因此,要使用测试集来评估系统的性能,将其与训练机器学习系统的训练集分开。
性能度量的选择是比较难的,因为在某些情况下,委有难确定应该度量什么。还有一些情况是知道应该度量什么,但度量它们不太现实。
1.3、经验E
根据学习过程中的不同的经验,机器学习算法可以大致分为无监督和有监督两类算法。本书中的机器学习算法可以被理解为在整个数据集上获取经验。数据集有很多样本组合而成,这些样本也被通个气为数据点。
无监督学习算法训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。在深度学习中,通常要学习数据集的概率分布可将数据集分成相似样本的集合。
监督学习算法训练含有很多特征的数据集,不过数据集的样本都有一个标签。例如常用的有标注的数据集。
大致来说,无监督学习涉及观察随机向量
x
\bf{x}
x的好几个样本,试图显式或隐式的学习出概率分布
p
(
x
)
p(\bf{x})
p(x),或者是该分布的一些有意思的性质;监督学习包含观察随机向量
x
\bf{x}
x及其相关联的值或向量
y
\bf{y}
y,然后从
x
\bf{x}
x预测
y
\bf{y}
y,通常是估计
p
(
y
∣
x
)
p(\textbf{y}|\textbf{x})
p(y∣x)。
监督学习是教员或老师提供目标给机器学习系统,指导其应该做什么;无监督学习中,没有教员或老师,机器学习系统必须学会自己理解数据。
无监督学习有监督学习不是严格定义的术语,两者之间的界限通常是模糊的。很多机器学习算法可以同时用于这两个任务。例如,概率的链式法则表明,对于随机向量
x
∈
R
n
\bf{x}\in\R^n
x∈Rn,联合分布可以分解成
p
(
x
)
=
∏
i
=
1
n
p
(
x
i
∣
x
1
,
…
,
x
i
−
1
)
(5.1)
p(\textbf{x})=\prod_{i=1}^{n}p(\text{x}_i|\text{x}_1,\dots,\text{x}_i-1) \tag{5.1}
p(x)=i=1∏np(xi∣x1,…,xi−1)(5.1)
该分解意味着可以将其拆分成
n
n
n个监督学习问题,来解决表面上的无监督学习
p
(
x
)
p(\bm{x})
p(x)。另外,求解监督学习问题
p
(
y
∣
x
)
p(y|\textbf{x})
p(y∣x)时,也可以使用传统的无监督学习策略学习联合分布
p
(
x
,
y
)
p(\textbf{x},y)
p(x,y),然后推断
p
(
y
∣
x
)
=
p
(
x
,
y
)
∑
y
′
p
(
x
,
y
′
)
(5.2)
p(y|\textbf{x})=\frac{p(\textbf{x},y)}{\sum_{y'}p(\textbf{x},y')} \tag{5.2}
p(y∣x)=∑y′p(x,y′)p(x,y)(5.2)
尽管二者没有严格分类,但确实有助于分类我们研究机器学习算法时遇到的问题。
学习范式的其它变种也是有可能的,如半监督学习,一些样本有监督目标,其它样本没有。或者在多实例学习中,整个集合被标记为是否含有该类样本,但是集合中单独的样本是没有标记的。
有些机器学习算法并不是训练于一个固定的数据集上,如强化学习算法会和环境交互,学习系统的它的训练过程会有反馈回路。
大部分机器学习算法简单地训练于一个数据集上。此时,数据集是样本的集合,样本是特征的集合。
表示数据集的常用方法是设计矩阵。它的每一行包含一个不同的样本,每一列对应不同的特征。设计矩阵的前提是数据集中的每一个样本都能表示成同样维度的向量。当样本是不同维度时,不同表示成
m
m
m行的矩阵,而是表示成
m
m
m个元素的集合
{
x
(
1
)
,
x
(
2
)
,
…
,
x
(
m
)
}
\{\bm{x}^{(1)},\bm{x}^{(2)},\dots,\bm{x}^{(m)}\}
{x(1),x(2),…,x(m)}。这意味着样本向量
x
(
i
)
\bm{x}^{(i)}
x(i)和
x
(
j
)
\bm{x}^{(j)}
x(j)可以有不同的大小 。
在监督学习中,样本包含一个标签和一组特征。通常中处理包含观测特征的设计矩阵
X
\bm{X}
X的时候,也会提供一个标签向量
y
\bm{y}
y,其中
y
i
y_i
yi表示样本
i
i
i的标签。另外,有时标签可能不止一个数,例如语音模型转录句子时,每个句子样本的标签是一个单词序列。
1.4、示例:线性回归
机器学习算法定义为:通过经验以提高计算机程序在某些任务上性能的算法。为了更形象的理解这个定义,引入一个示例:线性回归。
线性回归解决回归问题,目标是建立一个系统,将向量
x
\bm{x}
x作为输入,预测标量
y
∈
R
y\in\R
y∈R作为输出,输出是其输入的线性函数。令
y
^
\hat{y}
y^表示模型预测
y
y
y应该取的值,定义输出为
y
^
=
w
⊤
x
(5.3)
\hat{y}=\bm{w}^\top\bm{x} \tag{5.3}
y^=w⊤x(5.3)
其中,
w
∈
R
n
\bm{w}\in\R^n
w∈Rn是参数向量。
参数是控制系统行为的值。在这种情况下,
w
i
w_i
wi是系数,会和特征
x
i
x_i
xi相乘之后全部相加起来。可以将
w
\bm{w}
w看作一组决定每个特征如何影响预测的权重。
因此,可以定义任务T为:通过输出
y
^
=
w
⊤
x
\hat{y}=\bm{w}^\top\bm{x}
y^=w⊤x从
x
\bm{x}
x预测
y
y
y。
假设有
m
m
m个输入样本组成的设计矩阵,专门用来评估性能。这个样本组成的数据集称为测试集,将输入的设计矩阵记作
X
(
test
)
\bm{X}^{(\text{test})}
X(test),回归目标向量记作
y
(
test
)
\bm{y}^{(\text{test})}
y(test)。
因此,可以定义性能度量P为:计算模型在测试集上的均方误差MSE。如果用
y
^
(
test
)
\hat{\bm{y}}^{(\text{test})}
y^(test)表示模型在测试集上的预测值,那么均方误差表示为
MSE
test
=
1
m
∑
i
(
y
^
(
test
)
−
y
(
test
)
)
i
2
(5.4)
\text{MSE}_{\text{test}}=\frac{1}{m}\sum_i{({\hat{\bm{y}}^{(\text{test})}}-{{\bm{y}}^{(\text{test})}})}_i^2 \tag{5.4}
MSEtest=m1i∑(y^(test)−y(test))i2(5.4)
直观上,当
y
^
(
test
)
=
y
(
test
)
{\hat{\bm{y}}^{(\text{test})}}={{\bm{y}}^{(\text{test})}}
y^(test)=y(test)时,误差降为
0
0
0。同样的
MSE
test
=
1
m
∣
∣
y
^
(
test
)
−
y
(
test
)
∣
∣
2
2
(5.5)
\text{MSE}_{\text{test}}=\frac{1}{m}{\Big|\Big|{\hat{\bm{y}}^{(\text{test})}}-{{\bm{y}}^{(\text{test})}}\Big|\Big|}_2^2 \tag{5.5}
MSEtest=m1
y^(test)−y(test)
22(5.5)
所以当预测值和目标值之间的欧氏距离增加时,误差也会增加。
为了构建一个机器学习算法,需要设计一个算法通过观察训练集
(
X
(
train
)
,
y
(
train
)
)
(\bm{X}^{(\text{train})},\bm{y}^{(\text{train})})
(X(train),y(train))获得经验,并以减少
MSE
test
\text{MSE}_{\text{test}}
MSEtest为目标来改进权重
w
\bm{w}
w。通常可采用最小化训练集上的均方误差,即
MSE
train
\text{MSE}_{\text{train}}
MSEtrain。
最小化
MSE
train
\text{MSE}_{\text{train}}
MSEtrain,可以简单的求解其导数为
0
0
0的情况:
∇
w
MSE
train
=
0
⇒
∇
w
1
m
∣
∣
y
^
(
train
)
−
y
(
train
)
∣
∣
2
2
=
0
⇒
1
m
∇
w
∣
∣
X
(
train
)
w
−
y
(
train
)
∣
∣
2
2
=
0
⇒
∇
w
(
X
(
train
)
w
−
y
(
train
)
)
⊤
(
X
(
train
)
w
−
y
(
train
)
)
=
0
⇒
∇
w
(
w
⊤
X
(
train
)
⊤
X
(
train
)
w
−
2
w
⊤
X
(
train
)
⊤
y
(
train
)
+
y
(
train
)
⊤
y
(
train
)
)
=
0
⇒
2
X
(
train
)
⊤
X
(
train
)
w
−
2
X
(
train
)
⊤
y
(
train
)
=
0
⇒
w
=
(
X
(
train
)
⊤
X
(
train
)
)
−
1
X
(
train
)
⊤
y
(
train
)
(5.12)
\begin{array}{c} &\nabla_{\bm{w}}\text{MSE}_{\text{train}}=0 \\\\ \rArr&\quad\nabla_{\bm{w}}\frac{1}{m}{\Big|\Big|{\hat{\bm{y}}^{(\text{train})}}-{{\bm{y}}^{(\text{train})}}\Big|\Big|}_2^2=0 \\\\ \rArr&\quad\frac{1}{m}\nabla_{\bm{w}}{\Big|\Big|{{\bm{X}}^{(\text{train})}}\bm{w}-{{\bm{y}}^{(\text{train})}}\Big|\Big|}_2^2=0 \\\\ \rArr&\quad\nabla_{\bm{w}}({\bm{X}}^{(\text{train})}\bm{w}-{\bm{y}}^{(\text{train})})^\top({\bm{X}}^{(\text{train})}\bm{w}-{\bm{y}}^{(\text{train})})=0 \\\\ \rArr&\quad\nabla_{\bm{w}}(\bm{w}^\top\bm{X}^{(\text{train})\top}\bm{X}^{(\text{train})}\bm{w}-2\bm{w}^\top\bm{X}^{(\text{train})\top}\bm{y}^{(\text{train})}+\bm{y}^{(\text{train})\top}\bm{y}^{(\text{train})})=0 \\\\ \rArr&2\bm{X}^{(\text{train})\top}\bm{X}^{(\text{train})}\bm{w}-2\bm{X}^{(\text{train})\top}\bm{y}^{(\text{train})}=0 \\\\ \rArr&\quad\bm{w}=(\bm{X}^{(\text{train})\top}\bm{X}^{(\text{train})})^{-1} \bm{X}^{(\text{train})\top}\bm{y}^{(\text{train})} \end{array} \tag{5.12}
⇒⇒⇒⇒⇒⇒∇wMSEtrain=0∇wm1
y^(train)−y(train)
22=0m1∇w
X(train)w−y(train)
22=0∇w(X(train)w−y(train))⊤(X(train)w−y(train))=0∇w(w⊤X(train)⊤X(train)w−2w⊤X(train)⊤y(train)+y(train)⊤y(train))=02X(train)⊤X(train)w−2X(train)⊤y(train)=0w=(X(train)⊤X(train))−1X(train)⊤y(train)(5.12)
通过式5.12给出解的系统方程被称为正规方程,公式5.12构成了一个简单的机器学习算法,如下图所示:
另外需要注意的,术语线性回归通常用来指附加额外参数(截距项
b
b
b)的模型,在这个模型中
y
^
=
w
⊤
x
+
b
(5.13)
\hat{y}=\bm{w}^\top\bm{x}+b \tag{5.13}
y^=w⊤x+b(5.13)
因此,从参数到预测的映射是一个线性函数(式5.3),而从特征到预测的映射是一个仿射函数。如此扩展后,模型预测的曲线仍是一条直线,但没必要从原点经过。
截距项
b
b
b通常被称为仿射变换的偏置参数,命名源自于该变换在没有任何输入时,输出会偏移
b
b
b。但它和统计偏差中指代统计估计算法的某个量的期望估计偏离真实值的意思是不一样的。
2、容量、过拟合和欠拟合
机器学习的主要挑战是算法必须具有良好的泛化能力,即能够在先前未观测到的新输入上表现良好,而不只是在训练集上表现良好。
通常情况下,在训练机器学习模型时,会在训练集上计算一个度量误差,即训练误差。训练的目标是降低训练误差。但是,我们也希望泛化误差(测试误差)也很低。泛化误差被定义为在新输入的误差期望。通常通过度量在测试集样本上的性能来评估泛化误差。
在上一节的线性回归示例中,通过最小化训练误差来训练模型
1
m
(
train
)
∣
∣
X
(
train
)
w
−
y
(
train
)
∣
∣
2
2
(5.14)
\frac{1}{m^{(\text{train})}}{\Big|\Big|{{\bm{X}}^{(\text{train})}}\bm{w}-{{\bm{y}}^{(\text{train})}}\Big|\Big|}_2^2 \tag{5.14}
m(train)1
X(train)w−y(train)
22(5.14)
但是,真正关注的是测试误差
1
m
(
test
)
∣
∣
X
(
test
)
w
−
y
(
test
)
∣
∣
2
2
(z5.1)
\frac{1}{m^{(\text{test})}}{\Big|\Big|{{\bm{X}}^{(\text{test})}}\bm{w}-{{\bm{y}}^{(\text{test})}}\Big|\Big|}_2^2 \tag{z5.1}
m(test)1
X(test)w−y(test)
22(z5.1)
通过概率框架和独立同分布假设(每个数据集中的样本都是彼此相互独立的,并且训练集和测试集是由同一个分布生成的)可以从数学上研究训练误差和测试误差之间的关系。它们的直接联系是:随机模型训练误差的期望和该醋测试误差的期望是一样的。
在实际使用机器学习算法是地,先采样得到训练集,然后优化参数来降低训练误差,然后采样得到测试集。在这个过程中,测试误差的期望会大于或等于训练误差的期望。以下两个因素决定了机器学习算法效果是否好,它们对应了机器学习的两个主要挑战:欠拟合(underfitting)和过拟合(overfitting):
(1)降低训练误差。
(2)缩小训练误差和测试误差的差距。
通过调整模型的容量(capacity),可以控制模型是否偏向于过拟合或欠拟合。模型的容量是指其拟合各种函数的能力。通俗的讲,容量低的模型可能很难拟合训练集。容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。
一种控制训练算法容量的方法是选择假设空间,即学习算法可以选择作为解决方案的函数集。例如,线性回归算法将关于其输入的所有线性函数作为假设空间。广义线性回归的假设空间包括多项式函数,而非仅有线性函数。这样做就增加了模型的容量。
当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数据的数量时,算法效果通常会最佳。容量不足的模型不能解决复杂任务。容量高的模型能够解决复杂的任务,但是当其容量高于任务所需时,有可能会过拟合。
比如下图中的示例
一次多项式提供了我们已经熟悉的线性回归模型,其预测如下:
y ^ = b + w x (5.15) \hat{y}=b+wx \tag{5.15} y^=b+wx(5.15)
通过引入 x 2 x^2 x2作为线性回归模型的另一个特征,我们能够学习关于 x x x的二次函数模型:
y ^ = b + w _ 1 x + w _ 2 x 2 (5.16) \hat{y}=b+w\_1x+w\_2x^2 \tag{5.16} y^=b+w_1x+w_2x2(5.16)
尽管该模型是输入的二次函数,但输出仍是参数的线性函数。因此我们仍然可以用正规方程得到模型的闭解。我们可以继续添加 x x x的更高幂作为额外特征,例如下面的9次多项式:
y ^ = b + ∑ _ i = 1 9 w _ i x i (5.17) \hat{y}=b+\sum\_{i=1}^{9}w\_ix^i \tag{5.17} y^=b+∑_i=19w_ixi(5.17)
线性函数无法刻画真实函数的曲率,所以欠拟合。9次函数能够表示正确的函数,但是因为训练参数比训练样本还多,所以它也能够表示无限多个刚好穿越训练样本点的很多其他函数。我们不太可能从这很多不同的解中选出一个泛化良好的。在这个问题中,二次模型非常符合任务的真实结构,因此它可以很好地泛化到新数据上。
除去改变假设空间(改变特征数量和与特征对应的新参数)的方式,还有很多方法可以改变模型的容量。容量不仅仅取决于模型的选择。
在训练过程中(调整参数来降低训练目标),模型规定了学习算法可以从哪些函数族中选择函数。这被称为模型的表示容量。但事实上选择最优函数是非常困难的,这意味着学习算法的有效容量可能小于模型集的表示容量。
提高机器学习模型泛化能力的一个广泛被认可的原则是奥卡姆剃刀原则,即在同样能够解释已知观测现象的假设中,应该选择“最简单”的那一个。这个原则被统计学习理论形式化并精确化,其中最有名的量化模型容量的方法是Vapnik-Chervonenkis维度,简称VC维。VC维可以度量二元分类器的容量。VC维定义为分类器能够分类的训练样本的最大数目。
统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降。这些边界为机器学习算法可以有效解决问题提供了理论验证,但是它们很少应用于实际中的深度学习算法。一部分原因是边界太松,另一部分原因是很难确定深度学习算法的容量。
虽然更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然需要选择一个充分复杂的假设空间以达到更低的训练误差。通常,当模型容量上升时,训练误差会下降,直到其渐近最小可能误差(假设误差度量有最小值)。特别的是,泛化误差是一个关于模型容量的U形曲线函数。如下所示:
为了分析任意高容量的最极端情况,需要引入非参数模型的概念。参数模型学习一个由参数向量描述的函数,在观测到新数据前,这个参数向量的分量个数是有限且固定的。而非参数模型没有这些限制。有时,非参数模型仅是一些不能实际实现的理论抽象(比如搜索所有可能概率分布的算法)。然而,我们也可以设计一些实用的非参数模型,使它们的复杂度和训练集大小有关。
非参数模型的一个示例是最近邻回归。
不像线性回归有固定长度的向量作为权重,最近邻回归模型存储了训练集中所有的 X \bm{X} X和 y \bm{y} y。当需要为测试点 x \bm{x} x分类时,模型会查询训练集中离该点最近的几个点,并返回相关的回归目标。在最近向量不唯一的情况下,如果允许算法对所有离测试点 x \bm{x} x最近的点 X i , : \bm{X}_{i,:} Xi,:关联的 y i y_i yi求平均,那么该算法会在任意回归数据集上达到最小可能的训练误差(如果存在两个相同的输入对应不同的输出,那么训练误差可能会大于零)。
也可以将参数学习算法嵌入另一个增加参数数目的算法来创建非参数学习算法。例如这样一个算法,外层循环调整多项式的次数,内层循环通过线性回归学习模型。
理想的模型是直接知道生成数据的真实概率分布的预测模型。然而即使是这样的模型仍然会在很多问题上发生一些错误,这是因为分布中仍然会有一些噪声。知道真实分布
p
(
x
,
y
)
p(\bm{x},y)
p(x,y)的预测模型在预测时出现的误差被称为贝叶斯误差。
训练误差和泛化误差会随训练集的大小发生变化。泛化误差的期望从不会因训练样本数目的增加而增加。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。任何模型容量小于最优容量的固定参数模型在训练数据持续增加时会渐近到大于贝叶斯误差的误差值(在小批量数据时可能会过拟合导致训练误差非常小)。值得注意的是,具有最优容量的模型仍然有可能在训练误差和泛化误差之间存在很大的差距。在这种情况下,我们可以通过收集更多的训练样本来缩小差距。如下图所示:
2.1、没有免费午餐定理
从有限个训练样本中推断出一个规则能够很好的泛化,使其可以描述集合中所有样本。这在逻辑上看来是不合理的。但是,机器学习算法仅通过概率法则就可以避免这个问题,而无使用纯逻辑推理需整个确定性的法则。机器学习可以确保找到一个在关注的大多数样本上可能正确的规则。
但是,即使这样也不能解决全部问题。机器学习的没有免费午餐定理表明,在所有可能的数据生成分布上求平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。换言之,在某种意义上,没有一个机器学习算法总是比其他的要好。我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。
然而,这些结论仅在我们考虑所有可能的数据生成分布时才成立。如果对实际应用中遇到的概率分布进行假设,就可以设计出在这些分布上效果良好的学习算法。
因此,机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法,而是理解什么样的分布与人工智能眼中的“真实世界”相关,什么样的学习算法在我们关注的数据生成分布上效果最好。
2.2、正则化
没有免费午餐定理说明需要在特定任务上专门设计性能良好的机器学习算法。可以通过建立一组学习算法的偏好来达到这个要求。当这些偏好和希望算法解决的学习问题相吻合时,性能就会更好。
目前已经确定可以通过增加或减少学习算法可选假设空间的函数来增加或减少模型的表示容量,从而修改学习算法。然则,算法的效果不仅很大程度上受影响于假设空间的函数数量,也取决于这些函数的具体形式。因此,可以通过两种方式控制算法的性能:一是允许使用的函数种类,二是这些函数的数量。
在假设空间中的某个解决方案,可以建立一组偏好使其中一个学习算法比其它学习算法拥有更高的优先权。更加常用的是,可以通过给代价函数添加被称为正则化项的惩罚来正则化一个学习函数
f
(
x
;
θ
)
f(\bm{x;\theta})
f(x;θ)的模型。
线性回归算法的正则化示例
可以加入权重衰减来修改线性回归的训练标准,其正则化项是 Ω ( w ) = w ⊤ w \Omega(\bm{w})=\bm{w{^\top}w} Ω(w)=w⊤w。带权重衰减的线性回归最小化训练集上的均方误差和正则项的和 J ( w ) J(\bm{w}) J(w),它表示更加偏好于平方 L 2 L^2 L2范数较小的权重。具体如下:
J ( w ) = MSE _ train + λ w ⊤ w (5.18) J(\bm{w})=\text{MSE}\_{\text{train}}+\lambda\bm{w{^\top}w} \tag{5.18} J(w)=MSE_train+λw⊤w(5.18)
其中, λ \lambda λ是提前挑选的值,控制我们偏好小范数权重的程度。当 λ = 0 \lambda=0 λ=0时,没有任何偏好。越大的 λ \lambda λ偏好范数越小的权重。最小化 J ( w ) J(\bm{w}) J(w)可以看作是拟合训练数据和偏好小权重范数之间的权衡。这会使得解决方案的斜率较小,或是将权重放在较少的特征上。如下图所示,训练具有不同 λ \lambda λ值的高次多项式回归模型,来举例说明如何通过权重衰减控制模型欠拟合或过拟合的趋势:
表达对某一函数的偏好而不是另一个函数是比增减假设空间的成员函数更一般的控制模型容量的方法。可以将去掉假设空间中的某个函数看作是对无限不赞成这个函数的偏好。
除去上面的示例,还有很多其他方法隐式或显式地表示对不同解的偏好。总而言之,这些不同的方法都被称为正则化(regularization)。正则化是指我们修改学习算法,使其降低泛化误差而非训练误差。正则化是机器学习领域的中心问题之一,只有优化能够与其重要性相媲。
没有免费午餐定理已经清楚地阐述了没有最优的学习算法,特别地,没有最优的正则化形式。因此,必须挑选一个非常适合于所要解决的任务的正则形式。深度学习中普遍的理念是大量任务(例如所有人类能做的智能任务)也许都可以使用非常通用的正则化形式来有效解决。