Módulo 4 · Álgebra linear
Vetores, produto escalar e similaridade
Aula 4.1 · cerca de 18 minutos
Um vetor em ℝⁿ é uma lista de n números: uma posição, uma cor RGB, um embedding de texto. Somar vetores e multiplicar por escalar funciona componente a componente.
Produto escalar
u · v = u₁v₁ + u₂v₂ + … + uₙvₙ = ‖u‖ ‖v‖ cos θ ‖u‖ = √(u · u)
O produto escalar mede o quanto dois vetores “apontam para o mesmo lado”. Se é zero, os vetores são ortogonais. Normalizando, obtemos a similaridade do cosseno, base de toda busca semântica com embeddings:
sim(u, v) = (u · v) / (‖u‖ ‖v‖) ∈ [−1, 1]
import numpy as np
def cosseno(u, v):
return u @ v / (np.linalg.norm(u) * np.linalg.norm(v))
docs = np.random.randn(10_000, 384) # 10 mil embeddings
docs /= np.linalg.norm(docs, axis=1, keepdims=True)
consulta = docs[42] + 0.1 * np.random.randn(384)
consulta /= np.linalg.norm(consulta)
top5 = np.argsort(docs @ consulta)[::-1][:5] # o índice 42 deve vir primeiroProjeção
proj_v(u) = ((u · v) / (v · v)) · v
A projeção é a “sombra” de u sobre a direção de v. Aparece em física de jogos (deslizar ao longo de uma parede), em iluminação (lei de Lambert: brilho ∝ n · l) e em mínimos quadrados.
Exercício 1
Qual é a similaridade do cosseno entre (1, 0) e (1, 1)?
Exercício 2
Um personagem se move com velocidade v = (3, −4) e bate numa parede de normal n = (0, 1). Qual é a velocidade de deslize?