что именно делает опция `--save_resume` в vowpal wabbit

Я тренирую нейронную сеть с данными, поступающими из двух отдельных источников, эвристически:

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 вызывает ошибку "опция '--oaa' не может быть указана более одного раза", а не --save_resume.


person Jerry    schedule 25.01.2015    source источник


Ответы (2)


Ваше предположение верно. Если не использовать --save_resume с первым обучением на train1.vw, модель /tmp/weights не содержит скорость обучения и другую информацию о состоянии (например, --adaptive используется по умолчанию в VW, поэтому для каждой функции существует скорость обучения). Это может повлиять на качество конечной модели, обычно ухудшает ее.

Другая причина того, что в качестве средних потерь указывается другое число, заключается в том, что, если не использовать --save_resume, VW вычисляет среднее значение только для заданных данных (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

См. решенную проблему с GitHub.

person Martin Popel    schedule 26.01.2015
comment
+1 за ссылку на выпуск на GitHub. Я полностью согласен с вашими ожиданиями относительно ожидаемого поведения --save_resume в тренировочном режиме, а не только в тестовом режиме. - person Jerry; 27.01.2015

Похоже, здесь недавно появилась ошибка, я зарегистрировал для нее тикет: https://github.com/JohnLangford/vowpal_wabbit/issues/554

Обновление: они уже исправили это в мастере. Так что обязательно тяните.

person EmergentOrder    schedule 10.03.2015