Vowpal Wabbit可能哈希冲突

问题描述 投票:1回答:1

我在VW生成的模型,我也产生相同的上数据的两个可读模型(首先用“--readable_model” Arg和第二个与“--invert_hash”)。当我在我的测试数据集运行我的模型,并用--audit选项,报道了一些功能权重与在上述可读模式报告的权重比较略有不同。例如,下面是培训了train.data可读模型的一部分:

213006:-0.19007
213008:-0.692261
213009:-0.203193

正如你可以看到,随着指数213008特征具有重量-0.692261但是,当我在test.data与--audit选项运行我的-t选项模型,然后一些权重是在审计输出不同:

-3.962444   q^featureXY:213008:1:-0.756017

这是什么原因?我有超过300K的特点,是有可能,这是由一些杂凑冲撞引起的?但是,如果有散列冲突不应该Vowpal Wabbit报告呢?正如你所看到的,选项-t使用测试时,所以模式应该是“稳定”。

machine-learning hash vowpalwabbit
1个回答
1
投票

vw allows hash collisions (on purpose)

这在文献中被称为“散列特技”。

它不被认为是从大量的学习功能时,有特点的哈希冲突的错误,因为碰撞的少数很少有对学习产生不利影响。在许多情况下,小的碰撞率甚至可以通过降低泛化误差帮助。

什么是无视碰撞的优势在哪里?

由于没有必要治疗以特殊的方式碰撞,哈希帽子戏法的一个明显好处是更快的学习。

不要碰撞使学习更糟糕?

哈希碰撞简单地创建碰撞功能子集(随机)的混合物。只要碰撞子是全功能集的一小部分(如可以在哈希空间是足够大,可以预期),这些碰撞作为正规化和经常的随机形式(但并不总是)有助于避免过度-配件。

如果我有一个太小的散列空间(太多冲突)?

如果你有超过30万层的功能,这确实是一个极端的例子。 300K是比默认的哈希空间的大小(2^18 = 262144)更大,从而碰撞部分不再小。在这种情况下,你应该增加,通过增加-b <bits>其中<bits>比默认18更高的哈希空间。

我怎么能知道,如果我有太多的冲突?

渐进验证错误,这是由vw印刷,因为它得知,应该给你的最佳-b值是什么为您的数据集一个很好的提示。

你也可以尝试寻找一个最佳值,使用vw-hypersearch是这样的:

    # find the best average loss when using between 19 and 26 bits hash-space
    vw-hypersearch 19 26 vw -b % [other-vw-options...] -d data-set
© www.soinside.com 2019 - 2024. All rights reserved.