Saltar al contenido

¿Por qué obtengo resultados diferentes cada vez en el aprendizaje automático?

18 de agosto de 2020

¿Estás obteniendo resultados diferentes para tu algoritmo de aprendizaje de la máquina?

Tal vez tus resultados difieran de un tutorial y quieras entender por qué.

Tal vez su modelo está haciendo diferentes predicciones cada vez que se entrena, incluso cuando se entrena con el mismo conjunto de datos cada vez.

Esto es de esperar y podría ser incluso una característica del algoritmo, no un error.

En este tutorial, descubrirás por qué puedes esperar resultados diferentes al utilizar los algoritmos de aprendizaje automático.

Después de completar este tutorial, lo sabrás:

  • Los algoritmos de aprendizaje de la máquina entrenarán diferentes modelos si se cambia el conjunto de datos de entrenamiento.
  • Los algoritmos de aprendizaje de máquinas estocásticas utilizan el azar durante el aprendizaje, asegurando que un modelo diferente se entrena cada vez.
  • Las diferencias en el entorno de desarrollo, como las versiones de software y el tipo de CPU, pueden causar diferencias de error de redondeo en las predicciones y evaluaciones de los modelos.

Empecemos.

¿Por qué obtengo resultados diferentes cada vez en el aprendizaje automático?

¿Por qué obtengo resultados diferentes cada vez en el aprendizaje automático?
Foto de Bonnie Moreland, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en cinco partes; son:

  1. ¡Estoy obteniendo resultados diferentes!
  2. Diferencias causadas por los datos de entrenamiento
    1. Cómo arreglar
  3. Diferencias causadas por el algoritmo de aprendizaje
    1. Cómo arreglar
  4. Diferencias causadas por el procedimiento de evaluación
    1. Cómo arreglar
  5. Diferencias causadas por la plataforma
    1. Cómo arreglar

1. ¡Estoy obteniendo resultados diferentes!

Los algoritmos o modelos de aprendizaje de máquinas pueden dar resultados diferentes.

No es tu culpa. De hecho, a menudo es una característica, no un error.

Especificaremos y explicaremos claramente el problema que tiene.

Primero, vamos a manejar lo básico.

En el aprendizaje aplicado de la máquina, dirigimos una máquina de aprendizaje «algoritmo» en un conjunto de datos para conseguir que una máquina aprenda «modelo.” El modelo puede entonces evaluarse con datos no utilizados durante el entrenamiento o utilizarse para hacer predicciones sobre nuevos datos, tampoco vistos durante el entrenamiento.

  • Algoritmo: El procedimiento se ejecuta sobre datos que resultan en un modelo (por ejemplo, entrenamiento o aprendizaje).
  • Modelo: Estructura de los datos y coeficientes utilizados para hacer predicciones sobre los datos.

Para más información sobre la diferencia entre los algoritmos y modelos de aprendizaje de máquinas, vea el tutorial:

El aprendizaje supervisado de la máquina significa que tenemos ejemplos (filas) con variables de entrada y salida (columnas). No podemos escribir código para predecir las salidas a partir de las entradas porque es demasiado difícil, por lo que utilizamos algoritmos de aprendizaje automático para aprender a predecir las salidas a partir de las entradas dadas ejemplos históricos.

Esto se llama aproximación de funciones, y estamos aprendiendo o buscando una función que mapee las entradas a las salidas en nuestra tarea de predicción específica de tal manera que tenga habilidad, lo que significa que el rendimiento del mapeo es mejor que el del azar e idealmente mejor que todos los demás algoritmos y configuraciones de algoritmos que hemos probado.

  • Aprendizaje supervisado: Aprende automáticamente una función de mapeo de ejemplos de entradas a ejemplos de salidas.

En este sentido, un modelo de aprendizaje automático es un programa que pretendemos utilizar para algún proyecto o aplicación; sucede que el programa se aprendió a partir de ejemplos (utilizando un algoritmo) en lugar de ser escrito explícitamente con declaraciones «if» y cosas por el estilo. Es un tipo de programación automática.

  • Modelo de aprendizaje de la máquina: A “programa«…aprendida automáticamente de los datos históricos.

A diferencia de la programación a la que estamos acostumbrados, los programas pueden no ser del todo deterministas.

