Módulo 7 · Grafos, cálculo e otimização

Descida do gradiente e regressão

Aula 7.3 · cerca de 22 minutos

Para minimizar uma função, dê passos contra o gradiente. η é a taxa de aprendizado:

θ ← θ − η · ∇L(θ)

Com η grande demais o processo diverge. Com η pequeno demais, leva uma eternidade. Em funções convexas (formato de tigela), qualquer mínimo local é global e a descida converge com o η certo.

Regressão linear

Modelo:  ŷ = w·x + b
Perda (erro quadrático médio):  L = (1/n) Σ (ŷᵢ − yᵢ)²
∂L/∂w = (2/n) Σ (ŷᵢ − yᵢ)·xᵢ        ∂L/∂b = (2/n) Σ (ŷᵢ − yᵢ)
import numpy as np

rng = np.random.default_rng(0)
x = rng.uniform(0, 10, 200)
y = 2.5 * x + 7 + rng.normal(0, 1, 200)   # verdade: w = 2.5, b = 7

w, b, eta = 0.0, 0.0, 0.01
for passo in range(5000):
    erro = w * x + b - y
    w -= eta * 2 * np.mean(erro * x)
    b -= eta * 2 * np.mean(erro)

print(round(w, 2), round(b, 2))           # ≈ 2.5, 7.0

# Solução fechada (mínimos quadrados), para comparar:
A = np.c_[x, np.ones_like(x)]
print(np.linalg.lstsq(A, y, rcond=None)[0])

Aqui álgebra linear, cálculo e probabilidade se encontram. Minimizar o erro quadrático equivale a maximizar a verossimilhança sob ruído gaussiano, e a solução fechada é uma projeção ortogonal de y no espaço das colunas de A.

Dica: Normalize as features (média 0, desvio 1) antes de treinar. Features em escalas muito diferentes deixam a “tigela” alongada, e a descida passa a zigue-zaguear.

Exercício 1

Minimize f(x) = (x − 3)² com descida do gradiente começando em x = 0 e η = 0,1. Onde você está depois de 2 passos?

Exercício 2

Com f(x) = (x − 3)², para quais valores de η a descida converge?