Mantendré esto bastante pragmático, en lugar de teórico. La visión de 10,000,000 pies es que el aprendizaje en línea, a diferencia de los algoritmos por lotes (y, específicamente, PAC), es:
- Computacionalmente mucho más rápido y más eficiente en el espacio. Otra respuesta aquí dice que los métodos fuera de línea son más rápidos; eso es completamente incorrecto [1]. En el modelo en línea de vainilla, se le permite hacer exactamente un pase en sus datos, por lo que estos algoritmos suelen ser mucho más rápidos que sus equivalentes PAC, ya que la mayoría de los algoritmos PAC son de múltiples pasos. Además, dado que no puede reconsiderar sus ejemplos anteriores, generalmente no los almacena para acceder más adelante en el procedimiento de aprendizaje, lo que significa que tiende a usar una huella de memoria más pequeña.
- Generalmente más fácil de implementar. Dado que el modelo en línea de Vanilla hace un pase sobre los datos, terminamos procesando un ejemplo a la vez, secuencialmente, a medida que ingresan de la transmisión. Esto generalmente ( generalmente ) simplifica el algoritmo dramáticamente, si lo hace desde cero. Si está utilizando una biblioteca, el código que administra los datos a menudo es más simple porque a menudo no tiene que mantener todos sus datos en la RAM: simplemente los coloca en una llamada API, termina con un resultado y tirarlo o registrarlo.
- Un marco más general. En los algoritmos por lotes, está bien (e incluso se recomienda) mezclar su conjunto de datos antes de aprender. Esto se debe a que casi todos los algoritmos por lotes asumen que sus datos son intercambiables o iid. Sin embargo, en el caso más general, el orden de sus datos es importante, y cuando realmente no puede asumir que sus datos pueden reordenarse arbitrariamente, debe procesarlos secuencialmente. Ese es precisamente el objetivo de los algoritmos en línea: el aprendizaje en línea es un marco más general que, y un superconjunto estricto del aprendizaje por lotes.
- Más difícil de mantener en producción. La implementación de algoritmos en línea en producción generalmente requiere que tenga algo que constantemente transfiera puntos de datos a su algoritmo. Si sus datos cambian y sus selectores de funciones ya no producen resultados útiles, o si hay una latencia de red importante entre los servidores de sus selectores de funciones, o uno de esos servidores se cae, o realmente, cualquier otra cantidad de cosas , sus estudiantes se concentran y tu salida es basura. Asegurarse de que todo esto funcione correctamente puede ser una prueba.
- Más difícil de evaluar en línea. En el aprendizaje en línea de vanilla, no podemos ofrecer un conjunto de “prueba” para evaluación porque no estamos haciendo suposiciones de distribución; si seleccionamos un conjunto para evaluar, estaríamos asumiendo que el conjunto de prueba es representativo de los datos que ” re operando, y esa es una suposición distributiva. Dado que, en el caso más general, no hay forma de obtener un conjunto representativo que caracterice sus datos, su única opción (nuevamente, en el caso más general) es simplemente observar qué tan bien ha ido el algoritmo recientemente. Pero, ¿qué significa si te has equivocado? ¿Es solo mala suerte o significa que debes cambiar tu hipótesis un poco? En el aprendizaje por lotes, estas preguntas son bastante fáciles de responder, pero en los algoritmos en línea, generalmente tiene que pensar en ello.
- Por lo general, es más difícil “acertar”. Como vimos en el último punto, la evaluación en línea del alumno es difícil. Por razones similares, puede ser muy difícil lograr que el algoritmo se comporte “correctamente” de forma automática. Puede ser difícil diagnosticar si su algoritmo o su infraestructura se están portando mal.
- También es más difícil de evaluar en un entorno fuera de línea. Si le entrego una serie de puntos de datos y las predicciones de nuestro sistema, a menudo es útil tener un proceso fuera de línea que pase todo el tiempo necesario para descubrir cómo está funcionando realmente nuestro sistema. En la mayoría de los casos, es difícil encontrar un esquema de evaluación fuera de línea que funcione significativamente mejor que el esquema en línea.
Observaciones El aprendizaje en línea o un híbrido en línea es a veces la única opción viable para manejar grandes cantidades de datos. Específicamente, cuando ve tantos datos que solo tiene la oportunidad de ver cada punto de datos una vez, el aprendizaje en línea puede ser una buena opción. Otra opción es ejecutar métodos por lotes en los datos más recientes de forma continua, reemplazando modelos antiguos por modelos nuevos a medida que avanza en el tiempo. Es difícil saber cuándo uno será mejor que el otro (o, de hecho, dados los desafíos de evaluación, que es mejor).
Aunque el modelo en línea hace menos suposiciones sobre sus datos, en producción, esto a veces (¿generalmente?) No es necesario, y vale la pena relajarse si puede. Por ejemplo, la suposición de que sus datos son intercambiables o iid es una bendición, ya que le permite hacer cosas como mezclar los datos o crear y evaluar su hipótesis en conjuntos de pruebas. Incluso si sus datos no son iid, siempre y cuando esa suposición no demuestre lo que está tratando de aprender, puede suponer que sí.
- ¿Qué es mejor para alguien que esté dispuesto a hacer un doctorado en visión artificial: conocer un método en profundidad y aplicaciones ampliamente, o lo contrario?
- ¿Cuál es un buen consejo para una implementación eficiente de un algoritmo de aprendizaje automático en C / C ++?
- Si quiero trabajar en Machine Learning e Inteligencia artificial, ¿debería especializarme en Matemáticas / CS o Estadísticas / CS?
- ¿Cómo se elige una función de activación? He notado que las funciones más utilizadas se parecen, especialmente cerca de 0. ¿Tienen que ajustarse a algún comportamiento específico? ¿Es este un tema de investigación abierto? ¿Hace una gran diferencia en los resultados?
- ¿Qué significa cuando obtengo buenos resultados de la medida F con un CV de 10 veces pero resultados pobres en los datos de la prueba, resultados similares si participo el conjunto de datos original en el conjunto de entrenamiento / validación? Obtengo buenos resultados en la validación pero malos resultados en el conjunto de pruebas.
No subestimes que los algoritmos puramente en línea pueden ser difíciles de implementar de una manera que sea realmente escalable. Cuando un algoritmo está puramente en línea, debe monitorear constantemente su estado y el estado del sistema que le envía datos. Es revelador que en la práctica, incluso la mayoría de las empresas que pueden hacer esto, no lo hacen. No, a menos que no tengan otra opción. Si no es realmente importante que todo suceda exactamente en tiempo real, a menudo es significativamente mejor entrenar constantemente los modelos por lotes y reemplazarlos continuamente a medida que avanza en el tiempo.
En general, la producción ML debe centrarse en el usuario. Lo que está haciendo debe diseñarse con la forma en que el usuario interactúa con su sistema. Su modelo debe ser tan complicado como debe ser para llevar a cabo estas tareas, y exactamente no más difícil.
[1] De Fundamentos del aprendizaje automático (Morhi et al , 2012), probablemente el mejor libro de ML orientado a la teoría del aprendizaje de posgrado disponible en este momento tiene esto que decir sobre el tema (Página 147):
[Algoritmos en línea] procesan una muestra a la vez y, por lo tanto, pueden ser significativamente más eficientes tanto en tiempo y espacio como en algoritmos por lotes más prácticos.