Los modelos de aprendizaje de la máquina pueden ser diferentes cada vez que se entrenan. A su vez, los modelos pueden hacer diferentes predicciones y, cuando se evalúan, pueden tener un nivel diferente de error o precisión.

Hay por lo menos cuatro casos en los que obtendrá resultados diferentes; son:

  • Diferentes resultados debido a las diferencias en los datos de entrenamiento.
  • Diferentes resultados debido a los algoritmos de aprendizaje estocástico.
  • Diferentes resultados debido a los procedimientos de evaluación estocástica.
  • Diferentes resultados debido a las diferencias de plataforma.

Veamos más de cerca a cada uno por separado.

¿Me he perdido una posible causa de la diferencia de resultados?
Hágamelo saber en los comentarios de abajo.

2. Diferencias causadas por los datos de entrenamiento

Obtendrá resultados diferentes cuando ejecute el mismo algoritmo con datos diferentes.

Esto se conoce como la variación del algoritmo de aprendizaje de la máquina. Puede que hayas oído hablar de ello en el contexto de la compensación entre sesgo y varianza.

La varianza es una medida de la sensibilidad del algoritmo a los datos específicos utilizados durante el entrenamiento.

  • Variación: Qué tan sensible es el algoritmo a los datos específicos usados durante el entrenamiento.

Un algoritmo más sensible tiene una mayor varianza, lo que dará lugar a una mayor diferencia en el modelo y, a su vez, en las predicciones realizadas y la evaluación del modelo. Por el contrario, un algoritmo menos sensible tiene una menor varianza y dará lugar a una menor diferencia en el modelo resultante con diferentes datos de capacitación, y a su vez, a una menor diferencia en las predicciones realizadas y la evaluación del modelo.

  • Alta Variación: El algoritmo es más sensible a los datos específicos utilizados durante el entrenamiento.
  • Variación baja: El algoritmo es menos sensible a los datos específicos utilizados durante el entrenamiento.
Recomendado:  AI Weekly: el pivote de OpenAI de la robótica reconoce el poder de la simulación

Para más información sobre la varianza y la compensación de la variación de sesgo, ver el tutorial:

Todos los algoritmos útiles de aprendizaje de máquinas tendrán alguna variación, y algunos de los algoritmos más efectivos tendrán una alta variación.

Los algoritmos con una alta varianza suelen requerir más datos de capacitación que los algoritmos con menos varianza. Esto es intuitivo si consideramos el modelo que aproxima una función de mapeo a partir de las entradas y salidas y la ley de los grandes números.

Sin embargo, cuando entrenas un algoritmo de aprendizaje de una máquina con diferentes datos de entrenamiento, obtendrás un modelo diferente que tiene un comportamiento diferente. Esto significa que los diferentes datos de entrenamiento darán modelos que hacen diferentes predicciones y tienen una estimación diferente del rendimiento (por ejemplo, el error o la precisión).

La cantidad de diferencia en los resultados estará relacionada con la diferencia de los datos de entrenamiento para cada modelo, y la variación del modelo específico y la configuración del modelo que haya elegido.

Cómo arreglar

A menudo se puede reducir la variación del modelo cambiando un hiperparámetro del algoritmo.

Por ejemplo, el k en k-cercano a los vecinos controla la varianza del algoritmo, donde pequeños valores como k=1 dan como resultado una alta varianza y grandes valores como k=21 resultan en una baja varianza.

Puedes reducir la varianza cambiando el algoritmo. Por ejemplo, los algoritmos más simples como la regresión lineal y la regresión logística tienen una varianza menor que otros tipos de algoritmos.

También puede reducir la varianza con un algoritmo de alta varianza aumentando el tamaño del conjunto de datos de entrenamiento, lo que significa que tal vez necesite reunir más datos.

3. Diferencias causadas por el algoritmo de aprendizaje

Puedes obtener resultados diferentes cuando ejecutas el mismo algoritmo con los mismos datos debido a la naturaleza del algoritmo de aprendizaje.

Esta es la razón más probable por la que estás leyendo este tutorial.

Ejecutas el mismo código en el mismo conjunto de datos y obtienes un modelo que hace diferentes predicciones o tiene un rendimiento diferente cada vez, y piensas que es un error o algo así. ¿Estoy en lo cierto?

