Дополнительное обучение модели ALS

Я пытаюсь выяснить, возможно ли «дополнительное обучение» данным с использованием MLlib в Apache Spark.

Моя платформа — Prediction IO, и это в основном оболочка для Spark (MLlib), HBase, ElasticSearch и некоторых других частей Restful.

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

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


person Wouter    schedule 01.01.2015    source источник
comment
Поддерживает ли PIO Spark Streaming и дополняет существующие результаты прогнозирования от StreamRDD?   -  person WestCoastProjects    schedule 03.01.2015
comment
Потоковая передача k-средних   -  person Soumya Kanti    schedule 14.10.2015
comment
См. здесь возможное решение: stackoverflow.com/questions/41537470/   -  person Chris Snow    schedule 16.01.2017


Ответы (2)


Я предполагаю, что вы используете модель ALS spark MLlib, которая выполняет матричную факторизацию. Результатом модели являются две матрицы: матрица пользовательских характеристик и матрица характеристик элементов.

Предполагая, что мы собираемся получать поток данных с рейтингами или транзакциями для случая неявного, реальное (100%) онлайн-обновление этой модели будет заключаться в обновлении обеих матриц для каждой новой поступающей рейтинговой информации путем запуска полной переобучения Модель ALS снова на всех данных + новый рейтинг. В этом сценарии каждый ограничен тем фактом, что выполнение всей модели ALS требует больших вычислительных ресурсов, а входящий поток данных может быть частым, что приведет к слишком частому полному повторному обучению.

Итак, зная это, мы можем искать альтернативы, один рейтинг не должен сильно менять матрицы, плюс у нас есть подходы к оптимизации, которые являются инкрементными, например SGD. Существует интересная (все еще экспериментальная) библиотека, написанная для случая Explicit Ratings, которая выполняет добавочные обновления для каждой партии DStream:

https://github.com/brkyvz/streaming-matrix-factorization

Идея использования пошагового подхода, такого как SGD, следует идее о том, что по мере продвижения к градиенту (проблема минимизации) гарантируется, что он движется к минимуму функции ошибок. Таким образом, даже если мы обновим один новый рейтинг, только матрицу характеристик пользователя для этого конкретного пользователя и только матрицу характеристик элемента для этого конкретного оцененного элемента, и обновление будет направлено в сторону градиента, мы гарантируем, что мы переместимся в сторону минимума, конечно как приближение, но все же в сторону минимума.

Другая проблема связана с самой искрой и распределенной системой, в идеале обновления должны выполняться последовательно для каждого нового входящего рейтинга, но искра обрабатывает входящий поток как пакет, который распространяется как RDD, поэтому операции, выполняемые для обновления будет выполняться для всей партии без гарантии последовательности.

Более подробно, например, если вы используете Prediction.IO, вы можете провести автономное обучение, в котором используются обычные встроенные функции обучения и развертывания, но если вы хотите получать онлайн-обновления, вам потребуется доступ к обеим матрицам для каждого пакета. потока и запускать обновления с помощью SGD, а затем запрашивать развертывание новой модели, этой функциональности, конечно, нет в Prediction.IO, вам придется создавать ее самостоятельно.

Интересные примечания к обновлениям SGD:

http://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf

person Dr VComas    schedule 28.04.2016
comment
Это очень правдоподобный ответ! +1 - person eliasah; 28.04.2016

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

Ou Вы можете посмотреть код:

  • MyMediaLite
  • Oryx — построение фреймворка с парадигмой архитектуры Lambda. И у него должны быть обновления с добавлением новых пользователей/элементов.

Это часть моего ответа для подобных вопрос, в котором смешались обе проблемы: онлайн-обучение и работа с новыми пользователями/элементами.

person Bartłomiej Twardowski    schedule 21.04.2016