La visión por computadora es una de las áreas más influyentes de la inteligencia artificial y cambia casi todos los aspectos de nuestras vidas, a la par de la IA generativa. Desde el análisis de imágenes médicas y los vehículos autónomos hasta los sistemas de seguridad, la visión por computadora impulsada por IA es fundamental para mejorar la seguridad, la eficiencia y la atención médica a través de tecnologías como la detección de objetos, el reconocimiento facial y la clasificación de imágenes.
Pero La visión por computadora no solo está causando sensación en campos especializados.; también forma parte de las aplicaciones de consumo que utilizamos a diario. Mejora del enfoque de la cámara, edición de fotografías, reconocimiento de texto en tiempo real y escaneo con la cámara de un teléfono inteligente, permitiendo que dispositivos domésticos inteligentes como cámaras de seguridad detecten y alerten a los usuarios sobre el movimiento, estimación de posturas para aplicaciones de seguimiento de actividad física, identificación de calorías y alimentos para aplicaciones de seguimiento de dietas. identificación de rostros para desbloquear teléfonos y detección y clasificación de rostros para organizar fotos por persona en álbumes. Estas aplicaciones se han convertido en parte integral de las experiencias diarias de millones de personas.
Fuente: Real Computer Vision de Boris Denisenko en Medio
La mayoría de los ingenieros de aprendizaje automático no construyen sus modelos desde cero para darle vida a estas funciones. En cambio, dependen de modelos de código abierto existentes. Si bien este es el enfoque más factible, ya que construir un modelo desde cero es prohibitivamente costoso, todavía queda mucho trabajo por hacer antes de que el modelo pueda usarse en una aplicación.
En primer lugar, el modelo de código abierto puede resolver un escenario similar, pero no exactamente el que necesita un ingeniero. Por ejemplo, un ingeniero de aprendizaje automático puede necesitar una aplicación que compare diferentes bebidas, pero el modelo disponible está diseñado para comparar alimentos. Aunque funciona bien con los alimentos, puede tener dificultades cuando se aplica a las bebidas.
En segundo lugar, las condiciones del mundo real que estos modelos necesitan para ejecutarse a menudo difieren significativamente de los entornos para los que fueron diseñados inicialmente. Por ejemplo, un modelo puede tener cientos de millones de parámetros, lo que lo hace demasiado grande y computacionalmente intensivo para ejecutarlo, digamos, en un teléfono inteligente. Intentar ejecutar un modelo de este tipo en un dispositivo con recursos computacionales limitados provoca un rendimiento lento, un consumo excesivo de batería o una falla en la ejecución.
Adaptarse a escenarios y condiciones del mundo real
Esto, tarde o temprano, lleva a la mayoría de los ingenieros que aplican el aprendizaje automático para la visión por computadora en aplicaciones de consumo a enfrentar la necesidad de:
- Adaptar un modelo de código abierto existente para que se ajuste a su escenario específico.
- Optimizar el modelo para que funcione dentro de capacidades limitadas.
Adaptar un modelo no es algo que se pueda hacer simplemente. Comienza con un modelo previamente entrenado y lo adapta a su tarea específica. Esto implica ajustar una multitud de parámetros: la cantidad de capas, la cantidad de neuronas en cada capa, la tasa de aprendizaje, el tamaño del lote y más. La gran cantidad de combinaciones posibles puede resultar abrumadora, con potencialmente millones de configuraciones diferentes para probar. Aquí es donde entra en juego la optimización de hiperparámetros (HPO). HPO ayuda a agilizar este proceso, permitiéndole encontrar la mejor configuración más rápido que si ajustara manualmente los parámetros por separado.
Una vez que haya adaptado el modelo a su escenario, el siguiente desafío es lograr que se ejecute en un dispositivo con recursos limitados. Por ejemplo, es posible que necesites implementar el modelo en un teléfono inteligente con sólo 6 GB de RAM. En tales casos, la compresión del modelo se vuelve esencial para reducir el tamaño del modelo y hacerlo manejable para dispositivos con memoria y potencia de procesamiento limitadas.
Técnicas de optimización de hiperparámetros (HPO)
La optimización de hiperparámetros implica encontrar el mejor conjunto de parámetros para que su red neuronal minimice el error en una tarea específica. Digamos que estás entrenando un modelo para estimar la edad de una persona a partir de una fotografía. El error en este contexto se refiere a la desviación de la edad estimada del modelo de la edad real de la persona, medida, digamos, en el número de años que lleva desfasada.
Búsqueda de cuadrícula
La búsqueda de cuadrícula es un método de fuerza bruta que encuentra la combinación óptima probando todos los conjuntos posibles de parámetros. Comienza con un modelo existente y lo adapta a su tarea. Luego, modifica sistemáticamente los parámetros, como el número de neuronas o capas, para ver cómo estos cambios afectan el error del modelo. La búsqueda de cuadrícula implica probar cada combinación de estos parámetros para encontrar el que produce el error más bajo. El desafío es que existen numerosos parámetros que se pueden ajustar, cada uno con una amplia gama de valores potenciales.
Si bien este método garantiza encontrar la mejor opción, requiere mucho tiempo y, a menudo, resulta poco práctico.
Búsqueda aleatoria
Otro enfoque es la búsqueda aleatoria, en la que se muestrean aleatoriamente una parte de las combinaciones posibles en lugar de probar cada combinación. Este método implica seleccionar valores aleatorios para cada parámetro dentro de un rango específico y probar esas combinaciones. Si bien es más rápido que la búsqueda en cuadrícula, no garantiza el mejor resultado. Sin embargo, es probable que se encuentre una solución buena, si no óptima. Es una compensación entre velocidad y precisión.
Por ejemplo, si hay 1000 combinaciones de parámetros posibles, podría muestrear y probar 100 aleatoriamente, lo que tomaría solo una décima parte del tiempo en comparación con probar todas las combinaciones.
HPO utilizando algoritmos de optimización
Los métodos de ajuste de hiperparámetros basados en optimización utilizan diferentes enfoques matemáticos para encontrar de manera eficiente la mejor configuración de parámetros. Por ejemplo, la optimización bayesiana utiliza modelos probabilísticos para guiar la búsqueda, mientras que TetraOpt (un algoritmo desarrollado por el autor y el equipo) emplea optimización de tren tensorial para navegar mejor en espacios de alta dimensión. Estos métodos son más eficientes que la búsqueda aleatoria o en cuadrícula porque tienen como objetivo minimizar la cantidad de evaluaciones necesarias para encontrar hiperparámetros óptimos, centrándose en las combinaciones más prometedoras sin probar todas las posibilidades.
Estos algoritmos de optimización ayudan a encontrar mejores soluciones con mayor rapidez, lo que resulta especialmente valioso cuando las evaluaciones de modelos son computacionalmente costosas. Su objetivo es ofrecer los mejores resultados con el menor número de pruebas.
Técnicas de compresión del modelo ML
Una vez que un modelo funciona en teoría, el siguiente desafío es ejecutarlo en condiciones de la vida real. Tomemos, por ejemplo, ResNet para reconocimiento facial, YOLO para gestión de tráfico y análisis deportivos, o VGG para transferencia de estilo y moderación de contenido. Si bien son potentes, estos modelos suelen ser demasiado grandes para dispositivos con recursos limitados, como teléfonos inteligentes o cámaras inteligentes.
Los ingenieros de ML recurren a un conjunto de técnicas de compresión probadas y verdaderas para hacer que los modelos sean más eficientes para dichos entornos. Estos métodos (cuantización, poda, descomposición de matrices y destilación de conocimientos) son esenciales para reducir el tamaño y las demandas computacionales de los modelos de IA y al mismo tiempo preservar su rendimiento.
Cuantización
Fuente: Master the Art of Quantization de Jan Marcel Kezmann en Medio
La cuantificación es uno de los métodos más populares para comprimir redes neuronales, principalmente porque requiere un cálculo adicional mínimo en comparación con otras técnicas.
La idea central es sencilla: una red neuronal comprende numerosas matrices llenas de números. Estos números se pueden almacenar en diferentes formatos en una computadora, como punto flotante (por ejemplo, 32,15) o entero (por ejemplo, 4). Los diferentes formatos ocupan diferentes cantidades de memoria. Por ejemplo, un número en formato float32 (por ejemplo, 3.14) ocupa 32 bits de memoria, mientras que un número en formato int8 (por ejemplo, 42) sólo ocupa 8 bits.
Si los números de un modelo se almacenan originalmente en formato float32, se pueden convertir al formato int8. Este cambio reduce significativamente la huella de memoria del modelo. Por ejemplo, un modelo que ocupa inicialmente 100 MB podría comprimirse a sólo 25 MB después de la cuantificación.
Poda
Como se mencionó anteriormente, una red neuronal consta de un conjunto de matrices llenas de números, conocidos como «pesos». La poda es el proceso de eliminar los pesos «sin importancia» de estas matrices. Al eliminar estos pesos innecesarios, el comportamiento del modelo no se ve afectado en gran medida, pero los requisitos computacionales y de memoria se reducen significativamente.
Por ejemplo, imagine que una de las matrices de la red neuronal tiene este aspecto:
Después de la poda, podría verse así:
Los guiones (“-“) indican dónde se eliminaron los elementos durante la poda. Este modelo simplificado requiere menos recursos computacionales para funcionar.
Descomposición de matrices
La descomposición de matrices es otro método de compresión eficaz que implica dividir (o «descomponer») las matrices grandes de una red neuronal en varias matrices más pequeñas y simples.
Por ejemplo, digamos que una de las matrices de una red neuronal tiene este aspecto:
La descomposición matricial nos permite reemplazar esta única matriz grande por dos más pequeñas.
Cuando se multiplican, estas matrices más pequeñas dan el mismo resultado que la original, lo que garantiza que el comportamiento del modelo siga siendo consistente.
Esto significa que podemos reemplazar la matriz de la primera imagen con las matrices de la segunda.
La matriz original contiene 9 parámetros, pero después de la descomposición, las matrices juntas contienen solo 6, lo que resulta en una reducción de ~33%. Una de las ventajas clave de este método es su potencial para comprimir en gran medida los modelos de IA (varias veces en algunos casos).
Es importante tener en cuenta que la descomposición matricial no siempre es perfectamente precisa. A veces, se introduce un pequeño error de aproximación durante el proceso, pero las ganancias de eficiencia a menudo superan este pequeño inconveniente.
Destilación del conocimiento
La destilación de conocimientos es una técnica para construir un modelo más pequeño, conocido como «modelo de estudiante», mediante la transferencia de conocimientos de un modelo más grande y complejo, llamado «modelo de maestro». La idea clave es entrenar el modelo más pequeño junto con el más grande para que el modelo de estudiante aprenda a imitar el comportamiento del modelo de maestro.
Así es como funciona: pasas los mismos datos a través de la gran red neuronal (el profesor) y la comprimida (el estudiante). Ambos modelos producen resultados y el modelo de estudiante está entrenado para generar resultados lo más similares posible a los del profesor. De esta manera, el modelo comprimido aprende a funcionar de manera similar al modelo más grande pero con menos parámetros.
La destilación se puede combinar fácilmente con la cuantificación, la poda y la descomposición matricial, donde el modelo del profesor es la versión original y el del estudiante es el comprimido. Estas combinaciones ayudan a refinar la precisión del modelo comprimido.
En la práctica, los ingenieros suelen combinar estas técnicas para maximizar el rendimiento de sus modelos cuando los implementan en escenarios del mundo real.
La IA evoluciona por dos caminos paralelos. Por un lado, impulsa avances impresionantes en áreas como la atención sanitaria, superando los límites de lo que pensábamos que era posible. Por otro lado, adaptar la IA a las condiciones del mundo real es igualmente crucial, al llevar tecnología avanzada a la vida diaria de millones de personas, a menudo sin problemas y sin que nadie se dé cuenta. Esta dualidad refleja el impacto de la revolución de los teléfonos inteligentes, que transformó la informática de algo disruptivo y costoso en tecnología accesible y práctica para todos.
Las técnicas de optimización que se tratan en este artículo son las que utilizan los ingenieros para hacer de la IA una parte tangible de la vida cotidiana. Esta investigación está en curso, y las grandes empresas de tecnología (como Meta, Tesla o Huawei) y los laboratorios de investigación invierten importantes recursos en encontrar nuevas formas de optimizar los modelos. Sin embargo, las técnicas HPO y los métodos de compresión bien implementados ya están ayudando a ingenieros de todo el mundo a llevar los últimos modelos a escenarios y dispositivos cotidianos, creando productos impresionantes para millones de personas hoy en día e impulsando la industria hacia adelante a través de sus hallazgos publicados y de código abierto.