机器学习基础:从入门到求职
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 模型复杂度度量

2.2.1 偏差与方差

偏差—方差分解是解释学习模型泛化能力的一种重要工具。

对训练集T中的测试样本x,设y为x的真实结果,为x的观测结果,观测结果与真实结果之间的观测误差为,fT(x)为在训练集T上学得模型f对x的预测输出,则:

● 噪声的方差为

● 模型在训练集T上预测期望为

● 模型在训练集T上预测方差为

● 模型在训练集T上预测偏差为

由上可得模型在训练集T上泛化误差期望为

从上可知,模型的泛化误差可以分解为偏差+方差+噪声,其中:

● 偏差bias2度量了学习算法的预测期望与真实结果y的偏离程度,即刻画了算法本身的拟合能力。

● 方差var(x)度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。

● 噪声var(∈)表达了当前任务上任何学习算法所能达到的期望泛化误差下界,即刻画了学习问题本身的难度。

偏差—方差分解说明,泛化性能是由所用模型的能力、数据的充分性及学习任务本身的难度共同决定的。给定学习任务,为了取得好的预测性能,则需使模型偏差较小;而为了能够充分利用数据,则需使方差较小,如图2-4所示。

图2-4 偏差—方差分解说明

● 圆心为完美预测的模型,点代表某个模型的学习结果(离靶心越远,准确率越低)。

● Low Bias表示离圆心近,High Bias表示离圆心远。

● High Variance表示学习结果分散,Low Variance表示学习结果集中。

一般来说,偏差和方差是有冲突的,偏差随着模型复杂度的增加而降低,而方差随着模型复杂度的增加而增加,如图2-5所示。

图2-5 偏差、方差与模型复杂度的关系

方差和偏差加起来最优的点就是模型错误率最小的点,对应的位置就是最佳模型复杂度。

2.2.2 过拟合与正则化

1.过拟合与欠拟合

我们把模型的实际预测输出与样本的真实输出之间的差异称为“误差”;把模型在训练集上的误差称为“训练误差”或“经验误差”;把模型在新样本上的误差称为“测试误差”或“泛化误差”。很明显,我们最终希望得到泛化误差小的学习器,但我们事先并不知道新样本是什么样的,所以只能先努力使经验误差最小化,如图2-6所示。

过拟合是指模型对已知数据(即训练集中的数据)预测得很好,但是对未知数据(即测试集数据)预测得很差的现象。举一个简单的例子来说明,如图2-7所示。

图2-6 训练误差、测试误差与模型复杂度的关系

图2-7 模型过拟合与欠拟合

假设我们现在要训练一个模型来识别树叶,给定的数据集是图2-7左图中的两片叶子,则图2-7右图中上下两种情况可分别形象地表示为过拟合现象和欠拟合现象。

(1)过拟合现象

左边两片树叶的共同点是都有锯齿,所以我们的模型完全记忆下了这一特征,以为树叶一定是锯齿状的,结果将右上图中的叶子判别为不是树叶,因为该叶子没有锯齿特征。

(2)欠拟合现象

左边两片树叶都是绿色的,我们的模型学习不到位,将绿色这一粗略特征作为树叶的充分必要条件,因此将图2-7右图中的一棵绿树判别为树叶。

造成过拟合的原因如下:

● 样本的特征数量较多而训练样本数目较少。

● 样本噪声过大。

● 模型参数太多,复杂度过高。

解决过拟合的方法如下:

● 获取额外数据进行交叉验证。

● 重新清洗数据。

● 加入正则化项。

2.经验风险与结构风险

一般来说,机器学习模型学习过程采用的策略就是使损失函数最小化,这其实就是一个最小化误差的过程。也就是说,最小化误差可通过最小化损失函数达成,这个损失我们称之为“经验损失”。

