从上面的例子可以看出,即便我们拥有大量的训练数据,但其中仍有许多组合会非常罕见,因此我们最终可能会得到一些噪声系数,并可能遇到过拟合问题。可想而知,如果遇到过拟合问题,我们就要进行正则化。遗憾的是,L2正则化不能完成此任务。L2正则化可以使权重变小,但是并不能使它们正好为0。
那么,能不能以特定方式进行正则化,既能缩减模型大小,又能降低内存使用量呢?我们要做的就是将部分权重设为0,这样就不必处理其中的一些特定组合了。这样既节省了内存,还有可能帮助我们解决过拟合问题。不过必须小心一点,因为我们只想去掉那些额外的噪音系数,而不想失去正确的系数。所以要做的就是明确地将一些权重设为0,也就是所谓的L0正则化,它对不是0的权重进行惩罚。但是,它没有凸性(convex),难以优化。因此,L0正则化这种想法在实践中并不是一种有效的方法。
如果我们将条件放宽至L1正则化,只对权重的绝对值总和进行处罚,那么仍可以促使模型变得非常稀疏。这也会让其中的许多系数归零。这种正则化与L2正则化略有不同(因为L2也会尝试设置较小的权重,但实际上并不会让权重归零)。
在线性回归模型中,一个权重为0的特征等同于不用这个特征。为了减少模型复杂性,一种方法是使用正则函数来鼓励一些权重为0。除了避免过拟合外,这种做法也会更有效。下面我们通过一些代码实例来体会。
先装载数据集:
第9章 TensorFlow高级知识
299