正则化(regularization)技术是机器学习中十分常用的技术,它在不同的模型或者情景中以不同的名字出现,比如以L2正则化为例,如果将L2正则化用于linear regression,那么这就对应了ridge regression;如果将L2正则化用于神经网络(neural network),那么L2对应为权重衰减(weight decay)。
正则化的作用实际上就是防止模型过拟合,提高模型的泛化能力。正则化的种类有很多,这里主要介绍在工程中用得较多的两类正则化,一个是L1正则化,另一个则是L2正则化。为了配合阐述,本文用linear regression的正则化作为例子来贯穿全文。
当我们用linear regression在训练数据集上训练模型时,我们定义一个最优化目标函数:
(1)
式中(x(i),y(i))为训练数据,w为线性模型的参数向量,为了使得模型能够充分拟合训练样本点,我们希望上述目标函数的值尽可能小,即:
(2)
但是由于实际中的训练数据量往往并不大,如果让模型完美拟合训练数据的话,很可能造成模型过拟合,从而使得模型的泛化能力较差。这一点可以从得到的模型参数向量w的各个分量中看出,其中大部分分量的绝对值都非常大,这种现象直观表现在图上就是曲线(曲面)不光滑,凹凸不平,很复杂;相反,如果w的各个分量的绝对值都很小,在0附近,那么曲线(曲面)就会显得很平滑。很显然,在机器学习中,我们更希望拟合出的曲线(曲面)更为平滑,因为这样的曲线(曲面)是具有较好的泛化能力的。那么如何将w各个分量的绝对值降低呢?这就要用到正则化技术了。在用正则化技术估计参数w时,引入了我们对参数的先验认知,即我们认为参数的绝对值应该很小。
正则化技术就是使得式(2)的值尽可能小,与此同时,要保证||w||的值也尽可能小,即:
(3)
在上式中,优化函数的目标变成了两个,w的取值不仅要使得L(w)的值最小,也要使得||w||的值最小。从上式我们可以看出,一方面要使得L(w)的取值最小,必然w的绝对值会取到很大,这样模型才能完美拟合训练样本点;另一方面,当w的绝对值很大时,||w||的值又会变得很大,因此为了权衡,只有使得w取值适当,才能保证式(3)的值取到最优。这样得到的曲线(曲面)比式(2)得到的曲线(曲面)平滑很多,因此具有泛化能力。值得注意的是,式中的t是L(w)与||w||之间的一个trade-off,如果t过大,那么表明对模型参数w的惩罚越狠,这样得到的模型处于欠拟合状态,如果t过小,那么表明对模型参数w的惩罚越小,这样得到的模型处于过拟合状态,只有选择合适的t,才能使得到的模型具有很好地泛化能力。关于如何选择t的值,工程上一般采取交叉验证的方式来确定一个较合理的t。
我们先来看L2正则化。
(4)
式中,||w||2为w的2范式,平方是为了求解的方便。
我们来看看L2正则化的性质。
1.从式(4)中可以看出,L2正则化对于绝对值较大的权重予以很重的惩罚,对于绝对值很小的权重予以非常非常小的惩罚,当权重绝对值趋近于0时,基本不惩罚。这个性质与L2的平方项有关系,即越大的数,其平方越大,越小的数,比如小于1的数,其平方反而越小。
2.从贝叶斯推导的角度看,我们可以认为式(4)中的第二项为参数w的一个均值为0的高斯先验分布,即,w~N(0,b2)。这也符合我们对于参数w的先验认知:w的绝对值不是很大。
3.从性质2可知,既然w的先验分布服从高斯分布,那么L2正则化的作用实际上就是使得参数向量w的大部分分量的值趋近于0,而不是等于0。这一点在处理具有共线性特征的特征集时非常重要,也是L2在这种情况下胜过L1的原因。
4.由于式(4)是个凸函数,并且函数可微,因此w的值具有解析解:
从解的解析表达式可以看出,w的求解不需要对X-1是否存在作任何假设,因为I为单位矩阵,因此解析式中的逆始终存在。
接下来我们看看L1正则化。
随着海量数据处理的兴起,工程上对于模型稀疏化的要求也随之出现了。这时候,L2正则化已经不能满足需求,因为它只是使得模型的参数值趋近于0,而不是等于0,这样就无法丢掉模型里的任何一个特征,因此无法做到稀疏化。这时,L1的作用随之显现。L1正则化的作用是使得大部分模型参数的值等于0,这样一来,当模型训练好后,这些权值等于0的特征可以省去,从而达到稀疏化的目的,也节省了存储的空间,因为在计算时,值为0的特征都可以不用存储了。
(5)
式(5)为L1正则化的linear regression,也叫lasso regression。式中||w||1为w的1范式,即 。
同样,我们来看看L1正则化的性质。
1.从式(5)中可以看出,L1正则化对于所有权重予以同样的惩罚,也就是说,不管模型参数的大小,对它们都施加同等力度的惩罚,因此,较小的权重在被惩罚后,就会变成0。因此,在经过L1正则化后,大量模型参数的值变为0或趋近于0,当然也有一部分参数的值飙得很高(这一点在性质2解释)。由于大量模型参数变为0,这些参数就不会出现在最终的模型中,因此达到了稀疏化的作用,这也说明了L1正则化自带特征选择的功能,这一点十分有用。
2.从贝叶斯推导的角度看,我们可以认为式(5)中的第二项为参数w的一个均值为0的拉普拉斯先验分布。从高斯概率密度函数和拉普拉斯概率密度函数的图形中可以看出,拉普拉斯概率密度函数的截尾比高斯概率密度函数的截尾更长,也就是说L1正则化更能够接受绝对值较大的参数值。
3.从性质2可知,既然拉普拉斯分布比高斯分布有更长的截尾,那么可以推知L1正则化的鲁棒性要好于L2正则化,也就是说,L1正则化对于绝对值较大的参数没有L2正则化那么敏感,从而能够容忍一些这样的参数留下。
4.由1范式的定义可知,L1正则化在任意权值为0的时候不可导,因此式(5)不能求出w的解析解,同时,基于梯度的优化算法也无法高效地计算出w的值,因此对于L1正则化,一般可以采取坐标下降法求解。
L1正则化和L2正则化在实际应用中的比较。
L1在确实需要稀疏化模型的场景下,才能发挥很好的作用并且效果远胜于L2。在模型特征个数远大于训练样本数的情况下,如果我们事先知道模型的特征中只有少量相关特征(即参数值不为0),并且相关特征的个数少于训练样本数,那么L1的效果远好于L2。比如在文本分类中,如果我们将一篇文章的所有词语作为它的特征,那么很显然,其中绝大部分特征是无关特征,只有很少量的特征是相关特征。这时,如果我们将每篇文章作为训练样本,直接扔进L1正则化的模型,那么可以通过L1的稀疏化性质去掉无关特征,只留下相关特征。从而L1在这里起到了特征选择的作用,也就省去了特征工程这一步,因为特征工程往往还是需要人工干预的,L1的做法则直接让数据说话,避免人工干预。然而,如果模型的特征服从高斯分布,那么从贝叶斯的观点来看,即便特征数远超训练样本数,L2也要优于L1。
然而,需要注意的是,当相关特征数远大于训练样本数时,无论是L1还是L2,都无法取得很好的效果。
从上面的观点可以看出,L1似乎总是好于L2,那么L2还有什么存在的价值呢?然而在实际工程中,L1不总是像万金油一样,随处可用。对于上面文本分类的例子,结合我实际的工程经验谈谈L1的弊端。
在最开始做文本分类的时候,我也是依然毫不犹豫地选择了L1来做特征选择,以此训练出分类模型,但得到的分类模型效果却不尽如人意,训练误差和泛化误差都较高。后来经过分析得知,在进行模型训练时,没有对数据的特征作分析,而盲目地运用L1正则化,从而导致失败。在经过分析后发现,训练数据里的特征很多是共线性的,比方说,有几个特征的共线性很高,并且它们对于分类都很重要,这时L1的做法是随机选择其中一个特征,而扔掉其它的特征。试想,如果训练数据中有很多这样类似的特征,那么经过L1正则化后的模型将会失去很多有用的特征,进而导致模型误差较大。这个时候,我们不得不选择L2正则化了,但由于L2正则化在面对大量无关特征并且特征不是由高斯分布产生时,误差依然很大,因此我们需要在训练模型之前,先进行特征选择,然后再用L2正则化,L2正则化的特点是,在面对几个存在共线性的特征时,它会将权值平分给这些特征,从而使得这些有用的特征都得以留下,从而改进了文本分类的准确率。
也许读者认为,加入了特征工程的L2正则化稍显麻烦,确实是这样的。实践中也可以采取L1+L2结合的方式,即elastic net。这种方式同时兼顾特征选择(L1)和权重衰减(L2)。其公式如下
(6)
上式中,t为正则项与L(w)之间的trade-off系数,和之前的描述一致,p是elastic net里独有的参数,它是L1和L2之间的一个trade-off,如果p为0,那么上式退化为L2正则化,如果p为1,那么上式退化为L1正则化。所以当p取值为0到1时(不包含端点),上式兼顾了L1和L2的特点。又由于L1为1范式,L2为2范式,那么elastic net就介于1范式和2范式之间。
关于elastic net的详细内容将不在本文描述。