本文正在参与「金石计划 . 瓜分6万现金大奖」

前语

关于机器学习问题,咱们最常遇到的一个问题便是过拟合。在对已知的数据调集进行学习的时分,咱们挑选适应度最好的模型最为终究的成果。虽然咱们挑选的模型能够很好的解说练习数据调集,但却纷歧定能够很好的解说测试数据或许其他数据,也便是说这个模型过于精细的刻画了练习数据,关于测试数据或许其他新的数据泛化才能不强。

因而,咱们需求经过正则化的方法来避免过拟合,接下来跟博主一起来了解一下吧。

在上篇博文 【AI】浅谈运用正则化避免过拟合(上) 中叙述了过拟合发生的原因,以及简单的描绘了一下正则化是怎样处理过拟合的,接下来将详细展开叙述正则化及权重削减;

正则化 (Regularization)

机器学习中简直都能够看到丢失函数后边会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1−normℓ1-normℓ2−normℓ2-norm,中文称作L1 正则化L2 正则化,或许L1 范数L2 范数

最常用的范数便是 p−范数p-范数,即一般范数 LpL_p,若 x=[x1,x2,…,xn]Tx=[x_1,x_2,…,x_n]^T,那么

∣∣x∣∣p=(∣x1∣p+∣x2∣p+…+∣xn∣p)1p=(∑i=1n∣xi∣p)1p||x||_p = (|x_1|^p+|x_2|^p+…+|x_n|^p)^{\frac{1}{p}} = (\sum_{i=1}^n |x_i|^p)^{\frac{1}{p}}

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

  • L1:∣∣x∣∣1=∣x1∣+∣x2∣+…+∣xn∣=∑i=1n∣xi∣L1: ||x||_1 = |x_1|+|x_2|+…+|x_n|= \sum_{i=1}^n|x_i|

  • L2:∣∣x∣∣2=(∣x1∣2+∣x2∣2+…+∣xn∣2)12=∑i=1nxi2L2: ||x||_2 = (|x_1|^2+|x_2|^2+…+|x_n|^2)^{\frac{1}{2}}= \sqrt{\sum_{i=1}^n x_i^2}

分别几个范数表明:

  • L0L0:指向量中非0的元素的个数;
  • L1L1:指向量中各个元素绝对值之和;
  • L2L2:指向量各元素的平方和的平方根;

用代码来简单表明一下 L1L1L2L2

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 回归(岭回归)。

下面是 PythonLasso 回归的丢失函数,式中加号后边一项 ∣∣w∣∣1||w||_1 即为 L1 正则化项。

min⁡w12nsamples∣∣Xw−y∣∣22+∣∣w∣∣1\min_w \frac{1}{2n_{samples}}||X_w-y||^2_2 + ||w||_1

下面是 Python 中 Ridge 回归的丢失函数,式中加号后边一项 ∣∣w∣∣22||w||_2^2 即为 L2 正则化项。

min⁡w∣∣Xw−y∣∣22+∣∣w∣∣22\min_w ||X_w-y||^2_2 + ||w||_2^2

一般回归剖析中 ww 表明特征的系数,从上式能够看到正则化项是对系数做了处理(束缚)。


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

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

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


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

  • L1 正则化能够发生稀少权值矩阵,即发生一个稀少模型,能够用于特征挑选;
  • L2 正则化能够避免模型过拟合(overfitting),必定程度上,L1L1 也能够避免过拟合;

深入了解

L1 正则化

假定有如下带 L1 正则化 的丢失函数:

J=J0+∑w∣w∣J = J_0 + \sum_w|w|

其间 J0J_0 是原始的丢失函数,加号后边的一项是 L1 正则化项, 是正则化系数。注意到 L1 正则化是权值的绝对值之和,JJ 是带有绝对值符号的函数,因而 JJ 是不完全可微的。机器学习的使命便是要经过一些方法(比如梯度下降)求出丢失函数的最小值。当咱们在原始丢失函数 J0J_0 后添加 L1 正则化项时,相当于对 J0J_0 做了一个束缚。

令:

L=∑w∣w∣L = \sum_w|w|

J=J0+LJ=J_0+L,此时咱们的使命变成 在 L 束缚下求出 J0J_0 取最小值的时分的解考虑二维的情况,即只要两个权值 w1w^1w2w^2,此时 L=∣w1∣+∣w2∣L = |w^1| + |w^2|。关于梯度下降法,求解 J0J_0 的过程能够画出等值线,一起 L1 正则化 的函数 LL 也能够在 ∣w1∣|w^1|∣w2∣|w^2| 的二维平面上画出来。如下图:

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

