Gradiente Descendente
Este capítulo corresponde ao capítulo 8 de Grus (2019).
📓 Abrir o notebook deste capítulo no Colab ↗ — só o código, pronto para rodar.
🎛️ Gradiente passo a passo ↗ — a página interativa da aula: escolha a função, mexa no tamanho do passo e veja a derivada, o passo e o rastro a cada iteração, com uma variável ou com duas.
🏁 Lote, minibatch, estocástico ↗ — os três métodos da seção 5.6 treinando lado a lado, no mesmo orçamento de chamadas a gradient_step, com a perda e a reta ajustada ao vivo.
Quem se vangloria da própria descendência está se vangloriando daquilo que deve a outros.
— Sêneca
Boa parte da ciência de dados é resolver um problema de otimização disfarçado. “Ajustar um modelo” quase sempre significa achar os parâmetros que minimizam algum erro ou maximizam alguma verossimilhança — e “melhor modelo”, na prática, é o nome bonito que damos à solução desse problema. Este capítulo constrói, do zero, a técnica que este livro inteiro vai usar para resolver esses problemas: o gradiente descendente.
A ideia cabe numa frase: calcule a direção em que uma função cresce mais rápido, e ande na direção oposta, em passos pequenos, até quase não se mover mais. O capítulo constrói essa ideia em camadas — o que é o gradiente, como estimá-lo, como usá-lo para minimizar uma função, quanto andar a cada passo, como usar tudo isso para ajustar um modelo a dados, e como fazer isso em escala — e chega, já na seção 5.3, a uma função de cinco linhas, gradient_step: a peça que os capítulos seguintes de fato chamam.
gradient_step não é só mais um algoritmo do livro. É a máquina que treina praticamente tudo o que vem depois dela. Regressão linear simples e múltipla, regressão logística, redes neurais e deep learning chamam essa função — direta ou indiretamente — para ajustar os parâmetros dos modelos que constroem. Nenhum deles reimplementa a ideia: todos usam a mesma peça que você vai escrever aqui.
Os modelos que não passam por este capítulo são os que não se ajustam descendo um gradiente, e vale saber quais são desde já: o k-vizinhos mais próximos, cuja previsão é uma busca nos dados guardados; o Naive Bayes, que se treina contando; as árvores de decisão, construídas por uma escolha gulosa repetida; e o k-means, que alterna dois passos exatos.
Isso não quer dizer que esses quatro não tenham nada a ajustar — o k do k-vizinhos e o do k-means são escolhidos de fora, por quem usa o modelo, em vez de aprendidos a partir dos dados. A diferença é essa: um parâmetro que o gradiente descobre, contra um que você decide.
Isso inverte a ordem usual de aprender machine learning. Normalmente você vê um algoritmo, depois outro, e só bem mais tarde percebe que todos treinam do mesmo jeito por baixo. Aqui você constrói o “por baixo” primeiro. Depois deste capítulo, cinco capítulos inteiros deixam de ser caixas-pretas de treino e passam a ser “mais um jeito de calcular um gradiente e chamar gradient_step”.
Ao final deste capítulo, você será capaz de:
- Explicar a ideia por trás do gradiente descendente: por que seguir a direção oposta ao gradiente reduz o valor de uma função
- Estimar a derivada e o gradiente de uma função por diferença finita, e explicar por que essa estimativa não é o que se usa na prática
- Implementar
gradient_stepe usá-lo para minimizar uma função simples a partir de um ponto aleatório - Diagnosticar, numericamente, o que acontece quando o tamanho do passo é grande demais ou pequeno demais
- Ajustar um modelo linear a dados calculando o gradiente do erro quadrático médio e aplicando gradiente descendente
- Distinguir gradiente descendente em lote, minibatch e estocástico, e explicar o compromisso entre eles
Seções
| Seção | Tópico |
|---|---|
| 5.1 | A Ideia por Trás do Gradiente Descendente |
| 5.2 | Estimando o Gradiente |
| 5.3 | Usando o Gradiente |
| 5.4 | Escolhendo o Tamanho do Passo |
| 5.5 | Ajustando Modelos com Gradiente Descendente |
| 5.6 | Minibatch e Gradiente Estocástico |
Leituras adicionais
A seção “For Further Exploration” do capítulo 8 de Grus (2019) sugere:
- Continuar lendo — o próprio autor observa que o livro vai usar gradiente descendente para resolver problemas até o fim.
- Active Calculus 1.0, de Matthew Boelkins, David Austin e Steven Schlicker (Grand Valley State University Libraries), disponível gratuitamente, para quem quiser revisar cálculo.
- O texto de Sebastian Ruder comparando gradiente descendente e suas muitas variantes — momentum, RMSProp, Adam — que reaparecem nos capítulos sobre redes neurais.