paint-brush
Visualización del espacio latente — Bits de aprendizaje profundo #2por@juliendespois
74,725 lecturas
74,725 lecturas

Visualización del espacio latente — Bits de aprendizaje profundo #2

por Julien Despois2017/02/23
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

<em>Destacado</em> : interpolación, proyección t-SNE (¡con gifs y ejemplos!)

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Visualización del espacio latente — Bits de aprendizaje profundo #2
Julien Despois HackerNoon profile picture

Destacado : interpolación, proyección t-SNE (¡con gifs y ejemplos!)

En la serie " Bits de aprendizaje profundo ", no veremos cómo usar el aprendizaje profundo para resolver problemas complejos de principio a fin como lo hacemos en AI Odyssey . Preferiremos ver diferentes técnicas, junto con algunos ejemplos y aplicaciones. ¡No olvide consultar los bits de aprendizaje profundo n.º 1 !

Si te gusta la Inteligencia Artificial, ¡asegúrate de suscribirte al boletín para recibir actualizaciones sobre artículos y mucho más!

Introducción

La última vez , vimos qué son los codificadores automáticos y cómo funcionan. Hoy veremos cómo pueden ayudarnos a visualizar los datos de maneras muy interesantes. Para ello, trabajaremos sobre imágenes, utilizando la arquitectura Convolutional Autoencoder ( CAE ).

¿Cuál es el espacio latente de nuevo?

Un codificador automático está hecho de dos componentes, aquí hay un recordatorio rápido. El codificador trae los datos de una entrada de alta dimensión a una capa de cuello de botella , donde la cantidad de neuronas es la más pequeña. Luego, el decodificador toma esta entrada codificada y la vuelve a convertir a la forma de entrada original, en nuestro caso, una imagen. El espacio latente es el espacio en el que se encuentran los datos en la capa de cuello de botella.

Arquitectura de codificador-decodificador convolucional

El espacio latente contiene una representación comprimida de la imagen, que es la única información que el decodificador puede usar para tratar de reconstruir la entrada con la mayor fidelidad posible . Para funcionar bien, la red tiene que aprender a extraer las características más relevantes del cuello de botella.

¡Veamos qué podemos hacer!

el conjunto de datos

Cambiaremos los conjuntos de datos de la última vez. En lugar de mirar mis ojos o cuadrados azules , trabajaremos en probablemente el más famoso para la visión por computadora: el conjunto de datos MNIST de dígitos escritos a mano. Por lo general, prefiero trabajar con conjuntos de datos menos convencionales solo por diversidad, pero MNIST es realmente conveniente para lo que haremos hoy.

Nota: Aunque las visualizaciones de MNIST son bastante comunes en Internet, las imágenes de esta publicación se generan al 100 % a partir del código, por lo que puede usar estas técnicas con sus propios modelos.

MNIST es un conjunto de datos etiquetados de imágenes de 28x28 de dígitos escritos a mano

Línea de base: rendimiento del codificador automático

Para comprender qué tipo de características es capaz de extraer el codificador de las entradas, primero podemos observar las imágenes reconstruidas. Si esto te suena familiar , es normal, ya lo hicimos la última vez. Sin embargo, este paso es necesario porque establece la línea de base para nuestras expectativas del modelo.

Nota: Para esta publicación, la capa de cuello de botella tiene solo 32 unidades , lo cual es una reducción de dimensionalidad realmente brutal . Si fuera una imagen, ni siquiera tendría 6x6 píxeles.

Cada dígito se muestra junto a su reconstrucción borrosa

Podemos ver que el codificador automático reconstruye con éxito los dígitos. La reconstrucción es borrosa porque la entrada está comprimida en la capa de cuello de botella. La razón por la que necesitamos echar un vistazo a las muestras de validación es para asegurarnos de que no estamos sobreajustando el conjunto de entrenamiento.

Bono : Aquí está la animación del proceso de entrenamiento.

Reconstrucción de muestras de entrenamiento (izquierda) y validación (derecha) en cada paso

visualización t-SNE

¿Qué es t-SNE?

Lo primero que queremos hacer cuando trabajamos con un conjunto de datos es visualizar los datos de una manera significativa . En nuestro caso, el espacio de la imagen (o píxel) tiene 784 dimensiones (28_*28*1_), y claramente no podemos trazar eso. El desafío es exprimir toda esta dimensionalidad en algo que podamos captar, en 2D o 3D .

Aquí viene t-SNE , un algoritmo que asigna un espacio dimensional alto a un espacio 2D o 3D, mientras intenta mantener la misma distancia entre los puntos. Usaremos esta técnica para trazar incrustaciones de nuestro conjunto de datos, primero directamente desde el espacio de la imagen y luego desde el espacio latente más pequeño .

