Explore técnicas avanzadas para la optimización de hiperparámetros con el ajuste automático de modelos de Amazon SageMaker | Servicios web de Amazon

Explore técnicas avanzadas para la optimización de hiperparámetros con el ajuste automático de modelos de Amazon SageMaker | Servicios web de Amazon

La creación de soluciones de aprendizaje automático (ML) de alto rendimiento se basa en explorar y optimizar los parámetros de entrenamiento, también conocidos como hiperparámetros. Los hiperparámetros son botones y palancas que utilizamos para ajustar el proceso de entrenamiento, como la tasa de aprendizaje, el tamaño del lote, la intensidad de la regularización y otros, según el modelo específico y la tarea en cuestión. Explorar hiperparámetros implica variar sistemáticamente los valores de cada parámetro y observar el impacto en el rendimiento del modelo. Aunque este proceso requiere esfuerzos adicionales, los beneficios son significativos. La optimización de hiperparámetros (HPO) puede conducir a tiempos de entrenamiento más rápidos, una mayor precisión del modelo y una mejor generalización a nuevos datos.

Continuamos nuestro viaje desde el post. Optimice los hiperparámetros con Amazon SageMaker Automatic Model Tuning. Anteriormente exploramos la optimización de un solo trabajo, visualizamos los resultados del algoritmo integrado de SageMaker y aprendimos sobre el impacto de valores de hiperparámetros particulares. Además de utilizar HPO como optimización única al final del ciclo de creación del modelo, también podemos utilizarlo en varios pasos de forma conversacional. Cada trabajo de ajuste nos ayuda a acercarnos a un buen rendimiento, pero además, también aprendemos qué tan sensible es el modelo a ciertos hiperparámetros y podemos usar esta comprensión para informar el siguiente trabajo de ajuste. Podemos revisar los hiperparámetros y sus rangos de valores en función de lo que aprendimos y, por lo tanto, convertir este esfuerzo de optimización en una conversación. Y de la misma manera que nosotros, como practicantes de ML, acumulamos conocimiento a lo largo de estas ejecuciones, Ajuste automático de modelos (AMT) de Amazon SageMaker con arranques en caliente puede mantener estos conocimientos adquiridos en trabajos de ajuste anteriores también para el siguiente trabajo de ajuste.

En esta publicación, ejecutamos múltiples trabajos de HPO con un algoritmo de entrenamiento personalizado y diferentes estrategias de HPO, como la optimización bayesiana y la búsqueda aleatoria. También ponemos en marcha comienzos cálidos y comparamos visualmente nuestras pruebas para perfeccionar la exploración espacial de hiperparámetros.

Conceptos avanzados de SageMaker AMT

En las siguientes secciones, analizamos más de cerca cada uno de los siguientes temas y mostramos cómo SageMaker AMT puede ayudarlo a implementarlos en sus proyectos de ML:

  • Utilice código de capacitación personalizado y el popular marco de aprendizaje automático Scikit-learn en SageMaker Training
  • Defina métricas de evaluación personalizadas basadas en los registros para evaluación y optimización.
  • Realizar HPO utilizando una estrategia adecuada.
  • Utilice inicios en caliente para convertir una búsqueda de hiperparámetro único en un diálogo con nuestro modelo
  • Utilice técnicas de visualización avanzadas utilizando nuestra biblioteca de soluciones para comparar dos estrategias de HPO y ajustar los resultados de los trabajos.

Ya sea que esté utilizando los algoritmos integrados utilizados en nuestra primera publicación o su propio código de capacitación, SageMaker AMT ofrece una experiencia de usuario perfecta para optimizar los modelos de ML. Proporciona una funcionalidad clave que le permite centrarse en el problema de aprendizaje automático en cuestión mientras realiza un seguimiento automático de las pruebas y los resultados. Al mismo tiempo, administra automáticamente la infraestructura subyacente.

En esta publicación, nos alejamos del algoritmo integrado de SageMaker y utilizamos código personalizado. Usamos un bosque aleatorio de SkLearn. Pero nos atenemos a la misma tarea y conjunto de datos de ML que en nuestro Primer comentario, que detecta dígitos escritos a mano. Cubrimos el contenido del cuaderno Jupyter. 2_ajuste_avanzado_con_entrenamiento_personalizado_y_visualización.ipynb y le invitamos a invocar el código uno al lado del otro para seguir leyendo.

Profundicemos y descubramos cómo podemos usar código de entrenamiento personalizado, implementarlo y ejecutarlo, mientras exploramos el espacio de búsqueda de hiperparámetros para optimizar nuestros resultados.

Cómo construir un modelo de ML y realizar optimización de hiperparámetros

