Chocolatada informacional

Supongamos que el vector $u$ codifica cierta información A y el vector $v$ (de la misma dimensión), la información B. Hay quien sostiene que, entonces, el vector $u + v$ codifica simultáneamente A y B. En esta entrada voy a demostrar que la afirmación anterior es falsa. Luego, también, que es cierta. Terminaré explicando por qué el asunto es relevante.

Que es falsa es obvio: si $u$ y $v$ tienen dimensión 1, $u = 2$ y $v = 3$, a partir de la suma $u + v = 5$ es imposible recomponer los vectores originales.

Que es cierta es algo a lo que estamos inconscientemente acostumbrados. Un programa de radio es una onda electromagnética que puede codificarse, muestreando adecuadamente, mediante un vector. Otro programa de radio simultáneo de otra emisora es otro vector. Lo que llega a mi casa es la suma de ambos (y de otras muchas emisiones e interferencias). Pero mi aparato de radio es capaz de reconstruir los vectores individualmente: puedo escuchar una u otra emisión indistintamente.

Pero, ¿por qué es relevante? En el mundo de los LLMs (y no solo), lo de sumar vectores para combinar fuentes de información es poco más o menos un truco rutinario que se aplica y —se explica— sin mayor cualificación. Por ejemplo, en el ya clásico Attention is all you need se lee

Notas:

  • Otros autores usan versiones distintas de lo anterior, p.e., ¡eliminando directamente las funciones trigonométricas!.
  • Interesante la demostración que se ofrece en el artículo, ¿no?

Lo que está sucediendo es algo como lo que se cuenta a continuación. Supongamos que en el contexto del LLM están los tokens (en ese orden) $t_1, t_2, \dots, t_n$ con embeddings asociados $v_1, v_2, \dots, v_n$. En el bloque de atención del decodificador (y también del codificador), lo que se procesa no son los vectores $v_1, v_2, \dots, v_n$ directamente, que no tienen información posicional (es decir, sobre el orden en el que aparecen en el contexto) sino los vectores $v_1 + f(1), v_2 + f(2), \dots, v_n + f(n)$ para una cierta función $f$ de la posición que ocupa el token en el contexto. Con la esperanza, casualísimamente satisfecha, de que el vector resultante combine tanto la información semántica contenida en los embeddings como la posicional aportada por el vector $f(i)$. O eso dicen.

En fin.