Machine Learning · Insper

Gradiente Descendente & Regularização

Desça a ladeira e ponha um freio na complexidade

O motor de otimização de quase todo o aprendizado de máquina moderno e a cura padrão para o sobreajuste

Por que a forma fechada não basta

não escala

\((X^\top X)^{-1}\) custa \(O(d^3)\): inviável com muitíssimos atributos

não existe

para a maioria dos outros modelos, a começar pelas redes neurais

não freia

não diz nada sobre controlar o sobreajuste

Duas ferramentas nesta aula: o gradiente descendente (o motor) e a regularização (o freio).

O caminho desta aula

  1. Descer a ladeirao gradiente, deduzido e calculado à mão
  2. Ajustar a descidasuperfície de perda, escala, taxa de aprendizado, mini-batch
  3. Retas → curvasatributos polinomiais; subajuste e sobreajuste
  4. Regularizarridge (L2), lasso (L1) e o botão α
Cada etapa responde a uma pergunta: como achar o mínimo sem resolver a equação? → de que tamanho é o passo e com quantos dados? → o que acontece quando o modelo fica mais flexível? → como frear essa flexibilidade?
Etapa 1 · como achar o mínimo sem resolver a equação?

Gradiente descendente: desça a ladeira

Em vez de resolver \(\nabla J = 0\) no papel: meça a inclinação onde você está, dê um passo contra ela, repita.

\[ w^{(t+1)} = w^{(t)} - \eta \, \nabla_w J\big(w^{(t)}\big) \]
  • \(\eta\): a taxa de aprendizado, o tamanho do passo.
  • \(\nabla_w J\) aponta para onde a perda cresce mais rápido; o sinal de menos faz o método descer.
Preveja. Para virar código falta \(\nabla_w J\). Numa reta \(w_0 + w_1 x\) com erro quadrático, do que você espera que a derivada seja feita?

De onde vem o gradiente

\[ J(w_0, w_1) = \frac{1}{n}\sum_{i=1}^{n}\big(\underbrace{y_i - w_0 - w_1 x_i}_{e_i}\big)^2 \]

Regra da cadeia: a derivada de \(e_i^2\) é \(2e_i\) vezes como o resíduo reage ao peso.

\(\partial e_i / \partial w_0 = -1\)

subir o intercepto em uma unidade baixa todo resíduo em uma unidade

\(\partial e_i / \partial w_1 = -x_i\)

subir a inclinação baixa o resíduo em \(x_i\): pontos longe da origem sentem mais

\[ \frac{\partial J}{\partial w_0} = -\frac{2}{n}\sum_i e_i, \qquad \frac{\partial J}{\partial w_1} = -\frac{2}{n}\sum_i e_i x_i \]

Uma fórmula para todo parâmetro

Com a coluna de uns \(x_{i0} = 1\), o intercepto é só mais um peso:

\[ \frac{\partial J}{\partial w_j} = -\frac{2}{n}\sum_{i=1}^{n} e_i\,x_{ij} \qquad\Longrightarrow\qquad \nabla_w J = -\frac{2}{n}X^\top e = -\frac{2}{n}X^\top(y - Xw) \]

primeira leitura

iguale a zero: \(X^\top(y - Xw) = 0\), as equações normais. A mesma afirmação por dois caminhos: resolver de uma vez ou caminhar até lá.

segunda leitura

uma soma ponderada pelos resíduos: pontos bem previstos quase não votam, pontos muito errados dominam o passo.

Mova cada peso na direção para onde os erros apontam, numa quantidade proporcional ao tamanho deles. Vale palavra por palavra numa rede de 100 camadas.

Um passo, à mão

Pontos \((1,2), (2,4), (3,7)\); começa em \(w_0 = w_1 = 0\); \(\eta = 0{,}1\).

A reta prevê 0 em todo lugar, então \(e = y = (2, 4, 7)\): \(\sum e_i = 13\), \(\sum e_i x_i = 2 + 8 + 21 = 31\).

