Utilice un enfoque centrado en los datos para minimizar la cantidad de datos necesarios para entrenar modelos de Amazon SageMaker

Utilice un enfoque centrado en los datos para minimizar la cantidad de datos necesarios para entrenar modelos de Amazon SageMaker

A medida que los modelos de aprendizaje automático (ML) han mejorado, los científicos de datos, los ingenieros de ML y los investigadores han centrado más su atención en definir y mejorar la calidad de los datos. Esto ha llevado al surgimiento de un enfoque centrado en datos para ML y varias técnicas para mejorar el rendimiento del modelo centrándose en los requisitos de datos. La aplicación de estas técnicas permite a los profesionales de ML reducir la cantidad de datos necesarios para entrenar un modelo de ML.

Como parte de este enfoque, han surgido técnicas avanzadas de selección de subconjuntos de datos para acelerar el entrenamiento al reducir la cantidad de datos de entrada. Este proceso se basa en seleccionar automáticamente un número determinado de puntos que se aproximen a la distribución de un conjunto de datos más grande y utilizarlo para el entrenamiento. La aplicación de este tipo de técnica reduce la cantidad de tiempo necesario para entrenar un modelo de ML.

En esta publicación, describimos la aplicación de principios de IA centrados en datos con Verdad fundamental de Amazon SageMaker, cómo implementar técnicas de selección de subconjuntos de datos usando el CORDONES repositorio en Amazon SageMaker para reducir la cantidad de datos requeridos para entrenar un modelo inicial, y cómo ejecutar experimentos usando este enfoque con Experimentos de Amazon SageMaker.

Un enfoque centrado en los datos para el aprendizaje automático

Antes de sumergirse en técnicas centradas en datos más avanzadas, como la selección de subconjuntos de datos, puede mejorar sus conjuntos de datos de varias maneras aplicando un conjunto de principios subyacentes a su proceso de etiquetado de datos. Para ello, Ground Truth admite varios mecanismos para mejorar la coherencia de las etiquetas y la calidad de los datos.

La consistencia de la etiqueta es importante para mejorar el rendimiento del modelo. Sin él, los modelos no pueden producir un límite de decisión que separe todos los puntos que pertenecen a diferentes clases. Una forma de asegurar la consistencia es usando consolidación de anotaciones en Ground Truth, que le permite mostrar un ejemplo dado a varios etiquetadores y usar la etiqueta agregada proporcionada como la verdad básica para ese ejemplo. La divergencia en la etiqueta se mide por la puntuación de confianza generada por Ground Truth. Cuando hay divergencia en las etiquetas, debe buscar si hay ambigüedad en las instrucciones de etiquetado proporcionadas a sus etiquetadores que se pueden eliminar. Este enfoque mitiga los efectos del sesgo de los etiquetadores individuales, lo cual es fundamental para hacer que las etiquetas sean más consistentes.

Otra forma de mejorar el rendimiento del modelo centrándose en los datos implica desarrollar métodos para analizar los errores en las etiquetas a medida que surgen para identificar el subconjunto de datos más importante para mejorar. puede hacer esto para su conjunto de datos de entrenamiento con una combinación de esfuerzos manuales que involucran sumergirse en ejemplos etiquetados y usar el Reloj en la nube de Amazon registros y métricas generados por los trabajos de etiquetado de Ground Truth. También es importante observar los errores que comete el modelo en el momento de la inferencia para impulsar la siguiente iteración de etiquetado de nuestro conjunto de datos. Además de estos mecanismos, Amazon SageMaker aclarar permite a los científicos de datos y a los ingenieros de ML ejecutar algoritmos como KernelSHAP para permitirles interpretar las predicciones hechas por su modelo. Como se mencionó, una explicación más profunda de las predicciones del modelo se puede relacionar con el proceso de etiquetado inicial para mejorarlo.

Por último, puede considerar descartar ejemplos ruidosos o demasiado redundantes. Hacer esto le permite reducir el tiempo de entrenamiento eliminando ejemplos que no contribuyen a mejorar el rendimiento del modelo. Sin embargo, identificar manualmente un subconjunto útil de un conjunto de datos dado es difícil y requiere mucho tiempo. La aplicación de las técnicas de selección de subconjuntos de datos descritas en esta publicación le permite automatizar este proceso a lo largo de los marcos establecidos.

