前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【AI】浅谈使用正则化防止过拟合(下)

【AI】浅谈使用正则化防止过拟合(下)

作者头像
sidiot
发布2023-08-30 14:36:06
2870
发布2023-08-30 14:36:06
举报
文章被收录于专栏:技术大杂烩技术大杂烩

前言

对于机器学习问题,我们最常遇到的一个问题便是过拟合。在对已知的数据集合进行学习的时候,我们选择适应度最好的模型最为最终的结果。虽然我们选择的模型能够很好的解释训练数据集合,但却不一定能够很好的解释测试数据或者其他数据,也就是说这个模型过于精细的刻画了训练数据,对于测试数据或者其他新的数据泛化能力不强。

因此,我们需要通过正则化的方法来防止过拟合,接下来跟博主一起来了解一下吧。

在上篇博文 【AI】浅谈使用正则化防止过拟合(上) 中讲述了过拟合产生的原因,以及简单的描述了一下正则化是如何解决过拟合的,接下来将详细展开讲述正则化及权重减少;

正则化 (Regularization)

机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作`$ℓ1−norm 和

ℓ2−norm$`,中文称作 L1 正则化 和 L2 正则化,或者 L1 范数 和 L2 范数

最常用的范数就是 p−范数p-范数p−范数,即一般范数 Lp​,若 x=x1,x2,...,xnT,那么

当 p 取 1,2 的时候分别是以下最简单的情形:

分别几个范数表示:

  • L0:指向量中非0的元素的个数;
  • L1:指向量中各个元素绝对值之和;
  • L2:指向量各元素的平方和的平方根;

用代码来简单表示一下 L1,L2:

代码语言:javascript
复制
import torch

u = torch.tensor([3.0, -4.0])

# L1
torch.abs(u).sum()
# tensor(5.)

# L2
torch.norm(u)
# tensor(7.)

L1 正则化和 L2 正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用 L1 正则化的模型建叫做 Lasso 回归,使用 L2 正则化的模型叫做 Ridge 回归(岭回归)。

下面是 Python 中 Lasso 回归的损失函数,式中加号后面一项 `$α∣∣w∣∣

1

$` 即为 L1 正则化项。

下面是 Python 中 Ridge 回归的损失函数,式中加号后面一项 `$α∣∣w∣∣

2

2$`​ 即为 L2 正则化项。

一般回归分析中 w 表示特征的系数,从上式可以看到正则化项是对系数做了处理(限制)。

L1 正则化和 L2 正则化的说明如下:

  • L1 正则化是指权值向量 w中各个元素的绝对值之和,通常表示为 $∣∣w∣∣ 1 ​$
  • L2 正则化是指权值向量 w 中各个元素的平方和然后再求平方根(可以看到 Ridge 回归的 L2 正则化项有平方符号),通常表示为 $∣∣w∣∣ 2$

一般都会在正则化项之前添加一个系数,Python 的机器学习包 sklearn 中用 α 表示,一些文章也用 λ表示,这个系数需要用户指定。

L1 正则化和 L2 正则化的作用:

  • L1 正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;
  • L2 正则化可以防止模型过拟合(overfitting),一定程度上,L1 也可以防止过拟合;

深入理解

L1 正则化

假设有如下带 L1 正则化 的损失函数:

其中 J0​ 是原始的损失函数,加号后面的一项是 L1 正则化项,α 是正则化系数。注意到 L1 正则化是权值的绝对值之和,J 是带有绝对值符号的函数,因此 J 是不完全可微的。机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数 J0 后添加 L1 正则化项时,相当于对 J0​ 做了一个约束。

令:

则 J=J0+L,此时我们的任务变成 在 L 约束下求出 J0​ 取最小值的时候的解考虑二维的情况,即只有两个权值 w^1 和 w^2,此时 `$L=∣w

1

∣+∣w

2

∣$。对于梯度下降法,求解 J0​ 的过程可以画出等值线,同时 **L1 正则化** 的函数 L也可以在$∣∣w

1

∣$,$∣w

2

∣$`的二维平面上画出来。如下图:

图中等值线是 J0 的等值线,黑色方形是 L函数的图形。`$L=∣w

1

∣+∣w

2

∣$`,这个函数画出来就是一个方框。

在图中,当 J0​ 等值线与 L 图形首次相交的地方就是最优解。上图中 J0 与 L 在 L 的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是 `$(w

1

,w

2

)=(0,w)$`可以直观想象,因为 L 函数有很多『突出的角』(二维情况下四个,多维情况下更多),J0与这些角接触的机率会远大于与 其它部位接触的机率(这是很直觉的想象,突出的角比直线的边离等值线更近些),而在这些角上,会有很多权值等于0(因为角就在坐标轴上),这就是为什么 L1 正则化可以产生稀疏模型,进而可以用于特征选择

而正则化前面的系数 α,可以控制 L 图形的大小。α 越小,L 的图形越大(上图中的黑色方框);α越大,L 的图形就越小,可以小到黑色方框只超出原点范围一点点,这时最优点的值`$(w

1

,w

2

)=(0,w)$` 中的 w 可以取到很小的值。

L2 正则化

类似地,假设有如下带 L2 正则化的损失函数:

同样可以画出他们在二维平面上的图形,如下:

