Haga que sus modelos de aprendizaje automático sean más pequeños, más rápidos y que consuman menos datos (al mismo tiempo que los mantiene precisos)

Nick Pogrebnyak

Las técnicas avanzadas para optimizar el entrenamiento de modelos y la inferencia pertenecen directamente a la caja de herramientas de cualquier profesional del aprendizaje automático. Esta publicación se desliza muy por encima de un panorama de métodos para reducir el tamaño del modelo, entrenar con menos memoria, reutilizar modelos existentes y usar pequeños conjuntos de datos de manera eficiente. Toma el panorama general, ya sea que esté buscando llegar a la producción más rápido, optimizar su presupuesto de MLOps o prepararse para su próxima entrevista de ML. El objetivo es brindarle ideas y materiales de seguimiento para enfoques que pueden ayudarlo a reducir de manera efectiva el tamaño de sus modelos y entrenar con menos memoria, lo que refuerza la eficiencia y el rendimiento de sus aplicaciones de IA.

Hay modelos de alto rendimiento y modelos de bajo rendimiento. Imagen creada por Bing Image Creator / DALL-E

1.1. Entrenamiento de precisión mixta

Con esta técnica, almacenamos algunos parámetros del modelo con menor precisión (p. ej., 16 bits) y algunos con mayor precisión (p. ej., los 32 bits predeterminados) durante el entrenamiento. Esto ayuda a reducir la huella de memoria y hace que el entrenamiento sea más rápido. Tanto Pytorch como Tensorflow tienen implementaciones para hacer esto automáticamente (con GPU Nvidia).

bucea más profundo: https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html

Implementaciones

1.2. cuantización

La cuantificación es otra técnica que reduce la precisión de los parámetros del modelo. En lugar de representarlos en float32, usamos float16, integer (int16) o, en el caso extremo, binario (sí, consulte BinaryBERT). Estas representaciones de menor precisión pueden reducir el consumo de memoria, además de que las operaciones numéricas en números enteros a veces pueden ejecutarse más rápido que en flotantes en las CPU (pero esto en realidad depende). Un modelo puede entrenarse con total precisión y luego cuantificarse, o entrenarse directamente con parámetros que tengan una precisión más baja.

Encuesta de métodos de cuantificación: https://github.com/christianversloot/machine-learning-articles/blob/main/tensorflow-model-optimization-an-introduction-to-quantization.md

Implementaciones

1.3. Adaptación de bajo rango (LoRA)

La adaptación de bajo rango (LoRA) es una técnica innovadora que implica el entrenamiento previo de un modelo, la factorización de los pesos del modelo en matrices de rango inferior, la congelación de los pesos originales y luego el ajuste fino utilizando las matrices factorizadas. Este enfoque reduce significativamente la cantidad de parámetros entrenables en el modelo, lo que mejora la eficiencia en las tareas posteriores.

bucea más profundo: Hu, EJ et al. (2021) «LoRA: Adaptación de bajo rango de modelos de lenguaje grande».

Implementaciones

1.4. Poda de modelos

La poda de modelos establece algunos de los pesos del modelo en cero para reducir el consumo de memoria. Por lo general, esto se hace con pesos cercanos a cero, eliminándolos de manera efectiva sin afectar significativamente el rendimiento del modelo.

Ejemplos

1.5. Modelo de destilación

Una técnica bien conocida, donde entrenamos una gran red (el «maestro») y luego entrenamos un modelo más pequeño (el «estudiante») para imitar la producción del maestro. El objetivo de la formación es minimizar la diferencia entre los resultados del profesor y del alumno. El modelo de estudiante más pequeño puede así aprender a aproximarse a la funcionalidad del modelo más grande, pero con una fracción de los parámetros, haciéndolo más eficiente.

Ejemplos

Una vista familiar, aunque deprimente.

2.1. Puntos de control de gradiente

Los puntos de control de gradiente se utilizan para optimizar el consumo de memoria durante la retropropagación. En lugar de almacenar todos los resultados intermedios durante el backprop, volvemos a ejecutar partes del pase hacia adelante para recuperarlos cuando sea necesario. Esta técnica aumenta la carga computacional (ya que algunas partes del paso hacia adelante se volverán a ejecutar) pero reduce significativamente la carga de la memoria, ya que no es necesario almacenar todos los gradientes en la memoria.

bucea más profundo: consulte la sección 4 en Chen, T. (2016) «Entrenamiento de redes profundas con costo de memoria sublineal».

Implementaciones

2.2. Acumulación de gradiente

En lugar de actualizar los parámetros del modelo después cada lote durante el entrenamiento, la acumulación de gradiente recopila gradientes para varios lotes y luego los usa todos para actualizar los parámetros del modelo. Esto permite calcular gradientes basados ​​en lotes más pequeños que caben en la memoria, mientras actualiza de manera efectiva los parámetros del modelo como si el tamaño del lote fuera mayor. Este método permite un entrenamiento más fluido y eficiente en la memoria, especialmente para modelos más grandes o huellas de memoria más pequeñas.

Transferir el árbol genealógico del aprendizaje. Fuente: Zhuang, F. et al. (2020) “Una encuesta integral sobre el aprendizaje por transferencia”.

3.1. Aprendizaje de transferencia basado en características