¿Cómo es un proceso típico para crear una solución de aprendizaje automático? Aunque existen muchos casos de uso posibles y una gran variedad de tareas de ML, sugerimos el siguiente modelo mental para un enfoque gradual:

  1. Comprenda su escenario de aprendizaje automático y seleccione un algoritmo según los requisitos. Por ejemplo, es posible que desee resolver una tarea de reconocimiento de imágenes utilizando un algoritmo de aprendizaje supervisado. En esta publicación, continuamos usando el escenario de reconocimiento de imágenes escritas a mano y el mismo conjunto de datos que en nuestra primera publicación.
  2. Decida qué implementación del algoritmo en SageMaker Training desea utilizar. Hay varias opciones, dentro de SageMaker o externas. Además, debe definir qué métrica subyacente se adapta mejor a su tarea y desea optimizar (como precisión, puntuación F1 o ROC). SageMaker admite cuatro opciones según sus necesidades y recursos:
    • Utilice un modelo previamente entrenado a través de JumpStart de Amazon SageMaker, que puedes usar de inmediato o simplemente ajustarlo.
    • Utilice uno de los algoritmos integrados para entrenamiento y ajuste, como XGBoost, como hicimos en nuestra publicación anterior.
    • Entrene y ajuste un modelo personalizado basado en uno de los marcos principales como Scikit-learn, TensorFlow o PyTorch. AWS proporciona una selección de imágenes de Docker prediseñadas para este propósito. Para esta publicación, utilizamos esta opción, que le permite experimentar rápidamente ejecutando su propio código sobre una imagen de contenedor prefabricada.
    • Traiga su propia imagen de Docker personalizada en caso de que desee utilizar un marco o software que de otro modo no sea compatible. Esta opción requiere el mayor esfuerzo, pero también proporciona el mayor grado de flexibilidad y control.
  3. Entrena el modelo con tus datos. Dependiendo de la implementación del algoritmo del paso anterior, esto puede ser tan simple como hacer referencia a sus datos de entrenamiento y ejecutar el trabajo de entrenamiento o proporcionar adicionalmente un código personalizado para el entrenamiento. En nuestro caso, utilizamos algún código de entrenamiento personalizado en Python basado en Scikit-learn.
  4. Aplique la optimización de hiperparámetros (como una "conversación" con su modelo de ML). Después del entrenamiento, normalmente querrás optimizar el rendimiento de tu modelo encontrando la combinación de valores más prometedora para los hiperparámetros de tu algoritmo.

Dependiendo de su algoritmo de aprendizaje automático y del tamaño del modelo, el último paso de la optimización de hiperparámetros puede resultar un desafío mayor de lo esperado. Las siguientes preguntas son típicas de los profesionales del aprendizaje automático en esta etapa y pueden resultarle familiares:

  • ¿Qué tipo de hiperparámetros tienen impacto en mi problema de aprendizaje automático?
  • ¿Cómo puedo buscar eficazmente en un enorme espacio de hiperparámetros para encontrar los valores de mejor rendimiento?
  • ¿Cómo influye la combinación de ciertos valores de hiperparámetros en mi métrica de rendimiento?
  • Los costos importan; ¿Cómo puedo utilizar mis recursos de manera eficiente?
  • ¿Qué tipo de experimentos de ajuste merecen la pena y cómo puedo compararlos?

No es fácil responder a estas preguntas, pero hay buenas noticias. SageMaker AMT le quita el trabajo pesado y le permite concentrarse en elegir la estrategia de HPO adecuada y los rangos de valores que desea explorar. Además, nuestra solución de visualización facilita el proceso de experimentación y análisis iterativo para encontrar de manera eficiente valores de hiperparámetros de buen rendimiento.

En las siguientes secciones, crearemos un modelo de reconocimiento de dígitos desde cero utilizando Scikit-learn y mostraremos todos estos conceptos en acción.

Resumen de la solución

SageMaker ofrece algunas funciones muy útiles para entrenar, evaluar y ajustar nuestro modelo. Cubre todas las funciones de un ciclo de vida de ML de un extremo a otro, por lo que ni siquiera necesitamos dejar nuestro cuaderno Jupyter.

En nuestra primera publicación, utilizamos el algoritmo integrado de SageMaker, XGBoost. Para fines de demostración, esta vez cambiamos a un clasificador de bosque aleatorio porque luego podemos mostrar cómo proporcionar su propio código de entrenamiento. Optamos por proporcionar nuestro propio script Python y utilizar Scikit-learn como marco. Ahora bien, ¿cómo expresamos que queremos utilizar un marco de ML específico? Como veremos, SageMaker utiliza otro servicio de AWS en segundo plano para recuperar una imagen de contenedor Docker prediseñada para entrenamiento.Registro de contenedores elásticos de Amazon (Amazon ECR).

