Backpropagation

aula
1.1.2.4.4 – Arquiteturas CNN Profundas (Deep CNNs)
1.1.2.4.4.8 – Tecnicas de Treinamento
1.1.2.4.4.8.1 – Backpropagation
1.1.2.4.4.8.2 – Funcoes de Custo (Cross-Entropy, MSE)
1.1.2.4.4.8.3 – Otimizadores (SGD, Adam, RMSprop)
1.1.2.4.4.8.4 – Regularizacao (Dropout, Data Augmentation)
LEGENDA
Principal
Ramo
Metodo
Problemas
Modelo
Arquitetura

A retropropagação (backpropagation) é o algoritmo que treina redes neurais modernas. Ele foi popularizado por Rumelhart, Hinton e Williams em 1986. Primeiramente, o algoritmo calcula o erro na camada de saída. Em seguida, ele propaga este erro para trás, camada por camada. O gradiente do erro em relação a cada peso é calculado. A regra da cadeia do cálculo diferencial é aplicada repetidamente. Por exemplo, o erro influencia pesos das camadas finais primeiro. Pesos das camadas iniciais recebem sinais de erro transformados. Consequentemente, o algoritmo ajusta todos os pesos para minimizar o erro. Portanto, a backpropagation é o coração do deep learning.

passo forward e backward

Cada iteração de treinamento possui duas fases distintas. Primeiramente, o passo forward propaga a entrada através da rede. As ativações de todas as camadas são calculadas sequencialmente. O erro na saída é então medido (ex: entropia cruzada). Em seguida, o passo backward calcula os gradientes começando da saída. A regra da cadeia é usada para propagar gradientes para camadas anteriores. Por exemplo, o gradiente da camada L depende do gradiente da camada L+1. Os gradientes locais de cada neurônio também são calculados. Finalmente, os pesos são atualizados usando gradiente descendente. Este ciclo repete-se por muitos épocas até a convergência. Portanto, a combinação forward/backward é essencial para o aprendizado.

desafios: vanishing e exploding gradients

Redes muito profundas sofrem com problemas de gradientes. O vanishing gradient ocorre quando os gradientes tornam-se extremamente pequenos. Camadas iniciais aprendem muito lentamente ou param de aprender. Por outro lado, o exploding gradient acontece quando os gradientes crescem exponencialmente. Isto causa atualizações de pesos instáveis e divergência. Ativações como sigmoid são particularmente propensas ao vanishing gradient. A ReLU (Rectified Linear Unit) ajuda a mitigar este problema. A normalização em lote (Batch Normalization) também reduz estes efeitos. Conexões residuais (ResNet) permitem que gradientes fluam através de atalhos. Consequentemente, estas técnicas permitem treinar redes com centenas de camadas.

quando utilizar e variações do algoritmo

A backpropagation é utilizada em praticamente todas as redes neurais modernas. Ela é o algoritmo padrão para treinar CNNs, RNNs e Transformers. Contudo, variações do gradiente descendente são frequentemente empregadas. O gradiente descendente estocástico (SGD) é a forma básica mais comum. Ele atualiza pesos usando pequenos lotes (batches) de dados. O otimizador Adam combina momentum com taxa de aprendizado adaptativa. Ele é frequentemente mais rápido e robusto que o SGD padrão. Outra variação é o RMSprop, útil para problemas com gradientes não-estacionários. Para tarefas com poucos dados, o SGD com momentum pode generalizar melhor. Portanto, a escolha do otimizador depende do problema específico. Experimente diferentes otimizadores para encontrar o melhor para seu caso.

Otimizadores de Peso

Computador antigo da década de 1980

Escolhendo o Estrategista da Sua Rede Neural

Imagine que você já construiu sua rede neural, definiu a camada de entrada e até escolheu a função de perda. Agora surge a pergunta: como ela vai aprender, na prática? Quem fará os ajustes finos nos neurônios? A resposta é o otimizador. Em termos simples, o otimizador é o algoritmo responsável por atualizar os pesos da sua rede durante o treinamento. Pense nele como um estrategista militar. Enquanto a função de perda é o “placar” que mostra o quanto você está errando, o otimizador é o “comandante” que decide como mover as tropas (os pesos) para virar o jogo e vencer a batalha. Por fim, existem vários tipos de estrategistas, cada um com uma tática diferente. Vamos conhecer os principais.

 

PlantUML Syntax:<br />
@startmindmap<br />
* Otimizadores de Peso<br />
** SGD<br />
** Adam<br />
** AdamW<br />
** AMSGrad<br />
** AdaBelief<br />
** AdaVAM<br />
@endmindmap<br />

SGD: O Clássico Simples e Confiável

O Gradiente Descendente Estocástico, mais conhecido como SGD, é o algoritmo mais clássico e fundamental. Afinal, sua lógica é direta: ele calcula o gradiente (a direção do erro) e dá um passo na direção oposta para reduzir a perda. A atualização é simples: novo peso = peso antigo – taxa de aprendizado × gradiente. Em outras palavras, é como descer uma montanha sempre dando passos na direção de descida mais íngreme.

Porém, o SGD tem limitações. Ele usa uma taxa de aprendizado fixa para todos os parâmetros, o que pode ser ineficiente. Além disso, sua trajetória pode ser bastante instável e ruidosa, especialmente em problemas complexos. Uma melhoria significativa é adicionar momentum. Dessa forma, o momentum faz com que o otimizador acumule “velocidade” nas direções consistentes, como uma bola descendo uma ladeira. A fórmula incorpora um termo de velocidade: velocity = momentum × velocity – taxa de aprendizado × gradiente. Consequentemente, isso reduz as oscilações e acelera a convergência. Existe ainda o NAG (Nesterov Accelerated Gradient), uma versão ainda mais esperta que “olha para frente” antes de dar o passo, antecipando o gradiente futuro.

Adam: O Canivete Suíço da Otimização

Se o SGD é o carro popular, o Adam (Adaptive Moment Estimation) é o carro moderno cheio de tecnologia. Por isso, ele se tornou o otimizador padrão na maioria dos projetos, e não é por acaso. O Adam combina o melhor de dois mundos: o momentum do SGD com a capacidade de adaptar a taxa de aprendizado para cada parâmetro individualmente, algo inspirado no RMSProp.

Portanto, a principal vantagem do Adam é sua eficiência e robustez. Ele funciona muito bem com os hiperparâmetros padrão (taxa de aprendizado de 0.001), exigindo pouco ajuste manual. Além disso, ele se adapta automaticamente à magnitude dos gradientes, garantindo passos maiores em terrenos planos e passos menores onde o terreno é acidentado. Na prática, isso significa uma convergência rápida e estável na maioria dos problemas, desde visão computacional até processamento de linguagem natural.

AdamW: A Evolução com Generalização Superior

Apesar de todas as vantagens, o Adam clássico tem um ponto fraco: ele pode, em alguns casos, levar a uma generalização pior do que o SGD com momentum. Em outras palavras, pode decorar os dados de treino em vez de aprender padrões. Foi para resolver isso que surgiu o AdamW. Sendo assim, a grande inovação do AdamW é tratar o decaimento de peso (weight decay) de forma separada da atualização dos gradientes.

Pense no weight decay como uma forma de manter os pesos da rede pequenos e simples, o que ajuda na generalização. No Adam original, essa regularização era aplicada de forma acoplada, causando ineficiência. Por outro lado, o AdamW separa esses processos, resultando em uma generalização significativamente melhor. Por isso, ele é atualmente o otimizador preferido para treinar arquiteturas de última geração, como Transformers (modelos usados no GPT e BERT) e modelos de visão de alto desempenho. Em suma, em testes práticos, o AdamW frequentemente supera tanto o SGD quanto o Adam original em precisão final.

Outras Variantes e o Futuro da Otimização

Além dos grandes nomes, existem diversas variantes criadas para resolver problemas específicos. Por exemplo, o AMSGrad é uma modificação do Adam que garante maior estabilidade em casos onde o Adam divergia. Já o AdaBelief propõe adaptar a taxa de aprendizado com base na “crença” na observação do gradiente, melhorando a generalização.

A pesquisa em otimização não para. Um exemplo recente é o AdaVAM (Adaptive Variance-Aware Momentum), um novo otimizador que busca superar as limitações de métodos como Adam e Adan. Ele utiliza um termo de variância atrasado para normalizar gradientes, reduzindo o ruído e melhorando a estabilidade. Assim, os resultados teóricos e empíricos mostram que ele atinge taxas de convergência ótimas, superando métodos existentes em tarefas de classificação de imagens e modelagem de linguagem.

Qual Otimizador Escolher? Um Guia Prático

Para um iniciante, a escolha pode parecer complexa, mas podemos simplificar. Se você quer resultados rápidos e sem complicação, comece com o Adam. Seus hiperparâmetros padrão funcionam na maioria dos casos, e ele converge rápido. Portanto, para a grande maioria dos projetos, essa é a escolha mais segura.

Se você está trabalhando com Transformers (NLP) ou busca a melhor generalização possível, opte pelo AdamW. Ele é o padrão atual em produção e para modelos de ponta. Por outro lado, para datasets muito grandes e quando você tem tempo e conhecimento para ajustar hiperparâmetros, o SGD com momentum ainda é uma opção poderosa, especialmente em tarefas clássicas de visão computacional. Por fim, lembre-se: a experimentação é sua melhor aliada. Testar diferentes otimizadores no seu problema específico é a forma mais segura de encontrar o estrategista ideal para a sua rede neural.