machine learning - qué - Aprendizaje automático y Big Data
machine learning historia (4)
Antes que nada, su pregunta necesita definir más claramente lo que pretende con Big Data.
De hecho, Big Data es una palabra de moda que puede referirse a varios tamaños de problemas. Tiendo a definir Big Data como la categoría de problemas donde el tamaño de Datos o el tiempo de Computación es lo suficientemente grande para "romper las abstracciones de hardware", lo que significa que una sola máquina no puede realizar los cálculos sin un cuidado intensivo de cómputos y memoria .
El umbral de la escala más allá del cual los datos se convierten en Big Data no está claro y es sensible a su implementación. ¿Su algoritmo está limitado por el ancho de banda de la unidad de disco duro? ¿Tiene que meter los pies en la memoria? ¿Intentó evitar costos cuadráticos innecesarios? ¿Hizo algún esfuerzo para mejorar la eficiencia de la memoria caché, etc.
A partir de varios años de experiencia en ejecutar desafíos medianos de aprendizaje de máquina a gran escala (en hasta 250 cientos de máquinas básicas), creo firmemente que muchos problemas que parecen requerir infraestructura distribuida se pueden ejecutar en una única máquina de productos básicos si el problema se expresa correctamente. Por ejemplo, está mencionando datos a gran escala para minoristas. He estado trabajando en este tema exacto durante varios años, y a menudo me las arreglé para hacer que todos los cálculos se ejecutaran en una sola máquina, proporcionó un poco de optimización. Mi compañía ha estado trabajando en un formato de datos personalizado simple que permite que un año de todos los datos de un minorista muy grande se almacene dentro de 50GB, lo que significa que un solo disco duro puede tener 20 años de historia. Puede echar un vistazo, por ejemplo, en: https://github.com/Lokad/lokad-receiptstream
Desde mi experiencia, vale la pena invertir tiempo tratando de optimizar el algoritmo y la memoria para evitar recurrir a la arquitectura distribuida. De hecho, las arquitecturas distribuidas tienen un costo triple. Primero que nada, los fuertes requerimientos de conocimiento. En segundo lugar, viene con una gran sobrecarga de complejidad en el código. Finalmente, las arquitecturas distribuidas vienen con una sobrecarga de latencia significativa (con la excepción de la distribución local de subprocesos múltiples).
Desde el punto de vista de un practicante, ser capaz de realizar un algoritmo de minería de datos o aprendizaje automático en 30 segundos es uno de los factores clave para la eficiencia. Me he dado cuenta que cuando algunos cálculos, ya sean secuenciales o distribuidos, tardan 10 minutos, mi enfoque y eficiencia tienden a reducirse rápidamente, ya que se vuelve mucho más complicado iterar rápidamente y probar rápidamente nuevas ideas. La sobrecarga de latencia introducida por muchos de los marcos distribuidos es tal que inevitablemente se encontrará en este escenario de baja eficiencia.
Si la escala del problema es tal que incluso con un gran esfuerzo no puede realizarlo en una sola máquina, entonces le sugiero que recurra a los marcos distribuidos en el estante en lugar de construir el suyo propio. Uno de los marcos más conocidos es la abstracción de MapReduce, disponible a través de Apache Hadoop. Hadoop se puede ejecutar en clústeres de 10 mil nodos, probablemente mucho más de lo que alguna vez necesitará. Si no posee el hardware, puede "alquilar" el uso de un clúster de Hadoop, por ejemplo, a través de Amazon MapReduce.
Desafortunadamente, la abstracción de MapReduce no es adecuada para todos los cálculos de Machine Learning. En lo que respecta al aprendizaje automático, MapReduce es un marco rígido y numerosos casos han demostrado ser difíciles o ineficientes para adaptarse a este marco:
- El framework MapReduce está en sí mismo relacionado con la programación funcional. El procedimiento Map se aplica a cada fragmento de datos de forma independiente. Por lo tanto, el marco MapReduce no es adecuado para algoritmos donde la aplicación del procedimiento Map a algunos fragmentos de datos necesita los resultados del mismo procedimiento para otros fragmentos de datos como requisito previo. En otras palabras, el marco MapReduce no es adecuado cuando los cálculos entre las diferentes piezas de datos no son independientes e imponen una cronología específica.
- MapReduce está diseñado para proporcionar una única ejecución del mapa y de los pasos de reducción y no proporciona directamente llamadas iterativas. Por lo tanto, no se adapta directamente a los numerosos problemas de aprendizaje automático que implican el procesamiento iterativo (Expectativa-Maximización (EM), Propagación de creencias, etc.). La implementación de estos algoritmos en un marco MapReduce significa que el usuario debe diseñar una solución que organice la recuperación de resultados y la programación de las iteraciones múltiples de modo que cada iteración del mapa se inicie después de que se complete la fase de reducción de la iteración anterior y que cada iteración del mapa sea alimentado con los resultados proporcionados por la fase de reducción de la iteración anterior.
- La mayoría de las implementaciones de MapReduce se han diseñado para abordar las necesidades de producción y la solidez. Como resultado, la principal preocupación del framework es manejar fallas de hardware y garantizar los resultados del cálculo. Por lo tanto, la eficacia de MapReduce se reduce en parte por estas restricciones de fiabilidad. Por ejemplo, la serialización en discos duros de resultados de cálculo resulta ser bastante costosa en algunos casos.
- MapReduce no es adecuado para algoritmos asíncronos.
El cuestionamiento del marco MapReduce ha dado lugar a marcos distribuidos más ricos en los que el usuario del framework deja más control y libertad, al precio de una mayor complejidad para este usuario. Entre estos marcos, GraphLab y Dryad (ambos basados en gráficos directos acíclicos de cálculos) son bien conocidos.
Como consecuencia, no existe un marco "único para todos", como por ejemplo, no existe una solución de almacenamiento de datos de "talla única".
Para comenzar con Hadoop, puede echar un vistazo al libro Hadoop: The Definitive Guide de Tom White
Si está interesado en cómo los marcos a gran escala se ajustan a los requisitos de Machine Learning, puede estar interesado en el segundo capítulo (en inglés) de mi PhD, disponible aquí: http://tel.archives-ouvertes.fr/docs/00/74/47/68/ANNEX/texfiles/PhD%20Main/PhD.pdf
Si proporciona más información sobre el desafío específico que desea tratar (tipo de algoritmo, tamaño de los datos, restricciones de tiempo y dinero, etc.), probablemente podamos darle una respuesta más específica.
editar: otra referencia que podría ser de su interés: ampliación del aprendizaje automático
Al principio me gustaría describir mi posición actual y el objetivo que me gustaría alcanzar.
Soy un investigador que se ocupa de aprendizaje automático. Hasta ahora han pasado por varios cursos teóricos que cubren algoritmos de aprendizaje automático y análisis de redes sociales y, por lo tanto, han adquirido algunos conceptos teóricos útiles para implementar algoritmos de aprendizaje automático y alimentar los datos reales.
En ejemplos simples, los algoritmos funcionan bien y el tiempo de ejecución es aceptable, mientras que los grandes datos representan un problema si intento ejecutar algoritmos en mi PC. En cuanto al software tengo suficientes experiencias para implementar cualquier algoritmo a partir de artículos o diseñar el mío utilizando cualquier lenguaje o IDE (hasta ahora he usado Matlab, Java con Eclipse, .NET ...) pero hasta ahora no tengo mucha experiencia con el ajuste infraestructura. Empecé a aprender sobre Hadoop, las bases de datos NoSQL, etc., pero no estoy seguro de qué estrategia sería mejor teniendo en cuenta las limitaciones de tiempo de aprendizaje.
El objetivo final es poder configurar una plataforma de trabajo para analizar datos masivos centrándome en la implementación de mis propios algoritmos de aprendizaje automático y ponerlos todos juntos en producción, listos para resolver preguntas útiles mediante el procesamiento de grandes volúmenes de datos.
Como el objetivo principal es implementar algoritmos de aprendizaje automático, me gustaría preguntar si existe alguna plataforma en ejecución, que ofrezca suficientes recursos de CPU para alimentar grandes cantidades de datos, cargar algoritmos propios y simplemente procesar los datos sin pensar en el procesamiento distribuido.
Sin embargo, tal plataforma existe o no, me gustaría obtener una imagen lo suficientemente grande como para poder trabajar en un equipo que podría poner en producción todo el sistema adaptado a las demandas específicas de los clientes. Por ejemplo, un minorista desea analizar las compras diarias, por lo que todos los registros diarios deben cargarse en alguna infraestructura, lo suficientemente capaz de procesar los datos mediante el uso de algoritmos personalizados de aprendizaje automático.
Para poner todo lo anterior en una pregunta simple: cómo diseñar una solución de minería de datos personalizada para problemas de la vida real con enfoque principal en algoritmos de aprendizaje automático y ponerlo en producción, si es posible, utilizando la infraestructura existente y si no, diseño de sistema distribuido ( usando Hadoop o cualquier marco).
Estaría muy agradecido por cualquier consejo o sugerencia sobre libros u otros recursos útiles.
Esta parece ser una vieja pregunta. Sin embargo, dado su uso, los marcos principales que se enfocan en Machine Learning en Big Data son Mahout, Spark (MLlib), H2O, etc. Sin embargo, para ejecutar algoritmos de Machine Learning en Big Data, debe convertirlos a programas paralelos basados en el paradigma Map Reduce. Este es un buen artículo que ofrece una breve introducción a los principales marcos de datos grandes (no todos):
http://www.codophile.com/big-data-frameworks-every-programmer-should-know/
Espero que esto sea de ayuda.
Renata: hay una nueva URL para la URL "Mining of Massive Datasets" que proporcionó.
Tuve que implementar un par de algoritmos de Data Mining para trabajar con BigData también, y terminé usando Hadoop. No sé si usted está familiarizado con Mahout ( http://mahout.apache.org/ ), que ya tiene varios algoritmos listos para usar con Hadoop.
Sin embargo, si desea implementar su propio algoritmo, puede adaptarlo al paradigma MapReduce de Hadoop y obtener buenos resultados. Este es un excelente libro sobre cómo adaptar los algoritmos de Inteligencia Artificial a MapReduce:
Minería de conjuntos de datos masivos - http://infolab.stanford.edu/~ullman/mmds.html