Tecnicas de compresión del modelo

La necesidad de la compresión del modelo.

Muchas aplicaciones del mundo real exigen capacidades de procesamiento en el dispositivo en tiempo real. Por ejemplo, la IA en la cámara de seguridad de su hogar debe poder procesar y notificarle si alguien desconocido intenta ingresar a su casa.

El principal desafío con el uso de IA de última generación en la actualidad es que los dispositivos de borde tienen recursos limitados. Como resultado, tienen memoria limitada y capacidades de procesamiento limitadas. 

Los modelos de aprendizaje profundo que funcionan bien son de gran tamaño. Sin embargo, cuanto más grande es el modelo, más espacio de almacenamiento necesita, lo que dificulta su implementación en dispositivos con recursos limitados. Además, un modelo más grande significa un mayor tiempo de inferencia y más consumo de energía durante la inferencia. Si bien estos modelos han logrado excelentes resultados en el laboratorio, no se pueden usar en muchas aplicaciones del mundo real.

Eso nos deja con una opción: reducir el tamaño del modelo con compresión AI.

Hacer un modelo más pequeño que pueda ejecutarse bajo las limitaciones de los dispositivos periféricos es un desafío clave. También es importante hacer esto sin comprometer la precisión.

Simplemente no es suficiente tener un modelo pequeño que pueda ejecutarse en dispositivos con recursos limitados. Debería funcionar bien, tanto en términos de precisión como de velocidad de inferencia.

4 técnicas populares de compresión de IA 

Como sugiere el nombre, la compresión del modelo ayuda a reducir el tamaño de la red neuronal sin comprometer demasiado la precisión.

Los modelos resultantes son eficientes tanto en memoria como en energía.

Se pueden utilizar muchas técnicas de compresión de modelos para reducir el tamaño del modelo. Este artículo se centrará en cuatro técnicas de compresión populares:


  1. Poda (Pruning)
  2. Cuantización (Quantization)
  3. Destilación de conocimiento (Knowledge distillation)
  4. Factorización de rango bajo (Low-rank factorization)

1. La técnica de la poda 

La poda es una técnica poderosa para reducir la cantidad de parámetros de redes neuronales profundas. En las DNN, muchos parámetros son redundantes porque no contribuyen mucho durante el entrenamiento. Entonces, después del entrenamiento, dichos parámetros pueden eliminarse de la red con poco efecto en la precisión.

La poda da como resultado modelos comprimidos que se ejecutan más rápido. Reduce el costo computacional involucrado en el entrenamiento de la red y reduce el tamaño general del modelo. Es importante destacar que también ahorra tiempo de cálculo y energía. 

Un modelo puede ser podado durante o después del entrenamiento. Existen varias técnicas para este proceso de poda; algunos de estos son:

Poda de peso
Las conexiones de peso que están por debajo de algunos umbrales predefinidos se eliminan (se ponen a cero).

Poda de neuronas
 En lugar de eliminar los pesos uno por uno, lo que puede llevar mucho tiempo, podamos las neuronas.
Poda de capas
Las capas también se pueden podar.

2. La técnica de cuantificación 


En los DNN, los pesos se almacenan como números de coma flotante de 32 bits.


La cuantificación comprime la red original al reducir la cantidad de bits necesarios para representar cada peso. Por ejemplo, los pesos se pueden cuantificar a 16 bits, 8 bits, 4 bits e incluso 1 bit. Al reducir la cantidad de bits utilizados, el tamaño de la DNN se puede reducir significativamente.

Hay dos formas de cuantización. Estos son la cuantificación posterior al entrenamiento y el entrenamiento consciente de la cuantificación.

Comparación de modelos cuantificados y no cuantificados en ImageNet
La cuantificación se puede aplicar tanto durante como después del entrenamiento. Se puede aplicar tanto a capas convolucionales como totalmente conectadas. Sin embargo, los pesos cuantificados dificultan la convergencia de las redes neuronales y hacen inviable la retropropagación.



3. La técnica de destilación del conocimiento 


En la destilación de conocimiento, un modelo grande y complejo se entrena en un gran conjunto de datos en la destilación de conocimiento. Cuando este modelo puede generalizarse y funcionar bien con datos ocultos, el conocimiento se transfiere a una red más pequeña. El modelo más grande se conoce como modelo de maestro y la red más pequeña se conoce como red de estudiantes.
En la destilación del conocimiento, los tipos de conocimiento, las estrategias de destilación y las arquitecturas profesor-estudiante juegan un papel crucial en el aprendizaje de los estudiantes.

La destilación del conocimiento es diferente del aprendizaje por transferencia, donde usamos la misma arquitectura de modelo y pesos aprendidos, y solo reemplazamos algunas de las capas completamente conectadas con nuevas capas según los requisitos de las aplicaciones.

Actualmente, la técnica de destilación de conocimiento se limita únicamente a aplicaciones basadas en clasificación. 

Es un desafío entrenar redes de estudiantes del maestro para tareas como la detección y segmentación de objetos. 

Las activaciones, neuronas o características de las capas intermedias también se pueden utilizar como conocimiento para guiar el aprendizaje del modelo de estudiante. Se pueden transferir diferentes formas de conocimiento. Estos son el conocimiento basado en respuestas, el conocimiento basado en características y el conocimiento basado en relaciones.

Las diferentes estrategias de destilación del conocimiento son:

  • Destilación fuera de línea
  • Destilación en línea
  • Autodestilación


4. La técnica de factorización de bajo rango 


La factorización de rango bajo identifica parámetros redundantes de redes neuronales profundas empleando la matriz y la descomposición de tensores. Cuando es necesario reducir el tamaño del modelo, una técnica de factorización de bajo rango ayuda al descomponer una matriz grande en matrices más pequeñas.

Una matriz de pesos A con dimensión mxn y rango r se puede descomponer en matrices más pequeñas.

La factorización de bajo rango de las matrices de capas densas mejora principalmente los requisitos de almacenamiento y hace que el modelo sea fácil de almacenar, mientras que la factorización de las capas convolucionales acelera el proceso de inferencia.

La precisión y el rendimiento del modelo dependen de la factorización adecuada y la selección de rangos. Aquí, el principal desafío es que el proceso de descomposición da como resultado implementaciones más difíciles y es computacionalmente intensivo.

Para resumir, la factorización de bajo rango se puede aplicar durante o después del entrenamiento. Además, se puede aplicar tanto a capas convolucionales como totalmente conectadas. Cuando se aplica durante el entrenamiento, puede reducir el tiempo de entrenamiento. Además, la factorización de las matrices de capa densa reduce el tamaño del modelo y mejora la velocidad hasta en un 30-50 % en comparación con la representación de matriz de rango completo.

La compresión de modelos y sus desafíos
Los métodos de compresión y aceleración de modelos de DNN han alcanzado un impulso significativo en los últimos años. Sin embargo, un desafío importante que aún existe con las DNN es encontrar el equilibrio adecuado entre la disponibilidad variable de recursos y el rendimiento del sistema para dispositivos con recursos limitados. 

Las técnicas de compresión de modelos son complementarias entre sí. Estas técnicas se pueden aplicar a modelos previamente entrenados como un paso de procesamiento posterior para reducir el tamaño del modelo y aumentar la velocidad de inferencia. También se pueden aplicar durante el tiempo de entrenamiento. 

La poda y la cuantificación ahora se integraron en marcos de aprendizaje automático como Tensorflow y PyTorch.

Hay muchos más enfoques de compresión más allá de los cuatro comunes que se tratan en este artículo, como la compresión de modelo basada en el reparto de pesos, la matriz estructural, los filtros transferidos y los filtros compactos.