En este artículo vamos a explicar de manera divulgativa si realmente hay un espacio donde se establezca el conocimiento de una inteligencia artificial, es decir podría ser algo similar a un espacio de conocimiento sobre algo concreto en nuestro cerebro. Por ejemplo, si hablamos de coches, rápidamente nosotros podemos pensar en un coche como objeto abstracto y hacer una visualización en nuestra cabeza, que probablemente no sea igual al resto de personas que preguntemos.

Partiendo de esta idea, ¿Qué es un espacio latente en IA? Pues simplemente podemos definirlo como una representación de datos comprimidos.

Imaginaros que tenemos unas imágenes de caras de personas famosas con una resolución (dimensión) de 128×128 pixeles, esto nos daría 49152 dimensiones. Imposible representar esto gráficamente, cuando nuestro cerebro de primate únicamente puede visualizar en el espacio 3 dimensiones. ¿Y si hubiese una técnica usando redes neuronales que fuese capaz de reducir cada una de estas imágenes a 3 dimensiones guardando sus características principales?

Por lo tanto, si esto ocurre podríamos observar en uno ejes de 3 dimensiones como están situadas nuestras imágenes y ver la cercanía o alejamiento que tienen entre ellas gracias a su similitud, es decir que personas de la misma raza estén más cerca unas de otras por su color de piel, forma de la cara, color de ojos, etc…

Todo esto que es muy interesante se puede realizar con varias técnicas de reducción de dimensionalidad, como es PCA (Análisis de componentes principales), pero en este articulo os quiero hablar de otra técnica que nos aporta algo más que simplemente la reducción y visualización de las imágenes.

Imaginar si dentro de esos 3 ejes, donde tenemos todas nuestras caras de personajes famosos, nos pudiéramos mover libremente, es decir no solo entre los puntos (caras) que ya conocemos, sino entre puntos completamente nuevos…

¿se generarían caras nuevas? La respuesta es sí, aunque con matices. Aquí es donde entran en acción los codificadores automáticos (Autoencoders)

Los codificadores automáticos o más conocidos con su nombre en inglés Autoencoders, son redes neuronales artificiales capaces de aprender representaciones densas de los datos de entrada, llamadas representaciones latentes o codificaciones, sin ninguna supervisión (es decir, el conjunto de entrenamiento no está etiquetado). Estas codificaciones suelen tener una dimensionalidad mucho menor que los datos de entrada, lo que hace que los codificadores automáticos sean útiles para la reducción de la dimensionalidad, especialmente para fines de visualización.

Los autoencoders también actúan como detectores de características y se pueden usar para el entrenamiento previo no supervisado de redes neuronales profundas. Pero una de sus funciones más interesantes es la de modelos generativos: son capaces de generar aleatoriamente nuevos datos que se parecen mucho a los datos de entrenamiento. Por ejemplo, tal y como hemos realizado en esta práctica entrenar un autoencoder con imágenes de caras para posteriormente generar caras nuevas partiendo de esa pequeña dimensionalidad, en este caso un punto en 3 dimensiones. Sin embargo, las imágenes generadas suelen ser borrosas y no del todo realistas. Actualmente hay mejores técnicas para la generación de imágenes como son las llamadas Redes Generativas Adversarias (GANs), redes que explicaremos en futuros artículos.

Como se puede ver en la imagen de arriba, un autoencoder está formado por tres componentes.

  • Codificador: El codificador (la parte izquierda de nuestra red) es una red neuronal alimentada por nuestra imagen original y completamente conectada que comprime la entrada en una representación de espacio latente y como una representación comprimida en una dimensión reducida. La imagen comprimida es la versión distorsionada de la imagen original.
  • Cuello: Es la parte central de la red y contiene la representación reducida de la entrada que se alimenta al decodificador (parte derecha).
  • Decodificador: El decodificador también es una red de alimentación directa como el codificador y tiene una estructura similar a la del codificador, pero a la inversa. Esta red es responsable de reconstruir la entrada a las dimensiones originales del código.

Sin entrar en muchos detalles de como aprende esta red, podemos decir que su proceso de aprendizaje está en lo reconstrucción de las entradas y en la comparación del valor de perdida gracias a la función de coste, es decir, cada vez que hay una nueva generación de imagen se compara con la original y analizan sus valores de pérdida (errores) para que en el procedimiento de aprendizaje (backpropagation) se modifiquen esos pesos y se vuelva a generar una nueva imagen, un “poco” mejor que la anterior.

Debido a que la representación interna tiene una dimensionalidad más baja que los datos de entrada (en nuestro ejemplo pasamos una imagen de 128×128 a pixeles a un punto de 3 dimensiones (x,y,z) ), se dice que el codificador automático está incompleto. Un codificador automático incompleto no puede copiar trivialmente sus entradas a las codificaciones, pero debe encontrar una manera de generar una copia de sus entradas, por lo tanto, se ve obligado a aprender las características más importantes en los datos de entrada (y eliminar las que no son importantes).

Como conclusión podemos decir que el concepto de espacio latente es definitivamente intrigante, está «oculto» en muchas de nuestras redes de procesamiento de imágenes favoritas, modelos generativos, etc.

Aunque el espacio latente está oculto para la mayoría, hay ciertas tareas en las que comprenderlo no solo es útil, sino necesario.

La representación del espacio latente de nuestros datos contiene toda la información importante y necesaria para representar nuestro punto de datos original.

Esta representación debe entonces representar las características de los datos originales. En otras palabras, el modelo aprende las características de los datos y simplifica su representación para facilitar su análisis.

Este es el núcleo de un concepto llamado aprendizaje de representación, definido como un conjunto de técnicas que permiten que un sistema descubra las representaciones necesarias para la detección o clasificación de características a partir de datos sin procesar.