Visualizaciones de Embeddings

Embeddings Visualizations

Hay más de una manera de visualizar datos de alta dimensión. Aquí, volvemos a la historia de la IA para explorar la evolución de estas visualizaciones.

Presenté mi primer artículo sobre IA en 1990 en una conferencia pequeña y local, la “Midwest Artificial Intelligence and Cognitive Science Society”. En aquellos días, el campo de la IA estaba completamente definido por la investigación en “símbolos”. Este enfoque se conocía como “Inteligencia Artificial Antigua y Buena” o GOFAI (pronunciado “go fi” como en “wifi”). Aquellos de nosotros que trabajábamos en lo que ahora se conoce como “Deep Learning” teníamos que argumentar realmente que lo que estábamos investigando incluso debería considerarse como IA.

Ser excluido de la IA era una espada de doble filo. Por un lado, no estaba de acuerdo con la mayoría de los principios básicos de lo que se definía como IA en ese momento. La suposición básica era que los “símbolos” y el “procesamiento de símbolos” debían ser la base de toda IA. Así que estaba feliz de estar trabajando en un área que ni siquiera se consideraba IA. Por otro lado, era difícil encontrar personas dispuestas a escuchar tus ideas si no las presentabas como al menos relacionadas con la IA.

Esta pequeña conferencia aceptaba trabajos sobre “IA” y “Ciencia Cognitiva”, lo cual vi como una invitación para ideas más allá del simple “procesamiento simbólico”. Así que presenté mi primer artículo, ¡y fue aceptado! El artículo presentaba un enfoque de redes neuronales para el manejo del lenguaje natural. Muchos de nosotros en esta área llamábamos a este tipo de investigación de redes neuronales “conexionismo”, pero hoy en día este tipo de investigación, como mencioné, se etiquetaría como “Deep Learning” (DL) aunque mi investigación inicial no era muy profunda… ¡solo tres capas! Los sistemas modernos de DL pueden estar compuestos por cientos de capas.

Mi artículo fue aceptado en la conferencia, y lo presenté en Carbondale, Illinois en 1990. Más tarde, el organizador de la conferencia, John Dinsmore, me invitó a enviar una versión del artículo para un libro que estaba preparando. No pensé que podría escribir un artículo por mi cuenta, así que le pedí a dos amigos de la universidad (Lisa Meeden y Jim Marshall) que se unieran a mí. Lo hicieron, y terminamos con un capítulo en el libro. El libro se titulaba “Los Paradigmas Simbólico y Conexionista: Cerrando la Brecha”. Nuestro artículo encajaba perfectamente con el tema del libro. Titulamos nuestro artículo “Explorando el continuo simbólico/subsimbólico: Un estudio de caso de RAAM”. Para mi deleite, el libro se centraba en esta división entre estos dos enfoques de la IA. Creo que el campo todavía está luchando con esta división hasta el día de hoy.

Diré más sobre esa investigación inicial mía más adelante. Por ahora quiero hablar sobre cómo el campo estaba lidiando con la visualización de “incrustaciones” o “embeddings”. En ese momento, no llamábamos a estos vectores “incrustaciones”. La mayoría de las investigaciones utilizaban una frase como “representaciones de capas ocultas”. Esto incluía cualquier representación interna que un sistema conexionista hubiera aprendido para resolver un problema. Como los definimos en ese entonces, había tres tipos de capas: “entrada” (donde se ingresaba el conjunto de datos), “salida” (donde se colocan las salidas deseadas o “objetivos”) y todo lo demás: las capas “ocultas”. Las capas ocultas son donde fluyen las activaciones de la red entre la entrada y la salida. Las activaciones de las capas ocultas a menudo son de alta dimensionalidad y son las representaciones de los “conceptos” aprendidos por la red.

Al igual que hoy en día, visualizar estos vectores de alta dimensión se consideraba útil para obtener una comprensión de cómo funcionan estos sistemas y, muchas veces, cómo fallan. En nuestro capítulo del libro, utilizamos tres tipos de visualizaciones:

  1. Los llamados “Diagramas de Hinton”
  2. Diagramas de Clúster o Dendrogramas
  3. Proyección en un espacio 2D

El primer método fue una idea recién creada utilizada por Hinton y Shallice en 1991. (Ese es el mismo Geoffrey Hinton que conocemos hoy en día. Más sobre él en un artículo futuro). Este diagrama es una idea simple con utilidad limitada. La idea básica es que las activaciones, los pesos o cualquier tipo de datos numéricos pueden representarse mediante cajas: cajas blancas (que representan típicamente números positivos) y cajas negras (que representan típicamente números negativos). Además, el tamaño de la caja representa la magnitud de un valor en relación con los valores máximos y mínimos en la neurona simulada.

Aquí está la representación de nuestro artículo que muestra las “incrustaciones” promedio en la capa oculta de la red como una representación de las palabras que se presentaban a la red:

Figura 10 de nuestro artículo.

