过拟合

在网络训练过程中,经常会遇到过拟合的问题,根据方差+偏差的分解,说明“方差”较大。直观的理解就是网络对于已有训练数据的误差很小,而对未知的测试数据预测很差的现象

我们会称这个模型“过于复杂”,这里的复杂可以理解为模型为了拟合所有的样本,会把不重要的特征放大(部分参数为了适应这些特征的变化也会很大),而相对的,一些通用的特征容易拟合(部分参数会很小),这样得到的模型会偏向一些微小的,不重要的特征,因此输入数据一有波动,预测效果就会较差。

我觉得用这个例子来解释模型的简单和复杂可能比较好。可以把一个模型比作一个人,模型的输入是外界环境,模型的输出是他对于外界环境所做出的反应。生活中有的人很复杂,他对于外界环境过于敏感,会注意到身边的各种变化,并努力的适应这种变化。他想要得到所有人的认可,满足身边的一切。但我们都知道,这是不可能实现的,一旦他进入一个新的环境,那么他瞬间会变得无所适从。相反,有的人就很简单,对于身边的各种小事,看的很轻,毫不在乎。

正则化(Regularization)

通常为了避免过拟合,可以增加训练数据,或者降低模型的复杂度。但现实中,数据获取并不容易,而且减少网络规模也就降低了模型的表达能力,这也不是我们想要的结果。
那有没有既不需要更多的数据,也不减少网络规模的方法呢。正则化就是这样一种方法,它通过增加训练误差来减少测试误差(训练误差过小有可能是过拟合)

正则化的目的是为了限制网络的参数过大或过多,让模型尽可能的简单。比如在进行曲线拟合时,一般3次多项式就可以实现很好的效果。而如果使用8次多项式,模型参数过多,就容易发生过拟合。这个时候,我们希望高阶的参数尽可能的小,这样就相当于只保留了低阶的项,模型看上去变简单了。

实现这个目的最直观的方法是降低w的数目,即L0正则化(使用L0范数作为正则化项),让高阶的参数为0,可以很容易的实现正则化的目的。但因为L0正则化很难求解,是个NP难问题。

本文主要介绍L1和L2正则化,这也是正则化最常用的实现方式。

L2正则化(L2 Regularization)

L2正则化是在误差函数之后加上模型参数的L2范数作为约束,下式为带L2正则化项的损失函数。第二项为正则化项,w为模型参数,$||w||^2$表示w的L2范数,w的L2范数为w中各个参数的平方和。$\lambda$表示权重参数,平衡正则化项和误差项。

$$L(w)=\frac{1}{N}\sum_{i=1}^N(f(x_i;w)-y_i)^2+\frac{\lambda}{2}||w||^2 \tag{1}$$

将上式简写为$L=L_0+R$, $L_0$为原始误差项,R为L2正则化项。我们可以把它看作是一个等式约束问题,即求解在约束条件R下$L_0$的最小值

这里假设w只有两个参数,$w=\{w^1, w^2\}$,如下图所示,等值线表示$L_{0}$,黑色的圆表示函数R,既要满足$L_0$最小,而且需要满足约束条件R,因此R和$L_0$第一次相交的位置即为最优值。
20160904184646963.png

$\lambda$可以控制R图形的大小,$\lambda$越大,图形越小,越不容易过拟合(过大反而容易欠拟合);$\lambda$越小,图形越大,越容易过拟合

使用带L2正则化项的损失函数构建的模型称为岭回归,也称Ridge回归。

L1正则化(L1 Regularization)

L1正则化可以看做是L0的最优凸近似。L1正则化是在误差函数之后加上模型参数的L1范数作为约束,下式为带L1正则化项的损失函数。和式(1)基本一致,只不过正则化项变成了L1正则化项,w的L1范数为w中各个参数的绝对值之和

$$L(w)=\frac{1}{N}\sum_{i=1}^N(f(x_i;w)-y_i)^2+\lambda||w||_1 \tag{2}$$

同样的,我们将上式写成$L=L_0+R$, $L_0$为原始误差项,R为L1正则化项。可以用下图来表示$L_0$和R,图中等值线表示$L_0$,黑色矩形表示R函数。
20160904184428459.png

和L2正则化类似,$L_0$在约束条件R下的最小值即为黑色矩形和等值线的第一个交点。图中最优点为菱形与$w^2$坐标轴的交点,该点对应的参数为$(0, w^2)$。可以想象,当模型具有很多参数和特征时,R将从二维平面上的菱形变为高维空间中的具有多个顶点的高维图形,$L_0$与R的第一个交点,大概率位于R图形的顶点上,而这些顶点对应的参数,其中很多都为0,这样经过L1正则化之后就可以得到一个稀疏模型

这里解释一下参数稀疏的作用:

  1. 参数稀疏可以实现特征选择。通常训练数据包含了大量的特征,而真正有用的可能只有一小部分。稀疏化算子可以通过学习自动的去掉哪些无用的特征,将这些特征对应的权重置0。
  2. 参数稀疏可以让模型的解释性更强。比如一种疾病可能有成百上千个致病因素,我们想分析哪些因素是致病的关键因素,稀疏化算子可以让模型的大部分参数为0,只保留几个非零的参数,即可以认为保留的因素是致病的关键因素。

使用带L1正则化项的损失函数构建的模型称为Lasso回归。

为什么正则化可以防止过拟合

上面已经已经结合图形比较直观的介绍了L1正则化和L2正则化,以及它们的特点。L1正则化是通过稀疏参数来实现的,即让部分模型参数为0。这里具体解释为什么L2正则化可以防止过拟合。

下面以线性回归的梯度下降过程为例,参数为w,损失函数为L(w),N为样本数目,$x_i$表示第i个样本,$y_i$表示第i个样本对应的标签。下式表示未添加正则化项的损失函数,除以2是为了求导方便。

$$L(w)=\frac{1}{2N}(f(x,w)-y)^2\tag{3}$$

由式(3)可以得到第i个参数$w^i$的梯度计算公式:

$$\frac{\partial}{\partial w^i}L=\frac{1}{N}(f(x, w)-y)\frac{\partial}{\partial w^i}f(x,w) \tag{4}$$

则参数$w^i$的梯度$\theta _i$更新过程为:

$$\theta_i = \theta_i-\eta\frac{1}{N}(f(x, w)-y)\frac{\partial}{\partial w^i}f(x,w) \tag{5}$$

添加正则项之后的梯度更新过程为:

$$\theta_i = \theta_i(1-\frac{\lambda\eta}{N})-\frac{\eta}{N}(f(x, w)-y)\frac{\partial}{\partial w^i}f(x,w)\tag{6}$$

$\eta$表示学习率,从上式可以看出,相比与式(5), $\theta$每次更新过程都会乘以一个比1小的数,因此$\theta$是不断减少的。控制$\lambda$,L2正则化可以获得很小的参数,。

总结

L1正则化和L2正则化都能防止模型过拟合,但方式有所不同。L1正则化倾向于将减少模型参数,让网络变得稀疏,L1正则化在特征选择很有用而L2正则化倾向于让网络参数变得更小,主要用来防止模型过拟合

防止模型过拟合主要使用L2正则化,原因是L2正则化计算更为方便
正则化就讲到这里了,至于如何从贝叶斯角度来理解正则化,之后在讲贝叶斯估计再讨论。

Reference

https://mp.weixin.qq.com/s/Ww...

https://blog.csdn.net/jinping...

https://www.zhihu.com/questio...

https://blog.csdn.net/zouxy09...


mhxin
84 声望15 粉丝