Contents
  1. 1. 定义
  2. 2. 补充知识-向量的范数
  3. 3. 范数规则化
    1. 3.1. L0范数与L1范数
    2. 3.2. L2范数

定义

模型选择的典型方法是正则化,正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或罚项。正则化一般是模型复杂度的单调函数,模型越复杂,正则化值就越大。正则化项可以是模型参数向量的范数。
正则化一般具有如下形式:
$$min_{f\in \mathcal{F}} \frac{1}{N} \sum_{i=1}^N L(y_i, f(x_i)=\lambda J(f))$$
其中,第一项是经验风险,第二项是正则化项,λ>=0是为调整两者之间关系的系数。

正则化项可以取不同的形式,例如回归问题中,损失函数是平方损失,正则化项可以是参数向量的L2范数:
$$L(w) = \frac{1}{N} \sum_{i=1}^N ((f(x_i;w)-y_i)^2 + \frac{\lambda}{2}||w||^2$$
||w||^2表示参数向量w的L2范数。

正则化项也可以是参数向量L1的范数:
$$L(w) = \frac{1}{N} \sum_{i=1}^N ((f(x_i;w)-y_i)^2 + \frac{\lambda}{2}||w||_1$$
||w||_1表示参数向量w的L1范数。

第一项的经验风险较小的模型可能比较复杂(有多个非零参数),这时第2
箱的模型复杂度会比较大,正则化的作用是选择经验风险和模型复杂度同时较小的模型。

补充知识-向量的范数

范数,是具有“长度”概念的函数。
这里以Cn空间为例,Rn空间类似。
最常用的范数就是p-范数。若$\mathbf{x} = [x_1,x_2,…,x_n]^T$,那么
$$||\mathbf{x}||^p = (|x_1|^p + |x_2|^p +\cdots +|x_n|^p)^{\frac{1}{p}}$$
可以验证p-范数确实满足范数的定义。其中三角不等式的证明不是平凡的,这个结论通常称为闵可夫斯基(Minkowski)不等式。
当p取1,2,∞的时候分别是以下几种最简单的情形:
1-范数:$║x║_1=│x_1│+│x_2│+…+│x_n│$
2-范数:$║x║_2=(│x_1│^2+│x_2│^2+…+│x_n│^2)^{\frac{1}{2}}$
∞-范数:$║x║_∞=max(│x_1│,│x_2│,…,│x_n│)$
其中2-范数就是通常意义下的距离。
对于这些范数有以下不等式:║x║∞ ≤ ║x║2 ≤ ║x║1 ≤ n^(1/2) ║x║2 ≤ n║x║∞

范数规则化

参考博客:http://blog.csdn.net/zouxy09/article/details/24971995/

监督机器学习问题无非就是“minimizeyour error while regularizing your parameters”,也就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。

规则化符合奥卡姆剃刀(Occam’s razor)原理:在所有可能选择的模型中,我们应该选择能够很好地解释已知数据并且十分简单的模型。从贝叶斯估计的角度来看,规则化项对应于模型的先验概率。民间还有个说法就是,规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term)。

一般来说,监督学习可以看做最小化下面的目标函数:
$$min_{f\in \mathcal{F}} \frac{1}{N} \sum_{i=1}^N L(y_i, f(x_i)=\lambda J(f))$$
机器学习的大部分带参模型都和这个不但形似,而且神似。是的,其实大部分无非就是变换这两项而已。对于第一项Loss函数,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了;还有等等。不同的loss函数,具有不同的拟合特性,这个也得就具体问题具体分析的。

规则化函数J(f)也有很多种选择,一般是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。比如,规则化项可以是模型参数向量的范数。然而,不同的选择对参数w的约束不同,取得的效果也不同,但我们在论文中常见的都聚集在:零范数、一范数、二范数、迹范数、Frobenius范数和核范数等等。这么多范数,到底它们表达啥意思?具有啥能力?什么时候才能用?什么时候需要用呢?不急不急,下面我们挑几个常见的娓娓道来。

L0范数与L1范数

L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。这太直观了,太露骨了吧,换句话说,让参数W是稀疏的。

L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。现在我们来分析下这个价值一个亿的问题:为什么L1范数会使权值稀疏?有人可能会这样给你回答“它是L0范数的最优凸近似”。实际上,还存在一个更美的回答:任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。这说是这么说,W的L1范数是绝对值,|w|在w=0处是不可微,但这还是不够直观。这里因为我们需要和L2范数进行对比分析。所以关于L1范数的直观理解,请待会看看第二节。

对了,上面还有一个问题:既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数.

来个一句话总结:L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。
好,到这里,我们大概知道了L1可以实现稀疏,但我们会想呀,为什么要稀疏?让我们的参数稀疏有什么好处呢?这里扯两点:

  1. 特征选择(Feature Selection):
    大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。

  2. 可解释性(Interpretability):

另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1*x1+w2*x2+…+w1000*x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w*就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wi都非0,医生面对这1000种因素,累觉不爱。

L2范数

除了L1范数,还有一种更受宠幸的规则化范数是L2范数: ||W||2。它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”。这用的很多吧,因为它的强大功效是改善机器学习里面一个非常重要的问题:过拟合。至于过拟合是什么,上面也解释了,就是模型训练时候的误差很小,但在测试的时候误差很大,也就是我们的模型复杂到可以拟合到我们的所有训练样本了,但在实际预测新的样本的时候,糟糕的一塌糊涂。通俗的讲就是应试能力很强,实际应用能力很差。擅长背诵知识,却不懂得灵活利用知识。例如下图所示(来自Ng的course):

上面的图是线性回归,下面的图是Logistic回归,也可以说是分类的情况。从左到右分别是欠拟合(underfitting,也称High-bias)、合适的拟合和过拟合(overfitting,也称High variance)三种情况。可以看到,如果模型复杂(可以拟合任意的复杂函数),它可以让我们的模型拟合所有的数据点,也就是基本上没有误差。对于回归来说,就是我们的函数曲线通过了所有的数据点,如上图右。对分类来说,就是我们的函数曲线要把所有的数据点都分类正确,如下图右。这两种情况很明显过拟合了。

OK,那现在到我们非常关键的问题了,为什么L2范数可以防止过拟合?回答这个问题之前,我们得先看看L2范数是个什么东西。

L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。为什么越小的参数说明模型越简单?我也不懂,我的理解是:限制了参数很小,实际上就限制了多项式某些分量的影响很小(看上面线性回归的模型的那个拟合的图),这样就相当于减少参数个数。其实我也不太懂,希望大家可以指点下。

这里也一句话总结下:通过L2范数,我们可以实现了对模型空间的限制,从而在一定程度上避免了过拟合。

L2范数的好处是什么呢?这里也扯上两点:

1)学习理论的角度:
从学习理论的角度来说,L2范数可以防止过拟合,提升模型的泛化能力。

2)优化计算的角度:
从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。

Contents
  1. 1. 定义
  2. 2. 补充知识-向量的范数
  3. 3. 范数规则化
    1. 3.1. L0范数与L1范数
    2. 3.2. L2范数