Regulation:L0,L1,L2 (2)

上一篇:https://www.jianshu.com/p/3a34986d68b8

上文中主要是写的是对于过拟合的理解和进行正则化的原因。这篇学习笔记继续写我在学习正则化项的一些具体的内容,包括L0,L1,L2范数的理解。

首先什么是L0,L1和L2范数?

简单的来说,对于模型的参数向量而言,L0范数表示,参数向量中非零的元素的个数,L1范数表示向量中各个元素的绝对值之和,L2范数指的是各个元素的平方和然后求平方根。直观的对于L0到L2范数的感觉是,好像是越来越复杂了。接下来是我对于这三种范数的理解和笔记。

L0范数和L1范数:

如果L0代表参数向量中非零元素的个素,那么规则化L0,就是使非零元素个数最小,也就是说希望大部分元素都是零。我们都知道0是代表没有信息的,那么有信息的点的个数小,也就是一种变相地对于模型的压缩,我是在看了http://blog.csdn.net/zouxy09/article/details/24971995博客中的介绍,才想到,这有种“稀疏”的感觉,稀疏网络,模型压缩,仿佛都跟这个有千丝万缕的关系。但正如这个博主说的,总觉得哪里不太对,有种过于简单了的感觉,毕竟它只是简单的统计一下非零元素的个数,不太有机器学习各种求导梯度下降的风格。而我们了解到的稀疏大多还是通过L1范数实现的。L1范数是指向量中各个元素的绝对值之和,又有一个美称叫做“稀疏规则算子”   。网上大部分的博客好像都差不多,我总结了下,不用L0而用L1的原因是:

0. L0范数求解是np难问题,难以求解

1.L1范数容易求解,而且有大牛证明了满足一定条件下,L1和L0是等价的

基于上面两种原因,我们很自然地就选择L1实现稀疏。至于为什么稀疏,我觉得这个是很显然的,为了提高效率或者我们也可以从奥卡姆剃刀原理出发,用最少的特征点预测一种模型是我们所期待的。

L2范数:

L2范数主要解决了机器学习里面的过拟合问题,过拟合问题在上篇笔记中也提到过,就是当训练样本误差很小很小的时候,测试样本误差很大

Regulation:L0,L1,L2 (2)_第1张图片
过拟合

L2范数是向量中各个元素的平方和开根,要使L2范数最小,每个元素都要尽可能的小,知乎上有个答案如下图:


Regulation:L0,L1,L2 (2)_第2张图片


Regulation:L0,L1,L2 (2)_第3张图片
L2范数最小化

这里将L2范数中各个特征向量元素对应为多项式中X不同次数的系数,顾名思义,为了防止过拟合,我们希望对于X次的高系数的项,它的系数最好为零,这样可以减少很多项数,因为不能为零,所以就越小越好,这与L2范数最小是一致的。

下面是关于选择L2范数的另一个原因。

首先引入一个名词ill-condition。假设我们有一个方程组AX=b,我们需要求解X。如果A或者b稍微改变,就会使得X发生巨大变化,那么这个那么这个方程组系统就是ill-condition的,反之就是well-condition的。对于一个ill-condition的系统,输入稍微改变一点点,输出就会发生巨大的变化。假设我们用训练样本x,y去训练一个模型f,如果此时有一个测试样本,它与训练样本x差别不大,那么理论上我们期待输出值应该与y差不多,但是如果这个模型时ill-condition的,那么输出值与y相差过大,这个结果就没有意义了。对于一个ill-condition的系统,我们需要找到一个标准来衡量,究竟这个系统可以相信它多少。condition number就是被用来衡量这个可信度的。condition number衡量当输入发生微小的变化时,输出会产生多大的变化。我在知乎上看到一个定义说condition number=函数梯度最大变化速度/函数梯度最小变化速度(对于二阶可导函数,条件数的严格定义是:Hessian矩阵最大特征值的上界/最小特征值的下界)。我觉得从这个稍微正式一些的定义中体会不到,但是condition number的作用是描述系统对于微小变换的敏感度。condition number小表示well-conditioned, condition number大表示ill-conditioned。

如果方针A是非奇异的,那么A的condition number定义为:


condition number

也就是矩阵的norm乘以它的逆的norm。所以具体值是多少,就要看norm是什么了。如果方阵A是奇异的,那么A的condition number就是正无穷大了。实际上,只要方阵是可逆的,那么他一定存在一个condition number。如果要计算condition number,我们需要知道这个方阵的norm(范数)和machine epsilon(机器的精度)。为什么要范数?范数就相当于矩阵的大小。但显然矩阵是没有大小的。但我们希望衡量的是当矩阵A和向量b变化时,解x的变化情况。就需要来衡量下A或者b的大小,这就是范数的作用。学习博客中有一个A,b以及x的变化之间的关系式,我就不列在这里了,因为它对帮助我理解condition number可以概括为一句话:这些相对变化是有关系的。condition number可以理解为系统的稳定性或者敏感程度。当它大于1时,说明系统ill-conditioned,那么这个时候输出可能就不值得信赖了。

而L2范数与这些有没有关系呢?L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。因为目标函数如果是二次的,对于线性回归来说,那实际上是有解析解的,求导并令导数等于零即可得到最优解为:


然而,如果当我们的样本X的数目比每个样本的维度还要小的时候,矩阵XTX将会不是满秩的,也就是XTX会变得不可逆,所以w*就没办法直接计算出来了。或者更确切地说,将会有无穷多个解(因为我们方程组的个数小于未知数的个数)。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们过拟合了。

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



上一篇:https://www.jianshu.com/p/3a34986d68b8

你可能感兴趣的:(Regulation:L0,L1,L2 (2))