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.
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?