¿Qué es el ajuste de hiper-parámetros

En este artículo vamos a entender en detalle en qué consiste el ajuste de hiper-parámetros y cómo funcionan sus dos principales métodos: la búsqueda exhaustiva (grid search) y la búsqueda aleatoria (random search).

¡Así que listo, comencemos!

Video

Como siempre, en el canal de YouTube se encuentra el video de este post:

Introducción

Para entrenar cualquier modelo de Machine Learning debemos fijar lo que se conocen como los hiper-parámetros, que son unas variables numéricas que debemos seleccionar cuidadosamente para garantizar que el modelo tenga el mejor desempeño posible.

Así que en cualquier proyecto de Machine Learning tendremos que determinar el set de hiper-parámetros más adecuado, para así lograr tener un modelo que genere las mejores predicciones para el problema que estemos resolviendo.

Este proceso se conoce precisamente como ajuste de hiper-parámetros y existen principalmente dos formas de hacerlo: usando el método de búsqueda exhaustiva (o grid search) y el método de búsqueda aleatoria (random search).

Así que en este artículo vamos a entender en detalle en qué consiste este ajuste de hiper-parámetros y cómo funcionan estos dos métodos.

Repaso: los hiper-parámetros de un modelo

Comencemos recordando qué son los hiper-parámetros de un modelo de Machine Learning, de los cuales ya hablamos en detalle en un artículo anterior.

Supongamos que queremos construir una Red Neuronal para una empresa de streaming de video. La idea es tomar el perfil de cada cliente (como el número de meses que lleva suscrito al servicio, la cantidad de horas por semana que accede a la plataforma, la edad del cliente y su ubicación geográfica, entre otras) y queremos que la Red aprenda a predecir si el cliente permanecerá o abandonará el servicio.

Una de las decisiones que tendremos que tomar en este caso es, por ejemplo: ¿cuántas capas ocultas debe tener la red? y ¿cuántas neuronas debemos colocar en cada capa?

Estas variables, son precisamente algunos hiper-parámetros de la Red Neuronal. Es decir que los hiper-parámetros son una serie de valores numéricos que nosotros debemos escoger al momento de escribir el código para crear la Red Neuronal.

El ajuste de hiper-parámetros

Volvamos al problema anterior y supongamos que definimos estos posibles valores para los hiper-parámetros de la Red Neuronal:

Y acá vale la pena preguntarnos ¿cómo podemos determinar el número de capas ocultas y el número de neuronas por capa más adecuados? Es decir, ¿cuáles son los hiper-parámetros ideales para esta Red Neuronal?

Del valor que escojamos para estos hiper-parámetros dependerá el desempeño que tenga nuestra Red. Es decir, para ciertas combinaciones de capas ocultas y número de neuronas tendremos unas predicciones muy malas, pero para otras lograremos generar predicciones bastante acertadas.

Desafortunadamente, no existe una fórmula mágica que nos permita determinar el valor ideal de estos hiper-parámetros pues estos dependen del modelo que estemos usando y de los datos mismos. Y como los datos pueden cambiar entre un problema y otro resulta imposible crear esa fórmula que nos indique el valor adecuado de los hiper-parámetros.

Así que en la práctica lo que debemos hacer es probar diferentes combinaciones de hiper-parámetros, entrenar y validar el modelo con cada una de esas combinaciones, medir su desempeño y escoger la combinación que arroje el mejor desempeño posible. Y esto se conoce precisamente como el ajuste de hiper-parámetros.

Así que este ajuste de hiper-parámetros es un proceso de prueba y error que, dependiendo de las combinaciones que estemos probando, nos permite encontrar el set de hiper-parámetros más adecuado para el modelo y para los datos que estemos usando.

Y para realizar este ajuste de hiper-parámetros usualmente se usa uno de estos dos enfoques: la búsqueda exhaustiva (o grid search) o la búsqueda aleatoria (o random search), de las cuales hablaremos en detalle a continuación.

Grid search: búsqueda exhaustiva

La idea de la búsqueda exhaustiva es sencilla: simplemente debemos probar TODAS las posibles combinaciones de hiperparámetros, entrenar y validar el modelo con cada una de estas combinaciones y elegir aquella que tenga el mejor desempeño.

Entendamos esta idea volviendo a nuestro ejemplo de la Red Neuronal. Habíamos mencionado anteriormente que tenemos estas opciones de hiper-parámetros:

Teniendo esto en cuenta, podríamos tener en total 6 combinaciones de hiperparámetros:

Ahora la idea es entrenar y validar la Red Neuronal con cada una de estas 6 combinaciones por aparte. Es decir hacer el entrenamiento y validación por aparte un total de 6 veces.

Para este entrenamiento y validación podemos usar los sets de entrenamiento, validación y prueba o la validación cruzada de los cuales ya hablamos en artículos anteriores.