Cubrimos los siguientes pasos en detalle, incluidos fragmentos de código y diagramas para conectar los puntos. Como se mencionó anteriormente, si tiene la oportunidad, abra el cuaderno y ejecute las celdas de código paso a paso para crear los artefactos en su entorno de AWS. No hay mejor manera de aprender activamente.

  1. Primero, cargue y prepare los datos. Usamos Servicio de almacenamiento simple de Amazon (Amazon S3) para cargar un archivo que contenga nuestros datos de dígitos escritos a mano.
  2. A continuación, prepare el guión de formación y las dependencias del marco. Proporcionamos el código de capacitación personalizado en Python, hacemos referencia a algunas bibliotecas dependientes y realizamos una ejecución de prueba.
  3. Para definir las métricas objetivas personalizadas, SageMaker nos permite definir una expresión regular para extraer las métricas que necesitamos de los archivos de registro del contenedor.
  4. Entrene el modelo utilizando el marco scikit-learn. Al hacer referencia a una imagen de contenedor prediseñada, creamos un objeto Estimador correspondiente y pasamos nuestro script de entrenamiento personalizado.
  5. AMT nos permite probar varias estrategias de HPO. En esta publicación nos concentramos en dos de ellos: búsqueda aleatoria y búsqueda bayesiana.
  6. Elija entre las estrategias de SageMaker HPO.
  7. Visualice, analice y compare resultados de ajuste. Nuestro paquete de visualización nos permite descubrir qué estrategia funciona mejor y qué valores de hiperparámetros ofrecen el mejor rendimiento según nuestras métricas.
  8. Continúe la exploración del espacio de hiperparámetros y comience en caliente los trabajos de HPO.

AMT se encarga de escalar y administrar la infraestructura informática subyacente para ejecutar los distintos trabajos de ajuste en Nube informática elástica de Amazon (Amazon EC2) instancias. De esta manera, no necesita preocuparse por aprovisionar instancias, manejar problemas de hardware y sistema operativo o agregar archivos de registro por su cuenta. La imagen del marco de ML se recupera de Amazon ECR y los artefactos del modelo, incluidos los resultados de ajuste, se almacenan en Amazon S3. Todos los registros y métricas se recopilan en Reloj en la nube de Amazon para un acceso conveniente y análisis adicionales si es necesario.

Requisitos previos

Debido a que esta es una continuación de una serie, se recomienda, aunque no necesariamente es obligatorio, leer nuestra primera publicación sobre SageMaker AMT y HPO. Aparte de eso, es útil tener una familiaridad básica con los conceptos de ML y la programación en Python. También recomendamos seguir cada paso del cuaderno de acompañamiento de nuestro repositorio de GitHub mientras lee esta publicación. El cuaderno se puede ejecutar independientemente del primero, pero necesita algo de código de las subcarpetas. Asegúrese de clonar el repositorio completo en su entorno como se describe en el archivo README.

Experimentar con el código y utilizar las opciones de visualización interactiva mejora enormemente su experiencia de aprendizaje. Así que por favor, revísalo.

Cargar y preparar los datos.

Como primer paso, nos aseguramos de que la descarga datos de dígitos que necesitamos para la capacitación es accesible a SageMaker. Amazon S3 nos permite hacer esto de forma segura y escalable. Consulte el cuaderno para obtener el código fuente completo y no dude en adaptarlo con sus propios datos.

sm_sess = sagemaker.session.Session(boto_session=boto_sess, sagemaker_client=sm)
BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
s3_data_url = f's3://{BUCKET}/{PREFIX}/data'
digits = datasets.load_digits()
digits_df = pd.DataFrame(digits.data)
digits_df['y'] = digits.target
digits_df.to_csv('data/digits.csv', index=False)
!aws s3 sync data/ {s3_data_url} —exclude '*' —include 'digits.csv'

La digits.csv El archivo contiene datos de características y etiquetas. Cada dígito está representado por valores de píxeles en una imagen de 8 × 8, como se muestra en la siguiente imagen para el dígito 4.
Conjunto de datos de dígitos de Scikit-learn

Prepare el guión de capacitación y las dependencias del marco.

Ahora que los datos están almacenados en nuestro depósito S3, podemos definir nuestro script de entrenamiento personalizado basado en Scikit-learn en pitón. SageMaker nos brinda la opción de simplemente hacer referencia al archivo Python más adelante para entrenamiento. Cualquier dependencia como las bibliotecas Scikit-learn o pandas se puede proporcionar de dos maneras:

  • Se pueden especificar explícitamente en un requirements.txt presentar
  • Están preinstalados en la imagen del contenedor ML subyacente, que SageMaker proporciona o es personalizada.

Ambas opciones generalmente se consideran formas estándar de gestión de dependencias, por lo que es posible que ya esté familiarizado con ellas. Soportes de SageMaker una variedad de marcos de aprendizaje automático en un entorno gestionado listo para usar. Esto incluye muchos de los marcos de aprendizaje automático y ciencia de datos más populares, como PyTorch, TensorFlow o Scikit-learn, como en nuestro caso. No utilizamos un adicional requirements.txt archivo, pero siéntase libre de agregar algunas bibliotecas para probarlo.

El código de nuestra implementación contiene un método llamado fit(), que crea un nuevo clasificador para la tarea de reconocimiento de dígitos y lo entrena. A diferencia de nuestra primera publicación donde usamos el algoritmo XGBoost integrado de SageMaker, ahora usamos un RandomForestClassifier proporcionado por la biblioteca ML sklearn. el llamado del fit() El método en el objeto clasificador inicia el proceso de entrenamiento usando un subconjunto (80%) de nuestros datos CSV:

