Derivadas
machine-learning, otimizacao, computacao-grafica intermediario analise-realDerivadas
Derivada é a taxa instantânea de variação — e, mais util ainda, o melhor modelo linear local de uma função. Essa segunda leitura é a que explica por que derivadas dominam a otimização e o aprendizado de máquina.
Definição
$$f'(a) = \lim_{h\to 0}\frac{f(a+h)-f(a)}{h}$$
Equivalentemente, $f'(a)$ é o único número tal que
$$f(a+h) = f(a) + f'(a)h + o(h)$$
Ou seja: perto de $a$, a função se comporta como uma reta de inclinação $f'(a)$. Todo método de otimização baseado em gradiente explora exatamente essa aproximação — dá um passo confiando que o modelo linear vale numa vizinhança.
Diferenciável implica contínua; a recíproca é falsa ($|x|$ em zero).
Regras
| Regra | Fórmula |
|---|---|
| Potência | $(x^n)' = nx^{n-1}$ |
| Produto | $(fg)' = f'g + fg'$ |
| Quociente | $(f/g)' = \dfrac{f'g - fg'}{g^2}$ |
| Cadeia | $(f\circ g)'(x) = f'(g(x)),g'(x)$ |
| Exponencial | $(e^x)' = e^x$ |
| Logaritmo | $(\ln x)' = 1/x$ |
A regra da cadeia é a mais importante para computação: ela é literalmente o algoritmo de retropropagação. Uma rede neural é uma composição de funções, e o gradiente da perda em relação a um peso profundo é o produto das derivadas ao longo do caminho.
É também a origem do desaparecimento do gradiente: um produto de muitos fatores menores que 1 tende a zero exponencialmente com a profundidade. Conexões residuais existem para criar caminhos em que esse produto não encolhe.
Gradiente e derivadas parciais
Para $f: \mathbb{R}^n \to \mathbb{R}$:
$$\nabla f = \left(\frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_n}\right)$$
Dois fatos que orientam toda otimização:
- O gradiente aponta na direção de maior crescimento.
- Ele é ortogonal às curvas de nível.
Daí o método do gradiente descendente:
$$x_{k+1} = x_k - \alpha\nabla f(x_k)$$
Em pontos de mínimo interior, $\nabla f = 0$ — condição necessária, não suficiente.
Hessiana
A matriz das segundas derivadas:
$$H_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}$$
Para $f$ suficientemente regular, $H$ é simétrica (teorema de Schwarz), o que permite usar todo o maquinário de matrizes simétricas.
A hessiana classifica pontos críticos:
| Hessiana | Ponto |
|---|---|
| Definida positiva | Mínimo local |
| Definida negativa | Máximo local |
| Indefinida | Sela |
| Semidefinida | Inconclusivo |
Em dimensão alta, selas são muito mais comuns que mínimos locais — a chance de todos os $n$ autovalores terem o mesmo sinal cai rapidamente com $n$. Esse fato mudou a compreensão de por que o treinamento de redes profundas funciona: o obstáculo prático são as regiões de sela, não mínimos locais ruins.
Diferenciação automática
Três formas de obter derivadas em código:
Numérica. $f'(x) \approx \frac{f(x+h)-f(x)}{h}$. Simples, mas sofre com o dilema do passo: $h$ grande dá erro de truncamento, $h$ pequeno dá cancelamento catastrófico. O melhor $h$ fica em torno de $\sqrt{\epsilon_{\text{máq}}}$, dando só metade dos dígitos. A diferença centrada $\frac{f(x+h)-f(x-h)}{2h}$ é bem melhor.
Simbólica. Manipula expressões e dá fórmula exata, mas sofre com explosão de tamanho.
Automática. Aplica a regra da cadeia sobre as operações elementares do programa, com precisão de máquina. É o que PyTorch, JAX e TensorFlow fazem.
O modo reverso (retropropagação) calcula o gradiente de uma saída escalar em relação a todas as entradas com custo comparável ao de uma avaliação da função — o que é exatamente o caso do treino de redes, com milhões de parâmetros e uma única perda. O modo direto é preferível na situação oposta: poucas entradas, muitas saídas.
import torch
x = torch.tensor([2.0], requires_grad=True)
y = x**3 + 2*x
y.backward()
print(x.grad) # 3x² + 2 = 14Teorema do valor médio
Se $f$ é contínua em $[a,b]$ e diferenciável em $(a,b)$, existe $c$ com
$$f'(c) = \frac{f(b)-f(a)}{b-a}$$
É a ferramenta que converte informação sobre a derivada em informação sobre a função — a base das estimativas de erro em análise numérica e da prova de que derivada nula em um intervalo implica função constante.
Exemplo trabalhado
Minimizar $f(x) = x^2 - 4x + 7$.
$f'(x) = 2x - 4 = 0$ dá $x = 2$. Como $f''(x) = 2 > 0$, é mínimo. O valor mínimo é $f(2) = 3$.
Com gradiente descendente a partir de $x_0 = 0$ e $\alpha = 0{,}1$:
$$x_1 = 0 - 0{,}1(-4) = 0{,}4, \quad x_2 = 0{,}4 - 0{,}1(-3{,}2) = 0{,}72, \quad \dots$$
convergindo para $2$. Note que $\alpha$ grande demais (aqui, $\alpha > 1$) faz a iteração divergir — o limite é $2/L$ com $L$ a constante de Lipschitz do gradiente, que neste caso é 2.
Aplicações em computação
Aprendizado de máquina. Todo treino por gradiente; a retropropagação é a regra da cadeia aplicada com memoização.
Computação gráfica. Normais de superfície são gradientes; renderização diferenciável permite otimizar cenas a partir de imagens.
Física. Forças são gradientes de potencial; integradores numéricos avançam o estado com base em derivadas.
Análise de sensibilidade. Derivadas medem quanto uma saída depende de cada entrada — usado em finanças e em interpretabilidade de modelos.
Erros comuns
- Passo grande demais no gradiente descendente, causando divergência.
- Confundir mínimo local com global.
- Usar derivada numérica quando a automática está disponível.
- Esquecer que ReLU não é diferenciável em zero — na prática usa-se subgradiente, com convenção arbitrária.
- Acumular gradiente sem zerar entre iterações (o
optimizer.zero_grad()esquecido).
Leituras recomendadas
- Spivak, Calculus — derivadas com rigor e ótimos exercícios.
- Nocedal e Wright, Numerical Optimization, capítulos 1 a 3 — derivadas do ponto de vista de quem otimiza.
- Goodfellow, Bengio e Courville, capítulo 6 — retropropagação explicada como grafo computacional; o livro é gratuito online.
- Documentação do JAX sobre
grad,jacfwdejacrev— modo direto e reverso na prática.
Michael Spivak (2008). Calculus. Publish or Perish. ISBN 9780914098911. Jorge Nocedal and Stephen J. Wright (2006). Numerical Optimization. Springer. DOI: 10.1007/978-0-387-40065-5. Ian Goodfellow and Yoshua Bengio and Aaron Courville (2016). Deep Learning. MIT Press. ISBN 9780262337373.
Referências
- Michael Spivak (2008). Calculus. Publish or Perish.
- Jorge Nocedal; Stephen J. Wright (2006). Numerical Optimization. Springer.
- Ian Goodfellow; Yoshua Bengio; Aaron Courville (2016). Deep Learning. MIT Press.