\[ \frac{\partial J}{\partial w_0} = -\tfrac{2}{3}(13) = -8{,}667, \qquad \frac{\partial J}{\partial w_1} = -\tfrac{2}{3}(31) = -20{,}667 \] \[ w_0 \leftarrow 0 - 0{,}1(-8{,}667) = 0{,}867, \qquad w_1 \leftarrow 0 - 0{,}1(-20{,}667) = 2{,}067 \]
As duas derivadas negativas → os dois pesos baixos demais → o passo sobe os dois. A perda cai de 23 para 0,625.

Os próximos passos

iteração\(w_0\)\(w_1\)\(J\)\(\partial J/\partial w_0\)\(\partial J/\partial w_1\)
00,0000,00023,000−8,667−20,667
10,8672,0670,6251,3332,089
20,7331,8580,3440,231−0,394
30,7101,8970,3270,343−0,119

primeiro passo enorme

23 → 0,63, depois se arrasta: uma queda rápida no início diz pouco sobre convergência

os sinais trocam

um passo ultrapassa o mínimo, o seguinte volta

ritmos diferentes

\(\partial J/\partial w_1\) é 2,4× \(\partial J/\partial w_0\): os resíduos entram multiplicados por \(x_i\)

Depois de 2000 iterações: \(w_0 = -0{,}667\), \(w_1 = 2{,}5\), exatamente as equações normais.

Etapa 2 · de que tamanho é o passo e com quantos dados?

A paisagem que você está descendo

  • Cada ponto do plano \((w_0, w_1)\) é uma reta candidata; a altura é o erro dela.
  • Minimizar = achar o fundo do vale; \(-\nabla J\) é a direção de descida mais íngreme.
Preveja. A tabela mostrou \(w_1\) sentindo os resíduos 2,4 vezes mais que \(w_0\). Que forma você espera que o vale tenha?

Simulador: a superfície de perda

Clique à esquerda para soltar um início e aperte Passo. Depois ligue centrar x e comece de novo a partir de um ponto parecido.

Por que escalonar vem antes de ajustar

sem centrar

um vale longo e estreito: inclinar uma reta cujos \(x\) estão longe de zero também a sobe ou desce, então \(w_0\) e \(w_1\) ficam acoplados. O gradiente aponta atravessado ao vale; o caminho ziguezagueia e se arrasta.

centrado

uma tigela redonda: os mesmos passos vão quase direto à resposta.

A forma fechada devolve a mesma reta nos dois casos. A rota iterativa liga muito: padronizar remodela a superfície que o otimizador atravessa.

A taxa de aprendizado

  • \(\eta\) pequeno demais → passos minúsculos, convergência lenta
  • \(\eta\) grande demais → os passos ultrapassam; a perda oscila ou diverge
  • receita: experimente \(\eta \in \{10^{-3}, 10^{-2}, 10^{-1}\}\) e veja a perda de treino cair suavemente

na perda do próximo slide

\(\eta < 0{,}5\)aproxima-se aos poucos
\(\eta = 0{,}5\)o mínimo de uma vez
\(0{,}5 < \eta < 1\)pula, mas fecha
\(\eta = 1\)bate entre dois pontos para sempre
\(\eta > 1\)explode

Simulador: a taxa de aprendizado

Preveja. Defina \(\eta = 1{,}05\) e avance passo a passo. Converge, fica batendo para sempre ou explode?

Batch, estocástico e mini-batch

variantegradiente calculado sobrecusto por passocomportamento
batch GDo conjunto completo\(O(nd)\)descida exata e suave
GD estocástico (SGD)uma amostra aleatória\(O(d)\)ruidoso mas barato; escapa de armadilhas rasas
mini-batch GDum lote de ~32–512intermediárioo padrão moderno

