【问题标题】:Vowpal Wabbit Continuing TrainingVowpal Wabbit 继续培训
【发布时间】:2014-11-09 15:45:14
【问题描述】:

继续进行一些实验here 我感兴趣的是看看如何继续训练大众模型。

我首先运行它并保存了模型。

vw -d housing.vm --loss_function squared -f housing2.mod --invert_hash readable.housing2.mod

检查可读模型:

Version 7.7.0
Min label:0.000000
Max label:50.000000
bits:18
0 pairs: 
0 triples: 
rank:0
lda:0
0 ngram: 
0 skip: 
options:
:0
 ^AGE:104042:0.020412
 ^B:158346:0.007608
 ^CHAS:102153:1.014402
 ^CRIM:141890:0.016158
 ^DIS:182658:0.278865
 ^INDUS:125597:0.062041
 ^LSTAT:170288:0.028373
 ^NOX:165794:2.872270
 ^PTRATIO:223085:0.108966
 ^RAD:232476:0.074916
 ^RM:2580:0.330865
 ^TAX:108300:0.002732
 ^ZN:54950:0.020350
Constant:116060:2.728616

如果我继续使用另外两个示例(在 Housing_2.vm 中)训练模型,注意,ZN 和 CHAS 的值为零:

27.50 |  CRIM:0.14866 ZN:0.00 INDUS:8.560 CHAS:0 NOX:0.5200 RM:6.7270 AGE:79.90 DIS:2.7778 RAD:5 TAX:384.0 PTRATIO:20.90 B:394.76 LSTAT:9.42
26.50 |  CRIM:0.11432 ZN:0.00 INDUS:8.560 CHAS:0 NOX:0.5200 RM:6.7810 AGE:71.30 DIS:2.8561 RAD:5 TAX:384.0 PTRATIO:20.90 B:395.58 LSTAT:7.67

如果已加载保存的模型并继续训练,则这些零值特征中的系数似乎会丢失。我做错了什么还是这是一个错误?

vw -d housing_2.vm --loss_function squared -i housing2.mod --invert_hash readable.housing3.mod

来自 readable.housing3.mod 的输出:

Version 7.7.0
Min label:0.000000
Max label:50.000000
bits:18
0 pairs: 
0 triples: 
rank:0
lda:0
0 ngram: 
0 skip: 
options:
:0
 ^AGE:104042:0.023086
 ^B:158346:0.008148
 ^CRIM:141890:1.400201
 ^DIS:182658:0.348675
 ^INDUS:125597:0.087712
 ^LSTAT:170288:0.050539
 ^NOX:165794:3.294814
 ^PTRATIO:223085:0.119479
 ^RAD:232476:0.118868
 ^RM:2580:0.360698
 ^TAX:108300:0.003304
Constant:116060:2.948345

【问题讨论】:

    标签: vowpalwabbit


    【解决方案1】:

    如果您想以流畅的方式从保存状态继续学习,您必须使用--save_resume 选项。

    有 3 种根本不同类型的“状态”可以保存到 vw“模型”文件中:

    1. 权重向量(regressor)很明显。这就是模型本身。
    2. 不变参数,例如vw 的版本(以确保版本之间并不总是保留二进制兼容性)、向量中的位数 (-b) 和模型类型
    3. 在学习过程中动态变化的状态。该子集包括学习和衰减率等参数,这些参数在每个示例的学习过程中会逐渐变化,示例编号本身等。

    只有--save_resume 保存最后一组。

    --save_resume 不是默认值,因为它有开销,并且在大多数用例中不需要它。例如如果您保存模型一次以进行多次预测而不进行学习 (-t),则无需保存状态的第三个子集。

    所以,我相信在你的特殊情况下,你想使用--save_resume。

    错误的可能性总是存在的,特别是因为vw 支持如此多的选项(最后计数大约 100 个),这些选项通常是相互依赖的。一些选项组合有意义,而另一些则没有。对大约 2^100 个可能的选项组合进行完整性检查有点不切实际。如果您发现错误,请在 github 上打开一个问题。在这种情况下,请确保使用完整的示例(完整数据和命令行),以便重现您的问题。

    2014-09-20 更新(在 github 上打开问题后,谢谢!): 0 值特征“消失”的原因(不是真正来自模型,而只是来自 --invert_hash 输出)是 1)--invert_hash 从未设计用于多次传递,因为将原始特征名称保留在哈希表中, 会产生很大的性能开销 2) 缺失的特征是那些具有零值的特征,它们被丢弃。模型本身仍应具有任何 prior 传递非零权重的特征。由于实施原因,修复这种不一致过于复杂且成本高昂,并且会违背使vw 快速的首要动机,尤其是对于最有用/常见的用例。不管怎样,谢谢你的报告,我也从中学到了一些新东西。

    【讨论】:

    • 我不知道那个标志(它做了什么)。非常感谢!
    • 我确实认为存在问题 - 也许只是表面问题,如果我能弄清楚如何打开问题并添加数据,我会提交。
    猜你喜欢
    • 2019-07-10
    • 2015-01-12
    • 2018-01-20
    • 1970-01-01
    • 2015-01-06
    • 2013-12-15
    • 2014-12-08
    • 2014-11-17
    • 2015-12-10
    相关资源
    最近更新 更多