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.