def fit(train_dir, n_estimators, max_depth, min_samples_leaf, max_features, min_weight_fraction_leaf): digits = pd.read_csv(Path(train_dir)/'digits.csv') Xtrain, Xtest, ytrain, ytest = train_test_split(digits.iloc[:, :-1], digits.iloc[:, -1], test_size=.2) m = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_leaf=min_samples_leaf, max_features=max_features, min_weight_fraction_leaf=min_weight_fraction_leaf) m.fit(Xtrain, ytrain) predicted = m.predict(Xtest) pre, rec, f1, _ = precision_recall_fscore_support(ytest, predicted, pos_label=1, average='weighted') print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}') return m

Vea el script completo en nuestro cuaderno Jupyter en GitHub.

Antes de activar los recursos del contenedor para el proceso de capacitación completo, ¿intentó ejecutar el script directamente? Esta es una buena práctica para garantizar rápidamente que el código no tenga errores de sintaxis, verificar las dimensiones coincidentes de sus estructuras de datos y algunos otros errores desde el principio.

Hay dos formas de ejecutar su código localmente. Primero, puede ejecutarlo de inmediato en el cuaderno, lo que también le permite usar el depurador de Python. pdb:

# Running the code from within the notebook. It would then be possible to use the Python Debugger, pdb.
from train import fit
fit('data', 100, 10, 1, 'auto', 0.01)

Alternativamente, ejecute el script de tren desde la línea de comando de la misma manera que desee usarlo en un contenedor. Esto también admite la configuración de varios parámetros y la sobrescritura de los valores predeterminados según sea necesario, por ejemplo:

!cd src && python train.py --train ../data/ --model-dir /tmp/ --n-estimators 100

Como resultado, puede ver los primeros resultados para el rendimiento del modelo en función de la precisión de las métricas objetivas, la recuperación y la puntuación F1. Por ejemplo, pre: 0.970 rec: 0.969 f1: 0.969.

Nada mal para un entrenamiento tan rápido. Pero, ¿de dónde vienen estos números y qué hacemos con ellos?

Definir métricas de objetivos personalizadas

Recuerde, nuestro objetivo es entrenar y ajustar completamente nuestro modelo en función de las métricas objetivas que consideramos relevantes para nuestra tarea. Debido a que utilizamos un script de capacitación personalizado, debemos definir explícitamente esas métricas para SageMaker.

Nuestro script emite las métricas de precisión, recuperación y puntuación F1 durante el entrenamiento simplemente usando el print función:

print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}')

SageMaker captura la salida estándar y la envía a CloudWatch como una secuencia de registro. Para recuperar los valores de las métricas y trabajar con ellos más adelante en SageMaker AMT, debemos proporcionar información sobre cómo analizar esa salida. Podemos lograr esto definiendo declaraciones de expresiones regulares (para obtener más información, consulte Monitoree y analice los trabajos de capacitación con las métricas de Amazon CloudWatch):

metric_definitions = [ {'Name': 'valid-precision', 'Regex': r'pre:s+(-?[0-9.]+)'}, {'Name': 'valid-recall', 'Regex': r'rec:s+(-?[0-9.]+)'}, {'Name': 'valid-f1', 'Regex': r'f1:s+(-?[0-9.]+)'}] 

Repasemos juntos la primera definición de métrica en el código anterior. SageMaker buscará resultados en el registro que comienza con pre: y va seguido de uno o más espacios en blanco y luego un número que queremos extraer, por eso usamos el paréntesis redondo. Cada vez que SageMaker encuentra un valor como ese, lo convierte en una métrica de CloudWatch con el nombre valid-precision.

Entrene el modelo utilizando el marco Scikit-learn

Después de crear nuestro guión de entrenamiento train.py e instruir a SageMaker sobre cómo monitorear las métricas dentro de CloudWatch, definimos un Estimador de SageMaker objeto. Inicia el trabajo de entrenamiento y utiliza el tipo de instancia que especificamos. Pero, ¿en qué puede ser diferente este tipo de instancia del que ejecuta? Estudio Amazon SageMaker cuaderno encendido, y ¿por qué? SageMaker Studio ejecuta sus trabajos de entrenamiento (e inferencia) en instancias informáticas separadas de su computadora portátil. Esto le permite continuar trabajando en su computadora portátil mientras los trabajos se ejecutan en segundo plano.

El parámetro framework_version se refiere a la versión Scikit-learn que utilizamos para nuestro trabajo de capacitación. Alternativamente, podemos pasar image_uri En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. estimator. Puede comprobar si su marco o biblioteca ML favorito está disponible como imagen prediseñada de SageMaker Docker y usarlo tal cual o con extensiones.

Además, podemos ejecutar trabajos de capacitación de SageMaker en instancias puntuales EC2 configurando use_spot_instances a True. Son instancias de capacidad sobrante que pueden Ahorre hasta el 90% de los costos.. Estas instancias brindan flexibilidad sobre cuándo se ejecutan los trabajos de capacitación.

estimator = SKLearn( 'train.py', source_dir='src', role=get_execution_role(), instance_type= 'ml.m5.large', instance_count=1, framework_version='0.23-1', metric_definitions=metric_definitions, # Uncomment the following three lines to use Managed Spot Training # use_spot_instances= True, # max_run= 60 * 60 * 24, # max_wait= 60 * 60 * 24, hyperparameters = {'n-estimators': 100, 'max-depth': 10, 'min-samples-leaf': 1, 'max-features': 'auto', 'min-weight-fraction-leaf': 0.1}
)

