人工智能算法学习笔记(五)——正则化

上篇文章中讲解了偏差、方差、误差,其中提到了过拟合,那么本文将深入展开过拟合及其解决方案。

一、竹篮打水一场空——过拟合

要直观解释过拟合,先上图:
人工智能算法学习笔记(五)——正则化
图1明显分类有欠缺,称之为欠拟合,图2虽然有两个点分类错误,但是可以理解,毕竟现实世界是有噪音干扰的,该模型在容错情况下刚好,而图3分类全部正确,我们发现在训练集上该模型无比完美!请先不要高兴太早,这很可能是因为模型过拟合了。
过拟合的直观解释是模型在训练集上性能完美,但在验证集或测试集上效果却不那么尽人意了。
机器学习中一个核心任务就是防止模型过拟合当模型的参数个数远大于数据集样本数量时,模型则可很好的“记忆”每一个训练数据的随机噪声而忘了去学习训练数据中通用的趋势,这就有可能导致过拟合,这个时候你可以简单的扩充数据集中的样本来降低过拟合的影响,但这需要一定的时间和人力成本,且效果可能不那么明显。那么如何用最小的成本来防止模型过拟合呢,即如何使训练错误率与测试错误率的差距尽可能小呢?那么答案就是本文的主题——正则化。

二、正则化

一般书上都是直接给出结构风险最小化的公式,如下:
min1Ni=1NL(yi,f(xi))+λr(d)min\frac{1}{N}\sum_{i=1}^{N}L\left ( y_i,f\left ( x_i \right ) \right )+\lambda r\left ( d \right )
其中f(xi)=w0x0+w1x1+w2x2+...+wnxnf\left ( x_i \right )=w_0x_0+w_1x_1+w_2x_2+...+w_nx_n
其中第一项是经验风险,第二项是正则化项

好,知道了什么是过拟合之后,就要尽量避免,也就是要让结构风险最小化。
我们站在第一次接触这种分类模型的角度去看待这个问题,发散一下思维,应该如何去防止过拟合?
显而易见,我们应该从【过拟合】出现的特征去判别,才能规避吧?
显而易见,我们应该而且只能去看【过拟合】的f(x)f\left(x\right)形式吧?
显而易见,我们从【过拟合】的图形可以看出f(x)f\left(x\right)的涉及到的特征项一定很多吧,即x0,x1,x2,x3....xNx_{0},x_{1},x_{2},x_{3}....x_{N} 等等很多吧?
显而易见,NN很大的时候,w0,w1,w2,w3,...wNw_{0} ,w_{1} ,w_{2} ,w_{3} ,...w_{N} 是等数量增长的吧?
显而易见,ww系数都是学习来的吧?
知道这些信息之后,如何去防止过拟合,我们首先想到的就是控制NN的数量吧,即让N最小化吧,而让NN最小化,其实就是让WW向量中项的个数最小化吧?其中,W=(w0,w1,w2,w3,...wN)W=\left(w_{0} ,w_{1} ,w_{2} ,w_{3} ,...w_{N} \right)
再来思考,如何求解“让WW向量中项的个数最小化”这个问题。
数学中L0L_0范数表示向量中非零元素的个数,它将模型参数不等于0的个数控制在CC以内来达到限制模型能力的目的。

所以,重点来了,要防止过拟合,既要让经验风险最小,又要让正则化项最小。所以为了让结构风险最小,就要让经验风险和正则化项之和最小,换句话说,就是在正则化项约束下求出损失函数取最小值的解正则化就是将结构风险最小化的过程,它们是等价的。

但是,L0L_0范数很难求,求解的难度是个NPNP完全问题。因此,进一步放松限制,不要求参数的非零数量被限制在某个范围内,而要求参数数值的总和要小于某个数值。这种对参数数值总和的限制被称为L1L_1范数惩罚,又称参数稀疏性惩罚或者稀疏规则算子
接下来有两个问题:

1、为什么要参数稀疏?有什么好处?
2、为什么L1L_1范数能实现稀疏?

先回答第一个问题,有以下两点:

  1. 特征选择(Feature Selection)
    大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xix_i的大部分元素(也就是特征)都是和最终的输出yiy_i没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xix_i这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yiy_i的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
  2. 可解释性(Interpretability)
    第二个理由是,模型更容易解释。例如患某种病的概率是yy,然后我们收集到的数据xx是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2++w1000x1000+by=w_1*x_1+w_2*x_2+…+w_1000*x_1000+b(当然,为了让yy限定在[0,1]\left [ 0,1 \right ]的范围,一般还得加个SigmoidSigmoid函数)。通过学习,如果最后学习到的WW就只有很少的非零元素,例如只有5个非零的wiw_i,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wiw_i都非0,医生面对这1000种因素那肯定是晕菜了。。。

