使用VowpalWabbit进行迭代训练

时间:2019-05-29 16:08:58

标签: vowpalwabbit

我正在尝试使用大众汽车进行迭代测试。

理想情况下,我将能够:

  1. 训练并保存模型initial_model.vw(我已经对此进行了测试,并且可以正常工作)
  2. 加载此模型,向其中添加其他数据,然后再次保存(保存到new_model.vw)
  3. 使用此新模型做出第一个模型无法证明迭代训练成功的预测。

我发现有人也在尝试执行此操作(how to retrain the model for sequence of files in vowpal wabbit),但是当我运行代码并尝试使用其他数据进行重新训练时,似乎覆盖了旧数据,而不是添加了旧数据。

这是我使用的代码的基本概述:

  1. 初始培训和保存:
    vw initial_data.txt -b 26 --learning_rate 1.5 --passes 10 -- 
    probabilities --loss_function=logistic --oaa 80 --save_resume --kill_cache 
    --cache_file a.cache -f initial_model.vw
  1. 使用新数据进行训练:
    vw new_data.txt -b 26 --learning_rate 1.5 -- 
    passes 10 -i initial_model.vw --probabilities --loss_function=logistic -- 
    oaa 80 --save_resume --kill_cache --cache_file a.cache -f new_model.vw

我知道,这还不足以重现我在做什么,但我只想知道我的论点是否有任何问题,以及这在理论上是否可行。当我使用经过重新训练的模型进行预测时,它仅对包含在新数据中的测试用例才是准确的,而对于原始训练文件中未涉及的任何用例来说都是正确的。帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

我可以看到2个潜在问题,其中包含问题中给出的参数。 如果您确实打算以这种方式使用它们,并且您确实知道自己在做什么,那么这些可能没问题,但是它们似乎有点可疑。

1)每当对同一数据(vw)进行多次遍历运行--passes <n>时,vw就会隐式地切换到保持模式,每10个示例中就有1个保持。保留示例仅用于错误估计,而不用于学习以避免过度拟合。如果这是您的意图,那么可以,但是,如果您不想保留任何示例,则应使用选项--holdout_off,并且要注意过度拟合的可能性是增加。

2)初始学习率(--learning_rate 1.5)似乎很高,它增加了过度拟合的机会。如果您使用它是因为最终减少了培训损失,那么这样做是错误的。在ML中,目标不是最小化训练损失,而是泛化损失。

也:在第二批设置初始学习率似乎与--save_resume选项矛盾。 --save_resume的目标是开始以每特征学习率(AdaGrad风格)低(已保存在模型中,已经衰减)的新批处理。让学习率从一开始就跃升,可能会使第二批中的第一个示例比第一批中所有衰减的特征更为重要。

提示:通过将进度输出传递到绘图实用程序vw-convergence中,您可以感觉自己的状况如何

 vw -P 1.1 ... data.txt 2>&1 | vw-convergence

(注意:大众汽车融合需要R