Después de configurar el objeto Estimador, comenzamos el entrenamiento llamando al fit() función, que proporciona la ruta al conjunto de datos de entrenamiento en Amazon S3. Podemos utilizar este mismo método para proporcionar datos de validación y prueba. fijamos el wait parámetro para True para que podamos usar el modelo entrenado en las celdas de código posteriores.

estimator.fit({'train': s3_data_url}, wait=True)

Definir hiperparámetros y ejecutar trabajos de ajuste

Hasta ahora, hemos entrenado el modelo con un conjunto de valores de hiperparámetros. Pero ¿eran buenos esos valores? ¿O podríamos buscar otros mejores? usemos el Clase HyperparameterTuner para ejecutar una búsqueda sistemática en el espacio de hiperparámetros. ¿Cómo buscamos este espacio con el sintonizador? Los parámetros necesarios son el nombre de la métrica objetiva y el tipo de objetivo que guiarán la optimización. La estrategia de optimización es otro argumento clave para el sintonizador porque define aún más el espacio de búsqueda. Las siguientes son cuatro estrategias diferentes para elegir:

  • búsqueda de cuadrícula
  • Búsqueda aleatoria
  • Optimización bayesiana (predeterminada)
  • Hiperbanda

Describimos con más detalle estas estrategias y le brindamos orientación para elegir una más adelante en esta publicación.

Antes de definir y ejecutar nuestro objeto sintonizador, recapitulemos nuestra comprensión desde una perspectiva arquitectónica. Cubrimos la descripción general arquitectónica de SageMaker AMT en nuestro último mensaje y reproduzca aquí un extracto para mayor comodidad.

Arquitectura de ajuste automático de modelos de Amazon SageMaker

Podemos elegir qué hiperparámetros queremos ajustar o dejar estáticos. Para hiperparámetros dinámicos, proporcionamos hyperparameter_ranges que se puede utilizar para optimizar hiperparámetros ajustables. Debido a que utilizamos un clasificador de bosque aleatorio, hemos utilizado los hiperparámetros del Documentación de Scikit-learn Random Forest.

También limitamos los recursos con la cantidad máxima de trabajos de capacitación y trabajos de capacitación paralelos que el sintonizador puede utilizar. Veremos cómo estos límites nos ayudan a comparar los resultados de varias estrategias entre sí.

