一、参数方法和非参数方法
在讲正则化之前,需要介绍2个概念。机器学习的方法,可以大致分成两类。
参数方法(Parametric Methods)通过训练来确定一组参数。当我们参数的值定下来,可以说预测的过程已经跟之前的训练集无关了,模型已经定下来了,我们只需要把测试集代入对应参数就能出结果。参数化方法的好处就是。我们的模型复杂程度不会随着训练数据的增加而增加(注意不是训练模型的复杂度,是模型的复杂程度)。举例:逻辑回归,SVM,神经网络。
非参数方法 (Non-Parametric Methods),利用训练集本身来预测。比如K近邻算法,在训练过程中,我们并没有确定任何参数,甚至都不需要训练这个过程。但是缺点也很明显,训练集数量越大,我们模型就越复杂。当我们要预测一个新数据的时候,我们需要拿它与所有的训练数据比较。举例:KNN。
正则化,针对的主要就是参数方法。
二、复杂模型 VS 简单模型
拿最简单的线性回归来举例子,假设我们的样本是一个3维的数据,假设有一个样本点
,假设它的x值是
,y值是6 。现在我有两个线性模型
,它们都经过这个样本点:
好了,显然
的
是
,
的
是
这两个模型都能够准确地预测样本点
的值,并且它们的误差都是0。那我们如何评价两个模型的好坏呢?
从直觉上来说,既然它们两个模型都能准确预测我的测试样本,那当然是第一个模型简单粗暴。而且,根据奥卡姆剃刀原理(Occam's Razor, Ockham's Razor),越是简单粗暴的东西,有时候反而越有效。
模型的复杂程度这里有个比较专业点的术语叫做,模型结构化风险。咱们这里就用模型的复杂程度比较接地气。在训练参数方法的过程中,我们不仅要关注模型的准确程度,同时也要让模型更加精简,模型复杂程度低。这不仅仅是为了计算量少,而且越精简的模型,往往泛化能力越强大!
三、降低模型复杂度
既然知道了我们要尽可能训练出简单的模型。我们要在训练的过程中,将模型的复杂度作为一项指标,参与到训练的过程中,从而约束我们的模型。
机器学习模型的训练过程,简单来说就是我们要让我们模型的输出与真实采集到的结果的误差最小。同时,我们还有一个衡量误差的指标,叫做损失函数(loss function)。
我们现在同时要考虑误差跟模型复杂度,因此我们需要最小化:
再拿最简单的线性回归来举例子。当我们说我们的线性的模型复杂度高,它的意思是什么呢?其实就是这个权重
的每个值都很大。比如我们之前说到的两个权重向量
,
,明显第二个更加复杂。所以我们的
函数得是一个关于参数w的函数。而且w越复杂,这个值就越大。这样,就算我们的模型的误差非常小,但是模型相当复杂的话,它的损失函数也会变得非常大。
线性回归的损失函数定义(最小二乘法,就是平方和最小法):
那我们加入了L2正则以后的线性回归损失函数就变成了这样:
求导以后,解得:
我们加进来的这个
,就是向量
的模长,等于每个分量的平方和相加。显然
越复杂它的模长就越大。其实我们做的事情就叫做加入L2正则。
四、正则化
L1,L2其实就是数学里面范数,用范数刚好可以达到我们想要的目的。1范数的定义就是绝对值的和,2范数就是平方和,q范数就是
先说L1, L1其实就是把权重向量
的每个分量的绝对值相加的和。显然
的L1正则就是3 ,
的L1正则就是298。L2正则无非就是绝对值相加。
所以说,对模型正则化,就是说在训练的时候加上了一个关于模型复杂度的惩罚项,使得模型最后训练出来的参数尽量又少又小。
正则这个名字让人云里雾里地,听起来就给人一种高大上,不明觉厉的感觉(跟正则表达式没半毛线关系)。其实我觉得还不如叫做惩罚项,这样比较容易理解。
五、L1,L2比较
这个比较网上到处都是权威解释,请自行搜索相关资料。。我再说下个人的通俗点的理解。
首先,L1正则要算绝对值,算绝对值要比直接平方要复杂,这一点上L2正则胜。
当然L1的好处也很多。比如下面就是L1,L2正则的比较。左边正方形是L1正则的等值线。右边圆形代表L2等值线,右上角那个彩色的一圈圈的就是误差项的函数。最小化的时候就是这两个相交的时候。左边的L1函数图像是带一个尖角的。明显更容易相交在数轴上,就是为整数的点上,这样就会有更多的刚好为0的解。而L2相交在圆弧上,各种位置都有可能。
六、关于L1,L2正则解的稀疏性的详细数学解释
首先解释一下什么是稀疏性。
假设我们给线性模型分别加入L1,L2正则:
我们需要通过求损失函数的极值,来获得最优的模型参数
。
L1的更容易获得稀疏解,它的意思是求出来的极值点的
的每个维度都有很大的概率出现0,比如这样的结果:
L2获得的解,可能就像下面这样,每个维度都有很多很小的,但是不为0的值:
明白了稀疏性的意思,接下来我来解释为什么会这样。
我们来回忆一下高中的内容,一个函数在一个点
点取得极小值的条件是什么?
第一反应是它在
这一点的导数
,但是其实这个是不对的。
首先,对于绝对值函数
,它取极小值的点
处是不可导的。但是0点依然是它的极小值点。
其次,就算可以求导也不一定是极小值点。打个比方
在
点的导数是0,但是0并不是它的一个极小值的点。
一个函数在点
处取得极小值的条件应该是,在它的稍微左边儿一点点,导数小于0,在它的右边儿,导数大于0,即: