VowpalWabbit: различия и масштабируемость
Привет, ребята: я пытаюсь выяснить, как поддерживается "состояние" VowpalWabbit по мере увеличения размера нашего входного набора. В типичной среде машинного обучения, если у меня есть 1000 входных векторов, я бы ожидал отправить их все сразу, дождаться завершения этапа построения модели и затем использовать модель для создания новых прогнозов.
Похоже, что в VW "онлайновая" природа алгоритма делает эту парадигму более производительной и способной к адаптации в режиме реального времени.
1) Как реализована эта модификация модели в реальном времени?
2) Берут ли VW увеличивающиеся ресурсы по отношению к общему объему входных данных с течением времени? То есть, когда я добавляю больше данных в мою модель VW (когда она небольшая), вычисления корректировок в реальном времени начинают занимать больше времени, когда совокупное число входных векторов признаков увеличивается до 1000 с, 10000 с или миллионов?
2 ответа
Просто чтобы добавить к хорошему ответу carlosdc.
Вот некоторые из особенностей, которые выделяют ваубальный вабит и позволяют масштабировать его до тера-функциональных (10 12) размеров данных:
Вектор веса в режиме онлайн: vowpal wabbit поддерживает вектор веса в памяти, который по существу является вектором весов для модели, которую он строит. Это то, что вы называете "государством" в своем вопросе.
Неограниченный размер данных: размер весового вектора пропорционален количеству объектов (независимых входных переменных), а не количеству примеров (экземпляров). Это то, что делает vowpal wabbit, в отличие от многих других (не онлайн) учеников, масштабируемым в космосе. Поскольку ему не нужно загружать все данные в память, как это делает типичный ученик, он все же может учиться на наборах данных, которые слишком велики, чтобы поместиться в памяти.
Режим кластера: vowpal wabbit поддерживает работу на нескольких хостах в кластере, навязывая узлам структуру двоичного дерева и используя all-reduce
сокращение от листьев до корня.
Хэш-трюк: vowpal wabbit использует то, что называется хэш-трюком. Все имена объектов хешируются в целое число, используя murmurhash-32
, Это имеет несколько преимуществ: это очень просто и экономно по времени, не имея дело с управлением хеш-таблицами и коллизиями, в то же время позволяя функциям иногда сталкиваться. Оказывается (на практике), что небольшое количество столкновений функций в обучающем наборе с тысячами различных функций похоже на добавление неявного члена регуляризации. Это нелогично, часто повышает точность модели, а не снижает ее. Он также не зависит от разреженности (или плотности) пространства признаков. Наконец, он позволяет входным именам объектов быть произвольными строками в отличие от большинства обычных учеников, которые требуют, чтобы имена / идентификаторы объектов были а) числовыми и б) уникальными.
Параллелизм: vowpal wabbit использует многоядерные процессоры, выполняя синтаксический анализ и обучение в двух отдельных потоках, дополнительно увеличивая его скорость. Это то, что делает vw
быть в состоянии учиться так же быстро, как читает данные. Оказывается, что большинство поддерживаемых алгоритмов в vw
нелогично, но узким местом является скорость ввода-вывода, а не скорость обучения.
Контрольные точки и инкрементальное обучение: vowpal wabbit позволяет сохранять вашу модель на диск во время обучения, а затем загружать модель и продолжать обучение там, где вы остановились, с помощью --save_resume
вариант.
Оценка погрешности, подобная тесту: средняя потеря, рассчитанная по wowpal wowpal "как есть", всегда находится на невидимых (вне выборки) данных (*). Это устраняет необходимость возиться с заранее запланированными задержками или проводить перекрестную проверку. Уровень ошибок, который вы видите во время обучения, "похож на тест".
Помимо линейных моделей: vowpal wabbit поддерживает несколько алгоритмов, включая матричную факторизацию (грубо разреженная матрица SVD), скрытое распределение дирихле (LDA) и другие. Он также поддерживает генерацию терминов взаимодействия "на лету" (билинейная, квадратичная, кубическая и нейронная сеть с прямой связью с указанным пользователем числом единиц), мультиклассовая классификация (в дополнение к базовой регрессии и двоичному классификация) и многое другое.
В официальной вики- статье vw на github есть учебники и множество примеров.
(*) Единственное исключение - если вы используете несколько проходов с --passes N
вариант.
VW является (очень) сложной реализацией стохастического градиентного спуска. Вы можете прочитать больше о стохастическом градиентном спуске здесь
Оказывается, что хорошая реализация стохастического градиентного спуска в основном связана с вводом / выводом, она идет так быстро, как вы можете получить данные, поэтому в VW есть некоторые сложные структуры данных для "компиляции" данных.
Поэтому ответом на вопрос (1) является случайный градиентный спуск, а ответом на вопрос (2), безусловно, нет.