python机器学习——正则化

范数正则化理论及具体案例操作

  • 1、正则化
    • (1)什么是正则化
    • (2)为什么要进行正则化
    • (3)正则化原理
  • 2、范数
    • (1)L0 范数
    • (2)L1 范数
    • (3)L2范数
    • (4)L1 和 L2 的差别
  • 参考文献

1、正则化

(1)什么是正则化

正则化( Regularization )就是对最小化经验误差函数上加正则项约束,这样的约束可以解释为先验知识(有时候正则化参数等价于对参数引入先验分布)。约束有引导作用,在优化误差函数的时候倾向于选择满足约束的梯度减少的方向,使最终的解倾向于符合先验知识(如一般的 l-norm 先验,表示原问题更可能是比较简单的,这样的优化倾向于产生参数值量级小的解,一般对应于稀疏参数的平滑解)。

(2)为什么要进行正则化

正则化的目的在于提高模型在未知测试数据上的泛化能力,避免参数过拟合。

监督机器学习问题就是在正则化参数的同时最小化误差。最小化误差是为了让模型更好地拟合训练数据,而正则化参数是防止模型过分拟合训练数据。因为参数太多,会导致模型复杂度上升,容易过拟合,也就是训练误差会很小,但训练误差小并不是我们的最终目标,我们的目标是希望模型的测试误差小,也就是能准确预测新的样本,所以,我们需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能(也就是测试误差也小),而模型“简单”就是通过损失函数添加正则项来实现的。

另外,正则项的使用还可以约束我们的模型的特性。这样就可以将人对这个模型的先验知识融入到模型的学习当中(从贝叶斯估计的角度来看,正则化项对应于模型的先验概率),强行地让学习到的模型具有人想要的特性,例如稀疏( sparsity )、低秩、平滑等等。使得机器能更快的学习相应的任务。

同时,正则化符合奥卡姆剃刀( Occam’s razor )原理:在所有可能选择的模型中,我们应该选择能够很好地解释已知数据并且十分简单的模型。

还有个说法就是,正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项( regularizer )或惩罚项( penalty term )。

(3)正则化原理

一般来说,监督学习可以看做最小化下面的目标函数:

其中,第一项 L(yi,f(xi;w)) 衡量模型(分类或者回归)对第 i 个样本的预测值 f(xi;w) 和真实的标签 yi 之间的误差,我们要求这一项最小,也就是要求模型尽量拟合我们的训练数据。但不仅要保证训练误差最小,我们更希望模型测试误差小,所以需要加上第二项,也就是对参数 w 的规则化函数 Ω(w) 去约束我们的模型尽量的简单。

规则化函数 Ω(w) 也有很多种选择,一般是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。比如,规则化项可以是模型参数向量的范数。然而,不同的选择对参数 w 的约束不同,取得的效果也不同,常见的范数有:零范数、一范数、二范数、迹范数、Frobenius 范数和核范数等等。

2、范数

我们知道距离的定义是一个宽泛的概念,只要满足非负、自反、三角不等式就可以称之为距离。范数是一种强化了的距离概念,它在定义上比距离多了一条数乘的运算法则。有时候为了便于理解,我们可以把范数当作距离来理解。

在数学上,范数包括向量范数和矩阵范数,向量范数表征向量空间中向量的大小,矩阵范数表征矩阵引起变化的大小。一种非严密的解释就是,对应向量范数,向量空间中的向量都是有大小的,这个大小如何度量,就是用范数来度量的,不同的范数都可以来度量这个大小,就好比米和尺都可以来度量远近一样;对于矩阵范数,学过线性代数,我们知道,通过运算 AX=B,可以将向量 X 变化为 B,矩阵范数就是来度量这个变化大小的。

(1)L0 范数

L0 范数是指向量中非 0 的元素的个数。如果我们用 L0 范数来规则化一个参数矩阵 W 的话,就是希望 W 的大部分元素都是 0 ,换句话说,让参数 W 是稀疏的。

(2)L1 范数

L1 范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”( Lasso regularization ,拉索)。

在这里插入图片描述
python机器学习——正则化_第1张图片
为什么 L1 范数会使权值稀疏?这是因为任何的规则化算子,如果其在 Wi = 0 的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。但 W 的 L1 范数是绝对值,|w| 在 w = 0 处是不可微,但这还是不够直观。

注意:L0 范数很难优化求解( NP 难问题),另外 L1 范数是 L0 范数的最优凸近似,而且它比 L0 范数要容易优化求解。所以一般更倾向于使用 L1 范数。

python机器学习——正则化_第2张图片

总结:L1 范数和 L0 范数可以实现稀疏,L1 因具有比 L0 更好的优化求解特性而被广泛应用。

