¿Por qué es difícil entrenar un modelo de aprendizaje automático de forma incremental, en tiempo real?

Depende del espacio del problema.
La misión Apollo tenía un ML en línea / en tiempo real funcionando: un filtro Kalman.

Creo que la mayoría de las personas en Quora están pensando en un problema como la publicidad computacional en línea, que implica miles de millones de clics en tiempo real y potencialmente millones de funciones. El prototipo de ML para esto es una regresión lineal regularizada por L1. Los métodos relacionados incluyen L1-Regresión logística, L1-SVM, Rango SVM, etc.

El regularizador L1 se desea para proporcionar un modelo disperso. La regresión lineal L1-reg también se llama detección comprimida.

Noisy Time Series III: Fundamentos teóricos de la detección comprimida

La forma más fácil de resolver el problema de optimización L1 es con el descenso de coordenadas (CD) porque en el espacio de coordenadas

  1. La función objetivo del problema de optimización es diferenciable, y
  2. el tamaño del paso se puede dominar normalizando los vectores de datos / documentos

En consecuencia, uno puede aplicar métodos simples como CD que requieren muy pocos parámetros ajustables. Métodos como Liblinear y GraphLab hacen esto, y lo hacen muy, muy bien.

Pero en un entorno en línea, uno quiere formar los gradientes a medida que llega cada nueva muestra de capacitación, es decir, en ‘espacio de documentos, no’ coordenadas o espacio de características ‘.

La forma estándar de hacer esto es el Descenso de gradiente estocástico (SGD), también conocido como mínimos cuadrados medios (LMS)

El problema es que SGD no genera soluciones dispersas, como se desea con un regularizador L1. Para espacios de características muy grandes y diversos, este es un problema. Además, SGD requiere un parámetro ajustable, la velocidad de aprendizaje (o el tamaño del paso), que es difícil de predeterminar. En consecuencia, se ha realizado un gran esfuerzo para desarrollar algos SGD modificados que puedan generar un modelo disperso y determinar automáticamente el tamaño del paso

Durante mucho tiempo, los investigadores buscaron soluciones rápidas de svm / convexas. Boyd en Stanford fue pionero en los métodos de barrera de punto / registro interior y desarrolló una implementación de alto rendimiento para el L1-SVM. Y estos son buenos métodos. Pero son métodos especializados que requieren mucho trabajo para comprender e implementar. Además, el estudiante de Boyd (que implementó el solucionador SVM L1 de alto rendimiento), fue a trabajar a un gran fondo de cobertura y no trajo la técnica a la industria de Internet. También se logró un avance clave con ” Pegasos : Primal Estimado sub-GrAdient SOlver for SVM”, desarrollado en la Universidad de Chicago (mi escuela, debo mencionarlo):

Código fuente de Shai Shalev-Shwartz

Por supuesto, hubo otros avances importantes, como los métodos de resolución de paquetes / planos de corte desarrollados por Joachims para SvmLight. En este momento, 2013, se han desarrollado al menos 10 métodos diferentes para abordar estos problemas.

VW está bien, pero no es un gran ejemplo. VW requiere que el usuario ingrese la tasa de aprendizaje inicial y adopta un enfoque tradicional de 2 pasos, donde el solucionador cambia de SGD a LBGFS (un método aproximado de segundo orden). [al menos creo recordar que esto es lo que hace, podría estar equivocado aquí]. Este es un buen enfoque, pero no necesariamente adecuado para el aprendizaje en línea real.

Un buen ejemplo reciente de algo escaso y automatizado tipo SGD es el Follow the Leader – Proximal, discutido en este artículo por Google

Página en contenido de usuario de Google

Descargo de responsabilidad: no tengo ningún sesgo particular hacia ninguno de estos algos

Finalmente, mencionaré algunos otros problemas prácticos de ingeniería. El aprendizaje en línea, a la escala de Google o eBay (mi antiguo cliente), requiere almacenar grandes cantidades de datos en la memoria. En consecuencia, en muchas aplicaciones, es necesario implementar el solucionador numérico con representaciones comprimidas de flotadores, pero estos solucionadores están sujetos a errores de redondeo, y en realidad es difícil incluso implementar SGD simple si no controla los errores de redondeo correctamente. Este problema se discute en el documento de google

