Vowpal Wabbit: данные против перемешанных данных с несколькими проходами — почему перетасовка файла перед обучением помогает улучшить метрику

Я попытался изучить мультипроходы VW:

  1. Я запустил vw для обычного прогона (1 проход) и проходов со 2 по 5 (удаленный кеш между проверенными проходами) для одних и тех же обучающих данных и проверил модели с другим тестовым файлом. Результаты показали, что моя метрика ухудшилась между проходами (переобучение).
  2. Затем я проверил, как ведут себя результаты при перетасовке данных. Я хотел проверить поведение моей метрики при перетасовке данных в каждом проходе (--проходы 3 будут перетасовываться после первого и второго внутренних проходов), но поскольку у меня был большой файл данных обучения, я случайным образом перетасовывал данные обучения только один раз перед каждым проходом. проход (опять же от 2 до 5 с удалением кеша между проверенными проходами). Когда я изучил модели с тестовым файлом, результаты показали, что моя метрика улучшилась между проходами.
  3. Я проводил этот эксперимент несколько раз с разными наборами данных и всегда получал улучшения при использовании нескольких проходов + перемешивание.

Я пытаюсь понять результаты, которые я получил. Я не понимаю, почему перемешивание файла один раз перед обучением помогает улучшить показатель. Почему это также не переобучение? Чем это отличается от использования необработанного набора данных (без перемешивания)?


person adi    schedule 02.07.2020    source источник


Ответы (1)


VW использует онлайн-обучение по умолчанию, где хорошо известно, что порядок обучающих данных имеет значение (в отличие от пакетного обучения). Представьте себе бинарную классификацию, в которой все отрицательные обучающие примеры упорядочены перед всеми положительными примерами — окончательная модель, скорее всего, предскажет все как положительные. Таким образом, перетасовка данных необходима (и рекомендуется).

Существуют смешанные мнения (и эмпирические результаты) о том, нужна ли перетасовка после каждой эпохи (прохода) (когда данные уже перетасованы перед всем обучением). Это не должно быть больно, но требует некоторого времени. Это не должно быть необходимо для огромных наборов данных (но для действительно огромных наборов данных один проход занимает много времени, поэтому обычно вы все равно не можете позволить себе более трех проходов).

person Martin Popel    schedule 03.07.2020
comment
Спасибо Мартин за ответ. Но я все еще в замешательстве. Я пытаюсь понять, в чем логика построения многократных проходов без внутренних эпох перемешивания. Я уверен, что разработчики подумали о возможном переоснащении. И большинство пользователей vw используют большие/огромные наборы данных. Итак, что мне здесь не хватает? - person adi; 16.07.2020
comment
Вы уверены, что получаете гораздо лучшие результаты при тасовке после каждого прохода (в дополнение к тасовке только один раз перед всей тренировкой)? Я видел лишь незначительные улучшения на границе значимости, вызванные такой дополнительной перетасовкой. И как я уже писал, тормозит обучение. Вы также можете попробовать создать N копий обучающих данных, перетасовав их вручную и объединив. Вы можете тренироваться с vw --passes M, и это на самом деле будет означать, что N * M передает исходные данные. Таким образом, вы получите компромисс между большим количеством перетасовки и более высокой скоростью из-за кэширования vw. - person Martin Popel; 16.07.2020
comment
Пробовал то, что вы предложили, но мои результаты ухудшились. У вас есть какое-то объяснение, почему из вашего опыта вы увидели лишь незначительные улучшения на границе значимости, вызванные такой дополнительной перетасовкой? (допустим, время обучения не имеет значения). Я ожидал, что перемешивание и объединение обогатят данные и принесут более высокие показатели, но, видимо, ошиблись. - person adi; 20.07.2020
comment
Что именно вы пробовали, какие М и Н? Если вы установите M = 1 и N = X = ваше исходное количество эпох с ручным перетасовкой после каждой эпохи, вы должны получить свои исходные результаты (т.е. наилучшие результаты, как вы утверждаете). Если нет, то тут что-то странное (если вы изначально опустили --save_resume, возможно, хотя и маловероятно, что помогло сбросом импульса). Затем вы можете попробовать, например. M=2 и N=X/2 и так далее до M=X и N=1 (без конкатенации, без перетасовки после любой эпохи), поэтому вы можете видеть, для какого M точность начинает ухудшаться. - person Martin Popel; 28.07.2020