Producto punto de vectores -- de la proyección a la multiplicación

El producto punto (dot product) es la operación vectorial más utilizada en IA.

El cálculo de las capas totalmente conectadas y la coincidencia de similitud en el mecanismo de atención — su núcleo es el producto punto.

El producto punto tienedos perspectivas equivalentes, y entender el puente entre ellas es la conclusión principal de este capítulo.

Perspectiva 1: Cálculo algebraico

Multiplica los elementos en posiciones correspondientes y luego suma.

\( \mathbf{a} \cdot \mathbf{b} = \sum a_i b_i \)

Por ejemplo: (2,3) · (4,1) = 2×4 + 3×1 = 11

Perspectiva 2: Intuición geométrica

Proyecta un vector sobre el otro y luego multiplica las dos longitudes.

\( \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos\theta \)

Cuanto menor es el ángulo θ, mayor es el producto punto

Ambos métodos dan el mismo valor — esta es una ecuación extremadamente elegante en matemáticas.

El signo del producto punto revela la relación de dirección

<90°
Producto punto > 0
Direcciones aproximadamente iguales
=90°
Producto punto = 0
Direcciones perpendiculares (ortogonales)
>90°
Producto punto < 0
Direcciones aproximadamente opuestas

Ejemplo de la vida real

Factura de compra: cantidad × precio unitario

Compraste 2 botellas de cola (3 yuanes cada una), 3 bolsas de papas fritas (5 yuanes cada una) y 1 tazón de fideos instantáneos (4 yuanes cada uno).

El producto punto del vector de cantidades (2, 3, 1) y el vector de precios (3, 5, 4) es el precio total: 2×3 + 3×5 + 1×4 = 25 yuanes.

Empujar el carrito: fuerza × desplazamiento

La fuerza con la que empujas el carrito es un vector (con magnitud y dirección), y el desplazamiento del carrito es otro vector.

En física, trabajo = componente de la fuerza en la dirección del desplazamiento × magnitud del desplazamiento = producto punto del vector fuerza y el vector desplazamiento.

Si empujas hacia un lado (dirección perpendicular), no haces ningún trabajo: el producto punto es cero.


Definición matemática

Definición algebraica

\[ \mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n \]

Definición geométrica

\[ \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos\theta \]

El puente entre las dos definiciones: calcular el ángulo

\[ \cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} \]

Esto significa:Dadas las coordenadas de dos vectores, se puede calcular el ángulo entre ellos sin necesidad de un transportador.。

Propiedades de la operación

PropiedadFórmulaDescripción
Conmutatividad\( \mathbf{a} \cdot \mathbf{b} = \mathbf{b} \cdot \mathbf{a} \)El orden no afecta
Distributividad\( \mathbf{a} \cdot (\mathbf{b} + \mathbf{c}) = \mathbf{a}\cdot\mathbf{b} + \mathbf{a}\cdot\mathbf{c} \)Se puede sumar primero y luego hacer el producto punto
Producto punto consigo mismo\( \mathbf{a} \cdot \mathbf{a} = \|\mathbf{a}\|^2 \)El producto punto de un vector consigo mismo = el cuadrado de su magnitud

Práctica con Python

Ejemplo

import numpy as np

a_ejemplo = np.array([2, 3, 1])
b_ejemplo = np.array([4, 1, 2])

# Método 1: np.dot()
dot1 = np.dot(a_ejemplo, b_ejemplo)
# Método 2: operador @ (recomendado)
dot2 = a_ejemplo @ b_ejemplo
# Método 3: verificación manual
dot3 = sum(a_ejemplo[i] * b_ejemplo[i] for i in range(len(a_ejemplo)))

print("a · b =", dot1)   # 13
print("Los tres métodos dan el mismo resultado:", dot1 == dot2 == dot3)

# Calcular el ángulo usando la definición geométrica
norm_a = np.linalg.norm(a_ejemplo)
norm_b = np.linalg.norm(b_ejemplo)
cos_theta = dot1 / (norm_a * norm_b)
theta_deg = np.degrees(np.arccos(cos_theta))
print(f"||a||={norm_a:.2f}, ||b||={norm_b:.2f}, cosθ={cos_theta:.4f}")
print(f"Ángulo = {theta_deg:.1f}°")

# Verificar la fórmula geométrica
verify = norm_a * norm_b * cos_theta
print(f"||a||·||b||·cosθ = {verify:.4f} (coincide con el producto punto)")

# Demostración con diferentes ángulos
print("\n[1,0] · [0.8,0.6] =", np.array([1,0]) @ np.array([0.8,0.6]), " (ángulo agudo, positivo)")
print("[1,0] · [0,1] =", np.array([1,0]) @ np.array([0,1]), " (ángulo recto, cero)")
print("[1,0] · [-1,0] =", np.array([1,0]) @ np.array([-1,0]), " (ángulo obtuso, negativo)")
a · b = 13
三种方法结果一致: True
||a||=3.74, ||b||=4.58, cosθ=0.7580
夹角 = 40.7°

[1,0] · [0.8,0.6] = 0.8  (锐角,正)
[1,0] · [0,1] = 0  (直角,零)
[1,0] · [-1,0] = -1.0  (钝角,负)

Demostración interactiva del producto punto

Arrastra los extremos de los vectores a y b, y observa cómo cambian el valor del producto punto y el ángulo. El signo del producto punto determina si el ángulo es agudo/obtuso/recto:


Escenarios de aplicación en IA

Capa totalmente conectada = cálculo por lotes del producto punto

Una neurona calcula \( y = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b \). La parte de la suma es elproducto punto del vector de pesos w y el vector de entrada x.。

Cuando ves una capa totalmente conectadann.Linear(784, 256), lo que hace matemáticamente es: 256 neuronas, cada neurona toma su propio vector de pesos (784 dimensiones) y hace el producto punto con el vector de entrada, luego suma el sesgo. 256 productos punto en paralelo = multiplicación de matrices.

Mecanismo de atención = producto punto + Softmax

La operación central del Transformer: el vector Query y el vector Key hacen un producto punto; cuanto mayor es el resultado, más "relevantes" son entre sí.

\[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

\( QK^T \) es la multiplicación de una matriz de seq_len × d_k por una matriz de d_k × seq_len; el valor en la posición (i, j) de la matriz resultante = elproducto puntoentre el i-ésimo Query y el j-ésimo Key. Cuanto mayor es este valor, mayor es la "atención" de la posición i hacia la posición j.

Dividir por \( \sqrt{d_k} \) es para evitar que los valores del producto punto sean demasiado grandes y provoquen la desaparición del gradiente en Softmax. Todos los modelos de lenguaje grandes modernos como GPT, BERT, Claude se basan en este mecanismo de atención por producto punto.

Cálculo de similitud en sistemas de recomendación

El producto punto entre el vector del usuario y el vector del artículo produce la "puntuación de preferencia" del usuario por ese artículo. Este es el núcleo del algoritmo de recomendación por factorización de matrices: la matriz de calificaciones ≈ matriz de vectores latentes de usuarios × transpuesta de la matriz de vectores latentes de artículos.


Otras extensiones