参数稀疏( Sparse )的好处:

① 特征选择( Feature Selection ):大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi 的大部分元素(也就是特征)都是和最终的输出 yi 是没有关系或者是不提供任何信息的,在最小化目标函数的时候考虑 xi 这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确 yi 的预测。稀疏规则化算子的引入就是为了完成特征自动选择,它会学习去掉这些没有信息的特征,也就是把这些特征对应的权重压缩为 0 。

② 可解释性( Interpretability ):稀疏使模型更容易解释。稀疏化后的特征提供的信息是巨大的、决策性的,也更有利于分析。

(3)L2范数

L2 范数( ||W||2 )是指向量各元素的平方和然后求平方根。可以使得 W 的每个元素都很小,都接近于 0 ,但与 L1 范数不同,它不会让它等于 0 ,而是接近于 0 。它有两个美称,在回归里面它的回归被称为“岭回归”( Ridge Regression ),有人也叫它“权值衰减 weight decay ”。
在这里插入图片描述
python机器学习——正则化_第3张图片
L2 正则项起到使得参数 w 变小加剧的效果,其强大功效是改善机器学习里面一个非常重要的问题:过拟合。这是因为更小的参数值 w 意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。还有就是 L2 范数有助于处理 condition number 不好的情况下矩阵求逆很困难的问题(就是岭回归)。例如下图所示:
python机器学习——正则化_第4张图片
上面的图是线性回归,下面的图是 Logistic 回归,也可以说是分类的情况。从左到右分别是欠拟合( underfitting ,也称 High-bias )、合适的拟合和过拟合( overfitting ,也称 High variance )三种情况。可以看到,如果模型复杂(可以拟合任意的复杂函数),它可以让我们的模型拟合所有的数据点,也就是基本上没有误差。对于回归来说,就是我们的函数曲线通过了所有的数据点,如上图右。对分类来说,就是我们的函数曲线要把所有的数据点都分类正确,如下图右。这两种情况很明显过拟合了:python机器学习——正则化_第5张图片
所以通过L2范数,我们实现了对模型空间的限制,从而在一定程度上避免了过拟合。

L2范数的好处:

① 从学习理论的角度来说,L2范数可以防止过拟合,提升模型的泛化能力。

L2 正则化就是在代价函数后面再加上一个正则化项:在这里插入图片描述
C0 代表原始的代价函数,后面那一项就是 L2 正则化项,它是这样来的:所有参数 w 的平方的和,除以训练集的样本大小 n。λ就是正则项系数,权衡正则项与 C0 项的比重。另外还有一个系数 1/2 ,1/2 经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个 2,与1/2相乘刚好抵消。
L2 正则化项是怎么避免 overfitting 的呢?我们推导一下看看,先求导:
python机器学习——正则化_第6张图片
可以发现 L2 正则化项对 b 的更新没有影响,但是对于 w 的更新有影响:

python机器学习——正则化_第7张图片
对于基于 mini-batch 的随机梯度下降,w 和 b 更新的公式跟上面给出的有点不同:在这里插入图片描述
在这里插入图片描述
对比上面 w 的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以 η 再除以 m ,m 是一个mini-batch中样本的个数。

人们普遍认为:更小的权值 w ,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀)。而在实际应用中,也验证了这一点,L2 正则化的效果往往好于未经正则化的效果。

② 从优化或数值计算的角度来说,L2范数有助于处理 condition number 不好的情况下矩阵求逆很困难的问题。

其中,condition number 是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,衡量的是输入发生微小变化的时候,输出会发生多大的变化,也就是系统对微小变化的敏感度。如果一个矩阵的 condition number 在 1 附近,那么它就是 well-conditioned 的,如果远大于 1,那么它就是 ill-conditioned 的,如果一个系统是 ill-conditioned 的(对于一个 ill-condition 的系统,输入稍微改变输出就发生很大的改变)。

如果方阵 A 是非奇异的,那么 A 的 condition number 定义为:在这里插入图片描述
经过比较简单的证明,对于 AX=b ,我们可以得到以下的结论:
在这里插入图片描述
也就是我们的解 x 的相对变化和 A 或者 b 的相对变化是有像上面那样的关系的,其中 k(A) 的值就相当于倍率,相当于 x 变化的界。

因为目标函数如果是二次的,对于线性回归来说,那实际上是有解析解的,求导并令导数等于零即可得到最优解为:在这里插入图片描述
然而,如果当我们的样本 X 的数目比每个样本的维度还要小的时候,矩阵 X T X X^TX XTX 将会不是满秩的,也就是 X T X X^TX XTX 会变得不可逆,所以 w* 就没办法直接计算出来了。或者更确切地说,将会有无穷多个解(因为我们方程组的个数小于未知数的个数)。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们过拟合了。