tuner_parameters = { 'estimator': estimator, 'base_tuning_job_name': 'random', 'metric_definitions': metric_definitions, 'objective_metric_name': 'valid-f1', 'objective_type': 'Maximize', 'hyperparameter_ranges': hpt_ranges, 'strategy': 'Random', 'max_jobs': n, # 50 'max_parallel_jobs': k # 2 } 

Similar al del Estimador fit función, comenzamos un trabajo de sintonización llamando al fit:

random_tuner = HyperparameterTuner(**tuner_parameters)
random_tuner.fit({'train': s3_data_url}, wait=False)

Esto es todo lo que tenemos que hacer para permitir que SageMaker ejecute los trabajos de capacitación (n=50) en segundo plano, cada uno usando un conjunto diferente de hiperparámetros. Exploramos los resultados más adelante en esta publicación. Pero antes de eso, comencemos otro trabajo de ajuste, esta vez aplicando la estrategia de optimización bayesiana. Compararemos ambas estrategias visualmente una vez finalizadas.

tuner_parameters['strategy'] = 'Bayesian'
tuner_parameters['base_tuning_job_name'] = 'bayesian'
bayesian_tuner = HyperparameterTuner(**tuner_parameters)
bayesian_tuner.fit({'train': s3_data_url}, wait=False)

Tenga en cuenta que ambos trabajos de ajuste se pueden ejecutar en paralelo porque SageMaker organiza las instancias informáticas necesarias de forma independiente entre sí. Esto es muy útil para los profesionales que experimentan con diferentes enfoques al mismo tiempo, como lo hacemos nosotros aquí.

Elija entre las estrategias de SageMaker HPO

Cuando se trata de estrategias de ajuste, tiene algunas opciones con SageMaker AMT: búsqueda en cuadrícula, búsqueda aleatoria, optimización bayesiana e hiperbanda. Estas estrategias determinan cómo los algoritmos de ajuste automático exploran los rangos especificados de hiperparámetros.

La búsqueda aleatoria es bastante sencilla. Selecciona aleatoriamente combinaciones de valores de los rangos especificados y se puede ejecutar de forma secuencial o paralela. Es como lanzar dardos con los ojos vendados, con la esperanza de dar en el blanco. Hemos empezado con esta estrategia, pero ¿mejorarán los resultados con otra?

La optimización bayesiana adopta un enfoque diferente al de la búsqueda aleatoria. Considera el historial de selecciones anteriores y elige los valores que probablemente produzcan los mejores resultados. Si desea aprender de exploraciones anteriores, solo puede lograrlo ejecutando un nuevo trabajo de ajuste después de los anteriores. Tiene sentido, ¿verdad? De esta forma, la optimización bayesiana depende de las ejecuciones anteriores. ¿Pero ve qué estrategia HPO permite una mayor paralelización?

Hiperbanda ¡Es interesante! Utiliza una estrategia de fidelidad múltiple, lo que significa que asigna dinámicamente recursos a los trabajos de capacitación más prometedores y detiene aquellos que tienen un rendimiento deficiente. Por tanto, Hyperband es computacionalmente eficiente con los recursos, aprendiendo de trabajos de formación anteriores. Después de detener las configuraciones de bajo rendimiento, se inicia una nueva configuración y sus valores se eligen al azar.

Dependiendo de sus necesidades y la naturaleza de su modelo, puede elegir entre búsqueda aleatoria, optimización bayesiana o Hyperband como estrategia de ajuste. Cada uno tiene su propio enfoque y ventajas, por lo que es importante considerar cuál funciona mejor para su exploración de ML. La buena noticia para los profesionales de ML es que pueden seleccionar la mejor estrategia de HPO comparando visualmente el impacto de cada prueba en la métrica objetiva. En la siguiente sección, vemos cómo identificar visualmente el impacto de diferentes estrategias.

Visualice, analice y compare resultados de ajuste

Cuando nuestros trabajos de ajuste están completos, se vuelve emocionante. ¿Qué resultados ofrecen? ¿Qué tipo de impulso puede esperar en nuestra métrica en comparación con su modelo base? ¿Cuáles son los hiperparámetros de mejor rendimiento para nuestro caso de uso?

Una forma rápida y sencilla de ver los resultados de HPO es visitar la consola de SageMaker. Bajo Trabajos de ajuste de hiperparámetros, podemos ver (por trabajo de ajuste) la combinación de valores de hiperparámetros que se probaron y brindaron el mejor rendimiento medido por nuestra métrica objetiva (valid-f1).

Métricas para trabajos de ajuste de hiperparámetros

¿Eso es todo lo que necesitas? Como practicante de ML, es posible que no solo esté interesado en esos valores, sino que también desee aprender más sobre el funcionamiento interno de su modelo para explorar todo su potencial y fortalecer su intuición con retroalimentación empírica.

Una buena herramienta de visualización puede ayudarle enormemente a comprender la mejora de HPO a lo largo del tiempo y obtener comentarios empíricos sobre las decisiones de diseño de su modelo de ML. Muestra el impacto de cada hiperparámetro individual en su métrica objetiva y proporciona orientación para optimizar aún más sus resultados de ajuste.

Usamos la amtviz Paquete de visualización personalizado para visualizar y analizar trabajos de ajuste. Es fácil de usar y proporciona funciones útiles. Demostramos su beneficio interpretando algunos gráficos individuales y, finalmente, comparando la búsqueda aleatoria junto con la optimización bayesiana.

Primero, creemos una visualización para búsqueda aleatoria. Podemos hacerlo llamando visualize_tuning_job() Desde amtviz y pasando nuestro primer objeto sintonizador como argumento:

from amtviz import visualize_tuning_job
visualize_tuning_job(random_tuner, advanced=True, trials_only=True)

Verás un par de gráficos, pero vayamos paso a paso. El primer diagrama de dispersión del resultado se parece al siguiente y ya nos brinda algunas pistas visuales que no reconoceríamos en ninguna tabla.

Resultados del trabajo de optimización de hiperparámetros

Cada punto representa el desempeño de un trabajo de capacitación individual (nuestro objetivo valid-f1 en el eje y) en función de su tiempo de inicio (eje x), producido por un conjunto específico de hiperparámetros. Por lo tanto, observamos el rendimiento de nuestro modelo a medida que avanza durante la duración del trabajo de ajuste.

La línea de puntos resalta el mejor resultado encontrado hasta ahora e indica una mejora con el tiempo. Los dos mejores puestos de entrenamiento obtuvieron una puntuación F1 de alrededor de 0.91.

Además de la línea de puntos que muestra el progreso acumulado, ¿ve una tendencia en el gráfico?

Probablemente no. Y esto es de esperarse, porque estamos viendo los resultados de la estrategia HPO aleatoria. Cada trabajo de entrenamiento se ejecutó utilizando un conjunto de hiperparámetros diferente pero seleccionado al azar. Si continuamos con nuestro trabajo de ajuste (o ejecutamos otro con la misma configuración), probablemente veríamos mejores resultados con el tiempo, pero no podemos estar seguros. La aleatoriedad es algo complicado.

Los siguientes gráficos le ayudarán a medir la influencia de los hiperparámetros en el rendimiento general. Se visualizan todos los hiperparámetros, pero en aras de la brevedad, nos centraremos en dos de ellos: n-estimators y max-depth.

Detalles de trabajos de hiperparámetros

Nuestros dos principales trabajos de capacitación estaban utilizando n-estimators de alrededor de 20 y 80, y max-depth de alrededor de 10 y 18 años, respectivamente. Los valores exactos de los hiperparámetros se muestran mediante información sobre herramientas para cada punto (trabajo de entrenamiento). ¡Incluso se resaltan dinámicamente en todos los gráficos y le brindan una vista multidimensional! ¿Viste eso? Cada hiperparámetro se traza frente a la métrica objetiva, como un gráfico separado.

Ahora bien, ¿qué tipo de ideas obtenemos sobre n-estimators?

Según el gráfico de la izquierda, parece que los rangos de valores muy bajos (por debajo de 10) suelen ofrecer resultados deficientes en comparación con los valores más altos. Por lo tanto, valores más altos pueden ayudar a que su modelo funcione mejor: interesante.

En cambio, la correlación de la max-depth El hiperparámetro de nuestra métrica objetiva es bastante bajo. No podemos decir claramente qué rangos de valores tienen un mejor rendimiento desde una perspectiva general.

En resumen, la búsqueda aleatoria puede ayudarle a encontrar un conjunto de hiperparámetros con buen rendimiento incluso en un período de tiempo relativamente corto. Además, no favorece una buena solución, sino que ofrece una visión equilibrada del espacio de búsqueda. Sin embargo, es posible que la utilización de sus recursos no sea muy eficiente. Continúa ejecutando trabajos de capacitación con hiperparámetros en rangos de valores que se sabe que brindan malos resultados.

Examinemos los resultados de nuestro segundo trabajo de ajuste utilizando la optimización bayesiana. Nosotros podemos usar amtviz para visualizar los resultados de la misma manera que lo hicimos hasta ahora para el sintonizador de búsqueda aleatorio. O, mejor aún, podemos utilizar la capacidad de la función para comparar ambos trabajos de ajuste en un único conjunto de gráficos. ¡Muy útil!

visualize_tuning_job([random_tuner, bayesian_tuner], advanced=True, trials_only=True)

Trabajo de optimización de hiperparámetros bayesiano versus aleatorio

Ahora hay más puntos porque visualizamos los resultados de todos los trabajos de entrenamiento tanto para la búsqueda aleatoria (puntos naranjas) como para la optimización bayesiana (puntos azules). En el lado derecho, puede ver un gráfico de densidad que visualiza la distribución de todas las puntuaciones F1. La mayoría de los trabajos de formación obtuvieron resultados en la parte superior de la escala F1 (más de 0.6). ¡Eso es bueno!

¿Cuál es la conclusión clave aquí? El diagrama de dispersión muestra claramente los beneficios de la optimización bayesiana. Ofrece mejores resultados con el tiempo porque puede aprender de ejecuciones anteriores. Es por eso que logramos resultados significativamente mejores usando bayesiano en comparación con aleatorio (0.967 frente a 0.919) con la misma cantidad de trabajos de capacitación.

Hay aún más que puedes hacer con amtviz. Profundicemos.

Si le da a SageMaker AMT la instrucción de ejecutar una mayor cantidad de trabajos para realizar ajustes, ver muchas pruebas a la vez puede resultar complicado. Ésa es una de las razones por las que hicimos estos gráficos interactivos. Puede hacer clic y arrastrar en cada diagrama de dispersión de hiperparámetros para acercarse a ciertos rangos de valores y refinar su interpretación visual de los resultados. Todos los demás gráficos se actualizan automáticamente. Eso es bastante útil, ¿no? Vea los siguientes cuadros como ejemplo y pruébelo usted mismo en su cuaderno.

Funciones de visualización de trabajos de optimización de hiperparámetros

Como maximalista de ajuste, también puede decidir que ejecutar otro trabajo de ajuste de hiperparámetros podría mejorar aún más el rendimiento de su modelo. Pero esta vez, se puede explorar un rango más específico de valores de hiperparámetros porque ya sabes (aproximadamente) dónde esperar mejores resultados. Por ejemplo, puede optar por centrarse en valores entre 100 y 200 para n-estimators, como se muestra en el gráfico. Esto permite a AMT centrarse en los trabajos de formación más prometedores y aumentar la eficiencia de ajuste.

Para resumirlo, amtviz le proporciona un amplio conjunto de capacidades de visualización que le permiten comprender mejor el impacto de los hiperparámetros de su modelo en el rendimiento y permitir decisiones más inteligentes en sus actividades de ajuste.

Continuar la exploración del espacio de hiperparámetros y comenzar en caliente los trabajos de HPO

Hemos visto que AMT nos ayuda a explorar el espacio de búsqueda de hiperparámetros de manera eficiente. Pero, ¿qué pasa si necesitamos varias rondas de ajuste para mejorar nuestros resultados de forma iterativa? Como se mencionó al principio, queremos establecer un ciclo de retroalimentación de optimización: nuestra "conversación" con el modelo. ¿Necesitamos empezar desde cero cada vez?

Analicemos el concepto de ejecutar un trabajo de ajuste de hiperparámetros de inicio en caliente. No inicia nuevos trabajos de ajuste desde cero, sino que reutiliza lo aprendido en las ejecuciones anteriores de HPO. Esto nos ayuda a ser más eficientes con nuestro tiempo de ajuste y recursos informáticos. Podemos iterar aún más sobre nuestros resultados anteriores. Para utilizar arranques en caliente, creamos un WarmStartConfig y especificar warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. Esto significa que cambiamos los valores de los hiperparámetros pero no cambiamos los datos ni el algoritmo. Le decimos a AMT que transfiera el conocimiento previo a nuestro nuevo trabajo de tuning.

Haciendo referencia a nuestros trabajos anteriores de optimización bayesiana y ajuste de búsqueda aleatoria como parents, podemos usarlos ambos para el arranque en caliente:

warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents=[bayesian_tuner_name, random_tuner_name])
tuner_parameters['warm_start_config'] = warm_start_config

