¿Cuáles son algunas de las mejores prácticas para entrenar modelos de aprendizaje automático?

Esta es una pregunta muy amplia. Sin embargo, intentaré resumir algunas de las mejores prácticas que he encontrado para entrenar y probar modelos de ML. Tenga en cuenta que estoy centrando mi respuesta en los modelos ML que están capacitados en datos generados por el usuario para productos orientados al usuario. Esto excluye otros dominios como, por ejemplo, clasificación de imágenes o comprensión del lenguaje. Además, me estoy centrando solo en la capacitación y las pruebas y evito muchos otros problemas importantes, como la ingeniería de características, que también afectan el proceso.

Métrica

  • Debe elegir una métrica de optimización fuera de línea que se correlacione lo mejor posible con los objetivos del producto. Muchas veces, un buen proxy para los objetivos del producto puede ser un resultado de prueba A / B en línea o alguna otra métrica en línea.
  • Solo puede saber que una métrica se correlaciona bien con las pruebas A / B en línea ejecutando diferentes experimentos y rastreando métricas fuera de línea
    • Por ejemplo, las métricas que tienden a correlacionarse bien con los problemas relacionados con la clasificación son [correo electrónico protegido] , NDCG o MRR (rango recíproco medio)
  • Una buena métrica:
    • Debe permitir comparar fácilmente diferentes modelos
    • Debe ser tan fácil de entender e interpretar como sea posible
  • Es una buena idea hacer un seguimiento de sus métricas por segmento de usuario que le interese (por ejemplo, nuevos usuarios, usuarios obsoletos, usuarios muy activos, locales …)
  • Mida su métrica en el conjunto de prueba (no entrenamiento, no validación)
  • Es bueno hacer un seguimiento de las métricas sin conexión que le dan una idea de cuánto está “cambiando” la experiencia. Por ejemplo, puede realizar un seguimiento de la correlación de Pearson entre la clasificación de su nuevo modelo y la existente. Si no está cambiando mucho, puede que no valga la pena hacer una prueba AB.
  • En muchos casos, es posible que necesite rastrear no una, sino varias métricas fuera de línea y decidir cómo intercambiarlas. Como regla general, es bueno decidir sobre la compensación de antemano.

Datos de entrenamiento

  • Si elimina un subconjunto de usuarios de su conjunto de datos, debe esperar que el modelo resultante sea peor para ese “tipo” de usuario
  • Es importante capturar las variaciones temporales en su conjunto de entrenamiento. Por ejemplo, si solo entrena con los datos de ayer, podría estar entrenando un domingo y luego tratar de aplicar los resultados a un lunes. En términos generales, es bueno obtener sus datos de entrenamiento durante al menos una semana completa y evitar días festivos especiales donde el comportamiento puede cambiar drásticamente.
  • Es probable que no necesite todos los datos que tiene. Muchas veces es una buena idea reducir sus datos de entrenamiento si puede mantener las métricas constantes y reducir el tiempo de entrenamiento.
  • Por otro lado, agregar más datos (no redundantes) podría mejorar la precisión de un modelo más complejo con más parámetros, por lo que debe tener cuidado de no conducir a un óptimo local al reducir los datos solo porque su modelo es demasiado simple y no aumenta cuando intentas uno más complejo.
  • El muestreo aleatorio no siempre es la mejor manera de reducir sus datos. Mediante el muestreo aleatorio, es posible que obtenga demasiados puntos de datos de sus usuarios más activos. Es posible que deba estratificar el muestreo para capturar la variación de usuarios, elementos o tiempo.
  • Puede pesar los datos de entrenamiento para impulsar el modelo a valorar algunas acciones más que otras. Por ejemplo, si cree que una acción en contenido de alta calidad vale el doble que una en contenido normal, puede multiplicar la de alta calidad por 2.
  • Además, tenga en cuenta que los sesgos naturales en las acciones pueden requerir alguna forma de submuestra o ponderación para contrarrestar esto. Por ejemplo, su conjunto de datos puede tener muchos más clics que me gusta, pero desea que el modelo los evalúe de manera similar.
  • Los datos de entrenamiento también están sesgados por el modelo existente. Idealmente, desearía introducir algo de aleatoriedad o exploración en lo que presenta para obtener muestras menos sesgadas. Sin embargo, cómo hacerlo sin afectar el compromiso está fuera del alcance de esta respuesta.