[si tengo algo mal o me he perdido algo, por favor comente y haré las correcciones]


Para obtener más datos divertidos y respuestas increíbles, consulte mi canal de YouTube https://www.youtube.com/channel/…

y sígueme en Twitter https://twitter.com/CalcCon

La actualización en tiempo real tiende a requerir el uso de “métodos en línea”. Esta es un área que tiene resultados teóricos notables, y recientemente ha avanzado a pasos agigantados. Sin embargo, las buenas herramientas industriales son mucho más difíciles de conseguir que la configuración por lotes. “Vowpal Wabbit” es probablemente la excepción más conocida, y estoy seguro de que hay muchas implementaciones exitosas de aprendizaje en línea que la gente ha hecho pero no ha publicado.

Una razón más importante por la que no se usan es que si de repente algo sale mal sin razón aparente, lo verá primero en cualquier predicción en tiempo real que esté tratando de hacer. En los métodos por lotes, detectará fallas antes.

Una implementación exitosa de métodos en línea es la detección de spam. Los spammers actualizan sus métodos muy rápidamente, por lo que cualquier método fijo será rápidamente superado. Un método de aprendizaje en línea en tiempo real puede mantener el ritmo mucho mejor.

Algunos algoritmos no son adecuados para dicho curso. Por ejemplo, árboles de decisión. No son estables y cualquier dato nuevo puede volcar el árbol de abajo hacia arriba.

Sin embargo, hay otros algoritmos que podrían funcionar bien de esa manera. Por ejemplo, Neural Nets, Naive Bayes y tal. Estos algoritmos encajan bien en tales conceptos de aprendizaje en línea.

Aquí hay un algoritmo trivial en línea: simplemente haga el algoritmo por lotes con más datos incrementales en cada paso. Pero eso es lento! Tenemos que revisar todo el conjunto de datos nuevamente. Nos gustaría actualizar el modelo revisando solo los datos nuevos. ¿Cuándo es eso posible? Bueno, el algoritmo por lotes generalmente optimiza algún objetivo. El resultado es, por ejemplo, algunos parámetros que describen el sistema entrenado. En algunos casos, es posible tomar solo los datos incrementales y actualizar los parámetros para mejorar un poco el objetivo. De hecho, puede hacerlo de modo que, en promedio, la actualización vaya lo más cuesta abajo posible en el paisaje objetivo (es decir, en la dirección del gradiente negativo). Luego, sus actualizaciones en línea son rápidas porque solo operan con los nuevos datos, pero finalmente optimizan el mismo objetivo. Muchos problemas se pueden formular de esta manera (por ejemplo, k-significa agrupamiento), pero para algunos, no es posible o tan obvio.

More Interesting

¿Cómo se determina el tamaño del paso de actualización para el algoritmo de retropropagación ADADELTA?

¿Cómo puedo interpretar las predicciones en un modelo de aprendizaje automático de salud (bosque aleatorio) para infarto agudo de miocardio?

¿Cuál es la diferencia entre regresión logística y factorización matricial?

¿Cuáles son los problemas de investigación en la detección de objetos?

¿Qué tipo de estructuras de datos podrían usarse en un proyecto de procesamiento de lenguaje natural?

¿En qué casos las redes convolucionales no son una buena opción para la clasificación de imágenes?

¿Es posible verificar manualmente si los vectores de soporte siguen hiperplanos teóricos en SVM usando un núcleo de base radial?

¿Cómo puede un programa determinar rápidamente si un tweet es negativo o positivo?

Los datos financieros fluyen como 'gatos que cambian sus caras porque las computadoras los reconocen en YouTube'. ¿Hay una solución a este problema?

¿Qué área de IA y aprendizaje profundo es útil para vehículos autónomos?

¿Qué trabajo puede hacer un ingeniero de aprendizaje automático para ayudar a las personas?

¿Cuáles son los mejores recursos en línea para mejorar los algoritmos de aprendizaje automático?

¿Podría alguien elaborar la relación entre un lenguaje de máquina, un sistema operativo y un procesador en particular?

¿Qué pensaría BF Skinner del aprendizaje automático?

¿Qué debo elegir para mi tesis en Machine Learning?