No es un error, es una característica.

Algunos algoritmos de aprendizaje de máquinas son deterministas. Al igual que la programación a la que estás acostumbrado. Eso significa que cuando se le da al algoritmo el mismo conjunto de datos, aprende el mismo modelo cada vez. Un ejemplo es un algoritmo de regresión lineal o de regresión logística.

Algunos algoritmos no son deterministas, sino que son estocásticos. Esto significa que su comportamiento incorpora elementos de aleatoriedad.

Estocástico no significa aleatorio. Los algoritmos de aprendizaje de máquinas estocásticas no aprenden un modelo aleatorio. Están aprendiendo un modelo condicionado a los datos históricos que usted ha proporcionado. En cambio, las pequeñas decisiones específicas tomadas por el algoritmo durante el proceso de aprendizaje pueden variar de forma aleatoria.

El impacto es que cada vez que el algoritmo de aprendizaje de la máquina estocástica se ejecuta con los mismos datos, aprende un modelo ligeramente diferente. A su vez, el modelo puede hacer predicciones ligeramente diferentes, y cuando se evalúa usando el error o la precisión, puede tener un rendimiento ligeramente diferente.

Para más información sobre el estocástico y lo que significa en el aprendizaje automático, vea el tutorial:

Añadir aleatoriedad a algunas de las decisiones tomadas por un algoritmo puede mejorar el rendimiento en problemas difíciles. Aprender una función de mapeo de aprendizaje supervisado con una muestra limitada de datos del dominio es un problema muy difícil.

Encontrar una buena o mejor función de mapeo para un conjunto de datos es un tipo de problema de búsqueda. Probamos diferentes algoritmos y configuraciones de algoritmos de prueba que definen la forma del espacio de búsqueda y nos dan un punto de partida en el espacio de búsqueda. A continuación, ejecutamos los algoritmos, que luego navegan por el espacio de búsqueda hasta un único modelo.

Añadir aleatoriedad puede ayudar a evitar las buenas soluciones y ayudar a encontrar las muy buenas y grandes soluciones en el espacio de búsqueda. Permiten que el modelo escape al óptimo local o al engañoso óptico local donde el algoritmo de aprendizaje podría conseguirlo, y ayudan a encontrar mejores soluciones, incluso un óptimo global.

Para más información sobre cómo pensar en el aprendizaje supervisado como un problema de búsqueda, vea el tutorial:

Recomendado:  Las 5 historias principales de la semana: avances de DeepMind y OpenAI, el plan de Intel para GPU, fallas de día cero de Microsoft

Un ejemplo de un algoritmo que utiliza la aleatoriedad durante el aprendizaje es una red neuronal. Utiliza la aleatoriedad de dos maneras:

  • Pesos iniciales aleatorios (coeficientes modelo).
  • Mezcla aleatoria de muestras en cada época.

Las redes neuronales (aprendizaje profundo) son un algoritmo de aprendizaje de máquina estocástica. Los pesos iniciales aleatorios permiten que el modelo intente aprender desde un punto de partida diferente en el espacio de búsqueda que cada algoritmo ejecuta y permiten que el algoritmo de aprendizaje «romper la simetría» durante el aprendizaje. La mezcla aleatoria de ejemplos durante el entrenamiento asegura que cada estimación de gradiente y actualización de peso sea ligeramente diferente.

Para más información sobre la naturaleza estocástica de las redes neuronales, vea el tutorial:

Otro ejemplo son los algoritmos de aprendizaje en conjunto que son estocásticos, como el embolsado.

En el procedimiento de muestreo del conjunto de datos de capacitación se utiliza el azar para garantizar que se prepare un árbol de decisiones diferente para cada miembro contribuyente del conjunto. En el aprendizaje en conjunto, esto se denomina diversidad de conjunto y es un enfoque para simular predicciones independientes a partir de un único conjunto de datos de capacitación.

Para más información sobre la naturaleza estocástica de los conjuntos de embolsado, ver el tutorial:

Cómo arreglar

La aleatoriedad utilizada por los algoritmos de aprendizaje puede ser controlada.

Por ejemplo, se establece la semilla utilizada por el generador de números pseudoaleatorios para asegurar que cada vez que se ejecute el algoritmo se obtenga la misma aleatoriedad.

