¿Se debe volver a entrenar un modelo si hay nuevas observaciones disponibles?


28

Por lo tanto, no he podido encontrar ninguna literatura sobre este tema, pero parece algo que vale la pena pensar:

  • ¿Cuáles son las mejores prácticas en capacitación y optimización de modelos si hay nuevas observaciones disponibles?

  • ¿Hay alguna forma de determinar el período / frecuencia de volver a entrenar un modelo antes de que las predicciones comiencen a degradarse?

  • ¿Es demasiado adecuado si los parámetros se vuelven a optimizar para los datos agregados?

Tenga en cuenta que el aprendizaje puede no ser necesariamente en línea. Es posible que desee actualizar un modelo existente después de observar una variación significativa en las predicciones más recientes.


La respuesta depende en gran medida del dominio comercial y la aplicación del modelo particular.
Pete

Respuestas:


16
  1. Una vez que se entrena un modelo y obtiene nuevos datos que pueden usarse para el entrenamiento, puede cargar el modelo anterior y entrenar en él. Por ejemplo, puede guardar su modelo como un .picklearchivo y cargarlo y entrenarlo más cuando haya nuevos datos disponibles. Ten en cuenta que para el modelo para predecir correctamente the new training data should have a similar distribution as the past data.
  2. Las predicciones tienden a degradarse según el conjunto de datos que está utilizando. Por ejemplo, si está tratando de entrenar utilizando datos de Twitter y ha recopilado datos sobre un producto que se tuiteó ampliamente ese día. Pero si usa tweets después de algunos días en que ese producto ni siquiera se discute, podría estar sesgado. The frequency will be dependent on datasety no hay un tiempo específico para declarar como tal. If you observe that your new incoming data is deviating vastly, then it is a good practise to retrain the model.
  3. La optimización de los parámetros en los datos agregados no es demasiado adecuada. Grandes datos no implican sobreajuste. Utilice la validación cruzada para verificar el ajuste excesivo.

Entonces, si la naturaleza de la entrada del conjunto de datos sigue siendo coherente, ¿no hay nada nuevo que el modelo pueda aprender?
user140323

Si los datos no cambian y está satisfecho con la precisión del modelo actual, no veo ningún punto en volver a entrenarlo.
Hima Varsha

@Aayush, tal vez pueda usar los datos entrantes como conjunto de validación y verificar su modelo actual.
Hima Varsha

Todavía es muy temprano para aceptar, pero lo haré. ¡Gracias!
user140323

Hola @ tktktk0711, actualmente no tengo un código para mostrarte. Pero solo pasa por esto, que señala otro enlace con el código. github.com/tflearn/tflearn/issues/39
Hima Varsha

20

Cuando hay nuevas observaciones disponibles, hay tres formas de reentrenar su modelo:

  1. En línea: cada vez que hay una nueva observación disponible, utiliza este único punto de datos para entrenar aún más su modelo (por ejemplo, cargar su modelo actual y entrenarlo más haciendo propagación hacia atrás con esa observación única). Con este método, su modelo aprende de manera secuencial y se adapta localmente a sus datos, ya que estará más influenciado por las observaciones recientes que por las observaciones más antiguas. Esto podría ser útil en situaciones en las que su modelo necesita adaptarse dinámicamente a nuevos patrones en los datos. También es útil cuando se trata de conjuntos de datos extremadamente grandes para los que no es posible capacitarse en todos ellos a la vez.
  2. Fuera de línea: agrega las nuevas observaciones a su conjunto de datos ya existente y reentrena completamente su modelo en este nuevo conjunto de datos más grande. Esto generalmente conduce a una mejor aproximación global de la función objetivo y es muy popular si tiene un conjunto de datos fijo o si no tiene nuevas observaciones a menudo. Sin embargo, no es práctico para grandes conjuntos de datos.
  3. Lote / mini lote: este es un enfoque intermedio. Con el lote, espera hasta tener un lote de nuevas observaciones y luego entrena su modelo ya existente en todo este lote. No está fuera de línea ya que no está agregando este lote a su conjunto de datos preexistentes y luego está volviendo a entrenar su modelo en él y no está en línea, ya que está entrenando su modelo en observaciones a la vez y no solo una. Entonces, es un poco de ambos :) El mini lote es exactamente el mismo, excepto que el tamaño del lote es más pequeño, por lo que tiende hacia el aprendizaje en línea. En realidad, el aprendizaje en línea es solo lote con tamaño de lote 1 y fuera de línea es lote con tamaño de lote del tamaño de todo el conjunto de datos.nnn

La mayoría de los modelos actuales usarán lotes / mini lotes y la elección del tamaño del lote depende de su aplicación y modelo. Elegir el lote de tamaño correcto es equivalente a elegir la frecuencia correcta con la que volver a entrenar su modelo. Si su nueva observación tiene una baja variación con sus datos existentes, sugeriría lotes más grandes (256-512 tal vez) y si, por el contrario, las nuevas observaciones tienden a variar mucho con sus datos existentes, use lotes pequeños (8-256). Al final del día, el tamaño del lote es como otro hiperparámetro que necesita ajustar y que es específico para sus datos


Hola, quiero preguntarle en línea: como en línea para obtener nuevos datos. ¿Este método limita algún modelo de ML? Quiero decir, no todo el aprendizaje automático.
tktktk0711

¿Conoces algún ejemplo de tensorflow que use lote ?
maxisme

1

Su problema se incluye en los métodos de aprendizaje en línea. Suponiendo que llegue un flujo de datos, puede usar el método de Descenso de gradiente estocástico para actualizar los parámetros de su modelo utilizando ese único ejemplo.

Si su función de costo es:

minθJ(x,y,θ) ,

donde es el vector de parámetros, luego, suponiendo una transmisión de datos de forma ( ), puede actualizar su vector de parámetros usando SGD con la siguiente ecuación de actualización:x i , y iθxi,yi

θt=θt1θJ(xi,yi) .

Esto es esencialmente SGD con tamaño de lote 1.

Hay otro truco, puede adoptar un método basado en ventana / búfer, donde almacena algunos ejemplos del flujo y lo trata como un lote y usa el SGD por lotes. En ese caso, la ecuación de actualización se convertirá en:

θt=θt1iθJ(xi,yi) .

Esto es esencialmente SGD mini-lote.


0

La pregunta: ¿DEBERÍAS volver a entrenar?

La respuesta depende de lo que intente hacer su modelo y en qué entorno se aplique.

Déjame explicarte con un par de ejemplos:

Suponga que su modelo intenta predecir el comportamiento de los clientes, por ejemplo, qué tan probable es que un cliente compre su producto dada una oferta personalizada para él. Claramente, el mercado cambia con el tiempo, las preferencias de los clientes cambian y sus competidores se ajustan. También debe ajustar, por lo que debe volver a entrenar periódicamente. En tal caso, recomendaría agregar datos nuevos, pero también omitir datos antiguos que ya no son relevantes. Si el mercado está cambiando rápidamente, incluso debería considerar volver a capacitarse periódicamente basándose solo en datos nuevos.

Por otro lado, si su modelo clasifica algunas imágenes (por ejemplo, rayos X o resonancia magnética) en condiciones médicas, y el modelo funciona bien, no necesita volver a entrenar si no hay cambios en la tecnología o en el conocimiento médico . Agregar más datos no mejorará mucho.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.