La computación intensa es un problema bien conocido en varios algoritmos de aprendizaje automático en la actualidad, especialmente cuando la IA generativa se aplica a texto, imágenes y otros datos no estructurados.
Uno de los principales enfoques para mitigar este problema es comprimir los datos de entrada en una representación de dimensiones inferiores preservando al mismo tiempo el contexto principal. Existen varios métodos para lograr este objetivo, incluidos los codificadores automáticos, que analizaremos en este artículo.
Para simplificar, en este artículo nos centraremos en los codificadores automáticos basados en imágenes, pero recuerde que también se pueden aplicar a otros tipos de datos.
Idea
Los codificadores automáticos son un tipo de red neuronal que se utiliza para el aprendizaje no supervisado. Su arquitectura consta de tres componentes principales:
Codificador. La primera parte de la red neuronal que toma datos de entrada y reduce gradualmente su dimensionalidad a través de sus capas, hasta llegar finalmente al cuello de botella. Embotellamiento. La capa de red con la dimensionalidad más pequeña que contiene la representación latente de los datos de entrada. Descifrador. La parte de la red conectada a la salida del cuello de botella que expande gradualmente la dimensionalidad de los datos. Como resultado, en su última capa, devuelve datos del mismo tamaño que se pasaron inicialmente al codificador.
Para las imágenes, el codificador y el decodificador suelen presentarse como redes neuronales convolucionales.
En los codificadores automáticos, nuestro objetivo final durante el entrenamiento es hacer que la red transforme los datos de entrada en una representación más comprimida en el cuello de botella sin perder demasiada información. Durante la inferencia, podemos pasar los datos al codificador, extraer la incrustación resultante del cuello de botella y luego utilizarla para nuestros propios fines.
Entendamos cómo funciona la capacitación en codificadores automáticos.
Capacitación
¡Lo mejor de los codificadores automáticos es que no requieren ningún dato etiquetado! Veamos cómo funcionan.
Como se mencionó anteriormente, una imagen de entrada se pasa a la red, donde se comprime a un tamaño más pequeño y luego se reconstruye a la dimensión original. La pregunta que debemos hacernos es qué queremos que produzca el decodificador.
Como habrás adivinado, el decodificador puede simplemente intentar reconstruir la imagen original a partir de la representación comprimida en el cuello de botella. ¿Por qué hacerlo?
La idea detrás de esto es simple:
Si la representación comprimida del cuello de botella captura bien las características principales de la entrada del codificador, entonces debería ser relativamente fácil para el decodificador usar esa información para reconstruir la imagen original. Si el cuello de botella no logra capturar las características principales, el decodificador no podrá reconstruir de manera confiable la imagen original. Por lo tanto, el modelo será penalizado por una mala representación comprimida.
De esta manera, al pedirle al decodificador que reconstruya la imagen original, implícitamente obligamos al codificador a producir una representación latente rica pero comprimida, lo que ayuda al decodificador a realizar su tarea de manera eficiente.
El espacio al que se proyectan los datos de entrada en el cuello de botella se denomina espacio latente.
Pérdida de reconstrucción
Dada la imagen original y la imagen reconstruida del decodificador, ¿cuál es la forma más sencilla de comparar la calidad generada? La respuesta obvia es comparar las dos imágenes por píxeles utilizando la pérdida MSE, que, en el contexto de los codificadores automáticos, se denomina pérdida de reconstrucción.
Luego, el valor de pérdida calculado se utiliza para realizar una retropropagación para actualizar los pesos del modelo.
Dimensión del espacio latente
La dimensión del espacio latente es un hiperparámetro importante que afecta directamente el rendimiento del decodificador.
Por un lado, la dimensión del espacio latente debería ser suficiente para codificar de manera eficiente las características de entrada clave. Por otro lado, no debe ser demasiado grande para mantener una tasa de compresión alta.
Un ejemplo bien conocido es la difusión estable. Utiliza un codificador automático para transformar la imagen de entrada, 512 x 512 x 3, que contiene 786.432 valores, en una imagen de 64 x 64 x 4 con 16.384 valores, lo que da como resultado una relación de compresión de 48x.
Otras aplicaciones de codificador automático
Un truco para entrenar codificadores automáticos es hacer que aprendan a eliminar el ruido de las imágenes. La idea es simple: dado que los codificadores automáticos son buenos para reconstruir imágenes originales, podríamos agregar un ligero ruido a las imágenes de entrada y luego pedirles que reconstruyan las imágenes originales.
Lo bueno de este método es que, para el entrenamiento, basta con tener sólo las imágenes originales, a las que luego se les aplicará ruido.
Otra aplicación interesante de los codificadores automáticos es la pintura de imágenes, que implica pasar imágenes con parches enmascarados a un modelo para que pueda desenmascarar y completar las partes faltantes de la imagen.
De manera similar, se pueden entrenar codificadores automáticos para eliminar objetos específicos de las imágenes. Esto es particularmente útil para eliminar marcas de agua.
problema de azulado
En realidad, a pesar de su simplicidad, la pérdida MSE no es perfecta para los codificadores automáticos. Un problema común al usarlo es la tendencia del decodificador a generar imágenes con píxeles borrosos.
Por ejemplo, podríamos imaginar una imagen de tamaño 512 x 512 con dos regiones verticales en blanco y negro que no se superpongan. Luego tomamos una fila horizontal de esa imagen cuyos píxeles se ven así:
[… 0 0 255 255 255 …]
El modelo no tiene ningún conocimiento de la estructura de la imagen; sólo intenta minimizar la pérdida de MSE. Incluso si, para esa imagen, un modelo hiciera una predicción como [… 0 0 0 255 255 …]lo cual sigue siendo muy bueno porque la región se desplaza solo un píxel, la pérdida de MSE en este caso sería mayor que en el siguiente caso, que un modelo podría preferir:
[… 0 0 127 255 255 …]
En el último escenario, a pesar del MSE más bajo, el píxel del medio representa un borde borroso, que resulta visualmente poco atractivo.
Este problema se soluciona en variaciones de codificadores automáticos más avanzados con funciones de pérdida ajustadas.
Conclusión
Como podemos ver, los codificadores automáticos son un concepto simple pero poderoso. Al entrenar el decodificador para que reconstruya la imagen original a partir de datos comprimidos, ajustamos gradualmente el codificador para producir características más informativas que luego se pueden extraer para tareas posteriores.
Además de la compresión de datos, vimos que los codificadores automáticos tienen otras aplicaciones, como eliminar ruido de imágenes, pintar imágenes y eliminar objetos de las imágenes.
Todas las imágenes, a menos que se indique lo contrario, son del autor.