Curso de Matemáticas para IA · Lección 27 de 180

Espacios vectoriales: comprueba si las representaciones de IA cumplen las reglas

Comprueba el vector cero y la clausura bajo suma y multiplicación escalar; después, usa embeddings normalizados como contraejemplo para distinguir un conjunto útil de representaciones de un espacio vectorial.

Comparte este artículo

Un proceso de embeddings puede forzar que cada vector de salida distinto de cero tenga longitud 11. Esto facilita los cálculos de similitud, pero crea una trampa sutil: las salidas normalizadas no forman un espacio vectorial con la suma de vectores y la multiplicación por escalares habituales. Si sumas dos o cambias la escala de uno, el resultado puede salir del conjunto permitido.

Esta lección convierte «espacio vectorial» en una prueba y no en una etiqueta. Al terminar, podrás comprobar el vector cero y la clausura bajo suma y multiplicación escalar; construir un contraejemplo decisivo cuando falla una regla; y explicar por qué los embeddings normalizados pertenecen a un espacio vectorial ambiente sin constituir uno por sí mismos.

Objetivo de aprendizaje: comprobar si un conjunto satisface las reglas de clausura de un espacio vectorial.

Lección 17: Las combinaciones lineales construyen nuevos vectores (en inglés) presentó la operación ax+bya\boldsymbol{x}+b\boldsymbol{y}. Lección 26: Grupos, anillos y cuerpos explican las operaciones válidas (en inglés) mostró por qué un conjunto y sus operaciones deben considerarse conjuntamente. La sección 2.4 del libro oficial Mathematics for Machine Learning formaliza esa combinación como un espacio vectorial. Las pruebas, el contraejemplo de embeddings, el código, la ilustración y los ejercicios siguientes son originales.

Un espacio vectorial garantiza que las combinaciones lineales permanecen dentro

Sea VV un conjunto cuyos elementos se llaman vectores. En un espacio vectorial real se dispone de dos operaciones:

+:V×V→V,⋅:R×V→V.+:V\times V\to V, \qquad \cdot:\mathbb{R}\times V\to V.

La primera operación suma dos vectores. La segunda multiplica un vector por un número real, o escalar. Las flechas que terminan en VV expresan la clausura: ambas operaciones deben devolver otro elemento del mismo conjunto.

La clausura por sí sola no constituye la definición completa. La suma vectorial también debe tener un vector cero e inversos aditivos; la suma debe ser asociativa y conmutativa; la multiplicación escalar debe asociarse correctamente; y deben cumplirse las conocidas reglas distributivas y de identidad.

La regla para cada escalar es exigente. Un conjunto que admite la multiplicación por 22 pero no por −1-1, o admite escalares positivos pero no el 00, no es un espacio vectorial real.

Las operaciones heredadas simplifican la prueba

La mayoría de las preguntas prácticas parte de un conjunto candidato U⊆RnU\subseteq\mathbb{R}^n que usa la suma y la multiplicación escalar ordinarias ya definidas en Rn\mathbb{R}^n. Las leyes algebraicas se heredan del espacio ambiente. Solo queda determinar si los resultados llegan a salir de UU.

Hay una asimetría importante en el uso de esta prueba:

  • Para demostrar que UU es un espacio vectorial, el argumento de clausura debe abarcar todas las entradas permitidas.
  • Para demostrar que UU no es un espacio vectorial, basta con un contraejemplo válido.

Comprobar tres vectores convenientes no demuestra la clausura universal. Encontrar un par cuya suma salga del conjunto basta para refutarla de inmediato.

Ejemplo resuelto: una restricción que se conserva en las combinaciones

Considera el conjunto

U={[x1x2]∈R2:x1+x2=0}.U=\left\{ \begin{bmatrix}x_1\\x_2\end{bmatrix}\in\mathbb{R}^2: x_1+x_2=0 \right\}.

Todo vector de UU tiene la forma [t,−t]T[t,-t]^\mathsf{T}. El vector cero pertenece a UU si se elige t=0t=0. Ahora toma vectores cualesquiera

u=[p−p],v=[q−q]\boldsymbol{u}=\begin{bmatrix}p\\-p\end{bmatrix}, \qquad \boldsymbol{v}=\begin{bmatrix}q\\-q\end{bmatrix}

