vowpal wabbit 中的 `--save_resume` 选项究竟做了什么

what exactly does the `--save_resume` option in vowpal wabbit do

我正在使用从两个不同来源流式传输的数据训练神经网络,启发式:

cat train1.vw |vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw |vw --oaa 10 --nn 20 --save_resume -i /tmp/weights -f /tmp/weights

然而,这引发了一个错误,大意是“--oaa 不能被多次传递。”很好,--save_resume 坚持配置参数,所以我修改了:

cat train1.vw |vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw |vw --save_resume -i /tmp/weights -f /tmp/weights

一切正常。出于好奇,我在没有 --save_resume 选项的情况下重复了第二种方法,一切 仍然 工作,除了模型性能稍微差一点。

我推测 --save_resume 保存了权重文件中看到的学习率和示例数。这似乎是从输出中发生的事情,并证实了更好的性能。还有别的吗?

编辑: 经过一些实验后,我发现通过 -i 传递初始回归量是引发 "option '--oaa' cannot be specified more than once error," 而不是 --save_resume 的原因。

你的猜测是正确的。当在 train1.vw 上的第一次训练中不使用 --save_resume 时,模型 /tmp/weights 不包含学习率和其他状态信息(例如 VW 默认使用 --adaptive,所以每个特征都有一个学习率)。这可能会影响最终模型的质量,通常会使它变得更糟。

报告为平均损失的不同数字的另一个原因是,当不使用--save_resume时,大众仅计算给定数据的平均值(train1.vw 分别 train2.vw).

--save_resume的想法是,当分两步训练时,你应该得到相同的最终平均损失

cat train1.vw | vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw | vw --save_resume -i /tmp/weights -f /tmp/weights

并且一步训练时

cat train1.vw train2.vw | vw --oaa 10 --nn 20 -f /tmp/weights

看到一个related solved GitHub issue

看来这里最近引入了一个错误,我为此记录了一个票证: https://github.com/JohnLangford/vowpal_wabbit/issues/554

更新:他们已经在 master 中修复了它。所以一定要拉。