一般情况下,在机器学习中,不管是分类还是回归任务,为了不因特征过多而导致过拟合,一般通过减少特征或者惩罚不重要特征的权重来缓解这个问题。
正则化(Regularization)是我们为了避免过拟合问题常常采用的一种方法,其核心思想就是在损失函数中加入被称为正则化的惩罚。这样我们就可以筛选出最有效的特征,较少特征权重,防止过拟合。
假设模型在训练集上的损失函数为 J ( w ) J(w) J(w)(注意,这里 w w w表示的是整个神经网络中所有的参数,包括边上的权重w和偏置b),那么我们在进行梯度下降时不是直接优化 J ( w ) J(w) J(w),而是优化 J ( w ) + λ R ( w ) J(w)+\lambda R(w) J(w)+λR(w)。
R ( w ) R(w) R(w)就是要在损失函数中加入的正则化项,它通过对权重参数求解范数的方式对模型的复杂度进行了刻画(一般而言,权重w决定了模型的复杂程度)。 λ \lambda λ是提前挑选的值,控制我们偏好小范数权重的程度(越大的 λ \lambda λ偏好范数越小的权重)。
常用的范数项有L0范数,L1范数,L2范数。
- L0范数:向量中非零元素的个数。
- L1范数:向量中所有数的绝对值之和。
- L2范数:向量中所有数的平方和再开平方。
下面是L1正则化和L2正则化的作用:
- L1正则化可以产生稀疏权重矩阵,稀疏权重矩阵用于选择有用的特征,过滤掉没用的特征。
- L2正则化会让权重尽可能地小(接近于0),权重值小的模型可以适应各种偏移较大的数据集,从而防止过拟合。
至于为什么L1正则化可以产生稀疏权重矩阵,L2正则化可以防止过拟合,这篇文章讲得挺好的。点击这里
TensorFlow提供了计算L1正则化和L2正则化的函数tf.contrib.layers.l1_regularizer(scale,scope=None)和tf.contrib.layers.l2_regularizer(scale,scope=None)。其中,参数scope就是上面所提到的 λ \lambda