and arbitrary scalars a,b∈Ra,b\in\mathbb{R}.

Para comprobarlo numéricamente, elige u=[2,−2]T\boldsymbol{u}=[2,-2]^\mathsf{T}, v=[−1,1]T\boldsymbol{v}=[-1,1]^\mathsf{T}, a=3a=3 y b=−1b=-1:

3u−v=[6−6]+[1−1]=[7−7]∈U.3\boldsymbol{u}-\boldsymbol{v} =\begin{bmatrix}6\\-6\end{bmatrix} +\begin{bmatrix}1\\-1\end{bmatrix} =\begin{bmatrix}7\\-7\end{bmatrix}\in U.

El cálculo ilustra la regla, mientras que el argumento simbólico la demuestra para todos los valores.

Los embeddings normalizados no superan la misma prueba

Ahora definamos el conjunto de longitud unitaria

S={x∈Rd:∥x∥2=1}.S=\left\{\boldsymbol{x}\in\mathbb{R}^d: \lVert\boldsymbol{x}\rVert_2=1\right\}.

Esta es la esfera unitaria del espacio vectorial ambiente Rd\mathbb{R}^d. Una biblioteca de embeddings puede devolver intencionadamente vectores de este conjunto. Por ejemplo, la documentación actual de encode de Sentence Transformers describe la opción normalize_embeddings, que normaliza los vectores devueltos a longitud 11.

En dos dimensiones, toma

e1=[10],e2=[01].\boldsymbol{e}_1=\begin{bmatrix}1\\0\end{bmatrix}, \qquad \boldsymbol{e}_2=\begin{bmatrix}0\\1\end{bmatrix}.

Ambos tienen norma euclídea 11, así que pertenecen a SS. Su suma es

e1+e2=[11],∥[11]∥2=12+12=2.\boldsymbol{e}_1+\boldsymbol{e}_2 =\begin{bmatrix}1\\1\end{bmatrix}, \qquad \left\lVert\begin{bmatrix}1\\1\end{bmatrix}\right\rVert_2 =\sqrt{1^2+1^2}=\sqrt{2}.

Como 2≠1\sqrt{2}\ne1, la suma queda fuera de SS. También falla la clausura bajo multiplicación escalar:

2e1=[20],∥2e1∥2=2.2\boldsymbol{e}_1=\begin{bmatrix}2\\0\end{bmatrix}, \qquad \lVert2\boldsymbol{e}_1\rVert_2=2.

El vector cero constituye un tercer fallo porque su norma es 00, no 11.

Contraejemplo estático de clausura

El círculo unitario no admite combinaciones lineales ordinarias

El círculo azul contiene todos los vectores bidimensionales de norma euclídea 1. Los vectores unitarios de línea continua y discontinua empiezan dentro del conjunto, mientras que su suma, un vector duplicado y el vector cero no cumplen la condición de pertenencia.

Fallos de clausura del círculo unitarioUn plano de coordenadas muestra el círculo unitario centrado en el origen. Los vectores e uno y e dos terminan en el círculo. Su suma termina fuera del círculo, dos veces e uno acaba más lejos fuera, y el cero está en el centro en vez de estar en la circunferencia.coordenada x₁coordenada x₂S: ‖x‖₂ = 1e₁ = (1, 0)e₂ = (0, 1)e₁ + e₂ = (1, 1)2e₁ = (2, 0)0 = (0, 0)
El círculo es el conjunto permitido, no todo el plano ambiente. Los distintos patrones de línea, anillos en los extremos, etiquetas y la tabla exacta permiten reconocer cada fallo de pertenencia sin depender del color.
Pruebas exactas de pertenencia representadas en el diagrama
Prueba de clausuraEntradas en SResultadoNorma del resultadoVeredicto
Sumae₁ y e₂e₁ + e₂ = (1, 1)√2Fuera de S
Multiplicación escalar2 y e₁2e₁ = (2, 0)2Fuera de S
Vector ceroIdentidad aditiva requerida0 = (0, 0)0No pertenece a S

Cualquiera de las filas basta para refutar que sea un espacio vectorial. Las tres filas muestran requisitos distintos, por lo que corregir un fallo no resolvería los demás.