Nota: t-SNE es mejor para la visualización que sus primos PCA e ICA .

Proyectar el espacio de píxeles

Comencemos trazando la incrustación t-SNE de nuestro conjunto de datos (desde el espacio de la imagen) y veamos cómo se ve.

Proyección t-SNE de representaciones de espacio de imagen del conjunto de validación

Ya podemos ver que algunos números están más o menos agrupados . Esto se debe a que el conjunto de datos es realmente simple* y podemos usar heurística simple en píxeles para clasificar las muestras. Mire cómo no hay un grupo para los dígitos 8, 5, 7 y 3 , eso es porque todos están hechos de los mismos píxeles , y solo los diferencian cambios menores.

*En datos más complejos, como imágenes RGB , los únicos grupos serían imágenes del mismo color general .

Proyectar el espacio latente

Sabemos que el espacio latente contiene una representación más simple de nuestras imágenes que el espacio de píxeles**,** por lo que podemos esperar que t-SNE nos brinde una interesante proyección 2D del espacio latente .

Proyección t-SNE de representaciones de espacio latente del conjunto de validación

Aunque no es perfecta , la proyección muestra cúmulos más densos . Esto muestra que en el espacio latente, los mismos dígitos están cerca uno del otro. Podemos ver que los dígitos 8, 7, 5 y 3 ahora son más fáciles de distinguir y aparecen en pequeños grupos.

Interpolación

Ahora que sabemos qué nivel de detalle es capaz de extraer el modelo, podemos sondear la estructura del espacio latente. Para hacer eso, compararemos cómo se ve la interpolación en el espacio de la imagen , versus el espacio latente .

Interpolación lineal en el espacio de la imagen

Comenzamos tomando dos imágenes del conjunto de datos e interpolando linealmente entre ellas. Efectivamente, esto mezcla las imágenes de una manera fantasmal .

Interpolación en el espacio de píxeles

La razón de esta transición desordenada es la estructura del propio espacio de píxeles. Simplemente no es posible pasar sin problemas de una imagen a otra en el espacio de la imagen. Esta es la razón por la que mezclar la imagen de un vaso vacío y la imagen de un vaso lleno no dará la imagen de un vaso medio lleno .

Interpolación lineal en el espacio latente

Ahora, hagamos lo mismo en el espacio latente. Tomamos las mismas imágenes de inicio y final y las alimentamos al codificador para obtener su representación de espacio latente. Luego interpolamos entre los dos vectores latentes y los alimentamos al decodificador .

Interpolación en el espacio latente

El resultado es mucho más convincente . En lugar de tener una superposición desvanecida de los dos dígitos, vemos claramente que la forma se transforma lentamente de uno a otro. Esto muestra qué tan bien el espacio latente comprende la estructura de las imágenes.

Bonificación: aquí hay algunas animaciones de la interpolación en ambos espacios

Interpolación lineal en espacio de imagen (izquierda) y espacio latente (derecha)

Más técnicas y ejemplos

Ejemplos de interpolación

En conjuntos de datos más ricos y con un mejor modelo, podemos obtener imágenes increíbles .

Interpolación de espacio latente de 3 vías para caras

Interpolación de formas 3D

Aritmética del espacio latente

También podemos hacer aritmética en el espacio latente**.** Esto significa que en lugar de interpolar, podemos sumar o restar representaciones de espacio latente.

Por ejemplo con rostros, hombre con anteojos - hombre sin anteojos + mujer sin anteojos = mujer con anteojos. Esta técnica da resultados alucinantes.

Aritmética en formas 3D

Nota: puse una función para eso en el código, pero se ve terrible en MNIST.

Conclusiones

En esta publicación, hemos visto varias técnicas para visualizar las funciones aprendidas incrustadas en el espacio latente de una red neuronal de autocodificador. Estas visualizaciones ayudan a comprender lo que la red está aprendiendo. A partir de ahí, podemos explotar el espacio latente para agrupamiento , compresión y muchas otras aplicaciones.

Si te gusta la Inteligencia Artificial, ¡asegúrate de suscribirte al boletín para recibir actualizaciones sobre artículos y mucho más!

Puedes jugar con el código de allí:


GitHub - despoisj/LatentSpaceVisualization: Técnicas de visualización del espacio latente de un… _LatentSpaceVisualization - Técnicas de visualización del espacio latente de un autocodificador convolucional en Keras_github.com

Gracias por leer esta publicación, ¡estén atentos para más!