Una guía para la optimización de hiperparámetros usando HpBandSter

Estás leyendo la publicación: Una guía para la optimización de hiperparámetros usando HpBandSter

En el campo del aprendizaje automático, hemos sido testigos de éxitos en una amplia gama de áreas de aplicación. Una de las tareas más importantes de las que dependen muchas tareas es elegir el valor correcto del hiperparámetro. Encontrar la mejor combinación de hiperparámetros puede considerarse como optimización de hiperparámetros, que es una tarea crucial en el procedimiento de aprendizaje automático. En este artículo, discutiremos una técnica de optimización de hiperparámetros llamada Hiperbanda. También revisaremos un paquete de python para la optimización de hiperparámetros llamado HpBandSter y usaremos este paquete para implementar la optimización de hiperparámetros. Los puntos principales que se discutirán en este artículo se enumeran a continuación.

Tabla de contenido

  1. Optimización de hiperparámetros
  2. Optimización de fidelidad múltiple
    1. Reducción a la mitad sucesiva
    2. Hiperbanda
  3. ¿Qué es HpBandSter?
  4. Implementación de Hiperbanda

Comencemos la discusión entendiendo qué es la optimización de hiperparámetros.

Optimización de hiperparámetros

En el aprendizaje automático, podemos ver varios modelos que utilizan varios hiperparámetros que son distintos y complejos. Estos hiperparámetros son la razón de la generación de un enorme espacio de búsqueda durante el modelado. A medida que avanzamos hacia modelos de aprendizaje profundo desde los modelos tradicionales de aprendizaje automático, encontramos un incremento en el tamaño del espacio de búsqueda. Ajustar el hiperparámetro en un espacio de búsqueda masivo es una tarea difícil de realizar.

Los algoritmos de optimización de hiperparámetros son aquellos algoritmos que ayudan a ajustar el hiperparámetro en un espacio de búsqueda masivo. La siguiente imagen es una representación de enfoques para la optimización de hiperparámetros.

En uno de nuestros artículos anteriores, discutimos la optimización bayesiana y vimos algunas de sus ventajas. La optimización bayesiana puede funcionar muy bien con la función de caja negra y es eficiente en datos y resistente al ruido. Puede encontrar una implementación de la optimización bayesiana utilizando el paquete HyperOpt aquí. Además, hemos visto que la optimización bayesiana es un proceso secuencial, por lo que al utilizar la optimización bayesiana no podemos trabajar bien en una situación paralela y la función objetivo en la optimización bayesiana se vuelve muy costosa al realizar la estimación sobre ella. Así que ahora estamos obligados a encontrar una forma de estimar la función objetivo más barata que se puede hacer mediante la optimización de fidelidad múltiple. Ahora vamos a entender este enfoque.

🔥 Recomendado:  Descripción del puesto de líder de equipo: Plantillas para contratar en su empresa

Optimización de fidelidad múltiple

La optimización de multifidelidad se puede considerar como una forma de aumentar la precisión de la estimación del modelo al minimizar el costo asociado con la estimación de la función objetivo. Este método de optimización aprovecha los datos de alta y baja fidelidad. La reducción a la mitad del éxito y la hiperbanda son dos tipos de optimización de fidelidad múltiple. Veamos qué es la reducción a la mitad sucesiva.

Reducción a la mitad sucesiva

Podemos considerar la optimización de reducción a la mitad sucesiva como una técnica para la optimización de hiperparámetros donde la competencia entre combinaciones de parámetros candidatos ayuda en la optimización de hiperparámetros. También es un procedimiento iterativo en el que todas las combinaciones de parámetros se utilizan en la primera iteración para la evaluación y el número de recursos debe estar debajo. Solo se evalúan unas pocas combinaciones en la segunda iteración con un aumento de recursos. La siguiente imagen es una representación de la reducción a la mitad sucesiva.

Fuente de imagen

En la imagen de arriba, podemos ver que a medida que aumentan las iteraciones, la cantidad de candidatos disminuye y la cantidad de recursos aumenta. El motivo principal detrás de la reducción a la mitad sucesiva es mantener las mitades que mejor se ajustan y eliminar las mitades que no son importantes. Esta es una buena manera de sintonizar hiperparámetros, pero debido a la compensación entre la configuración y los cortes, se convierte en un problema para esta técnica y Hyperband se puede usar para resolver este problema. Avancemos hacia el algoritmo de hiperbanda, que también forma parte de la optimización de fidelidad múltiple.

🔥 Recomendado:  Twitter sigue el camino de TikTok con una nueva función de video en pantalla completa

Podemos realizar esto utilizando el módulo proporcionado por scikit-learn HalvingGridSearchCV y HalvingRandomSearchCV.

Hiperbanda