La ilustración usa d=2d=2 porque la geometría cabe en una página. El mismo contraejemplo escalar funciona en cualquier dimensión: si ∥x∥2=1\lVert\boldsymbol{x}\rVert_2=1, entonces ∥2x∥2=2\lVert2\boldsymbol{x}\rVert_2=2. Por tanto, los embeddings normalizados a longitud unitaria en Rd\mathbb{R}^d no son un espacio vectorial con las operaciones habituales.

Volver a normalizar cambia la operación

Un proceso habitual suma o promedia embeddings normalizados y después vuelve a normalizar el resultado. El procedimiento puede ser útil, pero la normalización final es una nueva operación no lineal:

normalize⁡(x+y)=x+y∥x+y∥2,\operatorname{normalize}(\boldsymbol{x}+\boldsymbol{y}) =\frac{\boldsymbol{x}+\boldsymbol{y}} {\lVert\boldsymbol{x}+\boldsymbol{y}\rVert_2},

siempre que el denominador no sea cero. La suma sin normalizar primero sale de la esfera unitaria; la normalización la devuelve. Volver a llevar el resultado a SS no hace que SS sea cerrado bajo la operación de suma original.

El caso cero importa. Si y=−x\boldsymbol{y}=-\boldsymbol{x}, then x+y=0\boldsymbol{x}+\boldsymbol{y}=\boldsymbol{0}, y dividirlo por su norma implicaría dividir por cero. La implementación necesita una política explícita para las filas nulas o casi nulas.

La documentación de linalg.norm de NumPy especifica los controles axis y keepdims que se usan a continuación para calcular una norma por embedding y conservar una forma de columna compatible con la difusión:

import numpy as np


def normalize_rows(vectors):
    vectors = np.asarray(vectors, dtype=float)
    norms = np.linalg.norm(vectors, axis=1, keepdims=True)
    normalized = np.divide(
        vectors,
        norms,
        out=np.zeros_like(vectors),
        where=norms > 0,
    )
    return normalized


embeddings = np.array([
    [3.0, 4.0],
    [-4.0, 3.0],
    [0.0, 0.0],
])

normalized = normalize_rows(embeddings)
print(normalized)
print(np.linalg.norm(normalized, axis=1))

La salida es

[[ 0.6  0.8]
 [-0.8  0.6]
 [ 0.   0. ]]
[1. 1. 0.]

Las dos primeras filas quedan en el círculo unitario. La fila cero permanece en cero porque la función usa deliberadamente ese valor como alternativa técnica. Ese valor pertenece a R2\mathbb{R}^2, pero no a SS, por lo que no se debe afirmar que todas las salidas tengan norma unitaria.

Una revisión fiable de la clausura analiza las operaciones reales

Cuando la descripción de un modelo llama «espacio» a un conjunto de representaciones, identifica el conjunto y sus operaciones antes de suponer que tiene estructura lineal. Los embeddings sin procesar pueden pertenecer a Rd\mathbb{R}^d. Los embeddings normalizados a longitud unitaria están en una esfera. Los vectores de probabilidad con coordenadas no negativas que suman 11 están en otro conjunto restringido. Todos pueden servir para algoritmos útiles, pero la suma ordinaria y la multiplicación por cualquier escalar real no necesariamente mantienen el resultado dentro del conjunto.

La lección siguiente estudia los subespacios: subconjuntos restringidos que sí superan la prueba de clausura y, por tanto, conservan la estructura lineal ambiente. Antes de continuar, usa las preguntas siguientes para practicar cómo demostrar la clausura universal y detectar fallos decisivos.

Comprueba lo que has aprendido

Pregunta 1

Para un subconjunto no vacío de Rⁿ con las operaciones vectoriales habituales, ¿qué tres comprobaciones de pertenencia establecen que es un espacio vectorial?

Mostrar la solución paso a paso

Primero, comprueba que el vector cero pertenece al conjunto. Segundo, elige x\boldsymbol{x} e y\boldsymbol{y} cualesquiera del conjunto y demuestra que x+y\boldsymbol{x}+\boldsymbol{y} sigue en él. Tercero, elige un escalar real aa y un x\boldsymbol{x} cualquiera del conjunto y demuestra que axa\boldsymbol{x} sigue en él. Las demás leyes del espacio vectorial se heredan de Rn\mathbb{R}^n.