Muestreo negativo

  • La simple idea de tratar todo lo que se muestra pero no se hace “clic” como negativo generalmente no funciona
    • La razón por la que no funciona es que esto le enseña al modelo que lo que decidió que era algo bueno es en realidad peor que lo que no se mostró (sesgo de presentación)
  • Muchas veces el muestreo aleatorio del “catálogo” es una estrategia adecuada si su catálogo es lo suficientemente grande
    • La suposición aquí es que es muy poco probable que una muestra aleatoria de su catálogo específico sea un ejemplo positivo
    • Tenga en cuenta que “catálogo” aquí se define como el subconjunto de elementos que su algoritmo podría considerar
  • Puede combinar muestras negativas de las impresiones con muestras aleatorias y usar un hiperparámetro para ajustar la proporción de cada
  • Los usuarios con baja actividad no harán clic en las cosas de forma predeterminada. Tratarlos como negativos empeora aún más los problemas descritos anteriormente.
  • Los diferentes modelos lidian mejor o peor con el desequilibrio de clase, pero como regla general, se necesitan tantos aspectos positivos como negativos. Probablemente tenga muchos más negativos que positivos. Entonces, sí, está bien reducir la muestra.

Ajuste de hiperparámetros

  • Debe hacer un ajuste de hiperparámetro con un conjunto de validación que sea diferente del entrenamiento y las pruebas.
  • No todos sus hiperparámetros tienen el mismo rango. Algunos casi nunca se moverán, mientras que otros pueden cambiar de un día para otro debido a la palanca de cambios covariable.
  • Idealmente, desea ajustar sus hiperparámetros cada vez que vuelva a entrenar su modelo. Sin embargo, es posible que no desee ajustarlos todos, ya que es costoso.
  • La búsqueda de cuadrícula es simple, pero altamente ineficaz. Hay mejores formas (por ejemplo, optimización bayesiana)

Sobreajuste y viaje en el tiempo

  • Siempre debe verificar sus hiperparámetros para detectar posibles signos de sobreajuste (por ejemplo, una lambda de regularización cercana a cero).
  • Utilice un conjunto de prueba del “futuro”. Por ejemplo, intente predecir los clics más recientes de los más antiguos. No muestree al azar su conjunto de prueba del mismo lote que su conjunto de entrenamiento.
  • Asegúrese de que sus funciones de entrenamiento no contengan datos del “futuro” (también conocido como viaje en el tiempo). Si bien esto puede ser fácil y obvio en algunos casos, puede ser complicado. Por ejemplo, puede estar usando la salida de otro modelo desarrollado por otra persona como entrada suya. Este modelo externo puede incluir información de la fecha de su conjunto de pruebas.
  • Si su métrica de prueba se vuelve realmente buena de repente, pregúntese qué podría estar haciendo mal. Lo más probable es que estés viajando en el tiempo o que estés equipado de alguna manera.

More Interesting

¿Por qué no hay robot chef? ¿Será posible a medida que el aprendizaje automático sea más avanzado?

¿Es IOStream de C ++ un mal diseño?

¿Cuál es una explicación intuitiva para la idea de que un cerebro es una computadora cuántica?

¿Por qué todas las distribuciones de Linux tienen Python preinstalado y no C / C ++?

¿Cuál es la diferencia entre Prolog y Python con respecto a la codificación de problemas de inteligencia artificial?

Tengo 4 años de experiencia en TI. Estoy planeando cambiar a BIG Data y Hadoop. ¿Cuáles son los pros y los contras que debo tener en cuenta?

¿Existe una diferencia de preferencia de software entre estadística y aprendizaje automático?

Cómo escribir una gran cantidad de archivos a la vez, sin obstruir los recursos de la máquina

Si los desarrolladores de back-end desprecian a los desarrolladores de front-end porque el front-end es más fácil, ¿qué piensan de los desarrolladores de dispositivos móviles y de juegos, ya que también son una especie de desarrolladores de front-end?

Dada solo una lista de todas las notas tocadas en una pieza, junto con sus duraciones y tiempos de inicio, ¿se puede determinar algorítmicamente la clave?

Python o PHP, ¿qué lenguaje estudiar primero?

¿Qué debemos preparar antes de comenzar las pruebas automatizadas de comercio electrónico?

¿Cuáles son los pasos que debo seguir para ser bueno en el aprendizaje automático teniendo que solo sé programar?

¿Puedes explicar el procesamiento del lenguaje natural a un laico?

¿Es posible sincronizar datos en un clúster informático con la nube?