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.
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
También te puede interesar Las mejores API de detección de idioma en 20231.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.
También te puede interesar Una introducción simple al producto puntobucea 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
También te puede interesar Predictor de fútbol de fantasía1.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
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».
También te puede interesar 7 técnicas de clasificación de texto para cualquier escenarioImplementaciones
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.
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.
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
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.
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.
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.
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: