作为正则化,Vowpal Wabbit 哈希碰撞比 L1 效果更好

Vowpal Wabbit hash collision works better than L1 as regularization

我有 VW 分类模型,我想检查它的特征数量和哈希冲突数量。我训练它并在不同的数据集上测试它。数据集包含超过 400k 个特征,因此使用 18 位 VW space,可以仅保存 260k 而不会发生冲突。

然后,为了检查它,我创建了两个可读模型:一个带有参数 --readable_model,用于获取所有哈希的数量,第二个带有参数 --invert_hash 用于获取所有特征的数量,甚至那些处于哈希冲突中的。有 425k 个特征和 208k 个哈希(不是 260k,因为我使用了一些带有 --keep 参数的过滤,据我所知,vw 保存到哈希 table 也忽略了 namespaces)。然后我用 ROC_AUC、MCC 和平均精度测量了模型的质量。结果为 0.903、0.564、0.591。

如您所见,散列冲突很大,所以我决定增加位 space 并将 -b 参数值设置为 24。然后我再次训练模型。现在,有 425k 个特征和 425k 个哈希 = 没有冲突。但是,相同指标的结果更差 (0.902,0554,0.587)。

目前看来,24 位 space 存在严重的过度拟合,而 18 位可以更好地防止模型过度拟合 - 这可以很好地解释为什么 18 位模型在测试数据集上的结果更好。

但后来我决定使用 L1 正则化来减少 24 位模型的特征数量。我玩了一段时间,当我得到具有 208k 哈希和 208k 特征的模型时,我非常惊讶,它的结果仍然比具有相同哈希数的 18 位模型的结果更差。是 0.901,0.584,0.552.

这让我相信,随机散列冲突,即使对于大部分特征,也比 L1 正则化更像正则化器。这怎么可能?

这是怎么回事(底线)?

你所经历的是过度拟合的强烈迹象。详情如下。

这怎么可能?

正则化和随机哈希冲突都是模型特征子集的折扣机制。他们选择了一些特征,并使它们在模型中不那么重要(或完全不重要)。

但相似之处仅此而已。两种折扣机制在以下方面有很大不同:

  • 他们折扣的功能子集(特定与随机)
  • 折扣方法(完全与部分混合)
  • 贴现方向和幅度

特定折扣与随机折扣

L1 正则化 (--l1 ...) 选择非常具体的权重(与范数最接近零的权重),而随机哈希冲突 "picks" 随机权重,其中一些可能很大。

完全与部分混合折扣

L1 正则化完全 trims/removes 它选择的权重,而随机哈希冲突创建与其他特征的混合。在某种意义上(效果混合)混合与 vw-q <XY> 的特征交叉相似,但不完全相同。

折扣的方向和幅度

与按权重绝对值进行特定选择不同,随机选择可以影响任何大小的权重。

此外,一个功能单独考虑时可能是一个不好的功能,但当与另一个功能结合考虑时实际上会有所帮助。一个例子是混合两种不良特征,一种具有正权重,另一种具有负权重。通过部分相互抵消,它们可能会产生一个貌似良好的特征,该特征在某种程度上与目标标签相关。 IOW:特征混合有时可以将坏效果变成好的效果。

折扣如何帮助(或伤害)模型?

这在机器学习中很常见,尤其是在大数据问题中。特征选择、修剪或混合是否会提高准确性取决于数据。

如果它碰巧打折 "bad" 特征(与训练数据一致,但无助于泛化),它会使模型更好。但是,如果我们忽略一个好的、泛化能力强的特征,它会使模型在测试中显得更差(样本数据之外)。

相关:随机打折或丢弃特征的想法,即使是潜在重要的特征,已被证明是深度神经网络 (NN) 中一种强大而有益的技术,它被称为 dropout dropout已经成为深度学习中避免过拟合的必备方法

底线

创建好的模型需要练习。当您拥有大量特征时,可能会因随机效应(小 and/or 大权重)而导致过度拟合。需要避免这种过拟合。

有很多方法可以避免过拟合。正则化只是减少过度拟合的一种特定方法。有时,更重要的随机方法会影响所有特征,而不仅仅是那些权重较低的特征,这可能对整体有益。

发生这种情况时,提示特征数量可能过多,您可能会过度拟合它们。

一般来说,我会怀疑用于训练的示例数量(数据集行)不会比特征数量(不同的数据集列)大很多的模型。如果你有数十万(10^6)个特征,你可能应该有 10^12(万亿)个例子来避免过度拟合。

我会用大量特征做的另一件事是随机打乱示例的顺序,并混合多个模型以确保特定顺序不会导致过度拟合。由于学习率衰减,在线学习倾向于使早期示例超过后期示例。