Objetivos de aprendizagem
- O1. Explicar o gradiente descendente como procedimento, não como fórmula.
- O2. Diagnosticar taxa de aprendizado alta e baixa pelo comportamento da curva de perda.
- O3. Comparar regularização L1 e L2 quanto ao efeito sobre os coeficientes.
- O4. Justificar early stopping como forma de regularização.
O problema: a perda não desce
"Treinei e não funcionou" é o relato mais comum de quem está começando — e o menos acionável, porque não diz nada. Quase todo problema de treino tem sintoma visível na curva de perda, e quem sabe lê-la economiza dias.
Este capítulo é sobre duas coisas que parecem opostas e são complementares: descer a paisagem da perda, e impedir que a descida vá longe demais.
De onde isto veio
A descida: Cauchy, 18 de outubro de 1847
O aperto. Augustin-Louis Cauchy queria calcular a órbita de um corpo celeste. Não pelas equações diferenciais do movimento, mas pelas equações finitas que o representam, tomando como incógnitas os próprios elementos da órbita — "Então as incógnitas são em número de seis." Seis incógnitas, resolvidas à mão, em 1847.
O que se fazia antes. Eliminação sucessiva: reduzir o sistema a uma equação só. Cauchy lista por que não serve, e a lista é honesta: "1º que, num grande número de casos, a eliminação não pode efetuar-se de maneira alguma; 2º que a equação resultante é geralmente muito complicada, mesmo quando as equações dadas são bastante simples".
A virada. Se a função nunca é negativa, não é preciso resolvê-la — basta fazê-la decrescer. Nas palavras dele: "Para achar os valores de x, y, z… que verificarão a equação u = 0, bastará fazer decrescer indefinidamente a função u, até que ela se anule." Descer contra a derivada, um passo pequeno de cada vez.
A ideia reaproveitável. Trocar "resolver" por "melhorar repetidamente". Quando a solução fechada não existe, ou existe e explode em complexidade, aceita-se um procedimento que só garante ficar melhor a cada passo. É a troca fundadora de quase todo o Machine Learning — e a razão de o capítulo 05 ter duas implementações: a equação normal, que resolve, e o gradiente, que melhora.
O nome. O artigo se chama "Méthode générale pour la résolution des systèmes d'équations simultanées" (C. R. Acad. Sci. Paris, 25:536–538, 1847). "Método geral" — a palavra gradiente não está no título.
Dois detalhes que mudam como você lê este capítulo.
O primeiro: para um sistema de várias equações, Cauchy manda minimizar a soma dos quadrados dos resíduos. Ou seja — o capítulo 06 executa o objetivo que o capítulo 05 inventou. Legendre e Gauss definiram o que é a melhor curva; Cauchy, quarenta anos depois, deu o como chegar nela sem resolver nada.
O segundo, e é o melhor antídoto que este livro tem contra a reverência: Cauchy não prova que o método converge, e sabe disso. Ele escreve que se limita, por ora, a indicar os princípios, propondo-se a voltar ao assunto "num próximo Memória". Esse próximo memorial, ao que se sabe, nunca existiu. O matemático mais rigoroso do século XIX publicou um algoritmo sem garantia e não voltou. Método não nasce provado — nasce funcionando, e a prova vem depois, se vier.
O freio: Tikhonov, ridge e LASSO
Regularização vem de outro lugar: problemas mal-postos. Hadamard (1923) define o que é um problema bem-posto — solução existe, é única e depende de forma estável dos dados. Muitos problemas inversos reais falham na terceira condição: uma perturbação minúscula na entrada muda a resposta radicalmente. Tikhonov publica sobre estabilidade desses problemas em 1943, e o método de regularização em 1963; D. L. Phillips chega a algo equivalente de forma independente em 1962 — daí a forma "Tikhonov–Phillips".
Na estatística o mesmo movimento aparece como ridge regression (Hoerl & Kennard, Technometrics, 1970), e a origem é industrial: Hoerl vinha da engenharia química, e o "ridge" alude às cristas dos gráficos de superfície de resposta. Vinte e seis anos depois, o LASSO (Tibshirani, JRSS-B, 1996) herda diretamente do non-negative garrote de Breiman (1995), fundindo as duas etapas do garrote numa só.
A ideia reaproveitável do bloco inteiro: aceitar erro sistemático de propósito para comprar estabilidade. Tikhonov, ridge e LASSO são o mesmo gesto — o dado não determina a resposta, então você impõe uma preferência externa e assume o viés que ela introduz. É por isso que regularização não é um truque de implementação: é uma declaração sobre o que você acredita antes de ver os dados.
A ponte com o capítulo 07 é Breiman, e é uma ideia só: instabilidade. Ele classificou os métodos entre estáveis (ridge) e instáveis (seleção de subconjunto), com o garrote no meio. Do lado "encolher coeficientes" nasce o LASSO, aqui. Do lado "instabilidade é oportunidade, não defeito" nasce o bagging, lá. O mesmo diagnóstico gerou dois métodos em dois capítulos — e conhecer o diagnóstico vale mais que conhecer os dois métodos.
Procedência das afirmações desta seção:
| Selo | Afirmação |
|---|---|
| ✓ | Tudo o que é atribuído a Cauchy: o problema das seis incógnitas, a crítica à eliminação, a frase "fazer decrescer indefinidamente", a minimização da soma de quadrados, e a ausência do memorial prometido — via Lemaréchal, Cauchy and the Gradient Method, Documenta Mathematica, 2012, lido por inteiro, que transcreve o francês original em nota |
| ✓ᵐ | Hoerl & Kennard (Technometrics 12(1):55–67, 1970) e Tibshirani (JRSS-B 58(1):267–288, 1996): obra, ano e veículo |
| ⏳ | A cronologia de Tikhonov (1943, 1963) e a contribuição independente de Phillips (1962) |
| ⏳ | Que "ridge" vem das cristas dos gráficos de superfície de resposta |
| ⏳ | Que o LASSO herda do non-negative garrote de Breiman (1995) |
| ❌ | Early stopping: procurei e não localizei atribuição primária confiável. O capítulo ensina o método sem lhe atribuir inventor |
| 📖 | As duas ideias reaproveitáveis, a ligação com o cap. 05 e a ponte com o cap. 07 |
Fundamentos: descer, sem enxergar a paisagem
Imagine estar numa encosta, no escuro, com um único instrumento: você sente a inclinação sob os pés. O procedimento é óbvio — dê um passo na direção mais íngreme para baixo, sinta de novo, repita.
Isso é gradiente descendente, inteiro. Formalmente:
O gradiente
Três decisões, e só três, definem tudo o que acontece:
1. Quanto do dado usar por passo.
| Variante | Exemplos por passo | Consequência |
|---|---|---|
| Lote (batch) | todos | direção precisa, passo caro, trajetória lisa |
| Mini-batch | 32–256 | o padrão prático; ruído suficiente para escapar de vales rasos |
| Estocástico | 1 | passo baratíssimo, trajetória errática |
O ruído do mini-batch não é só tolerado: ele ajuda. Uma trajetória perfeitamente lisa desce até o primeiro vale e para lá.
2. O tamanho do passo. É o hiperparâmetro que mais decide entre sucesso e fracasso, e a próxima seção trata dele.
3. Quando parar. Aparentemente trivial, e o assunto da seção sobre early stopping — onde está a lição menos óbvia do capítulo.
Diagnóstico pela curva de perda
Registre a perda a cada época e olhe o desenho. Quatro padrões cobrem quase tudo:
| Sintoma na curva | Diagnóstico | O que fazer |
|---|---|---|
| Sobe, oscila muito, ou vira NaN | taxa alta demais | dividir a taxa por 10 |
| Desce, mas quase imperceptivelmente | taxa baixa demais | multiplicar por 3–10 |
| Desce e estabiliza num patamar | convergiu | verificar se o patamar é bom o bastante |
| Desce no treino e sobe na validação | overfitting | regularizar, parar antes, mais dados |
A quarta linha é a única que exige duas curvas. Plote sempre as duas — treino e validação, no mesmo gráfico. Uma curva sozinha esconde exatamente o problema que mais custa caro.
Uma sutileza que quase ninguém conta
Taxa alta demais nem sempre produz explosão. Medimos, na etapa 05–06:
- Com regressão linear (erro quadrático) e taxa 50, a perda explode e vira infinito. O erro quadrático não tem teto.
- Com regressão logística e taxa 500 — dez vezes maior —, a perda não explode. Ela satura.
Duas razões, e ambas valem entender. A perda logística é limitada: quando a sigmoide satura, o logaritmo é cortado e a perda para de crescer. E num problema linearmente separável, o primeiro gradiente já aponta na direção certa — um passo gigante nessa direção acerta em vez de explodir.
A lição prática: "não explodiu" não é evidência de que a taxa está boa. Confie na curva, não na ausência de NaN.
06-e1escolha umaA curva de perda de treino desce rapidamente nas primeiras épocas e depois oscila para cima e para baixo sem estabilizar, mantendo-se num patamar alto. Qual é o diagnóstico mais provável?
Regularização: impedir que a descida vá longe demais
Minimizar o erro no treino até o fim é decorar. Regularizar é acrescentar à perda um termo que penaliza complexidade:
O
L2 encolhe todos; L1 zera alguns
| L2 (Ridge) | L1 (Lasso) | |
|---|---|---|
| Penalidade |
|
|
| Efeito nos coeficientes | encolhe todos, nenhum vira zero | zera vários |
| Também serve para | estabilizar sob colinearidade | selecionar atributos |
| Gradiente da penalidade |
|
|
A última linha explica as anteriores. O gradiente de L2 é proporcional ao peso: quanto mais perto de zero, mais fraco o empurrão — e o peso se aproxima de zero sem nunca chegar. O gradiente de L1 tem magnitude constante: o empurrão não enfraquece perto de zero, e o peso chega lá e fica.
Medimos, num problema com 2 atributos úteis e 8 de puro ruído:
| Regularização | Coeficientes não nulos | Atributos de ruído eliminados |
|---|---|---|
| L2 (λ = 0,05) | 10 de 10 | 0 de 8 |
| L1 (λ = 0,05) | menos de 10 | pelo menos 4 de 8 |
E o L1 preservou os dois coeficientes úteis. Não é sorte: ele elimina preferencialmente o que não paga o próprio custo na perda.
06-e2escolha umaVocê tem 300 atributos, suspeita que a maioria é irrelevante, e precisa entregar um modelo que a equipe consiga explicar. Qual regularização escolher, e por quê?
Early stopping: a regularização de graça
Treine, e a cada época meça a perda na validação. Quando ela parar de melhorar por algumas épocas seguidas, pare — e fique com os pesos do melhor momento.
Não custa nada, não tem hiperparâmetro difícil, e funciona porque o treino percorre modelos em ordem crescente de complexidade: os pesos começam pequenos e crescem. Parar cedo é escolher um ponto anterior nessa trajetória — o mesmo efeito de uma penalidade, obtido de graça.
As duas armadilhas que descobrimos implementando
1. "Melhorou" precisa de um limiar. A primeira versão do nosso otimizador considerava progresso qualquer melhora, por menor que fosse. Com melhoras de
min_delta.
2. Monitorar treino é medir o que o modelo decorou. Esta é a armadilha séria, e ela só apareceu porque um teste a expôs.
Com dados separáveis, a perda de treino cai indefinidamente: o modelo empurra os pesos para o infinito e a perda tende a zero sem nunca estagnar. Um early stopping que observa treino nunca dispara — e mesmo que disparasse, estaria medindo a coisa errada.
Pior: mesmo observando validação, o critério só tem o que detectar se houver sobreajuste possível. No nosso experimento com dados limpos e separáveis, nem a validação estagnava — não havia ponto a partir do qual ajustar mais piorasse. Foi preciso injetar ruído e atributos inúteis para o instrumento ter função.
A lição geral, que vale além do early stopping. Um instrumento de diagnóstico pressupõe que o problema exista. Testar o instrumento num cenário sem o problema não valida nada — e pode passar a falsa impressão de que ele está quebrado.
06-e3escolha todas que valemQuais afirmações sobre early stopping são corretas? (marque todas que valem)
06-e4complete a lacunaComplete o nome do hiperparâmetro que define o tamanho do passo na atualização abaixo:
w ← w − ______ × ∇L(w)
Mão na massa
A etapa 05–06 do ml-zero traz o otimizador isolado do modelo:
def descida_de_gradiente(grad, n_parametros, n_exemplos, taxa, epocas,
lote=None, paciencia=None, min_delta=1e-6,
monitorar=None, seed=0)
Quem decide o que minimizar é o modelo, que passa a função grad. O otimizador só sabe descer. Essa separação é a arquitetura hexagonal nascendo da dor (regra 2 da construção): ela não foi projetada de antemão — apareceu quando linear e logística precisaram do mesmo laço com perdas diferentes.
O Historico que ele devolve é o instrumento de diagnóstico: divergiu(), estagnou(), e a lista de perdas para plotar.
Notebook pronto para executar — regressao_limonada.ipynb · abrir no Colab
É o notebook do capítulo 05 — a mesma etapa serve aos dois. Troque solucao_fechada=True por False na célula do ajuste e confira que gradiente e equações normais chegam ao mesmo lugar.
Na sua máquina:
pip install notebookejupyter notebook, ou abra a pasta no VS Code. O notebook não precisa do repositório clonado — se você estiver no Colab, ele baixa sozinho os arquivos de que precisa. Como rodar a trilha inteira:ml-zero.
Assista
Vinte e quatro minutos, e valem cada um. O vídeo faz a conta à mão, passo a passo, num exemplo minúsculo: calcula o gradiente, dá o passo, recalcula. É o que a fórmula w ← w − η∇L esconde — que ela descreve um procedimento repetitivo e concreto, não uma operação abstrata. Se o gradiente ainda parece magia, é este material que resolve.
O vídeo só é pedido ao servidor de origem depois deste clique.
Síntese — o que levar
- Gradiente descendente é um procedimento: sinta a inclinação, dê um passo, repita. Três decisões — quanto de dado por passo, tamanho do passo, quando parar.
- Plote treino e validação juntos. Uma curva sozinha não consegue mostrar overfitting.
- "Não explodiu" não prova que a taxa está boa: perda logística é limitada e satura em vez de divergir.
- L2 encolhe todos, L1 zera alguns — porque o gradiente de L1 tem magnitude constante perto de zero. L1 é também seleção de atributos.
- Early stopping é regularização de graça, mas exige monitorar validação e um limiar mínimo de melhora. E só tem o que detectar se houver sobreajuste possível.
Verificação
- Explique por que o ruído do mini-batch pode ajudar, em vez de atrapalhar.
- Sua perda de treino desce bem e a de validação desce e depois sobe. Que três intervenções você tentaria, em que ordem?
- Por que L1 zera coeficientes e L2 não? Responda pelo gradiente da penalidade, não pelo formato da curva.