Caso de uso

Como se mencionó, la IA centrada en datos se enfoca en mejorar la entrada del modelo en lugar de la arquitectura del modelo en sí. Una vez que haya aplicado estos principios durante el etiquetado de datos o la ingeniería de características, puede continuar enfocándose en la entrada del modelo aplicando la selección de subconjuntos de datos en el momento del entrenamiento.

Para esta publicación, aplicamos la selección de subconjuntos de datos basada en la generalización para un aprendizaje eficiente y robusto (BRILLO), que es una de las muchas técnicas de selección de subconjuntos de datos implementadas en el repositorio de CORDS, al algoritmo de entrenamiento de un ResNet-18 modelo para minimizar el tiempo que lleva entrenar un modelo para clasificar CIFAR-10 imágenes Las siguientes son algunas imágenes de muestra con sus respectivas etiquetas extraídas del conjunto de datos CIFAR-10.

Conjunto de datos CIFAR

ResNet-18 se usa a menudo para tareas de clasificación. Es una red neuronal convolucional profunda de 18 capas. El conjunto de datos CIFAR-10 se usa a menudo para evaluar la validez de varias técnicas y enfoques en ML. Se compone de 60,000 32 imágenes en color de 32 × 10 etiquetadas en XNUMX clases.

En las siguientes secciones, mostramos cómo GLISTER puede ayudarlo a responder hasta cierto punto la siguiente pregunta:

¿Qué porcentaje de un conjunto de datos dado podemos usar y aun así lograr un buen rendimiento del modelo durante el entrenamiento?

Aplicar GLISTER a su algoritmo de entrenamiento introducirá la fracción como un hiperparámetro en su algoritmo de entrenamiento. Esto representa el porcentaje del conjunto de datos dado que desea utilizar. Como con cualquier hiperparámetro, encontrar el valor que produce el mejor resultado para su modelo y datos requiere ajustes. No profundizamos en el ajuste de hiperparámetros en esta publicación. Para obtener más información, consulte Optimice los hiperparámetros con Amazon SageMaker Automatic Model Tuning.

Realizamos varias pruebas con SageMaker Experiments para medir el impacto del enfoque. Los resultados variarán según el conjunto de datos inicial, por lo que es importante probar el enfoque con nuestros datos en diferentes tamaños de subconjuntos.

Aunque discutimos el uso de GLISTER en imágenes, también puede aplicarlo a algoritmos de entrenamiento que trabajan con datos estructurados o tabulares.

Selección de subconjunto de datos

El propósito de la selección de subconjuntos de datos es acelerar el proceso de entrenamiento mientras se minimizan los efectos sobre la precisión y se aumenta la solidez del modelo. Más específicamente, GLISTER-ONLINE selecciona un subconjunto a medida que el modelo aprende al intentar maximizar la probabilidad logarítmica de ese subconjunto de datos de entrenamiento en el conjunto de validación que especifique. Optimizar la selección de subconjuntos de datos de esta manera mitiga el ruido y el desequilibrio de clases que a menudo se encuentra en los conjuntos de datos del mundo real y permite que la estrategia de selección de subconjuntos se adapte a medida que aprende el modelo.

La primera papel BRILLO describe una compensación de velocidad/precisión en varios tamaños de subconjuntos de datos de la siguiente manera usando un Lenet modelo:

Tamaño del subconjunto Acelerar Exactitud
10% 6x - 3%
30% 2.5x - 1.20%
50% 1.5x - 0.20%

Para entrenar el modelo, ejecutamos un Trabajo de entrenamiento de SageMaker mediante un script de entrenamiento personalizado. También hemos subido nuestro conjunto de datos de imágenes a Servicio de almacenamiento simple de Amazon (Amazon S3). Al igual que con cualquier trabajo de capacitación de SageMaker, debemos definir un Estimator objeto. El estimador PyTorch de la sagemaker.pytorch El paquete nos permite ejecutar nuestro propio script de entrenamiento en un contenedor PyTorch administrado. El inputs variable pasada al estimador .fit contiene un diccionario de la ubicación de S3 del conjunto de datos de entrenamiento y validación.

El train.py El script se ejecuta cuando se inicia un trabajo de entrenamiento. En este script, importamos el modelo ResNet-18 de la biblioteca CORDS y le pasamos el número de clases en nuestro conjunto de datos de la siguiente manera:

