在线性代数,函数分析等数学分支中,范数(Norm)是一个函数,其赋予某个向量空间(或矩阵)中的每个向量以长度或大小。对于零向量,另其长度为零。直观的说,向量或矩阵的范数越大,则我们可以说这个向量或矩阵也就越大。有时范数有很多更为常见的叫法,如绝对值其实便是一维向量空间中实数或复数的范数,而Euclidean距离也是一种范数。
范数的一般化定义:设\(p\geq 1\)的实数,p-norm定义为:
虽然L0严格说不属于范数,我们可以采用等式\(\ref{p}\)来给出l0-norm得定义:
对于向量X,其L1范数的定义如下:
当然范数中最常见,也最著名的非L2范数莫属。其应用也几乎包括科学和工程的各个领域。定义公式如下:
不知道有多少人是因为机器学习中的正则化和特征选择等才开始了解这些范数的,至少我是。L0范数本身是特征选择的最直接最理想的方案,但如前所述,其不可分,且很难优化,因此实际应用中我们使用L1来得到L0的最优凸近似。L2相对于L1具有更为平滑的特性,在模型预测中,往往比L1具有更好的预测特性。当遇到两个对预测有帮助的特征时,L1倾向于选择一个更大的特征。而L2更倾向把两者结合起来。
在机器学习中正则化是指在损失函数中通过引入一些额外的信息,来防止ill-posed问题或过拟合问题。一般这些额外的信息是用来对模型复杂度进行惩罚(Occam's razor)。其一般形式如下:
$$
Loss\left( X,Y \right)\; =\; \mbox{E}rror\left( X,Y \right)\; +\; \alpha \left| \left| w \right| \right| \tag{9}
$$
\(\; \left| \left| w \right| \right|\)便可以选取L1或是L2范数来作为惩罚项,不同的模型,其损失函数也不同,对于线性回归而言,如果惩罚项选择L1,则是我们所说的Lasso回归,而L2则是Ridge回归。下面我们列出了不同模型中的正则化的损失函数(来自Andrew Ng的Machine Learning课程):
Regularized Logistic Regression
$$
J\left( \theta \right)\; =\; -\; \frac{1}{m}\left[ \sum_{i=i}^{m}{y^{\left( i \right)}\log h_{\theta }\left( x^{\left( i \right)} \right)\; +\; \left( 1-y^{\left( i \right)} \right)\log \left( 1\; -\; h_{\theta }\left( x^{\left( i \right)} \right) \right)} \right]\; +\; \frac{\lambda }{2m}\sum_{j=1}^{n}{\theta _{j}^{2}}
$$
Regularized Neural Network
$$
J\left( \theta \right)\; =\; -\; \frac{1}{m}\left[ \sum_{i=i}^{m}{\sum_{k=1}^{K}{y_{k}^{\left( i \right)}\log \left( h_{\theta }\left( x^{\left( i \right)} \right) \right)_{k}}\; +\; \left( 1-y^{\left( i \right)} \right)\log \left( 1\; -\; \left( h_{\theta }\left( x^{\left( i \right)} \right) \right)_{k} \right)} \right]\; +\; \frac{\lambda }{2m}\sum_{l=1}^{L-1}{\sum_{i=1}^{s_{l}}{\sum_{j=1}^{s_{l}+1}{\left( \theta _{ji}^{\left( l \right)} \right)^{2}}}}
$$
Soft Margin SVM
$$
\frac{1}{2}|w|^2+C\sum_i\max(0,1-y_i(w^\intercal x_i+b))
$$
从上面可以看出常用的正则化项多是L2范数,除了防止过拟合的问题,还有一个好处就是能否改善ill-posed(condition)问题。尤其是当训练样本相对于特征数非常少时,其矩阵便是非满秩的,往往倾向于有无数个解,且是不可逆的。其condition num便会很大。一方面,根据此得到的最优化值很不稳定,往往某个特征变量很小的变动都会引发最终结果较大的偏差。另外通过矩阵求逆从而求的最优解就会变的非常困难。如对于线性回归而言,求的最优解析解为:
$$
w^{ˆ}\; =\; \left( X^{T}X \right)^{-1}X^{T}y
$$
而加上L2正则项后,其变为:
$$
w^{\cdot }\; =\; \left( X^{T}X\; +\; \lambda I \right)^{-1}X^{T}y
$$
从而可以直接求逆,改善了condition number。
而对于无解析解,通过迭代优化的算法,L2正则化通过将目标函数变为λ-strongly convex(λ强凸),有效的加快了其收敛速度。
正则化项从贝叶斯学习理论的角度来看,其相当于一种先验函数。即当你训练一个模型时,仅仅依靠当前的训练集数据是不够的,为了实现更好的预测(泛化)效果,我们还应该加上先验项。而L1则相当于设置一个Laplacean先验,去选择MAP(maximum a posteriori)假设。而L2则类似于 Gaussian先验。如下图所示:
从上图可以看出,L1先验对大值和小值的tolerate都很好,而L2先验则倾向于均匀化大值和小值。
机器学习社区里通常把特征选择的方法分为三种。一种是基于统计学的一些方法,对特征进行预筛选,选出子集作为模型输入。如统计推理使用的假设检验,P值。另一种是采用某种成熟的学习算法进行特征选择,如决策树中采用信息增益来选择特征。还有一种便是在模型算法中进行自动特征选择。而L1范数作为正则化项,其特征选择的图谱倾向于spiky,实现了有效的特征选择。
稀疏编码也是想通过寻找尽可能少的特征表达某个输入的向量X。
$$
\min \; a_{i}^{\left( j \right)},\phi _{i}\; \; \sum_{j=1}^{m}{\left| \left| x^{\left( j \right)}-\sum_{i=1}^{k}{a_{i}^{\left( j \right)}\phi _{i}} \right| \right|^{2}\; +\; \lambda \sum_{i=1}^{k}{\mbox{S}\left( a_{i}^{\left( j \right)} \right)}}
$$
其中\(\phi _{i}\)是所要寻找的基向量,\(a_{i}^{\left( j \right)}\)是我们要优化的各个基向量的权重。最右边的表达式便是其正则化惩罚项,在这里也称Sparse Cost。实际中我们通常便用L1范数。
[1.] Wiki: Norm.
[2.] Rorasa's blog.
[3.] MaxJax.
[4.] 机器学习中的范数规范化.
[5.] Difference between l1 and l2.
[6.] gradient-descent-wolfe-s-condition-and-logistic-regression.