Voltar para o blog

A Beleza da Álgebra Linear

#Matemática#Python#AI

Introdução

A Álgebra Linear é frequentemente chamada de "o cavalo de batalha" da ciência de dados. Sem ela, não teríamos redes neurais, processamento de imagem ou até mesmo este website.

A ideia central é simples e poderosa: quando organizamos números em vetores e matrizes, ganhamos uma linguagem capaz de descrever transformações geométricas, sistemas de equações e modelos estatísticos de forma compacta, e, principalmente, eficiente para um computador calcular.

Neste artigo vamos partir do conceito mais básico, o vetor, e construir progressivamente até entender por que toda rede neural moderna é, no fundo, uma sequência de multiplicações de matrizes.

O Conceito de Vetor

Um vetor não é apenas uma seta no espaço. Em computação, é uma lista ordenada de números:

v=[123]\mathbf{v} = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}

Cada número é uma componente, e a quantidade de componentes define a dimensão do vetor. O vetor acima vive em R3\mathbb{R}^3 (o espaço tridimensional).

Em Machine Learning, um vetor costuma representar um único exemplo de dado. Imagine descrever uma casa por três atributos: área, número de quartos e idade:

casa=[120315]\mathbf{casa} = \begin{bmatrix} 120 \\ 3 \\ 15 \end{bmatrix}

Cada feature (característica) vira uma componente. É assim que transformamos o mundo real em algo que um algoritmo consegue processar.

Código em Python

Podemos representar isso facilmente com NumPy:

import numpy as np

v = np.array([1, 2, 3])
print(f"O meu vetor: {v}")
print(f"Dimensão: {v.shape}")

Operações Fundamentais

Duas operações sustentam quase tudo na área: a soma de vetores e a multiplicação por escalar.

u+v=[u1u2u3]+[v1v2v3]=[u1+v1u2+v2u3+v3]\mathbf{u} + \mathbf{v} = \begin{bmatrix} u_1 \\ u_2 \\ u_3 \end{bmatrix} + \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix} = \begin{bmatrix} u_1 + v_1 \\ u_2 + v_2 \\ u_3 + v_3 \end{bmatrix}

Quando multiplicamos um vetor por um número (escalar), estamos esticando ou encolhendo a seta sem mudar sua direção:

2v=[246]2 \cdot \mathbf{v} = \begin{bmatrix} 2 \\ 4 \\ 6 \end{bmatrix}
u = np.array([1, 0, 2])
v = np.array([3, 1, 1])

print("Soma:        ", u + v)
print("Escalar 2*v: ", 2 * v)

O Produto Escalar

O produto escalar (dot product) combina dois vetores em um único número e é a peça mais reutilizada de toda a Álgebra Linear aplicada:

uv=i=1nuivi=u1v1+u2v2++unvn\mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{n} u_i v_i = u_1 v_1 + u_2 v_2 + \dots + u_n v_n

Ele responde a uma pergunta geométrica fundamental: o quão alinhados dois vetores estão, porque se relaciona com o ângulo θ\theta entre eles:

uv=uvcosθ\mathbf{u} \cdot \mathbf{v} = \|\mathbf{u}\|\, \|\mathbf{v}\| \cos\theta

É exatamente esse cálculo que mede a similaridade entre um texto e uma busca, ou entre dois usuários num sistema de recomendação.

u = np.array([1, 0, 2])
v = np.array([3, 1, 1])

print("Produto escalar:", np.dot(u, v))   # 1*3 + 0*1 + 2*1 = 5

Matrizes: Vários Vetores de Uma Vez

Uma matriz é uma grade retangular de números ou, de forma mais útil, uma coleção de vetores empilhados. Um conjunto de dados (dataset) inteiro é uma matriz: cada linha é um exemplo, cada coluna é uma feature.

X=[1203158523020045]X = \begin{bmatrix} 120 & 3 & 15 \\ 85 & 2 & 30 \\ 200 & 4 & 5 \end{bmatrix}

Aqui temos três casas (linhas) descritas por três features (colunas).

A Multiplicação de Matrizes

A operação mais importante é o produto de matrizes. Para multiplicar AA (de tamanho m×nm \times n) por BB (de tamanho n×pn \times p), cada elemento do resultado é um produto escalar entre uma linha de AA e uma coluna de BB:

(AB)ij=k=1nAikBkj(AB)_{ij} = \sum_{k=1}^{n} A_{ik} B_{kj}

O detalhe que todo iniciante precisa memorizar: o número de colunas da primeira matriz deve ser igual ao número de linhas da segunda. O resultado terá o formato m×pm \times p.

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

B = np.array([[5, 6],
              [7, 8]])

# Em NumPy, o operador @ faz a multiplicação de matrizes
print(A @ B)
# [[19 22]
#  [43 50]]

A Ponte com o Machine Learning

Agora a recompensa. Considere um modelo de regressão linear, que prevê um valor a partir de features. Para um único exemplo, a previsão é:

y^=w1x1+w2x2++wnxn+b=wx+b\hat{y} = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b = \mathbf{w} \cdot \mathbf{x} + b

Repare: a previsão é um produto escalar entre os pesos w\mathbf{w} (o que o modelo aprende) e as features x\mathbf{x} (o dado de entrada).

E quando queremos prever todos os exemplos do dataset de uma só vez, basta uma multiplicação de matrizes:

y^=Xw+b\hat{\mathbf{y}} = X \mathbf{w} + b

Não há laço de repetição percorrendo casa por casa. Uma única operação matricial calcula tudo. É por isso que GPUs, otimizadas para multiplicar matrizes gigantescas, revolucionaram a área.

# Dataset: 3 casas, 2 features (área, nº de quartos)
X = np.array([[120, 3],
              [85,  2],
              [200, 4]])

# Pesos aprendidos pelo modelo e o viés (bias)
w = np.array([1000, 50000])
b = 20000

# Uma linha calcula a previsão para TODAS as casas
y_hat = X @ w + b
print("Preços previstos:", y_hat)

E as Redes Neurais?

Uma rede neural é, essencialmente, várias camadas dessas multiplicações encadeadas, com uma função de ativação não-linear σ\sigma entre elas:

a=σ(Wx+b)\mathbf{a} = \sigma\big(W \mathbf{x} + \mathbf{b}\big)

Empilhe dezenas dessas camadas e você terá os modelos que reconhecem imagens, traduzem idiomas e geram texto. Por baixo de toda essa complexidade, continua sendo Álgebra Linear.

Conclusão

Começamos com uma simples lista de números e chegamos ao coração das redes neurais. A beleza da Álgebra Linear está justamente nisso: poucos conceitos como vetor, produto escalar e multiplicação de matrizes, combinam-se para descrever desde a geometria do espaço até os modelos de IA mais avançados.

Da próxima vez que treinar um modelo, lembre-se: você não está apenas ajustando parâmetros, está dançando com vetores e matrizes em espaços de dimensão altíssima.

Próximo passo: explore autovalores e autovetores a base de técnicas como o PCA (Análise de Componentes Principais), usadas para reduzir a dimensionalidade dos dados sem perder o que importa.

Gostou? Continue acompanhando o blog para mais conexões entre matemática e tecnologia.

Gostou deste artigo? Inscreva-se na newsletter.