from cords.utils.models import ResNet18 numclasses = 10
model = ResNet18(numclasses)

Entonces, usamos el gen_dataset función de CORDS para crear conjuntos de datos de entrenamiento, validación y prueba:

from cords.utils.data.datasets.SL import gen_dataset train_set, validation_set, test_set, numclasses = gen_dataset(
datadir="/opt/ml/input/data/training",
dset_name="cifar10",
feature="dss",
type="image")

A partir de cada conjunto de datos, creamos un cargador de datos PyTorch equivalente:

train_loader = torch.utils.data.DataLoader(train_set,
batch_size=batch_size,
shuffle=True) validation_loader = torch.utils.data.DataLoader(validation_set,
batch_size=batch_size,
shuffle=False)

Por último, utilizamos estos cargadores de datos para crear un GLISTERDataLoader de la biblioteca CORDS. Utiliza una implementación de la estrategia de selección GLISTER-ONLINE, que aplica la selección de subconjuntos a medida que actualizamos el modelo durante el entrenamiento, como se discutió anteriormente en esta publicación.

Para crear el objeto, pasamos los argumentos específicos de la estrategia de selección como un DotMap objeto junto con el train_loader, validation_loadery logger:

import logging
from cords.utils.data.dataloader.SL.adaptive import GLISTERDataLoader
from dotmap import DotMap dss_args = # GLISTERDataLoader specific arguments
dss_args = DotMap(dss_args)
dataloader = GLISTERDataLoader(train_loader,
validation_loader,
dss_args,
logger,
batch_size=batch_size,
shuffle=True,
pin_memory=False)

El GLISTERDataLoader ahora se puede aplicar como un cargador de datos regular a un ciclo de entrenamiento. Seleccionará subconjuntos de datos para el próximo lote de entrenamiento a medida que el modelo aprenda en función de la pérdida de ese modelo. Como se demuestra en la tabla anterior, agregar una estrategia de selección de subconjuntos de datos nos permite reducir significativamente el tiempo de capacitación, incluso con el paso adicional de selección de subconjuntos de datos, con poca compensación en la precisión.

Los científicos de datos y los ingenieros de ML a menudo necesitan evaluar la validez de un enfoque comparándolo con una línea de base. Demostramos cómo hacer esto en la siguiente sección.

Seguimiento de experimentos

Puede utilizar Experimentos de SageMaker para medir la validez del enfoque de selección de subconjuntos de datos. Para más información, ver Experimentos de Amazon SageMaker de próxima generación: organice, rastree y compare sus capacitaciones de aprendizaje automático a escala.

En nuestro caso, realizamos cuatro experimentos: una línea de base sin aplicar la selección de subconjuntos de datos, y otros tres con diferentes fraction parámetros, que representa el tamaño del subconjunto en relación con el conjunto de datos general. Naturalmente, usando una más pequeña fraction El parámetro debería resultar en tiempos de entrenamiento reducidos, pero también en una menor precisión del modelo.

Para esta publicación, cada ejecución de entrenamiento se representa como un Run en Experimentos de SageMaker. Las ejecuciones relacionadas con nuestro experimento están todas agrupadas bajo una Experiment objeto. Las ejecuciones se pueden adjuntar a un experimento común al crear el Estimator con el SDK. Ver el siguiente código:

from sagemaker.utils import unique_name_from_base
from sagemaker.experiments.run import Run, load_run experiment_name = unique_name_from_base("data-centric-experiment")
with Run(
experiment_name=experiment_name,
sagemaker_session=sess
) as run:
estimator = PyTorch('train.py',
source_dir="source",
role=role,
instance_type=instance_type,
instance_count=1,
framework_version=framework_version,
py_version='py3',
env={ 'SAGEMAKER_REQUIREMENTS': 'requirements.txt',
})
estimator.fit(inputs)

Como parte de su script de entrenamiento personalizado, puede recopilar métricas de ejecución usando load_run:

from sagemaker.experiments.run import load_run
from sagemaker.session import Session if __name__ == "__main__":
args = parse_args()
session = Session(boto3.session.Session(region_name=args.region))
with load_run(sagemaker_session=session) as run:
train(args, run)

