稀疏性正则化:L1 正则化

稀疏矢量通常包含许多维度。创建特征组合会导致包含更多维度。鉴于此类高维度特征向量,模型大小可能会变得庞大,并且需要大量的 RAM。

在高维度稀疏矢量中,最好尽可能使权重正好降至 0。正好为 0 的权重基本上会从模型中移除相应特征。将特征设为 0 可以节省 RAM,并可以减少模型中的噪声。

例如,假设某个住房数据集不仅涵盖加利福尼亚州,而且涵盖全球。如果按分钟(每度 60 分钟)对全球纬度进行分桶,则会在稀疏编码中获得大约 10,000 个维度;如果按分钟对全球经度进行分桶,则会产生大约 20,000 个维度。这两个特征的特征组合会产生大约 2 亿个维度。这 2 亿个维度中的许多维度都表示居住地非常有限的区域(例如海洋中部),很难利用这些数据进行有效泛化。如果代付存储这些不需要的维度的 RAM 开销就太不明智了。因此,最好是将无意义维度的权重降至正好 0,从而避免在推断时为这些模型系数的存储成本付费。

我们或许能够通过添加适当选择的正则化项,将此想法编码为训练时解决的优化问题。

L2 正则化能完成此任务吗?很遗憾,不会。 L2 正则化可以使权重变小,但并不能使其正好为 0.0。

另一种方法是尝试创建一个正则化项,减少模型中非零系数值的数量。只有在模型能够与数据拟合时,增加此计数才有意义。遗憾的是,虽然这种基于计数的方法看起来很有吸引力,但它会将我们的凸优化问题转变为非凸优化问题。因此,L0 正则化这种想法在实践中并不现实。

不过,L1 正则化这种正则化项的作用近似于 L0,但它具有凸优化的优势,因此可以有效地进行计算。因此,我们可以使用 L1 正则化使模型中很多信息缺乏的系数正好为 0,从而在推断时节省 RAM。

L1 与 L2 正则化。

L2 和 L1 采用不同的方式降低权重:

  • L2 会降低权重2
  • L1 会降低 |权重|。

因此,L2 和 L1 具有不同的导数:

  • L2 的导数为 2 * 权重
  • L1 的导数为 k(一个常数,其值与权重无关)。

您可以将 L2 的导数的作用理解为每次移除 x% 的权重。正如 Zeno 所说,即使将数字的 x% 按十亿次次移除,递减的数字也永远不会完全达到 0。(Zeno 不太熟悉浮点精度限制,浮点精度限制可能会导致结果正好为零。)无论如何,L2 通常不会使权重变为 0。

您可以将 L1 的导数视为每次从权重中减去一个常数的力。不过,由于绝对值,L1 在 0 处具有不连续性,这会导致与 0 相交的减法结果变为 0。例如,如果减法会使权重从 +0.1 变为 -0.2,则 L1 会将权重设为正好 0。就这样,L1 使权重变为 0。

L1 正则化(减少所有权重的绝对值)被证明对宽度模型非常有效。

请注意,该说明适用于一维模型。

点击下面的“播放”按钮 (),比较 L1 和 L2 正则化对权重网络的影响。