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

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

参考
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出现的情况。那就是,对于每一个训练的数据,我们都能正确输出它的类别。这听起来很好,是百分百的正确。但事实上,我们应用这个模型的场景并不是训练的数据,而是测试的数据。因此我们把这个问题称为过拟合(Overfitting)

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

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

正则化(L1和L2范数)
来自百度百科

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

怎么正则化

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

w^=argminwi=1loss(yi,f(xi;w))+λL(w)

后边的那部分就是惩罚项,前面有个参数λ。那正则化的部分应该是什么样的?一般是使用L1范数和L2范数。
https://www.zhihu.com/question/20473040/answer/102907063 常用的向量范数和矩阵范数的定义)

L1范数

L1范数的公式是:w1=i|wi|,即所有权重之和。

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

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

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

假如wt>0,那wt+1=1ηλwtηLw
假如wt<0,那wt+1=1+ηλwtηLw
通过这样,接近于0的参数就很容易变成0。

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

L2范数

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

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

模型空间

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

L1:minw1nyXw2,s.t.w1CL2:minw1nyXw2,s.t.w2C

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

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

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

目前不懂

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

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

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

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

相关文章: