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

Las normas vectoriales miden el tamaño, no el significado

Calcula las normas vectoriales L1, L2 y L-infinity, comprueba sus reglas definitorias y descubre qué puede y qué no puede revelar la magnitud de un embedding.

Comparte este artículo

Dos vectores embedding pueden apuntar en la misma dirección y, aun así, tener magnitudes distintas. Por ejemplo, (3,4)(3,4) y (6,8)(6,8) son versiones escaladas: el segundo es el doble de largo. Una norma convierte un vector en un número no negativo que resume su tamaño según una regla concreta. Ese número puede ayudar a comparar escalas o describir una penalización de parámetros, pero no clasifica la importancia semántica de un embedding.

Al terminar esta lección, podrás calcular las normas vectoriales L1L_1, L2L_2 y L∞L_\infty, comprobar las propiedades que convierten una función en norma y usar NumPy para calcular tamaños de vectores sin confundir un conjunto de vectores con una sola matriz.

Resultado de aprendizaje: Calcular normas vectoriales comunes y comprobar sus propiedades.

Esta lección parte de la Lección 014: Vectores como datos de IA, donde las coordenadas eran características en un orden fijo. La sección 3.1 de Mathematics for Machine Learning presenta las normas como formas de medir la longitud de un vector. Los ejemplos, el código, la visualización y las evaluaciones de esta lección son originales.

Una norma es una regla de tamaño con tres promesas

Sean xx e yy vectores de Rn\mathbb{R}^n, y sea cc cualquier número real. Una función ∥⋅∥\lVert\cdot\rVert es una norma vectorial si cumple estas tres reglas:

La primera regla dice que el tamaño de un vector no puede ser negativo y que solo el vector cero tiene tamaño cero. La segunda indica que multiplicar un vector por un número negativo también multiplica su tamaño por el valor absoluto de ese escalar. La tercera establece que la suma de dos vectores no puede tener un tamaño mayor que la suma de sus tamaños por separado.

Tres reglas habituales aplicadas al mismo vector

Para x=(x1,…,xn)x=(x_1,\ldots,x_n), las normas habituales son

∥x∥1=∑i=1n∣xi∣,∥x∥2=∑i=1nxi2,∥x∥∞=max⁡i∣xi∣.\lVert x\rVert_1=\sum_{i=1}^n |x_i|,\qquad \lVert x\rVert_2=\sqrt{\sum_{i=1}^n x_i^2},\qquad \lVert x\rVert_\infty=\max_i |x_i|.

El subíndice indica la regla. L1L_1 suma los tamaños absolutos de las coordenadas, L2L_2 usa la longitud euclídea habitual y L∞L_\infty toma la coordenada con mayor valor absoluto. Son tres resúmenes distintos del mismo vector; sus coordenadas no cambian.

Tomemos el vector x=(3,−4)x=(3,-4). Que la segunda coordenada sea negativa importa para algunas operaciones, pero estas reglas de tamaño utilizan valores absolutos o cuadrados:

La bola unidad euclídea es el conjunto de vectores de dos coordenadas cuya norma L2L_2 no supera uno. El punto (0.6,0.8)(0.6,0.8) está en su borde porque 0.62+0.82=1\sqrt{0.6^2+0.8^2}=1.

La bola unidad euclídea contiene vectores de longitud como máximo 1Todos los puntos dentro del círculo o sobre él tienen una norma L₂ no superior a 1. El vector marcado, (0.6, 0.8), llega al borde.
La bola unidad euclídea contiene vectores de longitud como máximo 1Una región circular sombreada con centro en el origen. El eje horizontal es x uno y el vertical es x dos. Un vector desde el origen hasta el borde termina en el punto etiquetado (0.6, 0.8).x₁x₂origenx(0.6, 0.8)longitud 1

Bola unidad L₂: ‖x‖₂ ≤ 1

La región sombreada representa una regla, no solo una forma: contiene el origen y todos los vectores cuya longitud L2L_2 no supera uno. En el borde, la longitud es exactamente uno. En dimensiones mayores, el mismo conjunto también se llama bola, aunque ya no se pueda dibujar como un disco.

Comprueba las tres promesas

La positividad definida se deduce directamente de cada fórmula. Una suma de valores absolutos o de cuadrados solo puede valer cero si todas las coordenadas son cero. El máximo de valores absolutos también solo vale cero cuando todas las coordenadas son cero. Cada fórmula es no negativa y devuelve cero para el vector cero.

Para comprobar la homogeneidad absoluta, toma x=(3,−4)x=(3,-4) y multiplícalo por c=−2c=-2:

−2x=(−6,8),∥−2x∥1=14=2⋅7,∥−2x∥2=10=2⋅5,∥−2x∥∞=8=2⋅4.-2x=(-6,8),\qquad \lVert -2x\rVert_1=14=2\cdot7,\quad \lVert -2x\rVert_2=10=2\cdot5,\quad \lVert -2x\rVert_\infty=8=2\cdot4.

El valor absoluto de cc es esencial. Un escalar negativo invierte la dirección del vector, pero la longitud no se vuelve negativa.

