天天看点

正则化(L1和L2范数)

说实话,这么后才来写正则化是挺奇怪的。

相信大家都知道损失函数,是用来描述我们模型与训练数据之间的差距(即是否能准确拟合训练数据)。但其实我们真正在实战用的是目标函数。目标函数的构造是:损失函数+正则化。

参考

https://blog.csdn.net/zouxy09/article/details/24971995 (大神)

http://www.cnblogs.com/ooon/p/4964441.html

https://blog.csdn.net/li8zi8fa/article/details/77649973

为什么需要正则化

我们先来假设,如果分类时我们的损失 Loss=0 L o s s = 0 出现的情况。那就是,对于每一个训练的数据,我们都能正确输出它的类别。这听起来很好,是百分百的正确。但事实上,我们应用这个模型的场景并不是训练的数据,而是测试的数据。因此我们把这个问题称为过拟合(Overfitting)

正则化(L1和L2范数)

图片来自于: https://baijiahao.baidu.com/s?id=1591715304965529269&wfr=spider&for=pc

我们可以换个说法。假如我们想训练猫这个分类,但是我们刚好训练集都是橘猫,如果我们过拟合了,它提取的特征不再是猫身,猫尾这些形状,反而会执着于提取肥硕的猫身(哈哈哈哈),黄色的尾巴。但其实我们更想让它适应的范围变大(泛化能力变强),即检测猫这个分类的特征而不是橘猫的特征。所以我们加入了正则化,来使得这个模型不会过拟合。

https://www.zhihu.com/question/32246256 知乎有很多搞笑生动的例子。

正则化(L1和L2范数)

来自百度百科

正则化这部分,在斯坦福的CS231n也被称为惩罚项。而且Johnson讲了个另外一个说法。像上图那样,其实过拟合的实质原因是提取的参数太多了太复杂了,而我们加入正则化之后,会抵消部分的参数,这样可以简化这个模型(泛化能力加强)。

怎么正则化

按照我们一开始的描述,就是不仅仅使用损失函数,而是加上一个正则化的部分让它变成目标函数。而我们minimize的值是目标函数值。那么权重为:

w^=argminw∑i=1loss(yi,f(xi;w))+λL(w) w ^ = a r g m i n w ∑ i = 1 l o s s ( y i , f ( x i ; w ) ) + λ L ( w )

后边的那部分就是惩罚项,前面有个参数 λ λ 。那正则化的部分应该是什么样的?一般是使用L1范数和L2范数。

(https://www.zhihu.com/question/20473040/answer/102907063 常用的向量范数和矩阵范数的定义)

L1范数

L1范数的公式是: ∥w∥1=∑i|wi| ‖ w ‖ 1 = ∑ i | w i | ,即所有权重之和。

L1范数被人认为可以使参数变得更稀疏,即为0的参数项更多。emmm,其实换种说法就是减少参数的数量,跟一开始说的一样。那么如何做到呢?

正则化(L1和L2范数)

来自于: https://blog.csdn.net/li8zi8fa/article/details/77649973

必须注意的是!!!它这里的正则化其实只取了 wt w t 的正负号(我也不知道为什么忽略了权重的值,具体不了解)。

也就是说这里的 η⋅λ η ⋅ λ 不是直接的乘积,它的值的正负取决于 wt w t 。那我们就可以推导出:

假如 wt>0 w t > 0 ,那 wt+1=(1−η⋅λ)wt−η∂L∂w w t + 1 = ( 1 − η ⋅ λ ) w t − η ∂ L ∂ w 。

假如 wt<0 w t < 0 ,那 wt+1=(1+η⋅λ)wt−η∂L∂w w t + 1 = ( 1 + η ⋅ λ ) w t − η ∂ L ∂ w 。

通过这样,接近于0的参数就很容易变成0。

PS:推导里面的二分之一我目前也不知道哪里来的,估计是原作者笔误。

L2范数

L2范数的公式是: ∥w∥2=∑i(wi)2 ‖ w ‖ 2 = ∑ i ( w i ) 2 ,即所有权重之和。(用的最多的)

正则化(L1和L2范数)

来自于: https://blog.csdn.net/li8zi8fa/article/details/77649973

图片原作者说,这里的Closer to zero应该是指 η⋅λ η ⋅ λ 。之所以这样,是假如 wt w t 是一个较大的值的话,通过这样,你可以更快的衰减。但如果是一个较小的值的话,通过这种方式,降低的也不是很多。

模型空间

假如我们把损失函数设为MSE,我们可以有:(这个为二维的例子)

L1:minw1n∥y−Xw∥2,s.t.∥w∥1≤CL2:minw1n∥y−Xw∥2,s.t.∥w∥2≤C L 1 : m i n w 1 n ‖ y − X w ‖ 2 , s . t . ‖ w ‖ 1 ≤ C L 2 : m i n w 1 n ‖ y − X w ‖ 2 , s . t . ‖ w ‖ 2 ≤ C

正则化(L1和L2范数)

来自于: https://blog.csdn.net/zouxy09/article/details/24971995

对这两个部分画图,他们交叉的地方( w w 在这里满足两个方程)就是ww的取值了。

可以看到,L1为左图,相交的地方为一个角。这里一个维度为0。推广到三维来,可以知道相交的地方有可能是边。这些交界的地方都是存在有一个维度为0的,也就是L1满足稀疏性(使得某些参数为0)。

至于右图的L2情况,不会跟L1那样产生稀疏性的结果。(交点在圆边)

目前不懂

在了解这方面的知识的时候,其实还有很多比较复杂的(至少对于我来说)不是很懂。例如,

  1. L1范数是L0范数的最优凸近似
  2. LR正则化与数据先验分布的关系
  3. 核范数
不仅是正则化

其实虽然说过拟合可以利用正则化的方法克服,但其实,现在一般结合很多方法一起克服过拟合。我上一篇文章的Batch Normalization也可以改善过拟合的情况,更多的运用是Drop out(随机将一些神经元置0),还有通过数据的加强(将数据集的图片旋转,裁剪,放大等)来削弱模型的过拟合现象。

PS:有些人是选择L1与L2相结合。

继续阅读