Para más información sobre los generadores de números aleatorios y el ajuste de la fijación de la semilla, véase el tutorial:

Este puede ser un buen enfoque para los tutoriales, pero no es un buen enfoque en la práctica. Conduce a preguntas como:

  • ¿Cuál es la mejor semilla para el generador de números pseudoaleatorios?

No existe la mejor semilla para un algoritmo de aprendizaje de una máquina estocástica. Estás luchando contra la naturaleza del algoritmo, forzando al aprendizaje estocástico a ser determinístico.

Se podría argumentar que el modelo final se ajusta utilizando una semilla fija para asegurar que el mismo modelo se cree a partir de los mismos datos antes de ser utilizado en la producción antes de cualquier prueba del sistema de pre-despliegue. Sin embargo, tan pronto como el conjunto de datos de entrenamiento cambie, el modelo cambiará.

Un mejor enfoque es abrazar la naturaleza estocástica de los algoritmos de aprendizaje de las máquinas.

Considere que no hay un solo modelo para su conjunto de datos. En su lugar, hay un proceso estocástico (la tubería del algoritmo) que puede generar modelos para su problema.

Para más información sobre esto, vea el tutorial:

A continuación, se puede resumir el rendimiento de estos modelos – de la tubería del algoritmo – como una distribución con un error o precisión media esperada y una desviación estándar.

De este modo, puede asegurarse de que consigue el rendimiento medio de los modelos ajustando múltiples modelos finales en su conjunto de datos y promediando sus predicciones cuando necesite hacer una predicción sobre nuevos datos.

Para más información sobre el enfoque de conjunto de los modelos finales, ver el tutorial:

4. Diferencias causadas por el procedimiento de evaluación

Se pueden obtener resultados diferentes cuando se ejecuta el mismo algoritmo con los mismos datos debido al procedimiento de evaluación.

Los dos procedimientos de evaluación más comunes son la división de la prueba del tren y la validación cruzada del pliegue K.

Una división de la prueba del tren implica la asignación aleatoria de filas que se utilizarán para entrenar el modelo o evaluar el modelo para que cumpla con un tamaño predefinido de tren o conjunto de pruebas.

Para más información sobre la división de la prueba del tren, vea el tutorial:

El procedimiento de validación cruzada del pliegue k implica dividir un conjunto de datos en particiones k no superpuestas y utilizar un pliegue como conjunto de pruebas y todos los demás pliegues como conjunto de entrenamiento. Se ajusta un modelo en el conjunto de entrenamiento y se evalúa en el pliegue de retención y este proceso se repite k veces, dando a cada pliegue la oportunidad de ser utilizado como el pliegue de retención.

Para más información sobre la validación cruzada de k-fold, vea el tutorial:

Ambos procedimientos de evaluación de modelos son estocásticos.

Una vez más, esto no significa que sean aleatorias; significa que las pequeñas decisiones tomadas en el proceso implican el azar. Específicamente, la elección de qué filas se asignan a un subconjunto determinado de los datos.

Este uso de la aleatoriedad es una característica, no un error.

El uso de la aleatoriedad, en este caso, permite que el remuestreo se aproxime a una estimación del rendimiento del modelo que es independiente de la muestra de datos específicos extraídos del dominio. Esta aproximación está sesgada porque sólo tenemos una pequeña muestra de datos con los que trabajar en lugar del conjunto completo de posibles observaciones.

Recomendado:  RxCelerate lanza RxNfinity™: una plataforma de descubrimiento de moléculas pequeñas habilitada para el aprendizaje automático de última generación

Las estimaciones de rendimiento dan una idea de la capacidad esperada o media del modelo cuando se hacen predicciones en el ámbito de los datos no vistos durante el entrenamiento. Independientemente de las filas específicas de datos utilizadas para entrenar o probar el modelo, al menos de manera ideal.

Para más información sobre el tema más general del muestreo estadístico, véase el tutorial:

Como tal, cada evaluación de un algoritmo de aprendizaje de una máquina determinista, como una regresión lineal o una regresión logística, puede dar una estimación diferente del error o la precisión.

Cómo arreglar

La solución en este caso es muy parecida a la de los algoritmos de aprendizaje estocástico.

