Phase 01 - Lesson 14
Normas y Distancias
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Tu función de distancia define lo que significa "similar". Elígela mal y todo lo que viene después se rompe.
Tipo: Construir Lenguaje: Python Requisitos previos: Fase 1, Lecciones 01 (Intuición de Álgebra Lineal), 02 (Vectores, Matrices y Operaciones) Tiempo: ~90 minutos
Objetivos de Aprendizaje
- Implementar funciones de distancia L1, L2, coseno, Mahalanobis, Jaccard y de edición desde cero
- Seleccionar la métrica de distancia apropiada para una tarea de ML dada y explicar por qué fallan las alternativas
- Conectar las normas L1 y L2 con la regularización LASSO y Ridge y sus regiones de restricción geométrica
- Demostrar cómo el mismo conjunto de datos produce vecinos más cercanos diferentes bajo métricas diferentes
El Problema
Tienes dos vectores. Quizá sean embeddings de palabras. Quizá sean perfiles de usuario. Quizá sean arreglos de píxeles. Necesitas saber: ¿qué tan cerca están?
La respuesta depende por completo de cuál función de distancia elijas. Dos puntos de datos pueden ser vecinos más cercanos bajo una métrica y estar muy lejos bajo otra. Tu clasificador KNN, tu motor de recomendación, tu base de datos vectorial, tu algoritmo de clusterización, tu función de pérdida -- todos dependen de esta elección. Equivócate y tu modelo optimiza para lo equivocado.
No existe una mejor distancia universal. L2 funciona para datos espaciales. La similitud de coseno domina el PLN. Jaccard maneja conjuntos. La distancia de edición maneja cadenas. Mahalanobis tiene en cuenta correlaciones. Wasserstein mueve masa de probabilidad. Cada una codifica una suposición diferente sobre lo que significa "similar".
Esta lección construye toda función de distancia importante desde cero, te muestra cuándo cada una es la herramienta correcta y demuestra cómo los mismos datos producen vecinos más cercanos completamente diferentes dependiendo de cuál métrica uses.
El Concepto
Normas: midiendo la magnitud de un vector
Una norma mide el "tamaño" de un vector. Toda función de distancia entre dos vectores se puede escribir como la norma de su diferencia: d(a, b) = ||a - b||. Así que entender las normas es entender las distancias.
Norma L1 (distancia de Manhattan)
La norma L1 suma los valores absolutos de todos los componentes.
||x||_1 = |x_1| + |x_2| + ... + |x_n|
Se llama distancia de Manhattan porque mide cuánto caminas en una cuadrícula de ciudad donde solo puedes moverte a lo largo de los ejes. Sin diagonales.
Point A = (1, 1)
Point B = (4, 5)
L1 distance = |4-1| + |5-1| = 3 + 4 = 7
On a grid, you walk 3 blocks east and 4 blocks north.
Cuándo usar L1:
- Datos dispersos de alta dimensión (features de texto, codificaciones one-hot)
- Cuando quieres robustez frente a outliers (una sola diferencia enorme no domina)
- Problemas de selección de features (la regularización L1 promueve la dispersión)
Conexión con la regularización L1 (Lasso): agregar ||w||_1 a tu función de pérdida penaliza la suma de los valores absolutos de los pesos. Esto empuja los pesos pequeños exactamente a cero, realizando selección automática de features. La penalización L1 crea regiones de restricción con forma de diamante en el espacio de pesos, y las esquinas de los diamantes quedan sobre los ejes donde algunos pesos son cero.
Conexión con las funciones de pérdida: el Error Absoluto Medio (MAE) es la distancia L1 promedio entre predicciones y objetivos. Penaliza todos los errores linealmente, haciéndolo robusto frente a outliers comparado con el MSE.
Norma L2 (distancia Euclidiana)
La norma L2 es la distancia en línea recta. Raíz cuadrada de la suma de los componentes al cuadrado.
||x||_2 = sqrt(x_1^2 + x_2^2 + ... + x_n^2)
Esta es la distancia que aprendiste en la clase de geometría. Pitágoras en n dimensiones.
Point A = (1, 1)
Point B = (4, 5)
L2 distance = sqrt((4-1)^2 + (5-1)^2) = sqrt(9 + 16) = sqrt(25) = 5.0
The straight line, cutting diagonally through the grid.
Cuándo usar L2:
- Datos continuos de baja a media dimensión
- Cuando las escalas de las features son comparables
- Distancias físicas (datos espaciales, lecturas de sensores)
- Similitud de imágenes a nivel de píxel
Conexión con la regularización L2 (Ridge): agregar ||w||_2^2 a tu función de pérdida penaliza los pesos grandes. A diferencia de L1, no empuja los pesos a cero. Encoge todos los pesos hacia cero de forma proporcional. La penalización L2 crea regiones de restricción circulares, así que no hay esquinas sobre los ejes. Los pesos se vuelven pequeños pero rara vez exactamente cero.
Conexión con las funciones de pérdida: el Error Cuadrático Medio (MSE) es el promedio de las distancias L2 al cuadrado. Elevar al cuadrado penaliza los errores grandes mucho más que los pequeños.
MAE (L1 loss): |y - y_hat| Linear penalty. Robust to outliers.
MSE (L2 loss): (y - y_hat)^2 Quadratic penalty. Sensitive to outliers.
Normas Lp: la familia general
L1 y L2 son casos especiales de la norma Lp:
||x||_p = (|x_1|^p + |x_2|^p + ... + |x_n|^p)^(1/p)
Diferentes valores de p producen "bolas unitarias" de formas diferentes (el conjunto de todos los puntos a distancia 1 del origen):
p=1: Diamond shape (corners on axes)
p=2: Circle/sphere (the usual round ball)
p=3: Superellipse (rounded square)
p=inf: Square/hypercube (flat sides along axes)
Norma L-infinito (distancia de Chebyshev)
A medida que p se acerca al infinito, la norma Lp converge al componente absoluto máximo.
||x||_inf = max(|x_1|, |x_2|, ..., |x_n|)
La distancia entre dos puntos está determinada por la única dimensión en la que más difieren. Todas las demás dimensiones se ignoran.
Point A = (1, 1)
Point B = (4, 5)
L-inf distance = max(|4-1|, |5-1|) = max(3, 4) = 4
Cuándo usar L-infinito:
- Cuando importa la desviación en el peor caso en cualquier dimensión individual
- Tableros de juego (un rey en ajedrez se mueve en L-infinito: un paso en cualquier dirección cuesta 1)
- Tolerancias de fabricación (toda dimensión debe estar dentro de especificación)
Similitud de Coseno y Distancia de Coseno
La similitud de coseno mide el ángulo entre dos vectores, ignorando sus magnitudes.
cos_sim(a, b) = (a . b) / (||a||_2 * ||b||_2)
Va de -1 (direcciones opuestas) a +1 (misma dirección). Los vectores perpendiculares tienen similitud de coseno 0.
La distancia de coseno la convierte en una distancia: cosine_distance = 1 - cosine_similarity. Va de 0 (dirección idéntica) a 2 (dirección opuesta).
a = (1, 0) b = (1, 1)
cos_sim = (1*1 + 0*1) / (1 * sqrt(2)) = 1/sqrt(2) = 0.707
cos_dist = 1 - 0.707 = 0.293
Por qué el coseno domina el PLN y los embeddings: en texto, la longitud del documento no debería afectar la similitud. Un documento sobre gatos que tiene el doble de longitud que otro documento sobre gatos debería seguir siendo "similar". La similitud de coseno ignora la magnitud (longitud) y solo le importa la dirección. Dos documentos con la misma distribución de palabras pero longitudes diferentes apuntan en la misma dirección y obtienen similitud de coseno 1.0.
Cuándo usar la similitud de coseno:
- Similitud de texto (vectores TF-IDF, embeddings de palabras, embeddings de oraciones)
- Cualquier dominio donde la magnitud es ruido y la dirección es señal
- Sistemas de recomendación (vectores de preferencia de usuario)
- Búsqueda por embeddings (las bases de datos vectoriales casi siempre usan coseno o producto punto)
Similitud por Producto Punto vs Similitud de Coseno
El producto punto de dos vectores es:
a . b = a_1*b_1 + a_2*b_2 + ... + a_n*b_n
= ||a|| * ||b|| * cos(angle)
La similitud de coseno es el producto punto normalizado por ambas magnitudes. Cuando ambos vectores ya están normalizados a la unidad (magnitud = 1), el producto punto y la similitud de coseno son idénticos.
If ||a|| = 1 and ||b|| = 1:
a . b = cos(angle between a and b)
Cuándo difieren: el producto punto incluye la información de magnitud. Un vector con mayor magnitud obtiene una puntuación de producto punto más alta. Esto importa en algunos sistemas de recuperación donde quieres que los items "populares" se posicionen más alto. La magnitud actúa como una señal implícita de calidad o importancia.
a = (3, 0) b = (1, 0) c = (0, 1)
dot(a, b) = 3 dot(a, c) = 0
cos(a, b) = 1.0 cos(a, c) = 0.0
Both agree on direction, but dot product also reflects magnitude.
En la práctica:
- Usa la similitud de coseno cuando quieras pura similitud direccional
- Usa el producto punto cuando las magnitudes carguen información significativa
- Muchas bases de datos vectoriales (Pinecone, Weaviate, Qdrant) te dejan elegir entre ellos
- Si tus embeddings están normalizados en L2, la elección no importa
Distancia de Mahalanobis
La distancia Euclidiana trata todas las dimensiones por igual. Pero si tus features están correlacionadas o tienen escalas diferentes, L2 da resultados engañosos.
La distancia de Mahalanobis tiene en cuenta la estructura de covarianza de los datos.
d_M(x, y) = sqrt((x - y)^T * S^(-1) * (x - y))
donde S es la matriz de covarianza de los datos.
Intuitivamente: la distancia de Mahalanobis primero descorrelaciona y normaliza los datos (blanqueo), luego calcula la distancia L2 en ese espacio transformado. Si S es la matriz identidad (features descorrelacionadas, varianza unitaria), la distancia de Mahalanobis se reduce a la distancia Euclidiana.
Example: height and weight are correlated.
Someone 6'2" and 180 lbs is not unusual.
Someone 5'0" and 180 lbs is unusual.
Euclidean distance might say they are equally far from the mean.
Mahalanobis distance correctly identifies the second as an outlier
because it accounts for the height-weight correlation.
Cuándo usar la distancia de Mahalanobis:
- Detección de outliers (los puntos con gran distancia de Mahalanobis respecto a la media son outliers)
- Clasificación cuando las features tienen escalas y correlaciones diferentes
- Cuando tienes datos suficientes para estimar una matriz de covarianza confiable
- Control de calidad en la fabricación (monitoreo multivariado de procesos)
Similitud de Jaccard (para conjuntos)
La similitud de Jaccard mide la superposición entre dos conjuntos.
J(A, B) = |A intersect B| / |A union B|
Va de 0 (sin superposición) a 1 (conjuntos idénticos). Distancia de Jaccard = 1 - similitud de Jaccard.
A = {cat, dog, fish}
B = {cat, bird, fish, snake}
Intersection = {cat, fish} size = 2
Union = {cat, dog, fish, bird, snake} size = 5
Jaccard similarity = 2/5 = 0.4
Jaccard distance = 0.6
Cuándo usar Jaccard:
- Comparar conjuntos de tags, categorías o features
- Similitud de documentos basada en la presencia de palabras (no en la frecuencia)
- Detección de casi-duplicados (aproximación MinHash de Jaccard)
- Comparar vectores de features binarias (datos de presencia/ausencia)
- Evaluar modelos de segmentación (Intersection over Union = Jaccard)
Distancia de Edición (Distancia de Levenshtein)
La distancia de edición cuenta el número mínimo de operaciones de un solo carácter necesarias para transformar una cadena en otra. Las operaciones son: insertar, eliminar o sustituir.
"kitten" -> "sitting"
kitten -> sitten (substitute k -> s)
sitten -> sittin (substitute e -> i)
sittin -> sitting (insert g)
Edit distance = 3
Se calcula usando programación dinámica. Llena una matriz donde la entrada (i, j) es la distancia de edición entre los primeros i caracteres de la cadena A y los primeros j caracteres de la cadena B.
"" s i t t i n g
"" 0 1 2 3 4 5 6 7
k 1 1 2 3 4 5 6 7
i 2 2 1 2 3 4 5 6
t 3 3 2 1 2 3 4 5
t 4 4 3 2 1 2 3 4
e 5 5 4 3 2 2 3 4
n 6 6 5 4 3 3 2 3
Cuándo usar la distancia de edición:
- Verificación y corrección ortográfica
- Alineación de secuencias de ADN (con operaciones ponderadas)
- Coincidencia difusa de cadenas (fuzzy matching)
- Deduplicación de datos de texto desordenados
Divergencia KL (no es una distancia, pero se usa como una)
La divergencia KL mide cuánto difiere una distribución de probabilidad de otra. Cubierta en la Lección 09, pero pertenece a esta discusión porque la gente la usa como una "distancia" aunque no lo es.
D_KL(P || Q) = sum(p(x) * log(p(x) / q(x)))
Propiedad crítica: la divergencia KL NO es simétrica.
D_KL(P || Q) != D_KL(Q || P)
Esto significa que falla el requisito básico de una métrica de distancia. Tampoco satisface la desigualdad triangular. Es una divergencia, no una distancia.
La KL directa (D_KL(P || Q)) es "buscadora de media": Q intenta cubrir todos los modos de P. La KL inversa (D_KL(Q || P)) es "buscadora de modo": Q se enfoca en un solo modo de P.
Cuándo ves la divergencia KL:
- VAEs (el término KL en el ELBO empuja la distribución latente hacia un prior)
- Destilación de conocimiento (el estudiante intenta imitar la distribución del profesor)
- RLHF (la penalización KL mantiene el modelo ajustado cerca del modelo base)
- Métodos de gradiente de política (restringiendo actualizaciones de política)
Distancia de Wasserstein (Distancia del Movedor de Tierra)
La distancia de Wasserstein mide el "trabajo" mínimo necesario para transformar una distribución de probabilidad en otra. Piénsala como: si una distribución es un montón de tierra y la otra es un hoyo, ¿cuánta tierra tienes que mover y qué tan lejos?
W(P, Q) = inf over all transport plans gamma of E[d(x, y)]
Para distribuciones 1D, se simplifica a la integral de la diferencia absoluta de las funciones de distribución acumulada:
W_1(P, Q) = integral |CDF_P(x) - CDF_Q(x)| dx
Por qué Wasserstein importa:
- Es una métrica verdadera (simétrica, satisface la desigualdad triangular)
- Provee gradientes incluso cuando las distribuciones no se superponen (la divergencia KL se va al infinito)
- Esta propiedad la hizo central para las Wasserstein GANs (WGANs), que resolvieron la inestabilidad de entrenamiento de las GANs originales
Distributions with no overlap:
P: [1, 0, 0, 0, 0] Q: [0, 0, 0, 0, 1]
KL divergence: infinity (log of zero)
Wasserstein: 4 (move all mass 4 bins)
Wasserstein gives a meaningful gradient. KL does not.
Cuándo usar Wasserstein:
- Entrenamiento de GAN (WGAN, WGAN-GP)
- Comparar distribuciones que pueden no superponerse
- Problemas de transporte óptimo
- Recuperación de imágenes (comparar histogramas de color)
Por qué Tareas Diferentes Necesitan Distancias Diferentes
| Tarea | Mejor distancia | Por qué |
|---|---|---|
| Similitud de texto | Coseno | La magnitud es ruido, la dirección es significado |
| Comparación de píxeles de imagen | L2 | Las relaciones espaciales importan, las features tienen escala comparable |
| Features dispersas de alta dimensión | L1 | Robusta, no amplifica diferencias grandes raras |
| Superposición de conjuntos (tags, categorías) | Jaccard | Los datos son naturalmente de conjunto, no vectoriales |
| Coincidencia de cadenas | Distancia de edición | Las operaciones mapean la intuición humana de edición |
| Detección de outliers | Mahalanobis | Tiene en cuenta correlaciones y escalas de las features |
| Comparar distribuciones | Divergencia KL | Mide la información perdida al usar Q en lugar de P |
| Entrenamiento de GAN | Wasserstein | Provee gradientes incluso cuando las distribuciones no se superponen |
| Embeddings (base vectorial) | Coseno o producto punto | Los embeddings se entrenan para codificar significado en la dirección |
| Recomendación | Producto punto | La magnitud puede codificar popularidad o confianza |
| Secuencias de ADN | Distancia de edición ponderada | Los costos de sustitución varían según el par de nucleótidos |
| Control de calidad en fabricación | L-infinito | La desviación en el peor caso en cualquier dimensión importa |
Conexión con las Funciones de Pérdida
Las funciones de pérdida son funciones de distancia aplicadas a predicciones vs objetivos.
Loss function Distance it uses Behavior
MSE L2 squared Penalizes large errors heavily
MAE L1 Penalizes all errors equally
Huber loss L1 for large errors, Best of both: robust to outliers,
L2 for small errors smooth gradient near zero
Cross-entropy KL divergence Measures distribution mismatch
Hinge loss max(0, margin - d) Only penalizes below margin
Triplet loss L2 (typically) Pulls positives close, pushes
negatives away
Contrastive loss L2 Similar pairs close, dissimilar
pairs beyond margin
Conexión con la Regularización
La regularización agrega una penalización de norma sobre los pesos a la función de pérdida.
L1 regularization (Lasso): loss + lambda * ||w||_1
-> Sparse weights. Some weights become exactly zero.
-> Automatic feature selection.
-> Solution has corners (non-differentiable at zero).
L2 regularization (Ridge): loss + lambda * ||w||_2^2
-> Small weights. All weights shrink toward zero.
-> No feature selection (nothing goes to exactly zero).
-> Smooth solution everywhere.
Elastic Net: loss + lambda_1 * ||w||_1 + lambda_2 * ||w||_2^2
-> Combines sparsity of L1 with stability of L2.
-> Groups of correlated features are kept or dropped together.
Por qué L1 produce dispersión pero L2 no: imagina la región de restricción en el espacio de pesos 2D. L1 es un diamante, L2 es un círculo. Las curvas de nivel de la función de pérdida (elipses) tienen mayor probabilidad de tocar el diamante en una esquina, donde un peso es cero. Tocan el círculo en un punto suave, donde ambos pesos son distintos de cero.
Búsqueda de Vecinos Más Cercanos
Toda función de distancia implica un problema de búsqueda de vecino más cercano: dado un punto de consulta, encuentra los puntos más cercanos en un conjunto de datos.
La búsqueda exacta de vecino más cercano es O(n * d) por consulta en un conjunto de n puntos con d dimensiones. Para conjuntos de datos grandes, esto es demasiado lento.
Los algoritmos de Vecino Más Cercano Aproximado (ANN) intercambian una pequeña cantidad de exactitud por ganancias masivas de velocidad:
Algorithm Approach Used by
KD-trees Axis-aligned space partition scikit-learn (low-dim)
Ball trees Nested hyperspheres scikit-learn (medium-dim)
LSH Random hash projections Near-duplicate detection
HNSW Hierarchical navigable FAISS, Qdrant, Weaviate
small-world graph
IVF Inverted file index with FAISS (billion-scale)
cluster-based search
Product quant. Compress vectors, search FAISS (memory-constrained)
in compressed space
HNSW (Hierarchical Navigable Small World) es el algoritmo dominante en las bases de datos vectoriales modernas. Construye un grafo de múltiples capas donde cada nodo se conecta con sus vecinos más cercanos aproximados. La búsqueda comienza en la capa superior (dispersa, saltos largos) y desciende hasta la capa inferior (densa, saltos cortos).
Construye
Paso 1: Todas las funciones de norma y distancia
Consulta code/distances.py para la implementación completa. Cada función se construye desde cero usando solo matemática básica de Python.
Paso 2: Mismos datos, distancias diferentes, vecinos diferentes
La demo en distances.py crea un conjunto de datos, elige un punto de consulta y muestra cómo el vecino más cercano cambia dependiendo de la métrica de distancia. El punto que es "el más cercano" bajo L1 puede no ser el más cercano bajo L2 o coseno.
Paso 3: Búsqueda de similitud por embedding
El código incluye una búsqueda simulada de similitud por embedding que encuentra los "documentos" más similares a una consulta usando similitud de coseno vs distancia L2, mostrando que los rankings pueden diferir.
Úsalo
El uso práctico más común: encontrar items similares en una base de datos vectorial.
import numpy as np
def cosine_similarity_matrix(X):
norms = np.linalg.norm(X, axis=1, keepdims=True)
norms = np.where(norms == 0, 1, norms)
X_normalized = X / norms
return X_normalized @ X_normalized.T
embeddings = np.random.randn(1000, 768)
sim_matrix = cosine_similarity_matrix(embeddings)
query_idx = 0
similarities = sim_matrix[query_idx]
top_k = np.argsort(similarities)[::-1][1:6]
print(f"Top 5 most similar to item 0: {top_k}")
print(f"Similarities: {similarities[top_k]}")
Cuando llamas model.encode(text) y luego buscas en una base de datos vectorial, esto es lo que pasa por debajo. El modelo de embedding mapea texto a vectores. La base de datos vectorial calcula la similitud de coseno (o producto punto) entre tu vector de consulta y cada vector almacenado, usando algoritmos ANN para evitar revisarlos todos.
Ejercicios
Calcula las distancias L1, L2 y L-infinito entre (1, 2, 3) y (4, 0, 6). Verifica que L-inf <= L2 <= L1 siempre se cumple para cualquier par de puntos. Prueba por qué este orden está garantizado.
Crea dos vectores donde la similitud de coseno es alta (> 0.9) pero la distancia L2 es grande (> 10). Explica geométricamente qué está pasando. Luego crea dos vectores donde la similitud de coseno es baja (< 0.3) pero la distancia L2 es pequeña (< 0.5).
Implementa una función que reciba un conjunto de datos y un punto de consulta y devuelva el vecino más cercano bajo distancia L1, L2, coseno y Mahalanobis. Encuentra un conjunto de datos donde los cuatro discrepen sobre cuál punto es el más cercano.
Calcula la distancia de Wasserstein entre [0.5, 0.5, 0, 0] y [0, 0, 0.5, 0.5] a mano usando el método de la CDF. Luego calcúlala entre [0.25, 0.25, 0.25, 0.25] y [0, 0, 0.5, 0.5]. ¿Cuál es mayor y por qué?
Implementa MinHash para similitud de Jaccard aproximada. Genera 100 conjuntos aleatorios, calcula el Jaccard exacto para todos los pares y compara con la aproximación MinHash usando 50, 100 y 200 funciones de hash. Grafica el error de aproximación.
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| Norma | "Tamaño de un vector" | Una función que mapea un vector a un escalar no negativo, satisfaciendo la desigualdad triangular, la homogeneidad absoluta y cero solo para el vector nulo |
| Norma L1 | "Distancia de Manhattan" | Suma de los valores absolutos de los componentes. Produce dispersión en la optimización. Robusta frente a outliers |
| Norma L2 | "Distancia Euclidiana" | Raíz cuadrada de la suma de los componentes al cuadrado. La distancia en línea recta en el espacio Euclidiano |
| Norma Lp | "Norma generalizada" | La p-ésima raíz de la suma de las p-ésimas potencias de los componentes absolutos. L1 y L2 son casos especiales |
| Norma L-infinito | "Norma del máximo" o "distancia de Chebyshev" | El valor absoluto máximo entre los componentes. El límite de Lp cuando p se acerca al infinito |
| Similitud de coseno | "Ángulo entre vectores" | Producto punto normalizado por ambas magnitudes. Va de -1 a +1. Ignora la longitud del vector |
| Distancia de coseno | "1 menos la similitud de coseno" | Convierte la similitud de coseno en una distancia. Va de 0 a 2 |
| Producto punto | "Coseno no normalizado" | Suma de los productos componente a componente. Igual a la similitud de coseno por ambas magnitudes |
| Distancia de Mahalanobis | "Distancia que conoce la correlación" | Distancia L2 en un espacio que ha sido blanqueado (descorrelacionado y normalizado) usando la matriz de covarianza de los datos |
| Similitud de Jaccard | "Superposición de conjuntos" | Tamaño de la intersección dividido por el tamaño de la unión. Para conjuntos, no vectores |
| Distancia de edición | "Distancia de Levenshtein" | Mínimo de inserciones, eliminaciones y sustituciones para transformar una cadena en otra |
| Divergencia KL | "Distancia entre distribuciones" | No es una distancia verdadera (no es simétrica). Mide los bits extra al usar Q para codificar P |
| Distancia de Wasserstein | "Distancia del movedor de tierra" | Trabajo mínimo para transportar masa de una distribución a otra. Una métrica verdadera |
| Vecino más cercano aproximado | "Búsqueda ANN" | Algoritmos (HNSW, LSH, IVF) que encuentran puntos aproximadamente más cercanos mucho más rápido que la búsqueda exacta |
| HNSW | "El algoritmo de la base vectorial" | Grafo Hierarchical Navigable Small World. Grafo de múltiples capas para búsqueda rápida de vecino más cercano aproximado |
| Regularización L1 | "Lasso" | Agregar la norma L1 de los pesos a la pérdida. Lleva los pesos a cero (dispersión) |
| Regularización L2 | "Ridge" o "weight decay" | Agregar la norma L2 al cuadrado de los pesos a la pérdida. Encoge los pesos hacia cero sin dispersión |
| Elastic Net | "L1 + L2" | Combina la regularización L1 y L2. Maneja grupos de features correlacionadas mejor que cualquiera por separado |
Lectura Adicional
- FAISS: A Library for Efficient Similarity Search - la biblioteca de Meta para búsqueda ANN a escala de miles de millones
- Wasserstein GAN (Arjovsky et al., 2017) - el paper que introdujo la distancia del movedor de tierra en las GANs
- Locality-Sensitive Hashing (Indyk & Motwani, 1998) - algoritmo ANN fundamental
- Efficient Estimation of Word Representations (Mikolov et al., 2013) - Word2Vec, donde la similitud de coseno se convirtió en el estándar para los embeddings
- sklearn.neighbors documentation - guía práctica de métricas de distancia y algoritmos de vecinos en scikit-learn