from sklearn.linear_model import SGDRegressor
model = SGDRegressor(loss='squared_error', penalty='l2', alpha=1e-4,
                     learning_rate='invscaling', max_iter=1000)
  
O mesmo laço, com outras perdas, treina a regressão logística, as SVMs e as redes neurais. Aprenda uma vez.
Etapa 3 · o que acontece quando o modelo fica mais flexível?

De retas a curvas: atributos polinomiais

A regressão linear é linear nos parâmetros, não nas entradas: \(x \mapsto (x, x^2, \dots, x^p)\).


from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures

model = make_pipeline(PolynomialFeatures(degree=3), LinearRegression())
  
Preveja. 25 pontos ruidosos de um seno. Grau 1, grau 15: o que dá errado com cada um?

A flexibilidade corta dos dois lados

Polinômio com subajuste, sobreajuste e regularização Ridge

O grau 1 subajusta: rígido demais. O grau 15 sobreajusta: 16 parâmetros perseguem 25 pontos ruidosos. À direita: os mesmos 16 parâmetros mais uma penalidade Ridge e a curva relaxa de volta ao sinal.

Subajuste e sobreajuste, medidos

100 pontos de \(y = 0{,}5x^2 + x + 2\), ruído com desvio 3; validação cruzada de cinco dobras.

grauRMSE de treinoRMSE de validação (média)desvio entre as dobras
13,223,260,19
22,642,750,33
302,4610,4313,46

Grau 30, dobra por dobra: \(3{,}14 \quad 3{,}02 \quad 5{,}51 \quad \mathbf{37{,}29} \quad 3{,}20\)

O menor erro de treino é do pior modelo. Sobreajuste é errar de forma imprevisível: a variação entre dobras o denuncia antes da média.

Um diagnóstico de bolso

simples demais (subajuste)complexo demais (sobreajuste)
erro de treinoaltobaixo
erro de validaçãoalto, de forma consistentealto na média, às vezes baixo
variação entre dobraspequenagrande
o que fazermais capacidade, atributos melhoresregularizar, mais dados, menos capacidade
Existe um piso: o ruído (desvio 3) não depende de \(x\) e nenhum modelo o remove. O grau 2 chega perto desse piso.

"Complexo demais" depende de quantos dados você tem

Um polinômio de grau 10 tem 11 parâmetros livres.

pontos de treino5810111530
RMSE de treino3·10⁻¹⁵1·10⁻¹¹1·10⁻¹¹0,400,771,53
  • Até 11 pontos a curva atravessa todos: erro de treino zero é sinal de que não sobrou informação.
  • A partir do décimo primeiro ponto ele precisa escolher e o erro sai do chão.
O mesmo modelo de grau 10 é complexo demais para 10 pontos e razoável para 100.
Etapa 4 · como frear essa flexibilidade?

Regularização: penalizar o tamanho

Ridge (L2) · Tikhonov 1943; Hoerl & Kennard 1970

\[ \lVert y - Xw \rVert^2 + \alpha \sum_j w_j^2 \]
  • encolhe suavemente, nunca exatamente a zero
  • espalha o peso entre atributos correlacionados
  • forma fechada: \((X^\top X + \alpha I)^{-1} X^\top y\)

Lasso (L1) · Tibshirani 1996

\[ \lVert y - Xw \rVert^2 + \alpha \sum_j \lvert w_j \rvert \]
  • cai exatamente em zero para atributos fracos
  • seleção automática de atributos
  • entre atributos correlacionados, fica com um ao acaso

A Elastic Net mistura as duas (l1_ratio): um padrão robusto com muitos atributos correlacionados.

Por que o L1 zera e o L2 não

Escreva a penalidade como um orçamento: minimizar o erro sujeito a \(\sum |w_j| \le t\) (lasso) ou \(\sum w_j^2 \le t^2\) (ridge).

  • As curvas de nível do erro são elipses centradas na solução de OLS (ordinary least squares, mínimos quadrados ordinários).
  • A solução é onde a elipse que cresce toca primeiro a região.
