miércoles, 6 de mayo de 2020

Un flujo de trabajo universal para Machine Learning


La Inteligencia Artificial y el Machine Learning tienen un algo de magia.

Una magia que se manifiesta en las asombrosas capacidades que pueden aportar a software y robots, la magia más interesante y casi espectacular, aunque cada vez estemos más acostumbrados a ella.

Y otra parte de magia, no tan positiva, a nivel de metodología ya que, pese a todos los estudios e incluso resultados, la elección de las arquitecturas de los modelos, en especial redes neuronales en deep learning, el número y tipo de capas, las formas de aprendizaje y activación, etc se guían más por la experiencia e incluso el ensayo y error, que por una teoría sólida.

A pesar de ello, existe una cierta metodología de trabajo, una manera más o menos generalizada de afrontar un proyecto o problema que queremos resolver mediante machine learning.

De hecho, en su libro 'Deep Learning con Python', el creador de Keras, François Chollet, nos propone lo que él denomina un flujo de trabajo universal, un modelo de trabajo con siete fases:

  • Definición del problema y montaje de un conjunto de datos: Algo que parece evidente, pero que tiene más importancia y en algún caso dificultad de lo que parece. Por un lado hay que tener claro cuáles serán los datos de entrada para el algoritmo, típicamente una red neuronal de deep learning, y cuáles los datos de salida. En ese sentido, el autor nos advierte de que esa elección lleva implícitas dos importantísimas hipótesis: por un lado que realmente las salidas se pueden deducir de las entradas y, por otro, que los datos de que disponemos de cara al entrenamiento son suficientemente informativos como para que se pueda aprender la relación subyacente entre entradas y salidas que es lo que, en el fondo, nos interesa. Además, debemos tener claro el tipo de problema que afrontamos: una clasificación, una regresión, etc ya que eso, aparte de ser metodológicamente imprescindible, nos ayuda, y mucho, a seleccionar la arquitectura de la red.

  • Elección de la medida de éxito: Es decir, se trata de poner unos objetivos al algoritmo y cuantificarlos. Se trata de tener claro si queremos conseguir que el algoritmo sea exacto, o preciso o cualquier otra cosa, lo cual lleva a la elección o a veces definición personalizada de la métrica con que evaluaremos los resultados.

  • Decisión acerca del protocolo de evaluación: que tiene que ver con la forma en que se dividen los datos para, por un lado, entrenamiento del modelo y, por otro, evaluación del mismo. El autor menciona tres estrategias básicas (que no vamos a detallar ahora): hold-out, validación cruzada de K iteraciones y validación cruzada de K iteraciones aleatoria.

  • Preparación de los datos: una fase de trabajo que en la práctica puede resultar muy laboriosa y ocupar mucho tiempo de los ingenieros o científicos de datos. Los datos deben formatearse de manera que se conviertan en tensores, que es con lo que al final acaban terminando los algoritmos. Normalmente, además, esos valores deben escalarse para que tomen valores pequeños, por ejemplo entre 0 y 1. Además, con frecuencia es preciso normalizar los datos, es decir, hacer que datos que se mueven en rangos de valores muy diferente se mapeen a otros rangos similares. Finalmente, suele ser necesario hacer la denominada ingeniería de características para refinar los datos con base al conocimiento real del dominio en que trabajamos.

  • Desarrollo de un modelo mejor que el de referencia: Es el momento de elegir el modelo de red que vamos a utilizar. El modelo de referencia a que se refiere el título de la fase es un modelo de sentido común y muy sencillo que podemos usar como alternativa. Existen casos en que un modelo casi trivial y fuera del ámbito de la inteligencia artificial obtiene mejores resultados que un modelo muy elaborado. Evidentemente, si utilizamos machine learning es para intentar mejorar eso. En cualquier caso, en esta fase definimos la arquitectura de nuestra red y diversos elementos de ella como número y tipo de capas. Pero el autor señala como fundamentales en esta fase tres decisiones: la función de activación de la capa de salida, la función de pérdida y el optimizador usado durante el aprendizaje.

  • Desarrollo de modelos con sobre-ajuste: Los modelos de machine learning se mueven siempre entre el sobre-ajuste (nos hemos pasado con el entrenamiento y el algoritmo predice muy bien sobre los datos de entrenamiento pero no sobre otros diferentes) y el subajuste en que al algoritmo no produce buenos resultados, ni siquiera con los datos de entrenamiento). El óptimo es situarse justo en la frontera entre el sub-ajuste ('under-fitting') y el sobre-ajuste ('over-fitting´). Para buscar esa frontera, para conocer dónde se encuentra, conviene forzar el sobre ajuste lo cual se puede conseguir en general con modelos más complejos con más capas, más neuronas por capa o con más ciclos de entrenamiento.

  • Regularización del modelo y ajuste de hiper-parámetros: La fase más larga y donde se juega con el ensayo y error. Se trata de ensayar con las diferentes opciones de los modelos como el número de capas o de unidades por capa, mediante la aplicación de técnicas especiales como el 'dropout' o las regularizaciones, o mediante la identificación de nuevas características aplicando ingeniería de características.

Aunque se nos habla de un modelo universal para el machine learning, en el fondo el autor lo explica claramente para deep learning. No obstante, creo que el planteamiento es bastante generalizable.

Y se puede observar cómo, a pesar de las grandes dosis de matemática e ingeniería que atesora el deep learning, al final hay bastantes decisiones y opciones que se hacen mediante prueba y error aunque la experiencia y el razonamiento ayuden bastante a saber qué probar.

Un método de trabajo con unas incertidumbres que no parecen extrañas en un trabajo de Investigación y Desarrollo, pero que me resultan curiosas cuando las contemplo en el marco de un proyecto empresarial. Pero ese es el estado del arte, así debemos trabajar mientras no encontremos algo mejor, y trabajando así se han conseguido enormes éxitos en los últimos años, que nos proporcionan el verano de la Inteligencia Artificial que estamos viviendo.

1 comentario: