当 vw LDA 使用 `--save_resume` 运行时,学习率是否会在传递之间自动降低

问题描述

vowpal wabbit (vw) 支持使用 --save_resume 进行核外学习。这就是 --help 选项告诉最终用户有关 --save_resume 选项的内容

--save_resume                         save extra state so learning can be 
                                        resumed later with new data

我有一个庞大的实时数据集,目前有数亿个文档被分类为 1024 个批次,我的目标是在所有批次上训练 LDA 模型,为此我运行了一个调用 vw 的脚本,例如这个(注意我没有设置--passes,所以每个数据点只看到一次)。

初始调用

vw -d clean.txt --lda 100 --lda_D 307000000 -f weights --readable_model lda.model.vw

后续调用(clean.txt 的内容调用之间发生变化):

vw -d clean.txt --lda 100 --lda_D 307000000 --save_resume -i weights -f weights --readable_model lda.model.vw

我已经以这种方式通过 vw 成功运行了所有批次,但是从每次调用vw 给出的输出来看,学习率似乎从未下降,它始终如下所示:

learning rate = 0.5
initial_t = 0
power_t = 0.5

我会猜到在请求 --save_resume 时会保存学习率,并且 vw 在看到更多数据时会自动降低学习率,但事实似乎并非如此,对吗?

您是否必须使用vovpal wabbit 手动管理学习率?

解决方法

LDA 的学习率似乎是基于全局学习率计算的(但与全局学习率分开存储)。 LDA 的学习/衰减率似乎没有打印在任何地方,因此您不会在日志中看到它们。

https://github.com/VowpalWabbit/vowpal_wabbit/blob/master/vowpalwabbit/lda_core.cc#L892