Para ver los beneficios de utilizar arranques en caliente, consulte los siguientes cuadros. Estos son generados por amtviz de manera similar a como lo hicimos antes, pero esta vez hemos agregado otro trabajo de ajuste basado en un comienzo en caliente.

Inicio en caliente del trabajo de optimización de hiperparámetros

En el gráfico de la izquierda, podemos observar que los nuevos trabajos de ajuste se encuentran principalmente en la esquina superior derecha del gráfico de métricas de rendimiento (ver los puntos marcados en naranja). De hecho, el buen comienzo ha reutilizado los resultados anteriores, razón por la cual esos puntos de datos se encuentran entre los mejores resultados de la puntuación de F1. Esta mejora también se refleja en el gráfico de densidad de la derecha.

En otras palabras, AMT selecciona automáticamente conjuntos prometedores de valores de hiperparámetros basándose en su conocimiento de ensayos anteriores. Esto se muestra en el siguiente cuadro. Por ejemplo, el algoritmo probaría un valor bajo para n-estimators con menos frecuencia porque se sabe que producen puntuaciones bajas en F1. No desperdiciamos recursos en eso, gracias a los comienzos en caliente.

Trabajos visualizados de optimización de hiperparámetros

Limpiar

Para evitar incurrir en costos no deseados cuando termine de experimentar con HPO, debe eliminar todos los archivos en su depósito S3 con el prefijo amt-visualize-demo y también cerrar los recursos de SageMaker Studio.