二维平面下 L2 正则化的函数图形是个圆(绝对值的平方和,是个圆),与方形相比,被磨去了棱角。因此 J0​ 与 L 相交时使得 `$w

1

$**或**$w

2$` 等于零的机率小了许多(这个也是一个很直观的想象) ,这就是为什么 L2 正则化不具有稀疏性的原因,因为不太可能出现多数 w都为0的情况。

L2 正则化可以获得值很小的参数

以线性回归中的梯度下降法为例,使用 Andrew Ng 机器学习的参数表示方法。假设要求解的参数为 θ,hθ(x) 是我们的假设函数。线性回归一般使用平方差损失函数。单个样本的平方差是 `$(h

θ

(x)−y)

2

$`,如果考虑所有样本,损失函数是对每个样本的平方差求和,假设有 m个样本,线性回归的代价函数如下,为了后续处理方便,乘以一个常数 1/2m:

中间推导过程不再赘述,可以参考这篇博文:【AI】浅谈梯度下降算法(理论篇)

梯度下降算法中,为了尽快收敛,会沿梯度的负方向更新参数,因此在上式前添加一个负号,并乘以一个系数 α(即学习率),得到最终用于迭代计算参数 θj的形式:

其中 α 是学习率(learning rate)。 上式是没有添加 L2 正则化项的迭代公式,如果在原始代价函数之后添加 L2 正则化,则迭代公式会变成下面的样子:

其中 λλλ 就是正则化参数。从上式可以看到,与未添加 L2 正则化的迭代公式相比,每一次迭代,θj都要先乘以一个小于1的因子(即 `$(1−α

m

λ

)$`) ,从而使得 θj不断减小,因此总的来看,θ 是不断减小的。

最开始也提到 L1 正则化一定程度上也可以防止过拟合。之前做了解释,当 L1 的正则化系数很小时,得到的最优解会很小,可以达到和 L2 正则化类似的效果。

权重减少

L1 和 L2 的目的是通过减少 w 的权重从而减少模型的复杂度,从而提高模型的泛华能力,为什么会这样呢?启发式地来说,如果代价函数没有正则化,那么权重向量的长度倾向于增长,而其它的都不变。随着时间推移,权重向量将会变得非常大。这可能导致权重向量被限制得或多或少指向同一个方向,因为当长度过长时,使代价函数的最优解发生偏离。

下面将从数学的角度出发给出了正则化为什么能减少 w 的权重,机器学习的实践应用中也得到了验证,但是正则化到底是如何影响模型的泛化能力,并没有科学的数据依据,难道 w按照某种规则增加就不能提高模型的泛化能力吗?

从机器学习的领域经验表明:减少 w 的权重从而减少模型的复杂度,提高模型的泛化能力,因此正则化处理手段在机器学习的模型上得到广泛应用。


L2 权重衰减

L2 正则化就是在代价函数后面再加上一个正则化项:

C0代表原始的代价函数,后面那一项就是 L2 正则化项,它是这样来的:所有参数 w 的平方的和,除以训练集的样本大小 n。λ 就是正则项系数,权衡正则项与 C0 项的比重。另外还有一个系数1/2,1/2 经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与 1/2相乘刚好凑整。

L2 正则化项是怎么避免 overfitting 的呢?我们推导一下看看,先求导:

可以发现 L2 正则化项对 b 的更新没有影响,但是对于 w的更新有影响:

在不使用 L2 正则化时,求导结果中 w 前系数为1,现在 w 前面系数为`$1−

ηλ/n

$因为 η、λ、n 都是正的,所以$1−

ηλ/n

$`小于1,它的效果是减小 w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w 最终的值可能增大也可能减小。

另外,需要提一下,对于基于 mini-batch 的随机梯度下降,w 和 b 更新的公式跟上面给出的有点不同:

对比上面 w的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以 η 再除以 m,m 是一个 mini-batch 中样本的个数。

到目前为止,我们只是解释了 L2 正则化项有让 w “变小” 的效果,但是还没解释为什么 w “变小” 可以防止 overfitting?一个所谓 “显而易见” 的解释就是:更小的权值 w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2 正则化的效果往往好于未经正则化的效果。当然,对于很多人(包括我)来说,这个解释似乎不那么显而易见,所以这里添加一个稍微数学一点的解释(引自知乎):

过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。

而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。


L1 权重衰减

在原始的代价函数后面加上一个 L1 正则化项,即所有权重 w 的绝对值的和,乘以 λ/n(这里不像 L2 正则化项那样,需要再乘以 1/2,具体原因上面已经说过。)

同样先计算导数:

上式中 sgn(w)表示 w 的符号。那么权重 w 的更新规则为:

比原始的更新规则多出了`$

ηλ/n

sgn(w)$` 这一项。当 w 为正时,更新后的 w 变小。当 w 为负时,更新后的 w 变大——因此它的效果就是让 w 往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

另外,上面没有提到一个问题,当 w 为0时怎么办?当 w 等于0时,∣w∣ 是不可导的,所以我们只能按照原始的未经正则化的方法去更新 w,这就相当于去掉 `$

ηλ/n

sgn(w)$` 这一项,所以我们可以规定 sgn(0)=0,这样就把 w=0 的情况也统一进来了。

后记

以上就是 浅谈使用正则化防止过拟合(下) 的全部内容了,具体讲解了什么是正则化,并进行深入理解,以及 L1、L2 是如何进行权重衰减的,通过图文结合,公式推导,细致地讲述了要点,希望大家有所收获!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则化 (Regularization)
  • 深入理解
  • 权重减少
  • 后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档