De los muchos enfoques de aprendizaje por transferencia, mencionemos uno aquí: el aprendizaje por transferencia basado en funciones. Aprovecha un modelo preexistente, congela las capas previamente entrenadas y las usa para extraer características para un nuevo modelo.

3.2. Adaptadores

Esta técnica consiste en agregar algunas capas pequeñas inicializadas aleatoriamente («capas de adaptador») en una red previamente entrenada. Estas capas de adaptadores están ajustadas a la tarea en cuestión. Los pesos originales se congelan durante este ajuste fino. (Esto es diferente del enfoque de ajuste fino «tradicional» que agrega un jefe específico de la tarea y ajusta el modelo grande preentrenado y la cabeza.) Otra ventaja es que los parámetros se pueden compartir entre tareas.

Izquierda: integración de un bloque adaptador en un bloque Transformador. Derecha: anatomía de un bloque adaptador: observe el cuello de botella y una conexión de salto. Durante el ajuste fino, solo se entrenan las capas en verde. Fuente: Houlsby, N. et al. (2019) “Aprendizaje de transferencia eficiente de parámetros para PNL”.

bucea más profundo: https://medium.com/dair-ai/adapters-a-compact-and-extensible-transfer-learning-method-for-nlp-6d18c2399f62

Implementaciones

4.1. Aprendizaje multimodal y multitarea

Múltiples modalidades de datos. Fuente: Han, W. et al. (2021) «Fusión de modalidad bi-bimodal para análisis de sentimiento multimodal controlado por correlación»

Esta familia de enfoques implica entrenar simultáneamente datos de varias modalidades (como imágenes y texto: multimodal) o en varias tareas (como clasificación y segmentación de imágenes: multitarea). Estas técnicas pueden aumentar la precisión y solidez del modelo, especialmente cuando los conjuntos de datos para cada modalidad son individualmente pequeños.

4.2. Selección de conjuntos básicos

La selección de conjuntos básicos entrena un modelo en los ejemplos más representativos del conjunto de datos. Una forma de identificar estos ejemplos representativos es agrupar los datos de entrenamiento (p. ej., en 1000 grupos) y luego seleccionar solo los centros de los grupos. Al etiquetar y entrenar el modelo en estos centros de clústeres, podemos aprender de manera efectiva de los puntos de datos más representativos.

4.3. Destilación de conjuntos de datos

A partir de un conjunto de datos original, la destilación del conjunto de datos genera un conjunto más pequeño de ejemplos sintéticos. Este conjunto de datos sintético captura el «conocimiento» destilado del conjunto de datos original en una forma compacta. Este conjunto de datos destilados se puede usar para entrenar un modelo, lo que reduce la necesidad de datos de entrenamiento extensos.

Fila superior: imágenes originales de CIFAR-10. Fila inferior: imágenes destiladas sintéticas para cada clase. El entrenamiento con solo estas 10 imágenes sintéticas produce una precisión de la prueba del 50,7 %. Fuente: Nguyen, T. y Lee, J. (2021) «Entrenamiento de modelos de aprendizaje automático de manera más eficiente con destilación de conjuntos de datos».

bucea más profundo: Yu, R. et al. (2023) «Destilación de conjuntos de datos: una revisión completa».

4.4. Aprendizaje activo

Con el aprendizaje activo, entrena un modelo iterativamente seleccionando los ejemplos más informativos de un gran conjunto de datos sin etiquetar, etiquetando estos ejemplos informativos y agregándolos al conjunto de entrenamiento.

Ciclo de aprendizaje activo. Fuente: Settles, B. (2010) “Encuesta de literatura de aprendizaje activo”.

Hay muchas maneras de identificar los ejemplos «informativos», incluida la incertidumbre del modelo, el cambio esperado del modelo, el desacuerdo en un conjunto de modelos, el aprendizaje activo de refuerzo, etc. Sin embargo, un inconveniente es que necesita configurar un ciclo de entrenamiento que etiquete los datos varias veces. en lotes más pequeños (esos ejemplos informativos), en lugar de hacerlo una vez en un lote grande, como se hace normalmente.

Aún así, el aprendizaje activo puede reducir en gran medida la cantidad de datos que deben etiquetarse, ya que solo utiliza los ejemplos más valiosos para la capacitación.

bucea más profundo: Ren, P. et al. (2020) “Una encuesta sobre el aprendizaje activo profundo”.

4.5. Aumento de datos

El aumento de datos aumenta el número de ejemplos de entrenamiento modificando los datos originales. Esta es más o menos una técnica estándar en la visión por computadora, donde las imágenes originales se rotan, voltean, recortan, etc., y se agregan a los datos originales. Pero también es posible aplicar esta técnica en NLP, reemplazando palabras con sinónimos (por ejemplo, usando incrustaciones de palabras), retrotraducción o generación de texto condicional. Algunos métodos contradictorios también pueden ayudar con el aumento de texto. Y, por supuesto, ChatGPT se puede usar para aumentar los datos de texto.

Generación de ejemplos de entrenamiento aumentados. Fuente de la imagen: Dai, H. et al. (2023) «AugGPT: Aprovechamiento de ChatGPT para el aumento de datos de texto»

Aumento de datos en PNL: Acortar, C. et al. (2021) «Aumento de datos de texto para aprendizaje profundo».

Una muestra muy pequeña de bibliotecas para la transformación de texto contradictorio:


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *