为了避免过拟合,一种手段是使用正则化(Regularizaiton)来限制模型的复杂程度。Regularization从英文直译过来是“规则化”,就是说,在原来的问题求解条件上加一些规则限制,避免模型过于复杂,出现过拟合的情况。
我的网站公示显示效果更好,欢迎访问:https://lulaoshi.info/machine-learning/linear-model/regularization.html
很多机器学习模型求解模型参数
,以让损失函数最小。例如,对于一个有
条样本的训练集,线性回归的损失函数为:
在上面公式基础上,我们添加一个正则项,得到一个新的损失函数:
注意,模型的
有
维,新增加的正则项直接对每个
取平方。
直观上来讲,当我们最小化当前这个新的损失函数的时候,一方面要使线性回归本身的误差项
最小化,另一方面,每个
不能太大,否则正则项
会很大。正则项又被称为惩罚项,用来惩罚各个
过大导致的模型过于复杂的情况。正则项中的
是用来平衡损失函数和正则项之间的系数,被称为正则化系数,系数越大,正则项的惩罚效果越强,后文还会提到正则化系数。
对于刚刚得到的新损失函数,我们可以对这个公式进行求导,以得到梯度,进而可以使用梯度下降法求解。
线性回归使用二次正则项来惩罚参数
的整个过程被称为岭回归(Ridge Regression),或者说使用了L2正则化(L2 Regularization)。其他机器学习模型如逻辑回归和神经网络也可以使用L2正则化。
如果使用一次正则项来惩罚线性回归的参数
,被称为Lasso(Least Absolute Shrinkage and Selection Operator) Regression,或者说回归使用了L1正则化:
可以看到,Lasso回归主要是使用绝对值来做惩罚项。绝对值项在零点有一个突变,它的求导稍微麻烦一些。Lasso回归求解需要用到次梯度(Subgradient)方法,或者使用近端梯度下降(Promximal Gradient Descent,PGD)法,这里不再赘述。
正则项来源于于线性代数中范数(Norm)的概念。范数是一个函数,对于函数
,有
,其中,
是一个向量空间。也就是说,范数将向量转换为一个非负数标量。常见的范数有:
范数
如果训练数据属于高维稀疏(Sparse)特征,比如说一个100,000,000维特征中只有1,000维是非零的,剩下特征都是0或者是空,这样训练出来的模型中参数
很可能很多都接近0。在房价预测中,如果我们想使用房屋的经纬度特征,具体而言,假设全球纬度可以被切分为10,000份,经度可以被切分为10,000份,一座房子的地理位置可以用经纬度交叉表示为“经度1001_维度999”,房子在这个位置该特征标记为1,否则该特征标记为0。整个模型中关于经纬度的特征就达到了100,000,000维。实际上,我们知道,除了城市以外,绝大多数的地区并没有人居住,比如高山和海洋等地区,模型中地理位置特征参数绝大多数其实都应该为零。如果我们将参数
都保存下来,模型非常大,占用大量内存空间。实际上,也没必要将那些没用的参数都保存下来,如果我们将这些无用参数都置为零,只记录有用的参数,那么模型所占用的空间将大大缩小。模型参数的零分量非常多的解被称为稀疏解。
正则化正好可以解决上述问题。一种方法是使用一个惩罚项来统计模型中非零参数的个数,即希望模型
的零分量尽可能多,非零分量尽可能少。这种方法比较直观,它实际上是L0范数,但在求解时,这种方法会将一个凸优化问题变成非凸优化问题,不方便求解。L2正则化增加平方惩罚项,会让参数尽可能小,但不会强制参数为零。L1正则化也会惩罚非零参数,能在一定程度上让一些接近零的参数最终为零,近似起到L0的作用。从梯度下降的角度来讲,L2是平方项
,其导数是
,按照导数的方向进行梯度下降,可能不会降到绝对值零;L1是绝对值项
,绝对值项能够迫使那些接近零的参数最终为零。
L1和L2正则化的区别 来源:Google Developers
上图是一个8维参数模型,经过训练后可以看到,L1正则化更容易让接近零的参数最终归为零。
我们再从可视化的角度来理解L1和L2正则化。假定我们的线性回归模型只有两维特征,确切地说,
只有两个分量
和
,我们将其作为两个坐标轴,绘制平方误差项与正则项的等值线,如下图所示。
L1正则化比L2正则化更容易使得参数为零 来源:《机器学习》
其中,右上角为平方误差项的等值线,是平方误差项取值相同的点的连线;坐标轴中心为正则项的等值线,是在
空间中正则项取值相同的点的连线。如果没有正则项,那么最优解应该是平方误差项等值线的中心,即平方误差项最小的点。有了正则项,最优解是平方误差项和正则项的折中,即图中的相交处。从图中可以看出,L1正则的交点在坐标轴上,即
或
为0,而L2正则的交点不容易在坐标轴上。
下面的公式对正则化做了一个更一般的定义:
正则化系数
努力平衡训练数据的拟合程度和模型本身的复杂程度:
关于正则化的不同选项和参数,可以在TensorFlow Playground里做一些尝试,观察不同选项对结果造成的差异。网址:http://playground.tensorflow.org/
TensorFlow Playground
参考资料