规则化模型参数的目标是防止模型过拟合,这个可通过限制模型的复杂度来达成。根据奥卡姆剃刀(Occam's Razor)原理:在模型能够较好地匹配已知数据的前提下,模型越简单越好。而模型的“简单”程度可通过模型的参数情况来度量,所以一般采用在经验损失的基础上加上一项关于模型参数复杂度的规则化函数J(w)来平衡。加上约束项的模型我们称之为“结构风险”,至此,我们的目标由原来的最小化经验损失变成最小化结构损失,即

其中,第一项就是经验风险函数,一般由前面提到的各种损失函数组成;第二项J(w)称为正则化函数,一般是一个关于模型待求权重向量w的函数,其值随模型复杂度单调递增。

所以,正则化函数项的作用是选择经验风险与模型复杂度同时较小的模型,对应结构风险最小化。

3.正则化

和经验损失函数一样,正则化函数也有很多种选择,不同的选择对权重向量w的约束不同,取得的效果也不同,常用的有L0范数、L1范数和L2范数三种。

(1)L0范数

权重向量w的p范数的定义为

这里,表示的是一个含有N个特征的样本向量,而w=(w1,w2,…,wN)表示的是与样本向量N个特征相对应的特征权重向量。

L0范数的物理意义可以理解为向量中非0元素的个数。如果我们用L0范数来规则化权重向量w,就是希望w中的大部分元素都是0;换句话说,就是让权重向量w是稀疏的。

这里解释一下为什么我们想要稀疏。

稀疏其实能够实现特征的自动选择。在训练我们的机器学习模型时,为了获得较小的训练误差,我们可能会利用xi中的每一个特征,但实际上,这全部特征中,有一些特征并不重要,如果把这样一部分并不重要的特征全部加入模型构建,反而会干扰对样本xi结果的预测。针对这一事实,我们引入了稀疏规则化算子,它会学习怎样去掉这些没有信息的特征(即把这些特征对应的权重系数Wj置为0)。

实际中,我们并不使用L0范数,而是用L1范数去代替。主要原因是:一方面,L0范数是个NP问题,很难优化求解;另一方面,L1范数其实是L0范数的最优凸近似,而且它比L0范数要容易优化求解得多。一句话总结就是:L0范数和L1范数都可以实现稀疏,但L1具有比L0更好的优化求解特性,所以大家就把目光转向了L1范数。

(2)L1范数

L1范数是指向量中各个元素绝对值之和,即

为什么L1范数也会使权重稀疏呢?举个例子说明。

假设原来的风险函数为L0,现在加一个L1正则化项,变为结构风险函数L,即

L=L0+|w|

对w中的各个元素wj,j=1,2,…,N依次求偏导,得:

所以,根据梯度下降法,w的权重更新公式为

效果:

当wj为正时,每次更新时相较于不加正则化项会使wj变小。

当wj为负时,每次更新时相较于不加正则化项会使wj变大。

所以整体的效果就是让wj尽量往0处靠近,使第j个特征对应的权重尽可能为0,这里j=1,2,…,N。

注意:上面没有提到一个问题,就是当wj等于0时,|wj|是不可导的,这时候我们只能按照原始的未经正则化的方法更新wj,即去掉sign(wj)这一项;所以我们可以规定sign(0)=0(即在编程的时候,令sign(wj=0)=0,sign(wj>0)=1,sign(wj<0)=−1),这样就可以把wj=0的情况也统一进来了。

(3)L2范数

除了L1范数,还有一种更受欢迎的正则化范数,那就是L2范数||w||2。L2范数是指向量各元素的平方和的开方,即

与L1正则类似,加L2正则后的结构损失变为

对w中的各个元素wj,j=1,2,…,N,依次求偏导,得:

根据梯度下降法,wj的权重更新公式为

效果:

与没有加正则化项相比,在添加了L2正则后,第j个特征对应权重wj由原来的wj变成了(1−η)wj;由于η都是正数,所以1−η≤1,因此它的效果就是减小wj,这就是所谓的权重衰减。