También se puede comprobar la desigualdad triangular a partir de las fórmulas. Para L1L_1, se cumple ∣xi+yi∣≤∣xi∣+∣yi∣|x_i+y_i|\le |x_i|+|y_i| en cada coordenada; al sumar esas desigualdades se obtiene ∥x+y∥1≤∥x∥1+∥y∥1\lVert x+y\rVert_1\le\lVert x\rVert_1+\lVert y\rVert_1. Para L2L_2, se trata del conocido hecho geométrico de que un lado de un triángulo no supera la suma de los otros dos. Para L∞L_\infty,

∥x+y∥∞=max⁡i∣xi+yi∣≤max⁡i(∣xi∣+∣yi∣)≤max⁡i∣xi∣+max⁡i∣yi∣.\lVert x+y\rVert_\infty =\max_i|x_i+y_i| \le\max_i(|x_i|+|y_i|) \le\max_i|x_i|+\max_i|y_i|.

Por tanto, cada norma supera las tres comprobaciones. Un ejemplo numérico puede poner a prueba si entiendes una regla, mientras que el razonamiento anterior explica por qué se cumple para todos los vectores.

Calcula tamaños vectoriales con NumPy

NumPy ofrece estos cálculos mediante numpy.linalg.norm. Para un array unidimensional, especifica ord para elegir una norma vectorial:

import numpy as np

x = np.array([3.0, -4.0])
print(np.linalg.norm(x, ord=1))
print(np.linalg.norm(x, ord=2))
print(np.linalg.norm(x, ord=np.inf))

La salida es 7.0, 5.0 y 4.0. Si se omite ord en un array unidimensional, el valor predeterminado es la norma L2L_2.

Una tabla de embeddings suele ser un array bidimensional, con un embedding por fila. Para obtener una norma L2L_2 por embedding, especifica el eje de las filas:

embeddings = np.array([[3.0, 4.0], [6.0, 8.0]])
row_norms = np.linalg.norm(embeddings, ord=2, axis=1)
print(row_norms)

La salida es [5. 10.]. La norma del segundo vector duplica la del primero, aunque ambos apunten en la misma dirección. Con una entrada bidimensional y sin axis, NumPy interpreta la entrada como una matriz; una norma matricial no equivale a calcular una norma vectorial para cada fila. La documentación describe axis como la dimensión a lo largo de la cual se calculan las normas vectoriales.

Una norma vectorial indica el tamaño de una representación según la regla elegida para sus coordenadas. No indica que un embedding más grande sea más relevante, preciso o importante desde el punto de vista semántico. Para llegar a esas conclusiones hacen falta una tarea específica del modelo y su evaluación; la magnitud escalar por sí sola no basta.

Una penalización de parámetros está relacionada con una norma, pero no siempre es la norma misma

Una función objetivo de optimización puede añadir un término que penalice vectores de parámetros ww grandes. Por ejemplo, una penalización L1L_1 añade λ∥w∥1\lambda\lVert w\rVert_1, mientras que una penalización L2L_2 al cuadrado añade λ∥w∥22\lambda\lVert w\rVert_2^2, con λ≥0\lambda\ge0 como peso de la penalización. Para w=(3,−4)w=(3,-4), ∥w∥1=7\lVert w\rVert_1=7, mientras que ∥w∥22=25\lVert w\rVert_2^2=25.

El cuadrado de la segunda expresión importa: ∥w∥22\lVert w\rVert_2^2 no es una norma. La homogeneidad de una norma escala el valor por ∣c∣|c|, no por c2c^2: ∥cw∥22=c2∥w∥22\lVert cw\rVert_2^2=c^2\lVert w\rVert_2^2. Además, las dos fórmulas de penalización tienen escalas numéricas distintas, así que usar el mismo λ\lambda no hace que sus efectos sean comparables. La norma vectorial explica qué mide una penalización; la función objetivo y su coeficiente determinan cómo afecta esa medida al entrenamiento.

Hay un detalle del software que conviene tener presente. El parámetro ord de NumPy admite valores menores que 1 con fines numéricos, pero su documentación indica explícitamente que esos resultados no son normas matemáticas. Por ejemplo, si f(x)=(∑i∣xi∣1/2)2f(x)=(\sum_i|x_i|^{1/2})^2, entonces f((1,0))=1f((1,0))=1 y f((0,1))=1f((0,1))=1, mientras que f((1,1))=4f((1,1))=4. Como 4>1+14>1+1, falla la desigualdad triangular. Usa ord=0.5 cuando necesites específicamente esa expresión numérica, no cuando quieras una norma vectorial con las tres garantías anteriores.

Una vez claras las propiedades y la diferencia de implementación, el siguiente paso es comparar las geometrías que producen distintas normas válidas y cómo esas elecciones cambian las ideas de distancia y restricción.

Comprueba lo que has aprendido

Question 1

¿Qué tres propiedades debe cumplir una función para ser una norma vectorial?

Show the step-by-step solution