图中等值线是 J0J_0 的等值线,黑色方形是 LL 函数的图形。L=∣w1∣+∣w2∣L = |w^1| + |w^2|,这个函数画出来便是一个方框。

在图中,当 J0J_0 等值线与 LL 图形初次相交的地方便是最优解。上图中 J0J_0LLLL 的一个极点处相交,这个极点便是最优解。注意到这个极点的值是 (w1,w2)=(0,w)(w^1, w^2) = (0, w)。能够直观幻想,由于 LL 函数有许多『杰出的角』(二维情况下四个,多维情况下更多),J0J_0 与这些角触摸的机率会远大于与 LL 其它部位触摸的机率(这是很直觉的幻想,杰出的角比直线的边离等值线更近些),而在这些角上,会有许多权值等于0(由于角就在坐标轴上),这便是为什么 L1 正则化能够发生稀少模型,进而能够用于特征挑选

而正则化前面的系数 ,能够操控 LL 图形的巨细。 越小,LL 的图形越大(上图中的黑色方框); 越大,LL 的图形就越小,能够小到黑色方框只超出原点规模一点点,这时最优点的值 (w1,w2)=(0,w)(w^1, w^2) = (0, w) 中的 ww 能够取到很小的值。

L2 正则化

相似地,假定有如下带 L2 正则化的丢失函数:

J=J0+a∑ww2J = J_0 + a\sum_ww^2

相同能够画出他们在二维平面上的图形,如下:

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

二维平面下 L2 正则化的函数图形是个圆(绝对值的平方和,是个圆),与方形比较,被磨去了棱角。因而 J0J_0LL 相交时使得 w1w^1w2w^2 等于零的机率小了许多(这个也是一个很直观的幻想) ,这便是为什么 L2 正则化不具有稀少性的原因,由于不太可能出现多数 ww 都为0的情况。

L2 正则化能够获得值很小的参数

以线性回归中的梯度下降法为例,运用 Andrew Ng 机器学习的参数表明方法。假定要求解的参数为 h(x)h_\theta(x) 是咱们的假定函数。线性回归一般运用平方差丢失函数。单个样本的平方差是 (h(x)−y)2(h_\theta(x)-y)^2,假如考虑一切样本,丢失函数是对每个样本的平方差求和,假定有 mm 个样本,线性回归的价值函数如下,为了后续处理方便,乘以一个常数 12m\frac{1}{2m}

J()=12m∑i=1m(h(x(i))−y(i))2J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})^2

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

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

j:=j−1m∑i=1m(h(x(i))−y(i))xj(i)\theta_j := \theta_j – \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}

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

j:=j(1−m)−1m∑i=1m(h(x(i))−y(i))xj(i)\theta_j := \theta_j(1-\frac{\lambda}{m}) – \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}

