VowpalWabbit: различия и масштабируемость - PullRequest
8 голосов
/ 30 января 2012

Привет, ребята: я пытаюсь выяснить, как поддерживается «состояние» VowpalWabbit по мере увеличения размера нашего входного набора. В типичной среде машинного обучения, если у меня есть 1000 входных векторов, я бы ожидал отправить их все одновременно, дождаться завершения этапа построения модели и затем использовать модель для создания новых прогнозов.

В VW оказывается, что «онлайновая» природа алгоритма делает эту парадигму более производительной и способной к настройке в режиме реального времени.

1) Как реализована эта модификация модели в реальном времени?

2) Использует ли VW увеличивающиеся ресурсы по отношению к общему объему входных данных с течением времени? То есть, когда я добавляю больше данных в мою модель VW (когда она мала), вычисления корректировок в реальном времени начинают занимать больше времени, когда совокупное число входных векторов признаков увеличивается до 1000 с, 10000 с или миллионов?

Ответы [ 2 ]

19 голосов
/ 21 марта 2013

Просто чтобы добавить к carlosdc хороший ответ.

Некоторые функции, которые устанавливают vowpal wabbit и позволяют масштабировать их до тера-функциональных (10 12 ) размеров данных:

Вектор веса онлайн: vowpal wabbit поддерживает в памяти вектор весов , который по существу является вектором весов для модели, которую он строит. Это то, что вы называете «государством» в своем вопросе.

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

Режим кластера: vowpal wabbit поддерживает работу на нескольких хостах в кластере, навязывая узлам структуру двоичного дерева и используя all-reduce сокращение от листьев к корню.

Хеш-трюк: vowpal wabbit использует то, что называется трюк хэширования . Все имена объектов хешируются в целое число, используя murmurhash-32. Это имеет несколько преимуществ: это очень просто и экономно по времени, не имея дело с управлением хеш-таблицами и коллизиями, в то же время позволяя функциям иногда сталкиваться. Оказывается (на практике), что небольшое количество столкновений функций в обучающем наборе с тысячами различных функций похоже на добавление неявного члена регуляризации. Это нелогично, часто повышает точность модели, а не снижает ее. Он также не зависит от разреженности (или плотности) пространства признаков. Наконец, он допускает, чтобы имена входных объектов были произвольными строками, в отличие от большинства обычных учащихся, которые требуют, чтобы имена / идентификаторы объектов были а) числовыми и б) уникальными.

Параллелизм: vowpal wabbit использует многоядерные процессоры, выполняя синтаксический анализ и обучение в двух отдельных потоках, дополнительно увеличивая его скорость. Это то, что позволяет vw учиться так же быстро, как читает данные. Оказывается, что большинство поддерживаемых алгоритмов в vw, нелогично, ограничены скоростью ввода-вывода, а не скоростью обучения.

Контрольная точка и дополнительное обучение: vowpal wabbit позволяет сохранять модель на диск во время обучения, а затем загружать модель и продолжать обучение с того места, на котором вы остановились, с опцией --save_resume.

Оценка теста как ошибка: Средняя потеря, рассчитанная по vowpal wabbit «как есть», всегда находится на невидимых (вне выборки) данных (*). Это устраняет необходимость возиться с заранее запланированными задержками или проводить перекрестную проверку. Уровень ошибок, который вы видите во время обучения, «похож на тест».

За пределами линейных моделей: vowpal wabbit поддерживает несколько алгоритмов, включая матричную факторизацию (грубо разреженная матрица SVD), скрытое распределение Дирихле (LDA) и другие. Он также поддерживает генерацию терминов взаимодействий «на лету» (билинейная, квадратичная, кубическая и прямолинейная сигмовидная нейронная сеть с указанным пользователем числом единиц), мультиклассовая классификация (в дополнение к базовой регрессии и двоичным файлам). классификация) и многое другое.

Есть обучающие программы и множество примеров в официальной vw wiki на github.

(*) Единственное исключение - использование нескольких проходов с опцией --passes N.

9 голосов
/ 30 января 2012

VW является (очень) сложной реализацией стохастического градиентного спуска.Вы можете прочитать больше о стохастическом градиентном спуске здесь

Оказывается, что хорошая реализация стохастического градиентного спуска в основном связана с вводом / выводом, она идет так же быстро, как вы можете получить данныеТаким образом, у VW есть некоторые сложные структуры данных для «компиляции» данных.

Поэтому ответом на вопрос (1) является стохастический градиентный спуск, а ответ на вопрос (2) определенно нет.

...