但如果加上 L2 规则项,就变成了下面这种情况,就可以直接求逆了:

在这里插入图片描述
注意:要得到这个解,我们通常并不直接求矩阵的逆,而是通过解线性方程组的方式(例如高斯消元法)来计算。考虑没有规则项的时候,也就是 λ=0 的情况,如果矩阵 XTX 的 condition number 很大的话,解线性方程组就会在数值上相当不稳定,而这个规则项的引入则可以改善 condition number 。

另外,如果使用迭代优化的算法,condition number 太大仍然会导致问题:它会拖慢迭代的收敛速度,而规则项从优化的角度来看,实际上是将目标函数变成 λ-strongly convex(λ 强凸)的了。

当 f 满足:在这里插入图片描述
称 f 为 λ-stronglyconvex 函数,其中参数 λ>0 。当 λ=0 时退回到普通 convex 函数的定义。

直观来讲,convex 性质是指函数曲线位于该点处的切线,也就是线性近似之上,而 strongly convex 则进一步要求位于该处的一个二次函数上方,也就是说要求函数不要太“平坦”而是可以保证有一定的“向上弯曲”的趋势。如图:python机器学习——正则化_第8张图片
取最优解 w* 的地方,如果我们的函数 f(w),见左图,也就是红色实线的函数,都会位于蓝色虚线的那根二次函数之上,这样就算 wt 和 w* 离的比较近的时候,f(wt) 和 f(w*) 的值差别较大,也就是会保证在我们的最优解 w* 附近的时候,还存在较大的梯度值,这样我们才可以在比较少的迭代次数内达到 w*。但对于右图,红色的函数 f(w) 只约束在一个线性的蓝色虚线之上,假设是如右图的很不幸的情况(非常平坦),那在 wt 还离我们的最优点 w* 很远的时候,我们的近似梯度 (f(wt)-f(w*))/(wt-w*) 就已经非常小了,在 wt 处的近似梯度 ∂f/∂w 就更小了,这样通过梯度下降 wt+1=wt-α*(∂f/∂w),我们得到的结果就是 w 的变化非常缓慢,像蜗牛一样,非常缓慢的向我们的最优点 w* 爬动,那在有限的迭代时间内,它离我们的最优点还是很远。

如果要获得 strongly convex 怎么做?最简单的就是往里面加入一项 (α/2)*||w||^2 。

呃,讲个 strongly convex 花了那么多的篇幅。实际上,在梯度下降中,目标函数收敛速率的上界实际上是和矩阵 X T X X^TX XTX 的 condition number 有关, X T X X^TX XTX 的 condition number 越小,上界就越小,也就是收敛速度会越快。

总结:L2 范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。

(4)L1 和 L2 的差别

① 下降速度:

L1 就是按绝对值函数的“坡”下降的,而 L2 是按二次函数的“坡”下降。所以实际上在 0 附近,L1 的下降速度比 L2 的下降速度要快。所以会非常快得降到 0 。如下图:python机器学习——正则化_第9张图片
② 模型空间的限制:

实际上,对于 L1 和 L2 规则化的代价函数来说,我们可以写成以下形式:

python机器学习——正则化_第10张图片
也就是说,我们将模型空间限制在 w 的一个 L1-ball 中。为了便于可视化,我们考虑两维的情况,在 ( w1 , w2 ) 平面上可以画出目标函数的等高线,而约束条件则成为平面上半径为 C 的一个 norm ball 。等高线与 norm ball 首次相交的地方就是最优解:python机器学习——正则化_第11张图片
可以看到,L1-ball 与 L2-ball 的不同就在于 L1 在和每个坐标轴相交的地方都有“角”出现,而目标函数的测地线除非位置摆得非常好,大部分时候都会在角的地方相交。注意到在角的位置就会产生稀疏性,例如图中的相交点就有 w1=0 ,而更高维的时候除了角点以外,还有很多边的轮廓也是既有很大的概率成为第一次相交的地方,又会产生稀疏性。

相比之下,L2-ball 就没有这样的性质,因为没有角,所以第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了。这就从直观上来解释了为什么 L1-regularization 能产生稀疏性,而 L2-regularization 不行了。

总结:L1 会趋向于产生少量的特征,而其他的特征都是 0 ,而 L2 会选择更多的特征,这些特征的权重都会接近于 0 。Lasso 在特征选择时候非常有用,而 Ridge 就只是一种正则化而已。

参考文献

[1]吴恩达的机器学习课程

你可能感兴趣的:(python机器学习及实践,机器学习)