Итеративное обучение с использованием VowpalWabbit - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь выполнить итеративное тестирование с использованием VW.

В идеале я бы смог:

  1. Обучить и сохранить модель initial_model.vw (я проверял это, и она работает)
  2. Загрузить эту модель, добавитьдополнительные данные к нему и сохраните его снова (в new_model.vw)
  3. Используйте эту новую модель, чтобы делать прогнозы, которые не смогла сделать первая модель, чтобы доказать, что итеративное обучение было успешным.

Я обнаружил, что один человек тоже пытался это сделать ( как переобучить модель для последовательности файлов в 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
Переподготовка с новыми данными:
    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 Ответ

1 голос
/ 18 июля 2019

Я вижу 2 потенциальных проблем с аргументами, приведенными в вопросе.Это может быть хорошо, если вы действительно хотели использовать их таким образом, и вы действительно знаете, что делаете, но они кажутся немного подозрительными.

1) Всякий раз, когда вы запускаете vw с несколькими проходамите же данные (--passes <n>), vw неявно переключаются в режим удержания с удержанием 1 в 10 примерах.Запрещенные примеры используются только для оценки ошибок, а не для обучения, чтобы избежать чрезмерного соответствия.Если это то, что вы хотели сделать, то хорошо, но если вы не хотите откладывать какие-либо из ваших примеров, вам следует использовать опцию --holdout_off и помнить, что шансы перенастройки возрастают.

2) Начальная скорость обучения (--learning_rate 1.5) кажется высокой, она увеличивает шансы на переоснащение.Если вы используете его, потому что в итоге у вас меньше тренировочных потерь, это неправильная вещь.в ML цель состоит не в том, чтобы минимизировать потери при обучении, а в потерях при обобщении.

Кроме того: установка начальной скорости обучения во 2-й партии, кажется, противоречит опции --save_resume.Цель --save_resume - запустить новый пакет с низкими (уже распавшимися, как сохранено в модели) скоростями обучения для каждой функции (стиль AdaGrad).Прыжок скорости обучения в начале может сделать первые примеры во 2-й партии гораздо более важными, чем все упавшие функции из 1-й партии.

Совет: вы можете почувствовать, насколько хорошо вы делаете, передавая вывод прогресса в утилиту построения vw-convergence:

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

(примечание: для vw-конвергенции требуется R)

...