Supongamos además que vamos a medir el desempeño del modelo como el porcentaje de aciertos al momento de determinar si un suscriptor determinado permanece o abandona nuestro servicio. Así, un desempeño del 95% nos dice que de cada 100 usuarios que analizamos, en 95 de esos casos el modelo predice correctamente el estado de ese usuario.

Pues bien, supongamos que entrenamos la Red con la primera combinación de hiper-parámetros y obtenemos un desempeño del 92%. Hacemos lo mismo con la segunda combinación y obtenemos un 87% y repetimos esto para las cuatro combinaciones de hiper-parámetros restantes obteniendo desempeños de 91%, 96%, 88% y 92% respectivamente.

Terminado este procedimiento, lo único que nos queda es elegir el set de hiper-parámetros para el cual se obtuvo el mejor desempeño. En este caso esta sería la cuarta combinación, es decir la Red con 2 capas ocultas, la primera con 20 neuronas y la segunda con 5, pues dicha combinación nos entrega el desempeño más alto, que es del 96%.

Y listo, esta es la idea básica de la búsqueda exhaustiva. La ventaja de este método es que al probar todas las combinaciones estaremos 100% seguros de que el modelo escogido será efectivamente el mejor de todos.

Sin embargo, la desventaja es que si el modelo es complejo y si tenemos muchos datos y muchos hiper-parámetros por ajustar, el entrenamiento y validación con cada combinación de hiper-parámetros requerirá demasiado tiempo y demasiados recursos computacionales.

Así que como alternativa a este inconveniente tenemos el método de random search o búsqueda aleatoria, del cual hablaremos a continuación.

Random search: búsqueda aleatoria

El principal inconveniente de la búsqueda exhaustiva es que se deben probar todas las combinaciones de hiper-parámetros, lo cual puede llegar a dificultar el ajuste de hiper-parámetros.

Como alternativa tenemos el método de búsqueda aleatoria: acá la idea es que en lugar de probar todas las posibles combinaciones de hiper-parámetros lo que haremos será tomar una MUESTRA ALEATORIA de estas combinaciones, entrenar y validar el modelo con esta muestra y elegir la mejor combinación entre las muestras analizadas.

Para entender cómo funciona este método volvamos una vez más a nuestro ejemplo de la Red Neuronal. Habíamos mencionado que existen 6 posibles combinaciones de hiper-parámetros: 1 capa oculta con 20 neuronas, 1 capa oculta con 10 neuronas, 2 capas ocultas con 20 y 10 neuronas, 2 capas ocultas con 20 y 5 neuronas, 2 capas ocultas con 10 neuronas cada una o 2 capas ocultas con 10 y 5 neuronas.

Así que en este caso, en lugar de analizar las 6 posibles combinaciones seleccionaremos, por ejemplo, una muestra aleatoria de 3. Digamos que estas son las combinaciones 1, 4 y 6.

Una vez seleccionadas estas combinaciones lo que hacemos es entrenar y validar el modelo con cada una de ellas. Y al hacerlo obtendremos desempeños de 92%, 96% y 92%.

Y una vez evaluados estos desempeños lo único que nos queda es elegir la mejor combinación, es decir aquella con el desempeño más alto, que en este caso es la cuarta con un desempeño del 96% y que corresponde a una Red Neuronal con 2 capas ocultas con 20 y 5 neuronas cada una.

Y listo, así es como funciona el método de búsqueda aleatoria para el ajuste de hiper-parámetros.

La ventaja de este método es evidente comparado con la búsqueda exhaustiva: al probar menos combinaciones necesitaremos menos recursos computacionales y menos tiempo de entrenamiento y validación.

Pero la desventaja radica en que al seleccionar aleatoriamente una parte de estas combinaciones no siempre podremos garantizar que dentro de dicha muestra se encontrará la combinación ideal de hiper-parámetros.

Conclusión

Muy bien, acabamos de ver en qué consiste el ajuste de hiper-parámetros, que en esencia permite encontrar la combinación de hiper-parámetros que genere las mejores predicciones posibles para el modelo que estemos entrenando.

Y para lograr esto podemos usar generalmente dos enfoques: la búsqueda exhaustiva, en la que probamos todas las posibles combinaciones y escogemos aquella que genere el mejor desempeño, y la búsqueda aleatoria en donde aleatoriamente seleccionamos sólo una parte de estas combinaciones.

El primer enfoque nos garantiza que al final llegaremos a esa combinación óptima de hiper-parámetros, pero tiene el problema de que requerirá más recursos computacionales. La búsqueda aleatoria necesita menos recursos pero no siempre nos permitirá llegar a esa combinación óptima.

La elección depende entonces de los recursos computacionales que tengamos: si el tiempo y los recursos no son un inconveniente, podemos usar la búsqueda exhaustiva, o de lo contrario podemos usar la búsqueda aleatoria.

Sin embargo, en proyectos reales, con muchos datos y una gran cantidad de hiper-parámetros, generalmente el enfoque de búsqueda aleatoria funciona bastante bien y es el que les recomiendo cuando quieran hacer el ajuste de hiper-parámetros.