El diagrama de Hinton ayuda a visualizar patrones en los datos. Pero realmente no ayuda a entender las relaciones entre las representaciones, ni ayuda cuando el número de dimensiones es mucho mayor. Las incrustaciones modernas pueden tener miles de dimensiones.

Para resolver esos problemas, recurrimos al segundo método: diagramas de agrupamiento o dendogramas. Estos son diagramas que muestran la distancia (sin importar cómo esté definida) entre dos patrones como un árbol jerárquico. Aquí hay un ejemplo de nuestro artículo utilizando la distancia euclidiana:

Figura 9 de nuestro artículo.

Esta es la misma información que se muestra en el Diagrama de Hinton, pero en un formato mucho más útil. Aquí podemos ver las relaciones internas entre los patrones individuales y los patrones generales. Ten en cuenta que el orden vertical no es relevante: la posición horizontal de los puntos de ramificación es el aspecto significativo del diagrama.

En el dendograma anterior, construimos la imagen general a mano, dada la agrupación jerárquica calculada por un programa. Hoy en día, existen métodos para construir automáticamente dicho árbol e imagen. Sin embargo, el diagrama puede volverse difícil de entender cuando el número de patrones es mucho mayor que unas pocas docenas. Aquí hay un ejemplo hecho hoy con matplotlib. Puedes leer más sobre la API aquí: dendograma de matplotlib.

Dendograma moderno con un gran número de patrones. Imagen realizada por el autor.

Finalmente, llegamos al último método, y el que se utiliza predominantemente hoy en día: el método de proyección. Este método utiliza un algoritmo para encontrar una forma de reducir el número de dimensiones de la incrustación en un número que pueda ser comprendido más fácilmente por los humanos (por ejemplo, 2 o 3 dimensiones) y representarlo como un diagrama de dispersión.

En ese momento, en 1990, el método principal para proyectar datos de alta dimensionalidad en un conjunto menor de dimensiones era el Análisis de Componentes Principales (o PCA, por sus siglas en inglés). La reducción dimensional es un área de investigación activa, con nuevos métodos que aún se están desarrollando.

Quizás los algoritmos más utilizados para la reducción de dimensiones hoy en día son:

  1. PCA
  2. t-SNE
  3. UMAP

¿Cuál es el mejor? Realmente depende de los detalles de los datos y de tus objetivos para crear la reducción en dimensiones.

En general, PCA es probablemente el mejor método, ya que es determinista y te permite crear un mapeo desde el espacio de alta dimensión al espacio reducido. Esto es útil para entrenar con un conjunto de datos y luego examinar dónde se proyecta un conjunto de datos de prueba en el espacio aprendido. Sin embargo, PCA puede verse afectado por datos no escalados y puede resultar en una “bola de puntos” que ofrece poco conocimiento sobre los patrones estructurales.

t-SNE, que significa t-distributed Stochastic Neighbor Embedding, fue creado por Roweis y Hinton (sí, ese Hinton) en 2002. Esta es una proyección aprendida y puede aprovechar datos no escalados. Sin embargo, una desventaja de t-SNE es que no crea un mapeo, sino que es simplemente un método de aprendizaje en sí mismo para encontrar un agrupamiento. Es decir, a diferencia de otros algoritmos que tienen los métodos Projection.fit() y Projection.transform(), t-SNE solo puede realizar un ajuste. (Hay algunas implementaciones, como openTSNE, que proporcionan un mapeo de transformación. Sin embargo, openTSNE parece ser muy diferente a otros algoritmos, es lento y tiene menos soporte que otras formas.)

Finalmente, está UMAP, Uniform Manifold Approximation and Projection. Este método fue creado en 2018 por McInnes y Healy. Puede ser el mejor compromiso para muchos espacios de alta dimensión, ya que es relativamente computacionalmente económico y, sin embargo, es capaz de preservar estructuras representativas importantes en las dimensiones reducidas.

Aquí tienes un ejemplo de los algoritmos de reducción de dimensiones aplicados a los datos de cáncer de mama sin escalar disponibles en sklearn:

Ejemplo de reducciones dimensionales entre tres métodos de proyección, PCA, t-SNE y UMAP. Imagen realizada por el autor.

Puedes probar los algoritmos de reducción de dimensiones tú mismo para encontrar el mejor para tu caso de uso, y crear imágenes como las anteriores utilizando Kangas DataGrid.

Como se mencionó, la reducción dimensional es todavía un área de investigación activa. Espero ver continuas mejoras en esta área, incluyendo la visualización del flujo de información a medida que se mueve a lo largo de una red de Aprendizaje Profundo. Aquí hay un ejemplo final de nuestro capítulo del libro que muestra cómo fluyen las activaciones en el espacio de representación de nuestro modelo:

Figura 7 de nuestro artículo. Activaciones de la capa oculta en pasos individuales de la sección de decodificación de la red neuronal.

¿Interesado en saber de dónde provienen las ideas en Inteligencia Artificial, Aprendizaje Automático y Ciencia de Datos? Considera aplaudir y suscribirte. ¡Déjame saber en qué estás interesado!