apache-spark machine-learning prediction apache-spark-mllib predictionio

apache spark - Entrenamiento incremental del modelo ALS.



apache-spark machine-learning (3)

En el documento Aprendizaje incremental para la factorización matricial en sistemas de recomendación, utilizaron el enfoque de mínimos cuadrados unilaterales para el aprendizaje incremental en ELA.

http://ieeexplore.ieee.org/document/7840707/

Estoy tratando de averiguar si es posible tener "entrenamiento incremental" en datos usando MLlib en Apache Spark.

Mi plataforma es Prediction IO, y es básicamente una envoltura para Spark (MLlib), HBase, ElasticSearch y algunas otras piezas de Restful.

En mi aplicación, los "eventos" se insertan en tiempo real, pero para obtener resultados de predicción actualizados, necesito "pio train" y "pio deploy". Esto lleva algún tiempo y el servidor se desconecta durante la redistribución.

Estoy tratando de averiguar si puedo hacer un entrenamiento incremental durante la fase de "predicción", pero no puedo encontrar una respuesta.


Me imagino que está usando el modelo ALS de spark MLlib que está realizando la factorización matricial. El resultado del modelo son dos matrices, una matriz de características de usuario y una matriz de características de elemento.

Suponiendo que vamos a recibir un flujo de datos con calificaciones o transacciones en el caso de un caso implícito, una actualización real (100%) en línea de este modelo será la actualización de ambas matrices para cada nueva información de calificación que surja al desencadenar un reacondicionamiento completo del Modelo ALS en todos los datos de nuevo + la nueva calificación. En este escenario, uno está limitado por el hecho de que la ejecución de todo el modelo de ALS es computacionalmente costosa y el flujo de datos entrantes podría ser frecuente, por lo que desencadenaría un reacondicionamiento completo con demasiada frecuencia.

Por lo tanto, sabiendo esto podemos buscar alternativas, una calificación única no debería cambiar las matrices mucho más, además, tenemos enfoques de optimización que son incrementales, por ejemplo, SGD. Hay una biblioteca interesante (aún experimental) escrita para el caso de las calificaciones explícitas que hace actualizaciones incrementales para cada lote de un DStream:

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

La idea de utilizar un enfoque incremental como el SGD sigue la idea de que, en la medida en que uno se mueve hacia el gradiente (problema de minimización), se garantiza que se está moviendo hacia un mínimo de la función de error. Entonces, incluso si hacemos una actualización a la nueva calificación única, solo a la matriz de características del usuario para este usuario específico, y solo a la matriz de elementos y características para este artículo específico calificado, y la actualización es hacia el gradiente, garantizamos que nos movemos hacia lo mínimo, por supuesto como una aproximación, pero todavía hacia lo mínimo.

El otro problema proviene de la propia chispa, y el sistema distribuido, idealmente, las actualizaciones se deben hacer de forma secuencial, para cada nueva calificación entrante, pero la chispa trata el flujo entrante como un lote, que se distribuye como un RDD, por lo que las operaciones realizadas para la actualización Se realizaría para todo el lote sin garantía de secuencialidad.

En más detalles, si está utilizando Prediction.IO, por ejemplo, puede realizar una capacitación fuera de línea que utiliza las funciones regulares de tren e implementación integradas, pero si desea tener las actualizaciones en línea, tendrá que acceder a ambas matrices para cada lote. de la transmisión, y ejecute las actualizaciones utilizando SGD, luego solicite que se implemente el nuevo modelo, esta funcionalidad, por supuesto, no está en Prediction.IO, tendrá que crearlo por su cuenta.

Notas interesantes para actualizaciones de SGD:

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


Para actualizar su modelo casi en línea (escribo cerca, porque enfréntelo, la verdadera actualización en línea es imposible) mediante el uso de la técnica de plegado, por ejemplo: Actualización en línea de modelos de factorización de matrices de núcleo regularizados para sistemas de recomendación a gran escala.

Ou puedes mirar el código de:

  • MyMediaLite
  • Oryx - framework build con paradigma de arquitectura Lambda. Y debería tener actualizaciones con plegado de nuevos usuarios / elementos.

Es la parte de mi respuesta para una question similar en la que se mezclaron ambos problemas: capacitación casi en línea y manejo de nuevos usuarios / elementos.