¿Apache Spark es un buen marco para implementar Reinforcement Learning?

Spark se puede usar para el aprendizaje de refuerzo profundo y, de hecho, ya lo hemos implementado.

deeplearning4j / rl4j

Reinforcement Learning y DQN, aprendiendo a jugar desde píxeles

Deeplearning4j se basa en Spark como una capa de acceso a datos para orquestar múltiples hilos de host, mientras usa otras herramientas para operaciones de matriz grande. Las bibliotecas como ND4S o matrices n-dimensionales para Scala y ND4J manejan el cálculo, ya que Spark no es bueno para eso:

deeplearning4j / nd4s

ND4J: matrices N-dimensionales para Java

Deeplearning4j puede hacer que Spark se ejecute en múltiples GPU o CPU. El rendimiento es igual a Caffe. Aquí hay algunos enlaces sobre cómo funciona todo:

Deeplearning4j en Spark

Deeplearning4j con GPU

DL4J es la única biblioteca de DL certificada en Spark (a través de CDH) que viene con soporte comercial. (Divulgación: soy un colaborador del proyecto).

Apache Spark se está convirtiendo en un término general para muchos componentes diferentes, por lo que es importante establecer el contexto.

Spark Core es un motor de procesamiento de datos y programación de tareas muy genérico. Hay ciertas características, que lo convierten en una base de infraestructura impresionante para el aprendizaje de refuerzo.

Específicamente:

  • Modelo muy limpio para operaciones de grano grueso inmutable en grandes conjuntos de datos. Migrar de experimentos de ciencia de datos python o R a la implementación de producción es mucho más fácil.
  • Almacenamiento en caché de datos, que le permite implementar múltiples pasadas de datos sin que sea necesario persistir después de cada pasada. Esto es de gran ayuda cuando necesita implementar Gradient Descent, SGD o AdaGrad.
  • Particionamiento de datos automatizado y personalizable.
  • Programación distribuida de tareas con procesamiento de tareas garantizado
  • Distribución automatizada de código
  • Modo local para facilitar el desarrollo.

Además de Spark Core, hay un marco más específico llamado Spark Streaming, que será útil si necesita actualizaciones de modelos casi en tiempo real. Spark Streaming continúa admitiendo las operaciones de grano grueso inmutables para el flujo de datos. También agrega garantía (con ciertas limitaciones) exactamente una vez que se procesa y una gran capacidad para la administración de estado de transmisión.

Creo que la gestión de estado de transmisión es una herramienta muy útil específicamente para el aprendizaje de refuerzo, si sus algoritmos admiten actualizaciones de modelos casi en tiempo real.

Ahora, las tareas específicas de aprendizaje por refuerzo pueden necesitar un marco mucho más específico. Es posible que necesite extracción de características, álgebra lineal, diversas implementaciones de descenso de gradiente, validación de modelos, etc.

Para estas tareas, puede usar Spark ML o buscar más. Hay muchas bibliotecas ML, que están construidas sobre Spark, pero se ajustan mejor a sus necesidades específicas que Spark MLib.

Algunos de los marcos a considerar:

  • Agua con gas – H2O.ai (0xData) – Aprendizaje automático escalable rápido
  • KeystoneML
  • Aprendizaje profundo distribuido de código abierto para la JVM

No. Spark es bueno para algoritmos simples de Machine Learning.

Incluso para aquellos no es muy eficiente, por lo que cambia la eficiencia por la simplicidad de la programación.

Si desea una implementación de aprendizaje de refuerzo escalable que funcione bien, necesita usar más herramientas de bajo nivel como Torque / OpenMPI.


More Interesting

Serie temporal: ¿Existe un enfoque para la detección de anomalías que no se base en datos de entrenamiento anteriores?

¿Dónde puedo encontrar algunas empresas que trabajen con técnicas de aprendizaje automático y minería de datos, en el campo biomédico?

Cómo analizar páginas web a través de enlaces de Twitter

¿Qué biblioteca de PNL cubre la mayoría de los idiomas para un proyecto de análisis de sentimientos?

¿Cómo puedo comenzar a usar métodos de "generalización apilada" en Python para las competencias de Kaggle?

¿Se recomienda que un desarrollador Java experimentado aprenda y pase al aprendizaje automático? ¿Qué tan difícil / fácil es?

¿Cuándo debo usar un autoencoder frente a un RBM?

¿Es útil para un científico de datos conocer métodos ágiles como Scrum?

¿Podría alguien explicarme la idea básica de la búsqueda del vecino más cercano (ANN) y mostrar un ejemplo?

¿Cuál es la mejor base de datos para almacenar vectores de características de gran tamaño para su posterior recuperación y calcular las mediciones de distancia para la coincidencia de similitudes?

Cómo elegir el número de árboles en el aprendizaje automático

Estoy creando una plataforma de transmisión en vivo: ¿cómo puedo conectarme y usar varias cámaras web al mismo tiempo?

¿Podría el aprendizaje automático erradicar el cáncer?

¿Le resulta aburrido resolver los problemas de aprendizaje automático tipo kaggle intelectualmente aburrido (en comparación con la programación competitiva, por ejemplo)?

¿Debo aprender el aprendizaje automático para IoT?