Una norma es positiva definida, absolutamente homogénea y cumple la desigualdad triangular. La positividad definida indica que su valor no es negativo y solo es cero para el vector cero. La homogeneidad absoluta requiere ∥cx∥=∣c∣∥x∥\lVert cx\rVert=|c|\lVert x\rVert. La desigualdad triangular exige ∥x+y∥≤∥x∥+∥y∥\lVert x+y\rVert\le\lVert x\rVert+\lVert y\rVert para cualquier par de vectores.

Question 2

Para x = (2, −1, 2), calcula sus normas L₁, L₂ y L-infinity. Muestra las operaciones.

Show the step-by-step solution

Para L1L_1, suma los valores absolutos de las coordenadas: ∣2∣+∣−1∣+∣2∣=5|2|+|-1|+|2|=5. Para L2L_2, calcula la raíz cuadrada de la suma de cuadrados: 22+(−1)2+22=9=3\sqrt{2^2+(-1)^2+2^2}=\sqrt{9}=3. Para L∞L_\infty, toma el mayor valor absoluto, que es 22. Por tanto, los tres valores son 55, 33 y 22.

Question 3

Sea x = (3, −4). Calcula las tres normas de −2x y comprueba la homogeneidad absoluta en cada caso.

Show the step-by-step solution

Primero, −2x=(−6,8)-2x=(-6,8). Su norma L1L_1 es 6+8=146+8=14, que coincide con ∣−2∣∥x∥1=2⋅7|-2|\lVert x\rVert_1=2\cdot7. Su norma L2L_2 es 36+64=10=2⋅5\sqrt{36+64}=10=2\cdot5. Su norma L∞L_\infty es 8=2⋅48=2\cdot4. Las tres coinciden con la norma original multiplicada por ∣−2∣|-2|, así que el escalar negativo cambia la dirección sin hacer que el tamaño sea negativo.

Question 4

Para u = (1, −2) y v = (−3, 1), comprueba la desigualdad triangular L₁ calculando ambos lados.

Show the step-by-step solution

Primero suma los vectores: u+v=(−2,−1)u+v=(-2,-1), por lo que ∥u+v∥1=2+1=3\lVert u+v\rVert_1=2+1=3. Por separado, ∥u∥1=1+2=3\lVert u\rVert_1=1+2=3 y ∥v∥1=3+1=4\lVert v\rVert_1=3+1=4, de modo que el lado derecho es 3+4=73+4=7. Así, 3≤73\le7. Este ejemplo cumple la desigualdad; la desigualdad del valor absoluto en cada coordenada explica por qué se cumple para cualquier par en L1L_1.

Question 5

¿Por qué f(x) = (Σᵢ |xᵢ|^(1/2))² no es una norma? Pruébala con (1, 0) y (0, 1).

Show the step-by-step solution

Cada uno de los dos vectores coordenados tiene f=1f=1. Su suma es (1,1)(1,1), para la que f((1,1))=(1+1)2=4f((1,1))=(1+1)^2=4. La desigualdad triangular exigiría 4≤1+14\le1+1, lo cual es falso. Por tanto, esta función incumple una de las propiedades necesarias de una norma. NumPy admite este tipo de resultado ord < 1 para usos numéricos, pero su documentación no lo denomina norma matemática.

Question 6

Para embeddings = [[3, 4], [6, 8]], ¿qué expresión de NumPy devuelve una norma L₂ por fila y cuáles son los resultados?

Show the step-by-step solution

Las dos filas son vectores distintos, así que hay que calcular a lo largo del eje de las coordenadas de cada fila: np.linalg.norm(embeddings, ord=2, axis=1). El primer resultado es 32+42=5\sqrt{3^2+4^2}=5; el segundo, 62+82=10\sqrt{6^2+8^2}=10. La salida es [5. 10.]. Al fijar axis=1 se evita tratar todo el array bidimensional como una sola norma matricial.

Question 7

Para w = (3, −4), calcula la penalización L₁ y la penalización L₂ al cuadrado cuando λ = 0.1. ¿La cantidad L₂ al cuadrado es una norma en sí misma?

Show the step-by-step solution

La penalización L1L_1 es 0.1⋅(3+4)=0.70.1\cdot(3+4)=0.7. La penalización L2L_2 al cuadrado es 0.1⋅(32+(−4)2)=0.1⋅25=2.50.1\cdot(3^2+(-4)^2)=0.1\cdot25=2.5. La cantidad al cuadrado no es una norma: al multiplicar ww por cc, cambia por un factor c2c^2, mientras que la homogeneidad de una norma exige un factor ∣c∣|c|.

Question 8

Los embeddings (3, 4) y (6, 8) tienen normas L₂ de 5 y 10. ¿Qué demuestra esta comparación y qué no permite concluir sobre su significado?

Show the step-by-step solution

Demuestra que, con las coordenadas dadas, la magnitud euclídea del segundo vector duplica la del primero. Además, ambos vectores apuntan en la misma dirección porque (6,8)=2(3,4)(6,8)=2(3,4). Sus normas por sí solas no permiten determinar cuál embedding es más relevante o más importante semánticamente; para eso hacen falta el contexto de entrenamiento del modelo y una evaluación adecuada para la tarea.

Fuentes

  1. Mathematics for Machine Learning book PDF, Section 3.1
  2. NumPy documentation: numpy.linalg.norm