L1正则化和L2正则化
- L0范数:向量中非0元素的个数
- L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
- L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合
一、L0正则化
通过引入L0正则项,我们可以使模型稀疏化且易于解释,并且在某种意义上实现了「特征选择」。这看起来很美好,但是L0正则项:非连续、非凸、不可导。因此,L0正则项虽好,但是求解这样的最优化问题,难以在多项式时间内找到有效解(NP-Hard 问题)。
于是我们考虑 L0范数最紧的凸放松:L1-范数。
二、L1正则化(Manhattan-norm)
1.L1正则先验分布为什么是Laplace分布?
(1)什么是Laplace分布?
那么它就是拉普拉斯分布。其中,μ 是位置参数,b > 0 是尺度参数。如果 μ = 0,b=1, 那么,正半部分恰好是1/2倍 λ = 1的指数分布。
(2)解释
对于模型权重系数w的求解释通过最小化目标函数实现的,也就是求解:$min_wJ(w;X,y)$
2.L1正则化
需注意,L1 正则化除了和L2正则化一样可以约束数量级外,L1正则化还能起到使参数更加稀疏的作用,稀疏化的结果使优化后的参数一部分为0,另一部分为非零实值。非零实值的那部分参数可起到选择重要参数或特征维度的作用,同时可起到去除噪声的效果。此外,L1正则化和L2正则化可以联合使用:
这种形式也被称为“Elastic网络正则化”。
L1相比于L2,有所不同:
- L1减少的是一个常量,L2减少的是权重的固定比例
- 孰快孰慢取决于权重本身的大小,权重刚大时可能L2快,较小时L1快
- L1使权重稀疏,L2使权重平滑,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0
- 实践中L2正则化通常优于L1正则化。
3.为什么要生成稀疏矩阵?
上面提到L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择。为什么要生成一个稀疏矩阵?
稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0. 通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。
4.L1正则化和特征选择
假设有如下带L1正则化的损失函数:
在图中,我们有三组「等值线」。位于同一条等值线上的w1与w2,具有相同的值(平方误差、L1-范数或L2-范数)。并且,对于三组等值线来说,当 (w1,w2)沿着等值线法线方向,像外扩张,则对应的值增大;反之,若沿着法线方向向内收缩,则对应的值减小。
因此,对于目标函数Obj(F)来说,实际上是要在正则项的等值线与损失函数的等值线中寻找一个交点,使得二者的和最小。
对于L1-正则项来说,因为L1-正则项的等值线是一组菱形,这些交点容易落在坐标轴上。因此,另一个参数的值在这个交点上就是零,从而实现了稀疏化。
对于L2-正则项来说,因为L2-正则项的等值线是一组圆形。所以,这些交点可能落在整个平面的任意位置。所以它不能实现「稀疏化」。但是,另一方面,由于 (w1,w2)落在圆上,所以它们的值会比较接近。这就是为什么L2-正则项可以使得参数在零附近稠密而平滑。
5.解决L1不可导问题的方法
【Lasso回归使用L1正则,这个问题可以看做是求解Lasso回归的L1】
Lasso回归使得一些系数变小,甚至还是一些绝对值较小的系数直接变为0,因此特别适用于参数数目缩减与参数的选择,因而用来估计稀疏参数的线性模型。但是Lasso回归有一个很大的问题,导致我们需要把它单独拎出来讲,就是它的损失函数不是连续可导的,由于L1范数用的是绝对值之和,导致损失函数有不可导的点。也就是说,我们的最小二乘法,梯度下降法,牛顿法与拟牛顿法对它统统失效了。那我们怎么才能求有这个L1范数的损失函数极小值呢?
两种全新的求极值解法坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression, LARS)该隆重出场了。
(1)坐标轴下降法
坐标轴下降法和梯度下降法具有同样的思想,都是沿着某个方向不断迭代,但是梯度下降法是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向。
于是我们的优化目标就是在θ的n个坐标轴上(或者说向量的方向上)对损失函数做迭代的下降,当所有的坐标轴上的θi(i = 1,2,...n)都达到收敛时,我们的损失函数最小,此时的θ即为我们要求的结果。
通过以上迭代过程可以看出
- 坐标轴下降法进行参数更新时,每次总是固定另外m-1个值,求另外一个的局部最优值,这样也避免了Lasso回归的损失函数不可导的问题。
- 坐标轴下降法每轮迭代都需要O(mn)的计算。(和梯度下降算法相同)
和梯度下降做一个比较:
- a) 坐标轴下降法在每次迭代中在当前点处沿一个坐标方向进行一维搜索 ,固定其他的坐标方向,找到一个函数的局部极小值。而梯度下降总是沿着梯度的负方向求函数的局部最小值。
- b) 坐标轴下降优化方法是一种非梯度优化算法。在整个过程中依次循环使用不同的坐标方向进行迭代,一个周期的一维搜索迭代过程相当于一个梯度下降的迭代。
- c) 梯度下降是利用目标函数的导数来确定搜索方向的,该梯度方向可能不与任何坐标轴平行。而坐标轴下降法法是利用当前坐标方向进行搜索,不需要求目标函数的导数,只按照某一坐标方向进行搜索最小值。
- d) 两者都是迭代方法,且每一轮迭代,都需要O(mn)的计算量(m为样本数,n为系数向量的维度)
(2)最小角回归法
最小角回归法对前向梯度算法和前向选择算法做了折中,保留了前向梯度算法一定程度的精确性,同时简化了前向梯度算法一步步迭代的过程。具体算法是这样的: 、
最小角回归法是一个适用于高维数据的回归算法,其主要的优点有:
- 特别适合于特征维度n 远高于样本数m的情况。
- 算法的最坏计算复杂度和最小二乘法类似,但是其计算速度几乎和前向选择算法一样
- 可以产生分段线性结果的完整路径,这在模型的交叉验证中极为有用
主要的缺点是:由于LARS的迭代方向是根据目标的残差而定,所以该算法对样本的噪声极为敏感。
三、L2正则化
1.L2正则先验分布为什么是高斯分布?
2.L2正则化
在深度学习中,用的比较多的正则化技术是L2正则化,其形式是在原先的损失函数后边再加多一项:
那加上L2正则项的损失函数就可以表示为:
其中θ就是网络层的待学习的参数,λ则控制正则项的大小,较大的取值将较大程度约束模型复杂度,反之亦然。
L2约束通常对稀疏的有尖峰的权重向量施加大的惩罚,而偏好均匀的参数。这样的效果是鼓励神经单元利用上层的所有输入,而不是部分输入。所以L2正则项加入之后,权重的绝对值大小就会整体倾向于减少,尤其不会出现特别大的值(比如噪声),即网络偏向于学习比较小的权重。所以L2正则化在深度学习中还有个名字叫做“权重衰减”(weight decay),也有一种理解这种衰减是对权值的一种惩罚,所以有些书里把L2正则化的这一项叫做惩罚项(penalty).
我们通过一个例子形象理解一下L2正则化的作用,考虑一个只有两个参数w1和w2的模型,其损失函数曲面如下图所示。从a可以看出,最小值所在是一条线,整个曲面看起来就像是一个山脊。那么这样的山脊曲面就会对应无数个参数组合,单纯使用梯度下降法难以得到确定解。但是这样的目标函数若加上一项
则曲面就会变成b图的曲面,最小值所在的位置就会从一条山岭变成一个山谷了,此时我们搜索该目标函数的最小值就比先前容易了,所以L2正则化在机器学习中也叫做“岭回归”(ridge regression)。
3.为什么L2正则化不具有稀疏性?
假设有如下带L2正则化的损失函数:
4.为什么L2正则化可以获得值很小的参数?
四、面试问题
1.机器学习中使用「正则化来防止过拟合」到底是一个什么原理?为什么正则化项就可以防止过拟合?
https://www.zhihu.com/question/20700829
(1)过拟合发生的本质原因
由于监督学习问题的不适定:数据远远少于模型空间。因此过拟合现象的发生,可以分解成以下三点:
- 有限的训练数据不能完全反映出一个模型的好坏,然而我们却不得不在这有限的数据上挑选模型,因此我们完全有可能挑选到在训练数据上表现很好而在测试数据上表现很差的模型,因为我们完全无法知道模型在测试数据上的表现。
- 如果模型空间很大,也就是有很多很多模型以给我们挑选,那么挑到对的模型的机会就会很小。
- 与此同时,如果我们要在训练数据上表现良好,最为直接的方法就是要在足够大的模型空间中挑选模型,否则如果模型空间很小,就不存在能够拟合数据很好的模型。
由上3点可见,要拟合训练数据,就要足够大的模型空间;用了足够大的模型空间,挑选到测试性能好的模型的概率就会下降。因此,就会出现训练数据拟合越好,测试性能越差的过拟合现象。
(2)为什么正则化能够避免过拟合
因为正则化就是控制模型空间的一种办法。正则化能够在保证模型有效的前提下使得模型简单,而越简单的模型泛化能力越强。就像求解n个一阶变量的方程组,但是方程组的个数不足n,这样就会有无数解,引入正则化项使得有唯一解,而且此解会使该方程组简单。
2.什么是正则项,L1范式,L2范式区别是什么,各自用在什么地方?L1 与 L2 的区别以及如何解决L1 求导困难
L1 和 L2 范数在机器学习上最主要的应用大概分下面两类
- 作为损失函数使用
- 作为正则项使用,也即所谓 L1-regularization 和 L2-regularization
(1)损失函数
- L1-norm 损失函数,又被称为 least absolute deviation (LAD,最小绝对偏差)
- L2-norm 损失函数,又有大名最小二乘误差 (least squares error, LSE)
为什么大家一般都用 L2 损失函数,却不用 L1 呢?
主要是因为绝对值的倒数是不连续的。同样的对于 L1 和 L2 损失函数的选择,也会碰到同样的问题,所以最后大家一般用 L2 损失函数而不用 L1 损失函数的原因就是:
因为计算方便!可以直接求导获得取最小值时各个参数的取值。
此外还有一点,用 L2 一定只有一条最好的预测线,L1 则因为其性质可能存在多个最优解。
L1 损失函数好处,就是鲁棒性 (Robust) 更强,对异常值更不敏感。
(2)正则项
这两个正则项最主要的不同,包括两点:
- L2 计算起来更方便,而 L1 在特别是非稀疏向量上的计算效率就很低;
- 还有就是 L1 最重要的一个特点,输出稀疏,会把不重要的特征直接置零,而 L2 则不会;因为 L1 天然的输出稀疏性,把不重要的特征都置为 0,所以它也是一个天然的特征选择器。
- L2 有唯一解,而 L1 不是。
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种因素,累觉不爱。
3.L1正则怎么处理0点不可导的情形?
4.防止过拟合的策略?如何提高模型的泛化能力
防止过拟合的策略:
(1)获取更多数据
(2)使用合适的模型
a. 网络结构 Architecture
减少网络的层数、神经元个数等均可以限制网络的拟合能力;
b.训练时间 Early Stopping
对于每个神经元而言,其激活函数在不同区间的性能是不同的。当网络权值较小时,神经元的激活函数工作在线性区,此时神经元的拟合能力较弱(类似线性神经元)。有了上述共识之后,我们就可以解释为什么限制训练时间有用:因为我们在初始化网络的时候一般都是初始为较小的权值。训练时间越长,部分网络权值可能越大。如果我们在合适时间停止训练,就可以将网络的能力限制在一定范围内。
c.限制权值 Weight-decay,也叫正则化(regularization)
原理同上,但是这类方法直接将权值的大小加入到 Cost 里,在训练的时候限制权值变大。以 L2 regularization为例:
训练过程需要降低整体的 Cost,这时候,一方面能降低实际输出与样本之间的误差 C0,也能降低权值大小。
d.增加噪声Noise
在输入中加噪声:噪声会随着网络传播,按照权值的平方放大,并传播到输出层,对误差 Cost 产生影响。
在权值上加噪声:在初始化网络的时候,用0均值的高斯分布作为初始化。
对网络的响应加噪声:如在前向传播过程中,让默认神经元的输出变为 binary 或 random。
(3)结合多种模型:训练多个模型,以每个模型的平均输出作为结果
a.bagging
b.boosting
c.Dropout
(4)贝叶斯方法
提高模型泛化能力:
基本思路:先把模型搞复杂,复杂到得到令你满意的训练误差(训练误差要低于『令你满意的测试误差』),然后在慢慢调参、简化模型、添加先验和正则、改变数据维度、特征提取等,直到测试误差也满足『低于令你满意的测试误差』。
改进思路一般有两个:
(1)改进模型:
- ①换算法;
- ②调参数
(2)做好数据预处理:
有一个好的数据集远比有一个好的模型更为重要。
这里的“好”主要表现在两方面:
- ①做好特征选择;
- ②做好数据离散化、异常值处理、缺失填充等。
参考文献: