Treinamento como minimização da perda
Treinar uma rede neural significa ajustar seus parâmetros (pesos e vieses) para reduzir uma função de perda medida nos dados. Em vez de “acertar de uma vez”, fazemos ajustes iterativos: calculamos o erro atual, estimamos como esse erro muda quando mexemos em cada parâmetro e então atualizamos os parâmetros em pequenos passos para diminuir a perda.
De forma abstrata, se juntarmos todos os parâmetros em um vetor θ (theta) e a perda em L(θ), o objetivo do treinamento é:
minimizar L(θ)Como L(θ) geralmente é uma superfície complexa (muitas dimensões), usamos métodos numéricos baseados em derivadas para caminhar na direção que mais reduz a perda.
Gradiente: direção de maior aumento (e por que usamos o negativo)
O gradiente de uma função escalar L(θ) é o vetor de derivadas parciais:
∇L(θ) = [∂L/∂θ1, ∂L/∂θ2, ..., ∂L/∂θn]Intuição importante: o gradiente aponta para a direção de maior aumento de L (a subida mais íngreme). Se queremos diminuir a perda, seguimos a direção oposta, isto é, o negativo do gradiente.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
A regra de atualização mais básica (Descida do Gradiente) é:
θ ← θ - η ∇L(θ)onde η (eta) é a taxa de aprendizado (learning rate): o tamanho do passo. Se η for muito pequeno, o treino pode ficar lento; se for muito grande, pode “passar do ponto” e piorar a perda.
Batch, minibatch e épocas: como os dados entram no treino
Batch (lote) e minibatch
Para calcular o gradiente, precisamos de uma estimativa do erro. Há três formas comuns de usar os dados:
- Batch (gradiente em lote completo): calcula o gradiente usando todos os exemplos do conjunto de treino antes de atualizar os parâmetros. É estável, mas pode ser lento e pesado em memória.
- Stochastic / online: atualiza os parâmetros a cada exemplo individual. É rápido por atualização, mas o gradiente é muito ruidoso.
- Minibatch: usa pequenos lotes (por exemplo, 32, 64, 128 exemplos). É o padrão na prática porque equilibra eficiência computacional e ruído útil para escapar de regiões ruins.
Época
Uma época é uma passagem completa por todo o conjunto de treino. Se você tem N exemplos e usa minibatches de tamanho B, então cada época tem aproximadamente N/B atualizações.
Taxa de aprendizado e efeitos típicos no comportamento do treino
A taxa de aprendizado η controla o quanto os parâmetros mudam a cada atualização. Alguns padrões comuns:
- Convergência lenta:
ηmuito pequeno. A perda diminui, mas devagar; pode “parecer travada” por muitas épocas. - Divergência:
ηgrande demais. A perda aumenta ou viraNaN(instabilidade numérica), e os parâmetros “explodem”. - Oscilações:
ηum pouco alto. A perda até cai, mas fica subindo e descendo (zigue-zague) e pode não estabilizar bem.
Na prática, é comum testar alguns valores de η (ordens de grandeza diferentes) e observar as curvas de perda para escolher um regime estável e eficiente.
Exemplo numérico pequeno: 1–2 passos de atualização de pesos
Para tornar o processo concreto, vamos usar um modelo extremamente simples com um único peso w e uma perda quadrática:
L(w) = (w - 3)^2Essa perda é mínima quando w = 3. Vamos “treinar” começando de um valor inicial e aplicando descida do gradiente.
1) Calcular o gradiente
Derivando:
dL/dw = 2(w - 3)2) Escolher taxa de aprendizado
Vamos usar η = 0.1.
3) Passo 1 (atualização)
Comece com w0 = 0.
- Gradiente em
w0:dL/dw = 2(0 - 3) = -6 - Atualização:
w1 = w0 - η * (-6) = 0 - 0.1 * (-6) = 0.6 - Perda antes:
L(w0) = (0 - 3)^2 = 9 - Perda depois:
L(w1) = (0.6 - 3)^2 = 5.76
Note que o gradiente foi negativo (a perda aumentaria se aumentássemos na direção do gradiente), então subtrair o gradiente fez w aumentar em direção a 3.
4) Passo 2 (mais uma atualização)
- Gradiente em
w1=0.6:dL/dw = 2(0.6 - 3) = -4.8 - Atualização:
w2 = 0.6 - 0.1 * (-4.8) = 1.08 - Perda:
L(w2) = (1.08 - 3)^2 = 3.6864
Em apenas dois passos, a perda caiu de 9 para 3.6864. Em redes reais, fazemos isso para milhares/milhões de parâmetros, e o gradiente vem do erro propagado pelo modelo (via retropropagação), mas a lógica da atualização é a mesma.
O que acontece se a taxa de aprendizado for grande demais?
Use o mesmo exemplo com η = 1.1 e w0 = 0:
- Gradiente:
-6 - Atualização:
w1 = 0 - 1.1 * (-6) = 6.6 - Perda:
L(w1) = (6.6 - 3)^2 = 12.96(piorou)
O passo foi tão grande que ultrapassou o mínimo e foi parar numa região com perda maior. Repetindo, o processo pode oscilar ou divergir.
Passo a passo prático do ciclo de treinamento (minibatch)
Abaixo está um roteiro mental do que acontece em cada época, usando minibatches:
- Embaralhar os dados de treino (reduz padrões indesejados na ordem).
- Dividir em minibatches de tamanho
B. - Para cada minibatch:
- Forward: calcular as saídas do modelo.
- Perda: medir o erro no minibatch.
- Backward: calcular gradientes dos parâmetros.
- Atualizar: aplicar
θ ← θ - η ∇L(ou uma variação com otimizadores mais avançados).
- Ao fim da época: avaliar em validação (sem atualizar parâmetros) para monitorar generalização.
Como interpretar curvas de treino e validação
Durante o treinamento, é comum acompanhar pelo menos duas curvas ao longo das épocas:
- Perda de treino (training loss): calculada nos minibatches de treino.
- Perda de validação (validation loss): calculada em dados separados, sem atualizar pesos.
Padrões típicos e o que eles sugerem
| Padrão observado | Como aparece nas curvas | Interpretação prática |
|---|---|---|
| Treino e validação caem juntos | Ambas as perdas diminuem de forma semelhante | Aprendizado saudável; o modelo melhora e generaliza melhor |
| Treino cai, validação para de cair e sobe | Gap crescente entre treino e validação | Sinal de sobreajuste; o modelo memoriza treino e piora em validação |
| Treino não cai (ou cai muito pouco) | Curva quase plana em treino e validação | Otimização ineficiente (taxa de aprendizado inadequada, gradientes fracos, inicialização ruim, capacidade insuficiente) |
| Perdas instáveis/serrilhadas demais | Oscilações grandes, picos frequentes | Taxa de aprendizado alta, minibatch muito pequeno, ou instabilidade numérica |
| Perda explode ou vira NaN | Subida abrupta, valores inválidos | Divergência (learning rate alto), gradientes explodindo; requer ajuste imediato |
Guia rápido de diagnóstico usando as curvas
- Se a perda de treino cai muito devagar: experimente aumentar
ηmoderadamente ou usar um agendador (redução ao longo do tempo) para acelerar no começo e estabilizar no fim. - Se a perda oscila: reduza
ηou aumente o tamanho do minibatch para reduzir ruído; verifique também normalização/escala dos dados. - Se validação piora enquanto treino melhora: aplique regularização (por exemplo, weight decay), aumente dados/augmentação, ou use parada antecipada (early stopping) baseada na validação.
- Se tudo está ruim desde o início: confirme se o pipeline está correto (rótulos, embaralhamento, perda compatível com a tarefa, escala de entradas) antes de ajustar hiperparâmetros.
Além da perda, acompanhar uma métrica da tarefa (por exemplo, acurácia em classificação) ajuda a evitar interpretações enganosas: às vezes a perda muda pouco, mas a métrica melhora de forma consistente, ou vice-versa.