在回答第二个问题前先要介绍L2L_2范数。
直观上看,L2L_2范数是各个参数的平方和再开方,即:W2=wi2\left \| W \right \|_2=\sqrt{\sum w_i^2},也称欧氏距离
那么r(d)=W22r\left ( d \right )=\left \| W \right \|_2^2
L2L_2范数还有另外一个名字叫做:权重衰减惩罚。因此,它被用于解决过拟合问题。(PS:其实我个人认为L1L_1范数也是用于解决过拟合问题,但是侧重点是稀疏用户特征选择,而L2L_2范数侧重于要构造权重比较小的模型,所以叫做权重衰减么。)

下面可以回答第二个问题了,为什么L1L_1范数能实现稀疏。
从两个角度去解释,第一是数学角度,第二是图形。
我看到过这样一种纯数学上的解释:
任何的规则化算子,如果他在Wi=0W_i=0的地方不可微,并且可以分解为一个"求和"的形式,那么这个规则化算子就可以实现稀疏。
下面用公式进行解释:
假设只有一个参数为ww,损失函数为L(w)L\left(w\right),分别加上L1L_1正则项和L2L_2正则项后有:
JL1(w)=L(w)+λwJ_{L1}\left ( w \right )=L\left ( w \right )+\lambda \left | w \right |
JL2(w)=L(w)+λw2J_{L2}\left ( w \right )=L\left ( w \right )+\lambda w^2
假设L(w)L\left(w\right)00处的导数为d0d_0,即:
L(w)ww=0=d0\left.\begin{matrix} \frac{\partial L\left ( w \right )}{\partial w}\\ \end{matrix}\right|_{w=0} =d_0
则可以推导使用L1L_1正则和L2L_2正则时的导数。
引入L2L_2正则项,在00处的导数:
JL2(w)ww=0=d0+2×λ×w\left.\begin{matrix} \frac{\partial J_{L2}\left ( w \right )}{\partial w}\\ \end{matrix}\right|_{w=0} =d_0+2\times \lambda \times w
引入L1L_1正则项,在00处的导数:
JL1(w)ww=0=d0λ\left.\begin{matrix} \frac{\partial J_{L1}\left ( w \right )}{\partial w}\\ \end{matrix}\right|_{w=0^-} =d_0-\lambda
JL1(w)ww=0+=d0+λ\left.\begin{matrix} \frac{\partial J_{L1}\left ( w \right )}{\partial w}\\ \end{matrix}\right|_{w=0^+} =d_0+\lambda
可见,引入L2L_2正则时,代价函数在00处的导数仍是d0d_0,无变化。而引入L1L_1正则后,代价函数在00处的导数有一个突变。从d0+λd_0+λd0λd_0−λ,若d0+λd_0+λd0λd_0−λ异号,则在00处会是一个极小值点。因此,优化时,很可能优化到该极小值点上,即w=0w=0处。这是只有一个参数的情况,如果有更多的参数,也是类似的。因此,用L1L_1正则更容易产生稀疏解。
图形化解释,那么先看一幅图:
人工智能算法学习笔记(五)——正则化

假设只有两个参数w1w_1w2w_2
L1L_1:因为w1C\left \| w \right \|_1\leq C,所以w1+w2C\left | w_1 \right |+\left | w_2 \right |\leq C,在图上画出来就是一个菱形;
L2L_2:因为w2C\left \| w \right \|_2\leq C,所以w12+w22C\sqrt{w_1^2+w_2^2}\leq C,在图上画出来就是一个圆形。
重点来了,求等价后的问题就是求:等高线(从中心向外辐射)和约束线(菱形或圆形)的第一个交点。
对于L1L_1来说,交点一般出现在yy轴上,这意味着w1=0w_1=0。所以L1L_1具有稀疏性,可用于特征选择。
对于L2L_2来说,交点在圆上,这意味着w1w_1w2w_2都不为00
因此L1L_1范数具有稀疏性,可以用于特征选择。

最后,再将注意力转移到L2L_2范数,正则化前面的系数λ\lambda,可以控制w22\left \| w \right \|_2^2图形的大小。λ\lambda过小,w22\left \| w \right \|_2^2的半径则很大,就越容易达到损失函数的最小值(中心点),会发生过拟合现象;λ\lambda过大,w22\left \| w \right \|_2^2的半径则很小,即对模型参数惩罚过重,模型的能力也就越弱,会发生欠拟合现象。

模型在拟合过程中通常都会倾向于让权值尽可能小,最终构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,且能适应不同的数据集,在一定程度上可降低过拟合风险。比如,对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,这就是常说的抗扰动能力强。

最后分享一篇文章《机器学习:分类问题中的“维数灾难”》来感受一下为什么降维在分类问题中是如此的重要!

未完待续。。。