Este método puede considerarse como una extensión del método de reducción a la mitad sucesiva; el motivo detrás de Hyperband es realizar recortes a la mitad sucesivos con frecuencia para que se pueda resolver el equilibrio entre el número de configuraciones y la asignación de recursos. Además, utilizando halving sucesivos podemos identificar la mejor combinación en menor tiempo.

También podemos decir que usando Hyperband, podemos realizar una evaluación con muchas combinaciones en el presupuesto más pequeño y ejecuciones muy conservadoras en el presupuesto completo. En la vida real, el rendimiento de la implementación de la hiperbanda está bien en todos los rangos de presupuesto. La siguiente imagen puede ser una representación de las ventajas de Hyperband sobre la búsqueda aleatoria.

Fuente de imagen

En la siguiente sección del artículo, presentaremos HpBandSter, una herramienta que se puede utilizar para implementar la optimización de hiperbanda.

¿Qué es HpBandSter?

HpBandSter es un marco de paquete de Python que se puede utilizar para la optimización de hiperparámetros distribuidos. En la sección anterior, hemos visto la importancia de la optimización de hiperparámetros y, al usar este marco, podemos realizar una variedad de algoritmos de hiperparámetros de vanguardia, incluido HyperBand. Con esta herramienta, podemos iniciar una búsqueda aleatoria para encontrar la combinación de parámetros que mejor se ajuste en menos tiempo.

Usando el siguiente código podemos instalar este marco.

!pip instalar hpbandster

Producción:

También podemos usar el contenedor Sci-Kit Learn hpbandster-sklearn para HpBandSer. Usando el siguiente código podemos instalarlo.

!pip instalar hpbandster-sklearn

Producción:

Implementación de Hiperbanda

En esta sección, discutiremos cómo podemos implementar HyperBand utilizando el contenedor de aprendizaje scikit para HpBandStar. Comencemos llamando a las bibliotecas:

importar numpy como np de sklearn.datasets importar load_iris de sklearn importar árbol de sklearn.utils.validation importar check_is_fitted de hpbandster_sklearn importar HpBandSterSearchCV

🔥 Recomendado:  Una guía de CoAtNet: la combinación de redes de convolución y atención

Creación de instancias de datos y modelos:

X, y = load_iris(return_X_y=True) clf = tree.DecisionTreeClassifier(random_state=0) np.random.seed(0)

Definición de un espacio de búsqueda:

espacio_de_búsqueda = {“profundidad_máxima”: [2, 3, 4]”min_samples_split”: lista(rango(2, 12))}

Ajuste del modelo, los datos y el espacio de búsqueda en el módulo de optimización:

búsqueda = HpBandSterSearchCV(clf, espacio_búsqueda, estado_aleatorio=0, n_trabajos=1, n_iter=10, detallado=1 optimizador=”hiperbanda”).fit(X, y)

Producción:

Aquí podemos ver los resultados de la optimización de hiperparámetros con los detalles. Comprobemos la instancia que creamos para la optimización.

buscar

Producción:

Veamos la mejor combinación de parámetros de la instancia de búsqueda:

búsqueda.mejores_parámetros_

Producción:

También podemos usar el espacio de configuración en lugar de un diccionario para definir el espacio de búsqueda.

importar ConfigSpace como CS importar ConfigSpace.hyperparameters como CSH search_space = CS.ConfigurationSpace(seed=42) search_space.add_hyperparameter(CSH.UniformIntegerHyperparameter(“min_samples_split”, 2, 11)) search_space.add_hyperparameter(CSH.UniformIntegerHyperparameter(“max_ depth”, 2 , 4))

Producción:

Ajuste de datos del modelo y espacio de búsqueda en el módulo.

búsqueda = HpBandSterSearchCV(clf, espacio_búsqueda, estado_aleatorio=0, n_trabajos=1, n_iter=10, detallado=1, optimizador=”hiperbanda”).fit(X, y)

Producción:

Dado que, en última instancia, estamos realizando una reducción a la mitad sucesiva, debemos realizar una detención anticipada para que podamos configurar los recursos y el presupuesto. La configuración se puede realizar de la siguiente manera.

búsqueda = HpBandSterSearchCV( clf, espacio_búsqueda, nombre_recurso=”n_muestras”, tipo_recurso=flotante, presupuesto_mínimo=0.2, presupuesto_máximo=1, optimizador=”hiperbanda” )

Verifiquemos la instancia final como,

buscar.get_params()

Producción:

En el resultado anterior, podemos ver todos los detalles del módulo que estamos utilizando para la optimización de hiperparámetros.

Ultimas palabras

En el artículo, hemos pasado por la introducción de la optimización de hiperparámetros, la optimización bayesiana, la reducción a la mitad sucesiva y la optimización de hiperbandas. Luego, hemos discutido un marco HpBandSter para la optimización de hiperparámetros que también incluye la optimización de hiperbanda.

Referencias