La semilla para el generador de números pseudoaleatorios puede ser fijada o se puede abrazar la aleatoriedad del procedimiento.

A diferencia de los algoritmos de aprendizaje estocástico, ambas soluciones son bastante razonables.

Si se evalúa sistemáticamente un gran número de algoritmos de aprendizaje de máquinas y configuraciones de algoritmos en una tarea de modelización predictiva, puede ser una buena idea fijar la semilla aleatoria del procedimiento de evaluación. Cualquier valor servirá.

La idea es que cada solución candidata (cada algoritmo o configuración) sea evaluada de manera idéntica. Esto asegura una comparación de manzanas con manzanas. También permite el uso de pruebas de hipótesis estadísticas emparejadas más tarde, si es necesario, para comprobar si las diferencias entre los algoritmos son estadísticamente significativas.

Adoptar el azar también puede ser apropiado. Ello supone repetir el procedimiento de evaluación muchas veces y comunicar un resumen de la distribución de las puntuaciones de rendimiento, como la media y la desviación estándar.

Tal vez el enfoque menos sesgado de la evaluación repetida sería utilizar la validación cruzada repetida con pliegues k, como tres repeticiones con 10 pliegues (3×10), que es común, o cinco repeticiones con dos pliegues (5×2), que se utiliza comúnmente cuando se comparan los algoritmos con las pruebas de hipótesis estadísticas.

Para más información sobre la validación cruzada repetida de k-fold con pruebas de hipótesis estadísticas, ver el tutorial:

5. Diferencias causadas por la plataforma

Se pueden obtener resultados diferentes cuando se ejecuta el mismo algoritmo con los mismos datos en diferentes ordenadores.

Esto puede suceder incluso si se fija la semilla de números aleatorios para abordar la naturaleza estocástica del algoritmo de aprendizaje y el procedimiento de evaluación.

La causa en este caso es la plataforma o el entorno de desarrollo utilizado para ejecutar el ejemplo, y los resultados suelen ser diferentes en formas menores, pero no siempre.

Esto incluye:

  • Las diferencias en la arquitectura del sistemapor ejemplo, CPU o GPU.
  • Las diferencias en la sistema operativopor ejemplo, MacOS o Linux.
  • Las diferencias en la bibliotecas matemáticas subyacentespor ejemplo, LAPACK o BLAS.
  • Las diferencias en la Versión en pythonpor ejemplo, 3.6 o 3.7.
  • Las diferencias en la versión de la bibliotecapor ejemplo, scikit-learn 0.22 o 0.23.

Los algoritmos de aprendizaje automático son un tipo de cálculo numérico.

Esto significa que típicamente involucran muchas matemáticas con valores de punto flotante. Las diferencias en aspectos como la arquitectura y el sistema operativo pueden dar lugar a diferencias en los errores de redondeo, que pueden agravarse con el número de cálculos realizados para dar resultados muy diferentes.

Además, las diferencias en la versión de las bibliotecas pueden significar la corrección de errores y el cambio de funcionalidad que también puede dar lugar a resultados diferentes.

Además, esto también explica por qué obtendrá resultados diferentes para el mismo algoritmo en la misma máquina implementado por diferentes lenguajes, como R y Python. Pequeñas diferencias en la implementación y/o diferencias en las bibliotecas matemáticas subyacentes utilizadas causarán diferencias en el modelo resultante y en las predicciones hechas por ese modelo.

Cómo arreglar

Esto no significa que la plataforma misma pueda ser tratada como un hiperparámetro y ajustada para un problema de modelado predictivo.

En cambio, significa que la plataforma es un factor importante al evaluar los algoritmos de aprendizaje automático y debe ser fija o estar completamente descrita para garantizar la plena reproducibilidad al pasar del desarrollo a la producción, o al informar sobre el rendimiento en los estudios académicos.

Un enfoque podría consistir en utilizar la virtualización, como el docker o una instancia de máquina virtual para garantizar que el entorno se mantenga constante, si la plena reproducibilidad es fundamental para un proyecto.

Honestamente, el efecto suele ser muy pequeño en la práctica (al menos en mi limitada experiencia), siempre que las principales versiones de software sean lo suficientemente buenas o cercanas.