Pregunta 2

Demuestra que U = {(t, −t): t ∈ R} es cerrado bajo la combinación lineal a u + b v.

Mostrar la solución paso a paso

Toma u=(p,−p)\boldsymbol{u}=(p,-p) y v=(q,−q)\boldsymbol{v}=(q,-q) cualesquiera de UU, con aa y bb reales cualesquiera. Entonces

au+bv=(ap+bq,−ap−bq).a\boldsymbol{u}+b\boldsymbol{v} =(ap+bq,-ap-bq).

Define t=ap+bqt=ap+bq. El resultado es (t,−t)(t,-t), que coincide con la forma que define UU. Como las entradas y los escalares eran arbitrarios, esto demuestra la clausura y no solo comprueba un ejemplo.

Pregunta 3

Usa e₁ = (1, 0) y e₂ = (0, 1) para refutar la clausura bajo suma de los vectores normalizados a longitud unitaria.

Mostrar la solución paso a paso

Ambas entradas tienen norma 11, por lo que pertenecen al conjunto normalizado a longitud unitaria. Su suma es (1,1)(1,1) y su norma es 12+12=2\sqrt{1^2+1^2}=\sqrt{2}, que no es 11. Así, dos elementos válidos producen un resultado fuera del conjunto. Un solo par como este refuta la clausura bajo suma.

Pregunta 4

¿Multiplicar cada vector unitario por −1 refuta la clausura escalar? Si no, elige un escalar que sí lo haga.

Mostrar la solución paso a paso

No. Si ∥x∥2=1\lVert\boldsymbol{x}\rVert_2=1, entonces ∥−x∥2=1\lVert-\boldsymbol{x}\rVert_2=1, por lo que el escalar −1-1 mantiene cada vector unitario en la esfera. Sin embargo, la clausura escalar debe cumplirse para todo escalar real. Al elegir a=2a=2, se obtiene ∥2x∥2=2\lVert2\boldsymbol{x}\rVert_2=2, así que 2x2\boldsymbol{x} queda fuera de la esfera unitaria y refuta la clausura.

Pregunta 5

¿Por qué la normalización por filas debe tratar explícitamente el vector cero?

Mostrar la solución paso a paso

La fórmula habitual divide x\boldsymbol{x} por ∥x∥2\lVert\boldsymbol{x}\rVert_2. Para x=0\boldsymbol{x}=\boldsymbol{0}, la norma es 00, así que la fórmula exige dividir por cero y no está definida. El código debe detectar ese caso y elegir una política documentada, como devolver cero, producir un error o filtrar la fila. Devolver cero es práctico en algunos procesos, pero el resultado no está normalizado a longitud unitaria.

Pregunta 6

Un proceso calcula el promedio de dos embeddings unitarios y lo normaliza. ¿Por qué eso no demuestra que la esfera unitaria sea un espacio vectorial?

Mostrar la solución paso a paso

Primero se calcula el promedio ordinario: m=(x+y)/2\boldsymbol{m}=(\boldsymbol{x}+\boldsymbol{y})/2. Su norma no tiene por qué ser 11, por lo que esta combinación lineal puede salir de la esfera. Después, el proceso aplica el mapa de normalización independiente m/∥m∥2\boldsymbol{m}/\lVert\boldsymbol{m}\rVert_2 para devolverla a la esfera. La clausura evalúa la suma y la multiplicación escalar originales; añadir un paso correctivo cambia la operación estudiada.

Pregunta 7

El cuadrante no negativo Q = {(x₁, x₂): x₁ ≥ 0 y x₂ ≥ 0} contiene el cero y es cerrado bajo la suma. ¿Es Q un espacio vectorial real?

Mostrar la solución paso a paso

No. Elige x=(1,0)\boldsymbol{x}=(1,0), que pertenece a QQ, y el escalar real a=−1a=-1. Entonces ax=(−1,0)a\boldsymbol{x}=(-1,0), cuya primera coordenada es negativa, así que el resultado queda fuera de QQ. El conjunto no cumple la clausura escalar aunque contenga el cero y sea cerrado bajo la suma.

Fuentes

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.linalg.norm
  4. Sentence Transformers documentation: SentenceTransformer.encode