Preveja. A região do ridge é um círculo; a do lasso é um losango com pontas sobre os eixos. Qual das duas costuma ser tocada exatamente sobre um eixo?

Simulador: círculo contra losango

Arraste o ótimo do OLS e conte quantas vezes cada região é tocada sobre um eixo.

O caso unidimensional, em forma fechada

\[ \hat{w}^{\text{ridge}} = \frac{\hat{w}}{1+\alpha} \] \[ \hat{w}^{\text{lasso}} = \operatorname{sinal}(\hat{w})\,\max\!\left(|\hat{w}| - \tfrac{\alpha}{2},\ 0\right) \]

um atributo, \(\sum_i x_i^2 = 1\), \(\alpha = 1\)

\(\hat{w}\) (OLS)ridgelasso
2,001,0001,500
1,000,5000,500
0,600,3000,100
0,500,2500
0,200,1000
O ridge divide e divisão nunca chega a zero. O lasso subtrai e corta: abaixo de \(\alpha/2\) o coeficiente desaparece. Essa subtração é a ponta do losango.

Acompanhando o caminho

Oito atributos: três com sinal real, três puro ruído, dois quase cópias (\(c_1, c_2\), ambos de verdade 2). Preveja. Quando \(\alpha\) cresce, quais coeficientes o lasso derruba primeiro?

O que o caminho mostra

αlasso: não nulosridge: não nulos
0,058 / 88 / 8
0,27 / 88 / 8
0,66 / 88 / 8
2,05 / 88 / 8

O lasso remove primeiro os atributos de ruído; o ridge mantém os oito, pequenos.

O par correlacionado em \(\alpha = 2\):

lasso (1,89; 0,98): começa a escolher um, quase ao acaso.

ridge (1,02; 0,97): divide o peso por igual.

É por isso que o ridge é a resposta padrão à multicolinearidade e o lasso não.

O ridge também conserta a parte numérica

duas colunas quase idênticas

número de condição de \(X^\top X\): \(7{,}2\times10^{7}\)

OLS: \((1{,}000; -0{,}000)\), uma divisão arbitrária

\(\alpha = 0{,}01\) na diagonal

número de condição: \(6\times10^{3}\)

resposta: \((0{,}500; 0{,}500)\), com a soma preservada

Coeficientes estáveis, matriz invertível, convergência mais rápida do gradiente: um só mecanismo, o \(\alpha I\) elevando todos os autovalores.

O botão α

  • \(\alpha \to 0\): OLS puro, sem freio.
  • \(\alpha \to \infty\): todos os coeficientes esmagados para ~0, o modelo prevê a média.
  • O \(\alpha\) certo não é conhecido de antemão: escolha-o por validação cruzada (RidgeCV, LassoCV, uma busca em grade).
Escalone antes de regularizar (num Pipeline): a penalidade compara coeficientes entre atributos. E o intercepto não é penalizado; o scikit-learn cuida disso.

Resumo

  1. \(w \leftarrow w - \eta\nabla J\); no erro quadrático, \(\nabla J = -\frac{2}{n}X^\top e\), uma soma ponderada pelos resíduos.
  2. Escalone os atributos: uma tigela redonda em vez de um vale estreito.
  3. \(\eta\) grande demais diverge; mini-batch é o padrão.
  4. Sobreajuste = erro de treino baixo, erro de validação imprevisível.
  5. O ridge divide, o lasso subtrai e corta; escolha \(\alpha\) por validação cruzada.
Em sala

Gradiente descendente, na prática

  • Abra o notebook do handout no Colab.
  • Uma ladeira de uma variável; a taxa de aprendizado forçada até quebrar.
  • Os três pontos de um passo, à mão, conferidos número a número.
  • A paisagem da perda com e sem centrar; 20 mil casas da Califórnia com e sem padronização; mini-batch.