1

我正在使用 vowpal wabbit 训练模型并注意到一些非常奇怪的东西。在训练期间,报告的平均损失非常低,约为 0.06。但是我注意到,当我要求模型在相同的训练数据上预测标签时,平均损失高达 0.66 左右,并且模型在预测训练数据的标签方面表现不佳。我最初的猜想是模型遭受了很大的偏差,因此我增加了模型的复杂性以在第一层使用 300 个隐藏节点,但问题仍然存在。

我将不胜感激有关可能发生的事情的指示

大众汽车的教程幻灯片提到:“如果你在火车上进行测试,它会起作用吗?(不 => 有点疯狂)”

所以似乎发生了一些非常疯狂的事情,我试图了解我应该在哪里更深入地挖掘。

更多细节:我正在使用 vowpal wabbit 进行命名实体识别任务,其中特征是单词表示。我正在尝试使用具有多个隐藏单元的神经网络的几个模型并尝试评估模型。然而,当我对训练数据本身进行测试时,我所有的训练模型都表现出很高的平均损失,我觉得这很奇怪。

这是重现问题的一种方法:

培训输出:

vw -d ~/embeddings/eng_train_4.vw --loss_function logistic --oaa 6 --nn 32 -l 10 --random_weights 1 -f test_3.model --passes 4 -c

final_regressor = test_3.model
Num weight bits = 18
learning rate = 10
initial_t = 0
power_t = 0.5
decay_learning_rate = 1
using cache_file = /home/vvkulkarni/embeddings/eng_train_4.vw.cache
ignoring text input in favor of cache input
num sources = 1
average    since         example     example  current  current  current
loss       last          counter      weight    label  predict features
0.666667   0.666667          3      3.0          1        1      577
0.833333   1.000000          6      6.0          1        2      577
0.818182   0.800000         11     11.0          4        4      577
0.863636   0.909091         22     22.0          1        4      577
0.636364   0.409091         44     44.0          1        1      577
0.390805   0.139535         87     87.0          1        1      577
0.258621   0.126437        174    174.0          1        1      577
0.160920   0.063218        348    348.0          1        1      577
0.145115   0.129310        696    696.0          1        1      577
0.138649   0.132184       1392   1392.0          1        1      577
0.122486   0.106322       2784   2784.0          1        1      577
0.097522   0.072557       5568   5568.0          1        1      577
0.076875   0.056224      11135  11135.0          1        1      577
0.058647   0.040417      22269  22269.0          1        1      577
0.047803   0.036959      44537  44537.0          1        1      577
0.038934   0.030066      89073  89073.0          1        1      577
0.036768   0.034601     178146 178146.0          1        1      577
0.032410   0.032410     356291 356291.0          1        1      577 h
0.029782   0.027155     712582 712582.0          1        1      577 h

finished run
number of examples per pass = 183259
passes used = 4
weighted example sum = 733036
weighted label sum = 0
average loss = 0.0276999
best constant = 0
total feature number = 422961744

现在,当我使用相同的数据(用于训练)评估上述模型时

vw -t ~/embeddings/eng_train_4.vw -i test_3.model -p test_3.pred

only testing
Num weight bits = 18
learning rate = 10
initial_t = 1
power_t = 0.5
predictions = test_3.pred
using no cache
Reading datafile = /home/vvkulkarni/embeddings/eng_train_4.vw
num sources = 1
average    since         example     example  current  current  current
loss       last          counter      weight    label  predict features
0.333333   0.333333          3      3.0          1        1      577
0.500000   0.666667          6      6.0          1        4      577
0.636364   0.800000         11     11.0          6        3      577
0.590909   0.545455         22     22.0          1        1      577
0.500000   0.409091         44     44.0          4        1      577
0.482759   0.465116         87     87.0          1        1      577
0.528736   0.574713        174    174.0          1        3      577
0.500000   0.471264        348    348.0          1        3      577
0.517241   0.534483        696    696.0          6        1      577
0.536638   0.556034       1392   1392.0          4        4      577
0.560345   0.584052       2784   2784.0          1        5      577
0.560884   0.561422       5568   5568.0          6        2      577
0.586349   0.611820      11135  11135.0          1        1      577
0.560914   0.535477      22269  22269.0          1        1      577
0.557200   0.553485      44537  44537.0          1        1      577
0.568938   0.580676      89073  89073.0          1        2      577
0.560568   0.552199     178146 178146.0          1        1      577

finished run
number of examples per pass = 203621
passes used = 1
weighted example sum = 203621
weighted label sum = 0
average loss = 0.557428 <<< This is what is tricky.
best constant = -4.91111e-06
total feature number = 117489309

我尝试过的事情: 1.我尝试将隐藏节点的数量增加到 600,但无济于事。2.我还尝试使用具有 300 个隐藏节点的二次特征,但这也无济于事。

尝试 1.) 和 2.) 背后的基本原理是增加模型复杂性,假设高训练误差是由于高偏差造成的。

更新:更有趣的是,如果我在测试阶段将通过次数指定为 4(即使我假设模型会学习决策边界),那么问题就会消失。我试图理解为什么?

vvkulkarni@einstein:/scratch1/vivek/test$ vw -t ~/embeddings/eng_train_4.vw -i test_3.model -p test_3_1.pred --passes 4 -c
only testing
Num weight bits = 18
learning rate = 10
initial_t = 1
power_t = 0.5
decay_learning_rate = 1
predictions = test_3_1.pred
using cache_file = /home/vvkulkarni/embeddings/eng_train_4.vw.cache
ignoring text input in favor of cache input
num sources = 1
average    since         example     example  current  current  current
loss       last          counter      weight    label  predict features
0.333333   0.333333          3      3.0          1        1      577
0.166667   0.000000          6      6.0          1        1      577
0.090909   0.000000         11     11.0          4        4      577
0.045455   0.000000         22     22.0          1        1      577
0.022727   0.000000         44     44.0          1        1      577
0.011494   0.000000         87     87.0          1        1      577
0.017241   0.022989        174    174.0          1        1      577
0.022989   0.028736        348    348.0          1        1      577
0.020115   0.017241        696    696.0          1        1      577
0.043822   0.067529       1392   1392.0          1        1      577
0.031968   0.020115       2784   2784.0          1        1      577
0.031968   0.031968       5568   5568.0          1        1      577
0.032959   0.033950      11135  11135.0          1        1      577
0.029952   0.026944      22269  22269.0          1        1      577
0.029212   0.028471      44537  44537.0          1        1      577
0.030481   0.031750      89073  89073.0          1        1      577
0.028673   0.026866     178146 178146.0          1        1      577
0.034001   0.034001     356291 356291.0          1        1      577 h
0.034026   0.034051     712582 712582.0          1        1      577 h
4

1 回答 1

1

您有哈希冲突,因为您拥有的功能比哈希中的空格多得多。

默认散列大小为 18 位或 262144 个空格。根据您的第一个打印输出,有 422961744 个功能至少需要 27 位,因此您应该在命令行中添加 -b27 (或更多)。

我没有您的输入文件,所以我无法尝试查看.. 但这是检查冲突的一种方法:

运行您的学习阶段并添加 --invert_hash final 然后检查与这些行的冲突:

tail -n +13 final | sort -n -k 2 -t ':' | wc -l
tail -n +13 final | sort -nu -k 2 -t ':' | wc -l

输出的值应该相同。我从 Vowpal Wabbit 的创建者 John Langford 那里得到了这个提示。

于 2013-10-09T13:30:00.060 回答