Ejecute el siguiente código en su computadora portátil para eliminar todos los archivos S3 de esta publicación:

!aws s3 rm s3://{BUCKET}/amt-visualize-demo --recursive

Si desea conservar los conjuntos de datos o los artefactos del modelo, puede modificar el prefijo en el código para amt-visualize-demo/data solo borrar los datos o amt-visualize-demo/output para eliminar solo los artefactos del modelo.

Conclusión

Hemos aprendido cómo el arte de crear soluciones de aprendizaje automático implica explorar y optimizar hiperparámetros. Ajustar esas perillas y palancas es un proceso exigente pero gratificante que conduce a tiempos de entrenamiento más rápidos, una mayor precisión del modelo y, en general, mejores soluciones de aprendizaje automático. La funcionalidad SageMaker AMT nos ayuda a ejecutar múltiples trabajos de ajuste y a iniciarlos en caliente, y proporciona puntos de datos para una revisión, comparación visual y análisis adicionales.

En esta publicación, analizamos las estrategias de HPO que utilizamos con SageMaker AMT. Comenzamos con la búsqueda aleatoria, una estrategia sencilla pero eficaz en la que los hiperparámetros se muestrean aleatoriamente de un espacio de búsqueda. A continuación, comparamos los resultados con la optimización bayesiana, que utiliza modelos probabilísticos para guiar la búsqueda de hiperparámetros óptimos. Después de identificar una estrategia de HPO adecuada y buenos rangos de valores de hiperparámetros a través de pruebas iniciales, mostramos cómo utilizar arranques en caliente para optimizar futuros trabajos de HPO.

Puede explorar el espacio de búsqueda de hiperparámetros comparando resultados cuantitativos. Hemos sugerido la comparación visual en paralelo y proporcionamos el paquete necesario para la exploración interactiva. ¡Háganos saber en los comentarios lo útil que fue para usted en su viaje de ajuste de hiperparámetros!


Sobre los autores

Uemit YoldasÜmit Yoldas es arquitecto senior de soluciones en Amazon Web Services. Trabaja con clientes empresariales de todos los sectores en Alemania. Su motivación es traducir conceptos de IA en soluciones del mundo real. Fuera del trabajo, disfruta del tiempo con la familia, saboreando la buena comida y haciendo ejercicio.

elina lesykelina lesyk es un Arquitecto de Soluciones ubicado en Munich. Se centra en clientes empresariales de la industria de servicios financieros. En su tiempo libre, puede encontrar a Elina creando aplicaciones con IA generativa en algunas reuniones de TI, impulsando una nueva idea para solucionar rápidamente el cambio climático o corriendo en el bosque para prepararse para una media maratón con una desviación típica del cronograma planificado.

mariano kampMariano Campo es arquitecto principal de soluciones en Amazon Web Services. Trabaja con bancos y compañías de seguros en Alemania en materia de aprendizaje automático. En su tiempo libre, Mariano disfruta del senderismo con su esposa.

Sello de tiempo:

Mas de Aprendizaje automático de AWS