Luego, utilizando el objeto de ejecución devuelto por la operación anterior, puede recopilar puntos de datos por época llamando run.log_metric(name, value, step) y proporcionando el nombre de la métrica, el valor y el número de época actual.

Para medir la validez de nuestro enfoque, recopilamos métricas correspondientes a pérdida de entrenamiento, precisión de entrenamiento, pérdida de validación, precisión de validación y tiempo para completar una época. Luego, después de ejecutar los trabajos de entrenamiento, podemos revisar los resultados de nuestro experimento in Estudio Amazon SageMaker o a través del SDK de experimentos de SageMaker.

Para ver las precisiones de validación dentro de Studio, elija Analizar en el experimento Ron .

Lista de experimentos

Agregue un gráfico, configure las propiedades del gráfico y elija Crear. Como se muestra en la siguiente captura de pantalla, verá un gráfico de las precisiones de validación en cada época para todas las ejecuciones.

Gráfico de experimentos

El SDK también le permite recuperar información relacionada con experimentos como un marco de datos de Pandas:

from sagemaker.analytics import ExperimentAnalytics trial_component_analytics = ExperimentAnalytics(
sagemaker_session=sess.sagemaker_client,
experiment_name=experiment_name
)
analytic_table = trial_component_analytics.dataframe()

Opcionalmente, los trabajos de entrenamiento se pueden ordenar. Por ejemplo, podríamos agregar "metrics.validation:accuracy.max" como el valor de la sort_by parámetro pasado a ExperimentAnalytics para devolver el resultado ordenado por precisión de validación.

Como era de esperar, nuestros experimentos muestran que aplicar GLISTER y la selección de subconjuntos de datos al algoritmo de entrenamiento reduce el tiempo de entrenamiento. Al ejecutar nuestro algoritmo de entrenamiento de referencia, el tiempo medio para completar una sola época ronda los 27 segundos. Por el contrario, aplicar GLISTER para seleccionar un subconjunto equivalente al 50 %, 30 % y 10 % del conjunto de datos general da como resultado tiempos para completar una época de aproximadamente 13, 8.5 y 2.75 segundos, respectivamente, en instancias ml.p3.2xlarge .

También observamos un impacto comparativamente mínimo en la precisión de la validación, especialmente cuando se utilizan subconjuntos de datos del 50 %. Después de entrenar durante 100 épocas, la línea de base produce una precisión de validación del 92.72 %. Por el contrario, aplicar GLISTER para seleccionar un subconjunto equivalente al 50 %, 30 % y 10 % del conjunto de datos general da como resultado una precisión de validación del 91.42 %, 89.76 % y 82.82 %, respectivamente.

Conclusión

SageMaker Ground Truth y SageMaker Experiments permiten un enfoque centrado en los datos para el aprendizaje automático al permitir que los científicos de datos y los ingenieros de ML produzcan conjuntos de datos más consistentes y realicen un seguimiento del impacto de técnicas más avanzadas a medida que las implementan en la fase de creación de modelos. La implementación de un enfoque centrado en los datos para ML le permite reducir la cantidad de datos que requiere su modelo y mejorar su solidez.

Pruébelo y háganos saber lo que piensa en los comentarios.


Sobre los autores

Utilice un enfoque centrado en datos para minimizar la cantidad de datos necesarios para entrenar los modelos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Nicolás Bernier es arquitecto de soluciones, parte del equipo del sector público canadiense en AWS. Actualmente está realizando una maestría con área de investigación en Deep Learning y posee cinco certificaciones de AWS, incluida la Certificación de Especialidad ML. A Nicolás le apasiona ayudar a los clientes a profundizar su conocimiento de AWS trabajando con ellos para traducir sus desafíos comerciales en soluciones técnicas.

Utilice un enfoque centrado en datos para minimizar la cantidad de datos necesarios para entrenar los modelos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.givanildo alves es Arquitecto de Prototipos en el equipo de Prototipos e Ingeniería en la Nube de Amazon Web Services, que ayuda a los clientes a innovar y acelerar mostrando el arte de lo posible en AWS, y ya ha implementado varios prototipos en torno a la inteligencia artificial. Tiene una larga carrera en ingeniería de software y anteriormente trabajó como ingeniero de desarrollo de software en Amazon.com.br.

Sello de tiempo:

Mas de Aprendizaje automático de AWS