其间 便是正则化参数。从上式能够看到,与未添加 L2 正则化的迭代公式比较,每一次迭代,j\theta_j 都要先乘以一个小于1的因子(即 (1−m)(1-\frac{\lambda}{m}) ,然后使得 j\theta_j 不断减小,因而总的来看, 是不断减小的。

最开始也说到 L1 正则化必定程度上也能够避免过拟合。之前做了解说,当 L1 的正则化系数很小时,得到的最优解会很小,能够达到和 L2 正则化相似的作用。

权重削减

L1L1L2L2 的意图是经过削减 ww 的权重然后削减模型的复杂度,然后进步模型的泛华才能,为什么会这样呢?启发式地来说,假如价值函数没有正则化,那么权重向量的长度倾向于增长,而其它的都不变。随着时间推移,权重向量将会变得非常大。这可能导致权重向量被束缚得或多或少指向同一个方向,由于当长度过长时,使价值函数的最优解发生违背。

下面将从数学的角度出发给出了正则化为什么能削减 ww 的权重,机器学习的实践使用中也得到了验证,可是正则化到底是怎样影响模型的泛化才能,并没有科学的数据根据,难道 ww 依照某种规矩添加就不能进步模型的泛化才能吗?

从机器学习的领域经历表明:削减 ww 的权重然后削减模型的复杂度,进步模型的泛化才能,因而正则化处理手法在机器学习的模型上得到广泛使用。


L2L2 权重衰减

L2 正则化便是在价值函数后边再加上一个正则化项:

C=C0+2n∑ww2C = C_0 + \frac{\lambda}{2n} \sum_w w^2

C0C_0 代表原始的价值函数,后边那一项便是 L2 正则化项,它是这样来的:一切参数 ww 的平方的和,除以练习集的样本巨细 nn 便是正则项系数,权衡正则项与 C0C_0 项的比重。别的还有一个系数 12\frac{1}{2}12\frac{1}{2} 常常会看到,首要是为了后边求导的成果方便,后边那一项求导会发生一个2,与 12\frac{1}{2} 相乘刚好凑整。

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

∂C∂w=∂C0∂w+nw∂C∂b=∂C0∂b\frac{∂C}{∂w} = \frac{∂C_0}{∂w} + \frac{\lambda}{n}w \\ \quad \\ \frac{∂C}{∂b} = \frac{∂C_0}{∂b}

能够发现 L2 正则化项对 bb 的更新没有影响,可是关于 ww 的更新有影响:

w→w−∂C0∂w−nw=(1−n)w−∂C0∂ww \rightarrow w – \eta\frac{∂C_0}{∂w} – \frac{\eta\lambda}{n}w \\ \quad \\ \quad = (1-\frac{\eta\lambda}{n})w – \eta\frac{∂C_0}{∂w}

在不运用 L2 正则化时,求导成果中 ww 前系数为1,现在 ww 前面系数为 1−n1-\frac{\eta\lambda}{n} ,由于 nn 都是正的,所以 1−n1-\frac{\eta\lambda}{n} 小于1,它的作用是减小 ww,这也便是权重衰减(weight decay)的由来。当然考虑到后边的导数项,ww 终究的值可能增大也可能减小。

别的,需求提一下,关于基于 mini-batch 的随机梯度下降,wwbb 更新的公式跟上面给出的有点不同:

w→(1−n)w−m∑x∂Cx∂wb→b−m∑x∂Cx∂bw \rightarrow (1-\frac{\eta\lambda}{n})w – \frac{\eta}{m} \sum_x \frac{∂C_x}{∂w} \\ \quad \\ b \rightarrow b – \frac{\eta}{m} \sum_x \frac{∂C_x}{∂b}

比照上面 ww 的更新公式,能够发现后边那一项变了,变成一切导数加和,乘以 再除以 mmmm 是一个 mini-batch 中样本的个数。

到目前为止,咱们只是解说了 L2 正则化项有让 ww “变小” 的作用,可是还没解说为什么 ww “变小” 能够避免 overfitting?一个所谓 “清楚明了” 的解说便是:更小的权值 ww,从某种意义上说,表明网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际使用中,也验证了这一点,L2 正则化的作用往往好于未经正则化的作用。当然,关于许多人(包括我)来说,这个解说似乎不那么清楚明了,所以这儿添加一个稍微数学一点的解说(引自知乎):

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

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

而正则化是经过束缚参数的范数使其不要太大,所以能够在必定程度上削减过拟合情况。


L1L1 权重衰减

在原始的价值函数后边加上一个 L1 正则化项,即一切权重 ww 的绝对值的和,乘以 n\frac{}{n}(这儿不像 L2 正则化项那样,需求再乘以 12\frac{1}{2},详细原因上面已经说过。)

C=C0+n∑w∣w∣C = C_0 + \frac{\lambda}{n} \sum_w |w|

相同先核算导数:

∂C∂w=∂C0∂w+nsgn(w)\frac{∂C}{∂w} = \frac{∂C_0}{∂w} + \frac{\lambda}{n}sgn(w)

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

w→w′=w−nsgn(w)−∂C0∂ww \rightarrow w’ = w – \frac{\eta\lambda}{n}sgn(w) – \eta\frac{∂C_0}{∂w}

比原始的更新规矩多出了 nsgn(w)\frac{\eta\lambda}{n}sgn(w) 这一项。当 ww 为正时,更新后的 ww 变小。当 ww 为负时,更新后的 ww 变大——因而它的作用便是让 ww 往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,避免过拟合。

别的,上面没有说到一个问题,当 ww 为0时怎样办?当 ww 等于0时,∣w∣|w| 是不行导的,所以咱们只能依照原始的未经正则化的方法去更新 ww,这就相当于去掉 nsgn(w)\frac{\eta\lambda}{n}sgn(w) 这一项,所以咱们能够规定 sgn(0)=0sgn(0)=0,这样就把 w=0w=0 的情况也一致进来了。

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

跋文

以上便是 浅谈运用正则化避免过拟合(下) 的全部内容了,详细讲解了什么是正则化,并进行深入了解,以及 L1L1L2L2 是怎样进行权重衰减的,经过图文结合,公式推导,详尽地叙述了要点,希望我们有所收成!

上篇精讲:【AI】浅谈运用正则化避免过拟合(上)

我是,期待你的关注;

创造不易,请多多支撑;

系列专栏:AI